diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc new file mode 100644 index 00000000..4b23e874 --- /dev/null +++ b/CHANGELOG.adoc @@ -0,0 +1,203 @@ +:toc: macro +:toc-title: Table of Contents +:toclevels: 6 + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on https://keepachangelog.com/en/1.0.0/[Keep a Changelog], +and this project adheres to http://sentimentalversioning.org/[Sentimental Versioning]. + +toc::[] + +## 2.1.0 + +This version have minor fixes and updates. + +### Added + +- Ability to use mixin with _POST_ requests. Example: + +```json +{"@": "https://example.com[POST]"} +``` +Would fetch the url using _POST_ instead of _GET_ (Useful for _Bubble_ or similar systems). + +- Ability to show ATTracking alert in iOS >= 14.5: +Set `tracking_enabled` to true inside _settings.plist_. + +### Changed + +- Bumped to minimum iOS version `12.0`. + +### Fixed + +- Crash when passing `href` with a non object. +- Crash in iOS 14. +- Push notifications were using code that was non deterministic to obtain the token. Now the token is parsed correctly. +- Random Crashes due to updating the UI in a background thread. +- Removed deprecation warnings when using `[[UIApplication sharedApplication] openURL:]`. +- Problems when using Tabbars. + +### Updated + +- Updated to `AFNetworking` 4.0.1 (was 3.2.1). +- Updated to `FLEX` 4.1.1 (was 3.0.0). +- Updated to `SocketRocket` 0.5.2 (was 0.5.1). +- Updated to `SWTableViewCell` 0.3.8 (was 0.3.7) + +### People + +Huge thanks to the following persons that helped in this release: + +- Mike from https://www.fus-ed.com/ (Sponsored Firebase extension for iOS and other fixes). +- https://github.com/vini-brito[Vinicius Brito] (Requested and sponsored the Mixin POST feature). +- _@TT Multi_ in Telegram Group (Sponsored some Cookies and Coffee). +- Dooble Team (Sponsored ATTracking update in iOS). +- All the wonderful people in the https://t.me/jasonelle[Jasonelle Telegram Community]. + +## https://github.com/jasonelle/jasonelle/releases/tag/v2.0[2.0.0] + +This version was released in November 2019. + +### Added + +- New Logger for Native Code. Makes easier to Spot Errors. See xcode/Jasonette/Logger/README.md[xcode/Jasonette/Logger/README.md] For more details. + +- Added `JasonNetworking.h` to enable configuring `AFHTTPSessionManager` and `AFJSONResponseSerializer`. + +- Docs on how to implement extensions. + +- Added http://uncrustify.sourceforge.net/[`uncrustify`] config for code style standarization. + +- Added new option in `href` to load a `web` with `reader mode`. + Based on the code by `@seletz`. + +```json +{ + "options": { + "reader": true + } +} +``` + +- Added `$orientation` system event + that triggers when the orientation changes. + +- Added `$env.view.params` variable that holds the query params inside the url. + Example `https://example.com?param1=1¶ms2=true`. Will show `param1` and `param2` as properties inside the params dictionary. (Only for for internet addresses. _file://_ does not work.) + +- Added `$agent.logger` to `agent.js` that can call the system logger. + Methods: `$agent.logger.log`, `$agent.logger.debug`, `$agent.logger.info`, `$agent.logger.warn`, `$agent.logger.error`. As replacements of `console.log` methods for webviews. + +- Added optional `nonce` to url in `settings.plist`. Now is easier to invalidate server cache if needed. + +### Changed + +- Bumped to minimum iOS version `9.0`. + +- Improved `JasonComponentFactory.h` to take in consideration `Swift` extensions. + +- Establish `AppDelegate.h` as main _App Delegate_ instead of `JasonAppDelegate.h`. The later will serve as a wrapper. + +- Improved Code Organization. + +- Improved Networking Code. + +### Fixed + +- Fixed Crash on parsing local json files with wrong syntax. + +- Fixed Crash when no `$jason` property is present in json. + +- Fixed Crash when url contained html content in a json expected return. + +- Fixed Blank Screen when no `url` is found in `settings.plist`. + +- Fixed Blank Screen if you click a `Tab Item` more than once. + +- Fixed `WKWebView` orientation change not working. Based on the code by `@ricardojlpinto`. + +- Fixed Crash when using`$vision` on simulator. + +- Fixed not finding class when using non standard naming in extensions (now searches in lowercase too). + +- Fixed Crash in iOS 10 when using webcontainers. It crashed because before iOS 11 the observers to notifications does not autorelease. Solved using `INTUAutoRemoveObserver`. + +- Fixed Random Crash. The property `styles` in `JasonViewController` was not initialized + in some use cases. Now is lazy allocated + to prevent random crashes. + +- Fixed Crash when using iOS 13. + +### Updated + +- Updated to `AFNetworking` 3.2.1 (was 3.1.0). + +- Updated to `UICKeyChainStore` 2.1.2 (was 2.1.0). + +- Updated to `IQAudioRecorderController` 1.2.3 (was 1.2.0). + +- Updated to `SBJsonWriter` 5.0.0 (was 4.0.2). + +- Updated to `libPhoneNumber-iOS` 0.9.15 (was 0.8.13). + +- Updated to `JDStatusBarNotification` 1.6.0 (was 1.5.3). + +- Updated to `APAddressBook` 0.3.2 (was 0.2.3). + +- Updated to `MBProgressHUD` 1.1.0 (was 1.0.0). + +- Updated to `NSGIF` 1.2.4 (was 1.2). + +- Updated to `NSHash` 1.2.0 (was 1.1.0). + +- Updated to `DTCoreText` 1.6.23 (was 1.6.17). + +- Updated to `DTFoundation` 1.7.14 (was 1.7.10). + +- Updated to `FreeStreamer` 4.0.0 (was 3.5.7). + +- Updated to `JSCoreBom` 1.1.2 (was 1.1.1). + +- Updated to `OMGHTTPURLRQ` 3.2.4 (was 3.1.2). + +- Updated to `FLEX 3.0.0` (was 2.4.0). + +- Updated to `CYRTextView` 0.4.1 (was 0.4.0). + +- Updated to `HMSegmentedControl` 1.5.5 (was 1.5.2). + +- Updated to `INTULocationManager` 4.3.2 (was 4.2.0). + +### Removed + +- `UIWebview` Dependencies. Since Apple will stop accepting apps that use that API. + +### Notes + +- This version is a complete overhaul focusing on + modularization of the code and update of the libraries, improving the quality of the framework, maintaining the same json api. + +- The next version will be re engineered so it will be easier to maintain and find bugs. New arquitecture and possible adopting Swift Language. + +### People + +Huge thanks to the following persons that helped in this release: + +- https://github.com/takakeiji[Adán Miranda]: Helped with some guidance over iOS code. + +- `BSG`: Detected layout error in WKWebViews in iOS >= 11. + +- `John Mark`: Wrote a great tutorial in Bubble.is forums. + +- https://devschile.cl[Devs Chile]: Chilean commmunity of developers. + +- `Phillip`: Suggested the `nonce` addition. + +More people here https://jasonelle.com/docs/[https://jasonelle.com/docs/]. + +## https://github.com/jasonelle/jasonelle/releases/tag/v1.0[1.0] + +First version of the _Jasonette_ Mobile Framework. This version was the same as the latest development version of https://github.com/jasonette/jasonette-ios[Ethan's Jasonette]. diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index be7a0b59..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,152 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Sentimental Versioning](http://sentimentalversioning.org/). - -## [3.0.0] Next Release - -This version is the current in development. Will be released after the week of *6th November 2020*. - -## [2.0.0](https://github.com/jasonelle/jasonelle/releases/tag/v2.0) - -This version was released in November 2019. - -### Added - -- New Logger for Native Code. Makes easier to Spot Errors. See [xcode/Jasonette/Logger/README.md](xcode/Jasonette/Logger/README.md) For more details. - -- Added `JasonNetworking.h` to enable configuring `AFHTTPSessionManager` and `AFJSONResponseSerializer`. - -- Docs on how to implement extensions. - -- Added [`uncrustify`](http://uncrustify.sourceforge.net/) config for code style standarization. - -- Added new option in `href` to load a `web` with `reader mode`. -Based on the code by `@seletz`. - -```json -{ - "options": { - "reader": true - } -} -``` - -- Added `$orientation` system event -that triggers when the orientation changes. - -- Added `$env.view.params` variable that holds the query params inside the url. -Example `https://example.com?param1=1¶ms2=true`. Will show `param1` and `param2` as properties inside the params dictionary. - -- Added `$agent.logger` to `agent.js` that can call the system logger. -Methods: `$agent.logger.log`, `$agent.logger.debug`, `$agent.logger.info`, `$agent.logger.warn`, `$agent.logger.error`. As replacements of `console.log` methods for webviews. - -- Added optional `nonce` to url in `settings.plist`. Now is easier to invalidate server cache if needed. - -### Changed - -- Bumped to minimum iOS version `9.0`. - -- Improved `JasonComponentFactory.h` to take in consideration `Swift` extensions. - -- Establish `AppDelegate.h` as main *App Delegate* instead of `JasonAppDelegate.h`. The later will serve as a wrapper. - -- Improved Code Organization. - -- Improved Networking Code. - -### Fixed - -- Fixed Crash on parsing local json files with wrong syntax. - -- Fixed Crash when no `$jason` property is present in json. - -- Fixed Crash when url contained html content in a json expected return. - -- Fixed Blank Screen when no `url` is found in `settings.plist`. - -- Fixed Blank Screen if you click a `Tab Item` more than once. - -- Fixed `WKWebView` orientation change not working. Based on the code by `@ricardojlpinto`. - -- Fixed Crash when using`$vision` on simulator. - -- Fixed not finding class when using non standard naming in extensions (now searches in lowercase too). - -- Fixed Crash in iOS 10 when using webcontainers. It crashed because before iOS 11 the observers to notifications does not autorelease. Solved using `INTUAutoRemoveObserver`. - -- Fixed Random Crash. The property `styles` in `JasonViewController` was not initialized -in some use cases. Now is lazy allocated -to prevent random crashes. - -### Updated - -- Updated to `AFNetworking` 3.2.1 (was 3.1.0). - -- Updated to `UICKeyChainStore` 2.1.2 (was 2.1.0). - -- Updated to `IQAudioRecorderController` 1.2.3 (was 1.2.0). - -- Updated to `SBJsonWriter` 5.0.0 (was 4.0.2). - -- Updated to `libPhoneNumber-iOS` 0.9.15 (was 0.8.13). - -- Updated to `JDStatusBarNotification` 1.6.0 (was 1.5.3). - -- Updated to `APAddressBook` 0.3.2 (was 0.2.3). - -- Updated to `MBProgressHUD` 1.1.0 (was 1.0.0). - -- Updated to `NSGIF` 1.2.4 (was 1.2). - -- Updated to `NSHash` 1.2.0 (was 1.1.0). - -- Updated to `DTCoreText` 1.6.23 (was 1.6.17). - -- Updated to `DTFoundation` 1.7.14 (was 1.7.10). - -- Updated to `FreeStreamer` 4.0.0 (was 3.5.7). - -- Updated to `JSCoreBom` 1.1.2 (was 1.1.1). - -- Updated to `OMGHTTPURLRQ` 3.2.4 (was 3.1.2). - -- Updated to `FLEX 3.0.0` (was 2.4.0). - -- Updated to `CYRTextView` 0.4.1 (was 0.4.0). - -- Updated to `HMSegmentedControl` 1.5.5 (was 1.5.2). - -- Updated to `INTULocationManager` 4.3.2 (was 4.2.0). - -### Removed - -- `UIWebview` Dependencies. Since Apple will stop accepting apps that use that API. - -### Notes - -- This version is a complete overhaul focusing on -modularization of the code and update of the libraries, improving the quality of the framework, maintaining the same json api. - -- The next version will be re engineered so it will be easier to maintain and find bugs. New arquitecture and possible adopting Swift Language. - -### People - -Huge thanks to the following persons that helped in this release: - -- [Adán Miranda](https://github.com/takakeiji): Helped with some guidance over iOS code. - -- `BSG`: Detected layout error in WKWebViews in iOS >= 11. - -- `John Mark`: Wrote a great tutorial in Bubble.is forums. - -- [Devs Chile](https://devschile.cl): Chilean commmunity of developers. - -- `Phillip`: Suggested the `nonce` addition. - -More people here [https://jasonelle.com/docs/#/folks](https://jasonelle.com/docs/#/folks). - -## [1.0](https://github.com/jasonelle/jasonelle/releases/tag/v1.0) - -First version of the *Jasonette* Mobile Framework. diff --git a/README.md b/README.md index 343d67d9..2b609fa0 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [https://www.jasonelle.com](https://www.jasonelle.com) -Create your own native iOS app with *JSON*. Then send it over `http(s)://` or `file://`. +Create your own native iOS app with _JSON_. Then send it over `http(s)://` or `file://`. ## Releases @@ -14,30 +14,28 @@ Releases are made in the [Jasonelle Repo](https://github.com/jasonelle/jasonelle - [Jasonette v2.0.0](https://github.com/jasonelle/jasonelle/releases/tag/v2.0). -- Jasonette *v3.0.0* (In Progress). +- Jasonette _v2.1.0_ (In Progress). ## [Contribution](CONTRIBUTING.md) This repository uses `develop` branch to store the bleeding edge code. More details in the [CONTRIBUTING](CONTRIBUTING.md) file. -## [Changelog](CHANGELOG.md) +## [Changelog](CHANGELOG.adoc) -The [CHANGELOG](CHANGELOG.md) contains the release notes +The [CHANGELOG](CHANGELOG.adoc) contains the release notes of each version. ## [Documentation](https://jasonelle.com/docs) Documentation and examples in the [documentation repository](https://github.com/jasonelle/docs). - ## Questions and Support Follow or join these channels for questions and support, and to keep updated on latest releases and announcements. [Telegram Group](https://t.me/jasonelle) - ## [License](LICENSE) -*Jasonette* is released under the [MPL 2.0 License](https://opensource.org/licenses/MPL-2.0). +_Jasonette_ is released under the [MPL 2.0 License](https://opensource.org/licenses/MPL-2.0). diff --git a/tools/legacy/.codeclimate.yml b/tools/legacy/.codeclimate.yml deleted file mode 100644 index 2ad12e67..00000000 --- a/tools/legacy/.codeclimate.yml +++ /dev/null @@ -1,11 +0,0 @@ -engines: - fixme: - enabled: true - tailor: - enabled: false -ratings: - paths: - - "**.swift" -exclude_paths: -- "/app/Pods/" -- "**.js" diff --git a/tools/legacy/CONTRIBUTING.md b/tools/legacy/CONTRIBUTING.md deleted file mode 100644 index c7280417..00000000 --- a/tools/legacy/CONTRIBUTING.md +++ /dev/null @@ -1,82 +0,0 @@ -# How to contribute to Jasonette - -## **Want to help with documentation?** - -If you would like to contribute to the [documentation](https://jasonette.github.io/documentation/), let's discuss on the [documentation repository](https://github.com/Jasonette/documentation/issues). - -## **Do you have a bug report or a feature request?** - -* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/Jasonette/JASONETTE-iOS/issues). - -* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/Jasonette/JASONETTE-iOS/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. - - -## **Did you write a patch that fixes a bug?** - -* Open a new GitHub pull request with the patch. - -* Don't fork `master` branch. **Fork `develop` branch and send a pull request to `develop`. - -* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable. - -## **Did you write a cool extension?** - -Feel free to fork the project and [write your own extension](https://jasonette.github.io/documentation/advanced) - -If you wrote a cool extension, please share it with the community in the [slack channel](https://jasonette.now.sh). - -## **Do you have other types of questions?** - -* Ask any question about how to use Jasonette on the [Jasonette Slack channel](https://jasonette.now.sh). - -## **Project Structure** - -### Class hierarchy -![hierarchy](https://raw.githubusercontent.com/gliechtenstein/images/master/hierarchy.png) - -Here's a brief walkthrough of how the project is structured: - - - **Launcher**: You can ignore this, just some files that launches the app. - - **Config**: Normally these are the only files you will ever need to touch. - - `Info.plist`: App setting. Normally don't need to touch this unless you're manually setting up stuff. - - `settings.plist`: **This is the only file you will ever need to change.** Set the `url` attribute to embed that URL into the app. - - **Core**: Core logic that handles command processing (via stack, memory, etc.), view construction, templating, and some native system actions. - - `Jason`: The brain of Jasonette. Everything revolves around this class. Makes use of JasonStack and JasonMemory for remembering and executing actions. - - `JasonStack`: Stack for remembering instructions (actions). - - `JasonMemory`: Used to store actions to be executed, through stack (JasonStack) and register. - - `JasonParser`: Parser module that calls the `Core/Lib/parser.js` file for parsing json templates. - - `RussianDollView`: A JasonViewController protocol, you can ignore this. - - **Assets**: You can ignore this, just some images and audio clips used by the app - - **Lib**: Includes Javascript libraries used to execute JSON native actions. - - `parser.js`: The main JSON parser that takes a JSON template expression and generates a final static JSON using the current register value - - `csv.js`: CSV parser - - `rss.js`: RSS parser - - **Action**: Where all [actions](https://jasonette.github.io/documentation/actions/) are implemented. The implementation follows [the convention described here](https://jasonette.github.io/documentation/advanced/#2-extend-actions). - - To build your own action extension, you can create your own custom group here and implement your own classes. - - **View**: All view related classes. - - `JasonViewController`: The main JSON-powered view controller. Everything view-related revolves around this class. - - **Layer**: Implements [layers](https://jasonette.github.io/documentation/document/#bodylayers) - - **Section**: Implements [sections](https://jasonette.github.io/documentation/document/#bodysections) - - **Layout**: Implements [vertical and horizontal layouts](https://jasonette.github.io/documentation/layout/) that can be used inside [sections](https://jasonette.github.io/documentation/document/#bodysections) - - **Component**: Implements [components](https://jasonette.github.io/documentation/components/), following [the convention described here](https://jasonette.github.io/documentation/advanced/#1-extend-ui-components). - - To build your own component extension, just create your own group here and write your classes. - - **Helper** - - Various helper class methods used across various classes. - -### What files you will be touching - -####User -In most cases, the only thing you will ever need to touch is the `Config/settings.plist` file. This is where you set the main url your app will launch from. - - But even this can be automatically done using the [Setup command](https://jasonette.github.io/documentation/#step-2-setup), which means **you will never need to touch anything inside XCode** to build an app. - -####Advanced -Sometimes you may want to write an [extension](https://jasonette.github.io/documentation/advanced/#extension). In this case you may need to deal with: - - `Action`: To write action extension - - `View/Component`: To write UI component extension - -####Guru -If you find a bug **anywhere in the code**, or have any improvements anywhere else, please feel free to: - 1. Fork the `develop` branch - 2. Create a feature branch - 3. Fix - 4. Send a pull request diff --git a/tools/legacy/LICENSE b/tools/legacy/LICENSE deleted file mode 100644 index e85291a7..00000000 --- a/tools/legacy/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 gliechtenstein - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/tools/legacy/README.md b/tools/legacy/README.md deleted file mode 100644 index 3f735707..00000000 --- a/tools/legacy/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Legacy Code - -This is the legacy code directory. -It will be merged gradually with the new code base. \ No newline at end of file diff --git a/tools/legacy/Setup b/tools/legacy/Setup deleted file mode 100755 index 16e93f05..00000000 --- a/tools/legacy/Setup +++ /dev/null @@ -1,409 +0,0 @@ -#!/bin/sh -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -cd "${DIR}" - - -bundleidentifier(){ - formatted=(`echo $1 | sed 's/http[s]*:\/\///g' | sed 's/www\.//g' | sed 's/\.json$//g' | sed 's/\//./g' | sed 's/[^a-zA-Z0-9.-]/./g' | sed 's/\.\.+/./g'`) - OLDIFS=$IFS - IFS=. - set -f - array=($formatted) - str="" - IFS=$OLDIFS - for (( i=${#array[@]}-1 ; i>=0 ; i-- )) ; do - str+="${array[i]}" - str+="." - done - new_bundle_id=(`echo $str | sed 's/\.$//g'`) - sed -i '' "s/PRODUCT_BUNDLE_IDENTIFIER[^;]*;/PRODUCT_BUNDLE_IDENTIFIER\ =\ $new_bundle_id;/g" app/Jasonette.xcodeproj/project.pbxproj - set +f -} - -settingsplist(){ -cat > app/Jasonette/settings.plist < - - - - client_id - - client_secret - - url - $1 - loading - - launch - file://preload.json - debug - - - -EOF -} - -infoplist(){ -# same as bundleidentifier() - -cat > app/Jasonette/Info.plist < - - - - NSPhotoLibraryUsageDescription - used to access photo library - UIBackgroundModes - - audio - - NSMicrophoneUsageDescription - used to access microphone api - NSAppleMusicUsageDescription - used to access media library - NSContactsUsageDescription - used to access contacts api - NSCameraUsageDescription - used to access camera api - NSLocationWhenInUseUsageDescription - used to access location api - CFBundleDevelopmentRegion - en - CFBundleExecutable - \$(EXECUTABLE_NAME) - CFBundleIdentifier - \$(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $1 - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLName - - CFBundleURLSchemes - - $3 - - - - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - -EOF -} - -generate_iconset(){ - local full_icon="$1" - - local type=`file -b ${full_icon}` - if [[ $type =~ JPEG ]] - then - cp "$full_icon" Icon-20.jpg &> /dev/null - sips -z 29 29 Icon-20.jpg &> /dev/null - sips -s format png Icon-20.jpg --out Icon-20.png &> /dev/null - - cp "$full_icon" Icon-Small.jpg &> /dev/null - sips -z 29 29 Icon-Small.jpg &> /dev/null - sips -s format png Icon-Small.jpg --out Icon-Small.png &> /dev/null - - cp "$full_icon" Icon-Small@2x.jpg &> /dev/null - sips -z 58 58 Icon-Small@2x.jpg &> /dev/null - sips -s format png Icon-Small@2x.jpg --out Icon-Small@2x.png &> /dev/null - - cp "$full_icon" Icon-Small@3x.jpg &> /dev/null - sips -z 87 87 Icon-Small@3x.jpg &> /dev/null - sips -s format png Icon-Small@3x.jpg --out Icon-Small@3x.png &> /dev/null - - cp "$full_icon" Icon-Small-50.jpg &> /dev/null - sips -z 50 50 Icon-Small-50.jpg &> /dev/null - sips -s format png Icon-Small-50.jpg --out Icon-Small-50.png &> /dev/null - - cp "$full_icon" Icon-Small-50@2x.jpg &> /dev/null - sips -z 100 100 Icon-Small-50@2x.jpg &> /dev/null - sips -s format png Icon-Small-50@2x.jpg --out Icon-Small-50@2x.png &> /dev/null - - cp "$full_icon" Icon.jpg &> /dev/null - sips -z 57 57 Icon.jpg &> /dev/null - sips -s format png Icon.jpg --out Icon.png &> /dev/null - - cp "$full_icon" Icon@2x.jpg &> /dev/null - sips -z 114 114 Icon@2x.jpg &> /dev/null - sips -s format png Icon@2x.jpg --out Icon@2x.png &> /dev/null - - cp "$full_icon" Icon-20@2x.jpg &> /dev/null - sips -z 40 40 Icon-20@2x.jpg &> /dev/null - sips -s format png Icon-20@2x.jpg --out Icon-20@2x.png &> /dev/null - - cp "$full_icon" Icon-40.jpg &> /dev/null - sips -z 40 40 Icon-40.jpg &> /dev/null - sips -s format png Icon-40.jpg --out Icon-40.png &> /dev/null - - cp "$full_icon" Icon-20@3x.jpg &> /dev/null - sips -z 60 60 Icon-20@3x.jpg &> /dev/null - sips -s format png Icon-20@3x.jpg --out Icon-20@3x.png &> /dev/null - - cp "$full_icon" Icon-40@2x.jpg &> /dev/null - sips -z 80 80 Icon-40@2x.jpg &> /dev/null - sips -s format png Icon-40@2x.jpg --out Icon-40@2x.png &> /dev/null - - cp "$full_icon" Icon-40@3x.jpg &> /dev/null - sips -z 120 120 Icon-40@3x.jpg &> /dev/null - sips -s format png Icon-40@3x.jpg --out Icon-40@3x.png &> /dev/null - - cp "$full_icon" Icon-60@2x.jpg &> /dev/null - sips -z 120 120 Icon-60@2x.jpg &> /dev/null - sips -s format png Icon-60@2x.jpg --out Icon-60@2x.png &> /dev/null - - cp "$full_icon" Icon-60@3x.jpg &> /dev/null - sips -z 180 180 Icon-60@3x.jpg &> /dev/null - sips -s format png Icon-60@3x.jpg --out Icon-60@3x.png &> /dev/null - - cp "$full_icon" Icon-72.jpg &> /dev/null - sips -z 72 72 Icon-72.jpg &> /dev/null - sips -s format png Icon-72.jpg --out Icon-72.png &> /dev/null - - cp "$full_icon" Icon-72@2x.jpg &> /dev/null - sips -z 144 144 Icon-72@2x.jpg &> /dev/null - sips -s format png Icon-72@2x.jpg --out Icon-72@2x.png &> /dev/null - - cp "$full_icon" Icon-76.jpg &> /dev/null - sips -z 76 76 Icon-76.jpg &> /dev/null - sips -s format png Icon-76.jpg --out Icon-76.png &> /dev/null - - cp "$full_icon" Icon-76@2x.jpg &> /dev/null - sips -z 152 152 Icon-76@2x.jpg &> /dev/null - sips -s format png Icon-76@2x.jpg --out Icon-76@2x.png &> /dev/null - - cp "$full_icon" Icon-83.5@2x.jpg &> /dev/null - sips -z 167 167 Icon-83.5@2x.jpg &> /dev/null - sips -s format png Icon-83.5@2x.jpg --out Icon-83.5@2x.png &> /dev/null - - cp "$full_icon" Icon-1024.jpg &> /dev/null - sips -z 1024 1024 Icon-1024.jpg &> /dev/null - sips -s format png Icon-1024.jpg --out Icon-1024.png &> /dev/null - - rm Icon-20.jpg - rm Icon-20@2x.jpg - rm Icon-20@3x.jpg - rm Icon-Small.jpg - rm Icon-Small@2x.jpg - rm Icon-Small@3x.jpg - rm Icon-Small-50.jpg - rm Icon-Small-50@2x.jpg - rm Icon.jpg - rm Icon@2x.jpg - rm Icon-40.jpg - rm Icon-40@2x.jpg - rm Icon-40@3x.jpg - rm Icon-60@2x.jpg - rm Icon-60@3x.jpg - rm Icon-72.jpg - rm Icon-72@2x.jpg - rm Icon-76.jpg - rm Icon-76@2x.jpg - rm Icon-83.5@2x.jpg - rm Icon-1024.jpg - - else - cp "$full_icon" Icon-20.png &> /dev/null - sips -z 20 20 Icon-20.png &> /dev/null - - cp "$full_icon" Icon-Small.png &> /dev/null - sips -z 29 29 Icon-Small.png &> /dev/null - - cp "$full_icon" Icon-20@2x.png &> /dev/null - sips -z 40 40 Icon-20@2x.png &> /dev/null - - cp "$full_icon" Icon-Small@2x.png &> /dev/null - sips -z 58 58 Icon-Small@2x.png &> /dev/null - - cp "$full_icon" Icon-20@3x.png &> /dev/null - sips -z 60 60 Icon-20@3x.png &> /dev/null - - cp "$full_icon" Icon-Small@3x.png &> /dev/null - sips -z 87 87 Icon-Small@3x.png &> /dev/null - - cp "$full_icon" Icon-Small-50.png &> /dev/null - sips -z 50 50 Icon-Small-50.png &> /dev/null - - cp "$full_icon" Icon-Small-50@2x.png &> /dev/null - sips -z 100 100 Icon-Small-50@2x.png &> /dev/null - - cp "$full_icon" Icon.png &> /dev/null - sips -z 57 57 Icon.png &> /dev/null - - cp "$full_icon" Icon@2x.png &> /dev/null - sips -z 114 114 Icon@2x.png &> /dev/null - - cp "$full_icon" Icon-40.png &> /dev/null - sips -z 40 40 Icon-40.png &> /dev/null - - cp "$full_icon" Icon-40@2x.png &> /dev/null - sips -z 80 80 Icon-40@2x.png &> /dev/null - - cp "$full_icon" Icon-40@3x.png &> /dev/null - sips -z 120 120 Icon-40@3x.png &> /dev/null - - cp "$full_icon" Icon-60@2x.png &> /dev/null - sips -z 120 120 Icon-60@2x.png &> /dev/null - - cp "$full_icon" Icon-60@3x.png &> /dev/null - sips -z 180 180 Icon-60@3x.png &> /dev/null - - cp "$full_icon" Icon-72.png &> /dev/null - sips -z 72 72 Icon-72.png &> /dev/null - - cp "$full_icon" Icon-72@2x.png &> /dev/null - sips -z 144 144 Icon-72@2x.png &> /dev/null - - cp "$full_icon" Icon-76.png &> /dev/null - sips -z 76 76 Icon-76.png &> /dev/null - - cp "$full_icon" Icon-76@2x.png &> /dev/null - sips -z 152 152 Icon-76@2x.png &> /dev/null - - cp "$full_icon" Icon-83.5@2x.png &> /dev/null - sips -z 167 167 Icon-83.5@2x.png &> /dev/null - - cp "$full_icon" Icon-1024.png &> /dev/null - sips -z 1024 1024 Icon-1024.png &> /dev/null - fi - - mv Icon-20.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20.png &> /dev/null - mv Icon-20@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20@2x.png &> /dev/null - mv Icon-20@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20@3x.png &> /dev/null - mv Icon-Small.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small.png &> /dev/null - mv Icon-Small@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small@2x.png &> /dev/null - mv Icon-Small@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small@3x.png &> /dev/null - mv Icon-Small-50.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small-50.png &> /dev/null - mv Icon-Small-50@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png &> /dev/null - mv Icon.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon.png &> /dev/null - mv Icon@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon@2x.png &> /dev/null - mv Icon-40.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40.png &> /dev/null - mv Icon-40@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40@2x.png &> /dev/null - mv Icon-40@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40@3x.png &> /dev/null - mv Icon-60@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-60@2x.png &> /dev/null - mv Icon-60@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-60@3x.png &> /dev/null - mv Icon-72.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-72.png &> /dev/null - mv Icon-72@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-72@2x.png &> /dev/null - mv Icon-76.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-76.png &> /dev/null - mv Icon-76@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-76@2x.png &> /dev/null - mv Icon-83.5@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-83.5@2x.png &> /dev/null - mv Icon-1024.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-1024.png &> /dev/null - -} - -clear -RED='\033[0;31m' -GREEN='\033[1;32m' -YELLOW='\033[1;33m' -LIGHTBLUE='\033[1;94m' -NONE='\033[00m' - -echo "${RED}WELCOME TO JASONETTE!" -echo "" -echo "${GREEN}1. Try the demo app (Recommended if you're new)" -echo "2. Create a new app" -echo "3. Continue working on the existing app${NONE}" -echo "" - -read -p "Select 1, 2, or 3 and press enter: (1) " option - -if ((option == 2)) -then - read -p "[NAME] App name: " name - - read -p "[NAME] HOME JSON URL if you have one: (or press Enter to create one): " url - - url_scheme=(`echo -n $url | openssl sha1`) - url_scheme="J${url_scheme}" - - if [ ${#url} -gt 0 ] - then - settingsplist "$url" - infoplist "$name" "$url" "$url_scheme" - bundleidentifier "$url" - else - echo "" - echo "${LIGHTBLUE}Opening Jasonbase.com .." - echo "Jasonbase is a free JSON hosting site." - echo "Try writing one, save it, and come back with a URL, I'll wait.${NONE}" - echo "" - open https://www.jasonbase.com - read -p "[URL] Enter the JSON URL: " url - while [ ${#url} -eq 0 ] - do - read -p "[URL] Enter the JSON URL: " url - done - settingsplist "$url" - infoplist "$name" "$url" "$url_scheme" - bundleidentifier "$url" - fi - - read -p "[ICON] Add a PNG or JPG image to the 'icon' folder and press Enter.." -r e - for file in icon/*.{jpg,jpeg,JPG,JPEG,png,PNG}; do - [ -e "$file" ] && generate_iconset "$file" && break - done - - echo "${GREEN}* URL Scheme: ${url_scheme}://" - echo "* OAuth redirect uri: ${url_scheme}://oauth${GREEN}" - - echo "Opening XCode workspace. Please wait..." - open app/Jasonette.xcworkspace - sleep 10 -elif ((option == 3)) -then - echo "Opening XCode workspace. Please wait..." - open app/Jasonette.xcworkspace - sleep 10 -else - new_bundle_id=`uuidgen` - settingsplist https://jasonette.github.io/Jasonpedia/hello.json - bundleidentifier "com.jasonette.seed.${new_bundle_id}" - echo "" - echo "You can view the JSON for the included demo app at:" - echo "https://github.com/Jasonette/Jasonpedia" - echo "" - echo "Opening XCode workspace. Please wait..." - open app/Jasonette.xcworkspace - echo "" - echo "" - sleep 10 -fi diff --git a/tools/legacy/refresh-icon b/tools/legacy/refresh-icon deleted file mode 100755 index ec62205c..00000000 --- a/tools/legacy/refresh-icon +++ /dev/null @@ -1,208 +0,0 @@ -#!/bin/sh -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -cd "${DIR}" - - -generate_iconset(){ - local full_icon="$1" - - local type=`file -b ${full_icon}` - if [[ $type =~ JPEG ]] - then - cp "$full_icon" Icon-20.jpg &> /dev/null - sips -z 29 29 Icon-20.jpg &> /dev/null - sips -s format png Icon-20.jpg --out Icon-20.png &> /dev/null - - cp "$full_icon" Icon-Small.jpg &> /dev/null - sips -z 29 29 Icon-Small.jpg &> /dev/null - sips -s format png Icon-Small.jpg --out Icon-Small.png &> /dev/null - - cp "$full_icon" Icon-Small@2x.jpg &> /dev/null - sips -z 58 58 Icon-Small@2x.jpg &> /dev/null - sips -s format png Icon-Small@2x.jpg --out Icon-Small@2x.png &> /dev/null - - cp "$full_icon" Icon-Small@3x.jpg &> /dev/null - sips -z 87 87 Icon-Small@3x.jpg &> /dev/null - sips -s format png Icon-Small@3x.jpg --out Icon-Small@3x.png &> /dev/null - - cp "$full_icon" Icon-Small-50.jpg &> /dev/null - sips -z 50 50 Icon-Small-50.jpg &> /dev/null - sips -s format png Icon-Small-50.jpg --out Icon-Small-50.png &> /dev/null - - cp "$full_icon" Icon-Small-50@2x.jpg &> /dev/null - sips -z 100 100 Icon-Small-50@2x.jpg &> /dev/null - sips -s format png Icon-Small-50@2x.jpg --out Icon-Small-50@2x.png &> /dev/null - - cp "$full_icon" Icon.jpg &> /dev/null - sips -z 57 57 Icon.jpg &> /dev/null - sips -s format png Icon.jpg --out Icon.png &> /dev/null - - cp "$full_icon" Icon@2x.jpg &> /dev/null - sips -z 114 114 Icon@2x.jpg &> /dev/null - sips -s format png Icon@2x.jpg --out Icon@2x.png &> /dev/null - - cp "$full_icon" Icon-20@2x.jpg &> /dev/null - sips -z 40 40 Icon-20@2x.jpg &> /dev/null - sips -s format png Icon-20@2x.jpg --out Icon-20@2x.png &> /dev/null - - cp "$full_icon" Icon-40.jpg &> /dev/null - sips -z 40 40 Icon-40.jpg &> /dev/null - sips -s format png Icon-40.jpg --out Icon-40.png &> /dev/null - - cp "$full_icon" Icon-20@3x.jpg &> /dev/null - sips -z 60 60 Icon-20@3x.jpg &> /dev/null - sips -s format png Icon-20@3x.jpg --out Icon-20@3x.png &> /dev/null - - cp "$full_icon" Icon-40@2x.jpg &> /dev/null - sips -z 80 80 Icon-40@2x.jpg &> /dev/null - sips -s format png Icon-40@2x.jpg --out Icon-40@2x.png &> /dev/null - - cp "$full_icon" Icon-40@3x.jpg &> /dev/null - sips -z 120 120 Icon-40@3x.jpg &> /dev/null - sips -s format png Icon-40@3x.jpg --out Icon-40@3x.png &> /dev/null - - cp "$full_icon" Icon-60@2x.jpg &> /dev/null - sips -z 120 120 Icon-60@2x.jpg &> /dev/null - sips -s format png Icon-60@2x.jpg --out Icon-60@2x.png &> /dev/null - - cp "$full_icon" Icon-60@3x.jpg &> /dev/null - sips -z 180 180 Icon-60@3x.jpg &> /dev/null - sips -s format png Icon-60@3x.jpg --out Icon-60@3x.png &> /dev/null - - cp "$full_icon" Icon-72.jpg &> /dev/null - sips -z 72 72 Icon-72.jpg &> /dev/null - sips -s format png Icon-72.jpg --out Icon-72.png &> /dev/null - - cp "$full_icon" Icon-72@2x.jpg &> /dev/null - sips -z 144 144 Icon-72@2x.jpg &> /dev/null - sips -s format png Icon-72@2x.jpg --out Icon-72@2x.png &> /dev/null - - cp "$full_icon" Icon-76.jpg &> /dev/null - sips -z 76 76 Icon-76.jpg &> /dev/null - sips -s format png Icon-76.jpg --out Icon-76.png &> /dev/null - - cp "$full_icon" Icon-76@2x.jpg &> /dev/null - sips -z 152 152 Icon-76@2x.jpg &> /dev/null - sips -s format png Icon-76@2x.jpg --out Icon-76@2x.png &> /dev/null - - cp "$full_icon" Icon-83.5@2x.jpg &> /dev/null - sips -z 167 167 Icon-83.5@2x.jpg &> /dev/null - sips -s format png Icon-83.5@2x.jpg --out Icon-83.5@2x.png &> /dev/null - - cp "$full_icon" Icon-1024@1x.jpg &> /dev/null - sips -z 1024 1024 Icon-1024@1x.jpg &> /dev/null - sips -s format png Icon-1024@1x.jpg --out Icon-1024@1x.png &> /dev/null - - rm Icon-20.jpg - rm Icon-20@2x.jpg - rm Icon-20@3x.jpg - rm Icon-Small.jpg - rm Icon-Small@2x.jpg - rm Icon-Small@3x.jpg - rm Icon-Small-50.jpg - rm Icon-Small-50@2x.jpg - rm Icon.jpg - rm Icon@2x.jpg - rm Icon-40.jpg - rm Icon-40@2x.jpg - rm Icon-40@3x.jpg - rm Icon-60@2x.jpg - rm Icon-60@3x.jpg - rm Icon-72.jpg - rm Icon-72@2x.jpg - rm Icon-76.jpg - rm Icon-76@2x.jpg - rm Icon-83.5@2x.jpg - rm Icon-1024@1x.jpg - - else - cp "$full_icon" Icon-20.png &> /dev/null - sips -z 20 20 Icon-20.png &> /dev/null - - cp "$full_icon" Icon-Small.png &> /dev/null - sips -z 29 29 Icon-Small.png &> /dev/null - - cp "$full_icon" Icon-20@2x.png &> /dev/null - sips -z 40 40 Icon-20@2x.png &> /dev/null - - cp "$full_icon" Icon-Small@2x.png &> /dev/null - sips -z 58 58 Icon-Small@2x.png &> /dev/null - - cp "$full_icon" Icon-20@3x.png &> /dev/null - sips -z 60 60 Icon-20@3x.png &> /dev/null - - cp "$full_icon" Icon-Small@3x.png &> /dev/null - sips -z 87 87 Icon-Small@3x.png &> /dev/null - - cp "$full_icon" Icon-Small-50.png &> /dev/null - sips -z 50 50 Icon-Small-50.png &> /dev/null - - cp "$full_icon" Icon-Small-50@2x.png &> /dev/null - sips -z 100 100 Icon-Small-50@2x.png &> /dev/null - - cp "$full_icon" Icon.png &> /dev/null - sips -z 57 57 Icon.png &> /dev/null - - cp "$full_icon" Icon@2x.png &> /dev/null - sips -z 114 114 Icon@2x.png &> /dev/null - - cp "$full_icon" Icon-40.png &> /dev/null - sips -z 40 40 Icon-40.png &> /dev/null - - cp "$full_icon" Icon-40@2x.png &> /dev/null - sips -z 80 80 Icon-40@2x.png &> /dev/null - - cp "$full_icon" Icon-40@3x.png &> /dev/null - sips -z 120 120 Icon-40@3x.png &> /dev/null - - cp "$full_icon" Icon-60@2x.png &> /dev/null - sips -z 120 120 Icon-60@2x.png &> /dev/null - - cp "$full_icon" Icon-60@3x.png &> /dev/null - sips -z 180 180 Icon-60@3x.png &> /dev/null - - cp "$full_icon" Icon-72.png &> /dev/null - sips -z 72 72 Icon-72.png &> /dev/null - - cp "$full_icon" Icon-72@2x.png &> /dev/null - sips -z 144 144 Icon-72@2x.png &> /dev/null - - cp "$full_icon" Icon-76.png &> /dev/null - sips -z 76 76 Icon-76.png &> /dev/null - - cp "$full_icon" Icon-76@2x.png &> /dev/null - sips -z 152 152 Icon-76@2x.png &> /dev/null - - cp "$full_icon" Icon-83.5@2x.png &> /dev/null - sips -z 167 167 Icon-83.5@2x.png &> /dev/null - - cp "$full_icon" Icon-1024@1x.png &> /dev/null - sips -z 1024 1024 Icon-1024@1x.png &> /dev/null - fi - - mv Icon-20.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20.png &> /dev/null - mv Icon-20@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20@2x.png &> /dev/null - mv Icon-20@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-20@3x.png &> /dev/null - mv Icon-Small.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small.png &> /dev/null - mv Icon-Small@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small@2x.png &> /dev/null - mv Icon-Small@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small@3x.png &> /dev/null - mv Icon-Small-50.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small-50.png &> /dev/null - mv Icon-Small-50@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png &> /dev/null - mv Icon.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon.png &> /dev/null - mv Icon@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon@2x.png &> /dev/null - mv Icon-40.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40.png &> /dev/null - mv Icon-40@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40@2x.png &> /dev/null - mv Icon-40@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-40@3x.png &> /dev/null - mv Icon-60@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-60@2x.png &> /dev/null - mv Icon-60@3x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-60@3x.png &> /dev/null - mv Icon-72.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-72.png &> /dev/null - mv Icon-72@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-72@2x.png &> /dev/null - mv Icon-76.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-76.png &> /dev/null - mv Icon-76@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-76@2x.png &> /dev/null - mv Icon-83.5@2x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-83.5@2x.png &> /dev/null - mv Icon-1024@1x.png app/Jasonette/Media.xcassets/AppIcon.appiconset/Icon-1024@1x.png &> /dev/null -} - -for file in icon/*.{jpg,jpeg,JPG,JPEG,png,PNG}; do - [ -e "$file" ] && generate_iconset "$file" && break -done diff --git a/tools/uncrustify/uncrustify.sh b/tools/uncrustify/uncrustify.sh index 8f0a6c5e..cc112174 100755 --- a/tools/uncrustify/uncrustify.sh +++ b/tools/uncrustify/uncrustify.sh @@ -1,5 +1,8 @@ #!/usr/bin/env sh # Execute this command in the root directory +# needs uncrustify to be installed +# try: +# $ brew install uncrustify find ./xcode/Jasonette -name "*.h" | xargs uncrustify -c ./tools/uncrustify/uncrustify.cfg --replace --no-backup find ./xcode/Jasonette -name "*.m" | xargs uncrustify -c ./tools/uncrustify/uncrustify.cfg --replace --no-backup \ No newline at end of file diff --git a/xcode/App/custom.js b/xcode/App/custom.js new file mode 100644 index 00000000..6ec7083b --- /dev/null +++ b/xcode/App/custom.js @@ -0,0 +1 @@ +// This file is appended on each request for $webcontainer. diff --git a/xcode/App/settings.plist b/xcode/App/settings.plist index b1c17c96..cfe64dcf 100644 --- a/xcode/App/settings.plist +++ b/xcode/App/settings.plist @@ -4,6 +4,8 @@ url file://hello.json + tracking_enabled + append_nonce_to_url client_id diff --git a/xcode/Jasonette.xcodeproj/project.pbxproj b/xcode/Jasonette.xcodeproj/project.pbxproj index 33636980..d17849b0 100644 --- a/xcode/Jasonette.xcodeproj/project.pbxproj +++ b/xcode/Jasonette.xcodeproj/project.pbxproj @@ -96,6 +96,8 @@ EF07A20622D6186100D0D3FF /* JasonAgentService.m in Sources */ = {isa = PBXBuildFile; fileRef = EF07A1B522D6186100D0D3FF /* JasonAgentService.m */; }; EF0D48762366307500CCC7AF /* hello.test.hjson in Resources */ = {isa = PBXBuildFile; fileRef = EF0D48752366307500CCC7AF /* hello.test.hjson */; }; EF0D487A2366626500CCC7AF /* hjson.js in Resources */ = {isa = PBXBuildFile; fileRef = EF0D48792366626500CCC7AF /* hjson.js */; }; + EF342844267C382D00AE3920 /* JasonATTrackingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EF342843267C382D00AE3920 /* JasonATTrackingManager.m */; }; + EF4DEF39243D62140060AE4E /* custom.js in Resources */ = {isa = PBXBuildFile; fileRef = EF4DEF38243D62140060AE4E /* custom.js */; }; EF72736823465463005C5515 /* INTUAutoRemoveObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = EF72736623465463005C5515 /* INTUAutoRemoveObserver.m */; }; EF82979B22D30A71003ED64B /* jr.sample.json in Resources */ = {isa = PBXBuildFile; fileRef = EF82979922D30A71003ED64B /* jr.sample.json */; }; EF9781C322D9A0810024FDAE /* hello.json in Resources */ = {isa = PBXBuildFile; fileRef = EF9781C222D9A0810024FDAE /* hello.json */; }; @@ -257,6 +259,9 @@ EF07A1B622D6186100D0D3FF /* JasonAgentService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JasonAgentService.h; sourceTree = ""; }; EF0D48752366307500CCC7AF /* hello.test.hjson */ = {isa = PBXFileReference; lastKnownFileType = text; path = hello.test.hjson; sourceTree = ""; }; EF0D48792366626500CCC7AF /* hjson.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hjson.js; sourceTree = ""; }; + EF342842267C382D00AE3920 /* JasonATTrackingManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JasonATTrackingManager.h; sourceTree = ""; }; + EF342843267C382D00AE3920 /* JasonATTrackingManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JasonATTrackingManager.m; sourceTree = ""; }; + EF4DEF38243D62140060AE4E /* custom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = custom.js; sourceTree = ""; }; EF72736623465463005C5515 /* INTUAutoRemoveObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = INTUAutoRemoveObserver.m; sourceTree = ""; }; EF72736723465463005C5515 /* INTUAutoRemoveObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = INTUAutoRemoveObserver.h; sourceTree = ""; }; EF82979222D28D96003ED64B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Jasonette/Info.plist; sourceTree = SOURCE_ROOT; }; @@ -336,6 +341,7 @@ EF072F5E22D28B2400973DE1 /* App */ = { isa = PBXGroup; children = ( + EF4DEF38243D62140060AE4E /* custom.js */, EF072F5F22D28B2400973DE1 /* settings.plist */, EF9781C222D9A0810024FDAE /* hello.json */, ); @@ -513,6 +519,7 @@ children = ( EF07A10C22D6186100D0D3FF /* JasonAppDelegate.h */, EF07A10D22D6186100D0D3FF /* JasonAppDelegate.m */, + EF342846267C383500AE3920 /* ATTrackingManager */, ); path = AppDelegate; sourceTree = ""; @@ -1066,6 +1073,15 @@ path = hjson; sourceTree = ""; }; + EF342846267C383500AE3920 /* ATTrackingManager */ = { + isa = PBXGroup; + children = ( + EF342842267C382D00AE3920 /* JasonATTrackingManager.h */, + EF342843267C382D00AE3920 /* JasonATTrackingManager.m */, + ); + path = ATTrackingManager; + sourceTree = ""; + }; EF72736523465463005C5515 /* INTUAutoRemoveObserver */ = { isa = PBXGroup; children = ( @@ -1111,7 +1127,7 @@ 5E3176511D1E400C00D87778 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1010; + LastUpgradeCheck = 1240; ORGANIZATIONNAME = Jasonette; TargetAttributes = { 5E3176581D1E400C00D87778 = { @@ -1132,7 +1148,7 @@ }; buildConfigurationList = 5E3176541D1E400C00D87778 /* Build configuration list for PBXProject "Jasonette" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -1168,6 +1184,7 @@ EF07303D22D28B2400973DE1 /* LaunchScreen.storyboard in Resources */, EF07303C22D28B2400973DE1 /* Media.xcassets in Resources */, EF07A1D122D6186100D0D3FF /* rss.js in Resources */, + EF4DEF39243D62140060AE4E /* custom.js in Resources */, EF0D48762366307500CCC7AF /* hello.test.hjson in Resources */, EF07A1CC22D6186100D0D3FF /* Next@2x.png in Resources */, EF0D487A2366626500CCC7AF /* hjson.js in Resources */, @@ -1211,10 +1228,8 @@ buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh", + "${PODS_ROOT}/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh", "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", "${BUILT_PRODUCTS_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework", "${BUILT_PRODUCTS_DIR}/AHKActionSheet/AHKActionSheet.framework", @@ -1255,8 +1270,6 @@ "${BUILT_PRODUCTS_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework", ); name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - ); outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFOAuth2Manager.framework", @@ -1299,7 +1312,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -1330,6 +1343,7 @@ EF07A20622D6186100D0D3FF /* JasonAgentService.m in Sources */, EF07A1DF22D6186100D0D3FF /* JasonImageComponent.m in Sources */, EF07A1F522D6186100D0D3FF /* JasonOauthAction.m in Sources */, + EF342844267C382D00AE3920 /* JasonATTrackingManager.m in Sources */, EF07A20422D6186100D0D3FF /* JasonWebsocketService.m in Sources */, EF07A1F422D6186100D0D3FF /* JasonCacheAction.m in Sources */, EF07A1E922D6186100D0D3FF /* JasonNetworkAction.m in Sources */, @@ -1380,6 +1394,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -1423,7 +1438,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-fdiagnostics-show-option"; @@ -1436,6 +1451,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -1473,7 +1489,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "-fdiagnostics-show-option"; SDKROOT = iphoneos; @@ -1496,7 +1512,7 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Jasonette/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_CFLAGS = ( "$(inherited)", @@ -1600,7 +1616,7 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Jasonette/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.jasonette.seed; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/xcode/Jasonette/Actions/$audio/JasonAudioAction.m b/xcode/Jasonette/Actions/$audio/JasonAudioAction.m index ec2e674d..2b78f68d 100644 --- a/xcode/Jasonette/Actions/$audio/JasonAudioAction.m +++ b/xcode/Jasonette/Actions/$audio/JasonAudioAction.m @@ -184,13 +184,13 @@ - (void)play { commandCenter.nextTrackCommand.enabled = NO; [commandCenter.playCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus (MPRemoteCommandEvent * _Nonnull event) { - [[Jason client] call:@{ @"type": @"$audio.pause" }]; - return MPRemoteCommandHandlerStatusSuccess; - }]; + [[Jason client] call:@{ @"type": @"$audio.pause" }]; + return MPRemoteCommandHandlerStatusSuccess; + }]; [commandCenter.pauseCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus (MPRemoteCommandEvent * _Nonnull event) { - [[Jason client] call:@{ @"type": @"$audio.pause" }]; - return MPRemoteCommandHandlerStatusSuccess; - }]; + [[Jason client] call:@{ @"type": @"$audio.pause" }]; + return MPRemoteCommandHandlerStatusSuccess; + }]; @@ -234,14 +234,14 @@ - (void)play { } completed:^(UIImage * i, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { MPMediaItemArtwork * albumArt = [[MPMediaItemArtwork alloc] initWithImage:i]; - [songInfo setObject:title - forKey:MPMediaItemPropertyTitle]; - [songInfo setObject:author - forKey:MPMediaItemPropertyArtist]; - [songInfo setObject:album - forKey:MPMediaItemPropertyAlbumTitle]; - [songInfo setObject:albumArt - forKey:MPMediaItemPropertyArtwork]; + [songInfo setObject:title + forKey:MPMediaItemPropertyTitle]; + [songInfo setObject:author + forKey:MPMediaItemPropertyArtist]; + [songInfo setObject:album + forKey:MPMediaItemPropertyAlbumTitle]; + [songInfo setObject:albumArt + forKey:MPMediaItemPropertyArtwork]; [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; }]; } diff --git a/xcode/Jasonette/Actions/$geo/JasonGeoAction.m b/xcode/Jasonette/Actions/$geo/JasonGeoAction.m index c86d6265..d18760e3 100644 --- a/xcode/Jasonette/Actions/$geo/JasonGeoAction.m +++ b/xcode/Jasonette/Actions/$geo/JasonGeoAction.m @@ -39,18 +39,18 @@ - (void)get { delayUntilAuthorized:YES // This parameter is optional, defaults to NO if omitted block:^(CLLocation * currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) { if (status == INTULocationStatusSuccess) { - // Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and - // currentLocation contains the device's current location. - NSString * coord = [NSString stringWithFormat:@"%g,%g", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude]; - [[Jason client] success:@{ @"coord": coord }]; + // Request succeeded, meaning achievedAccuracy is at least the requested accuracy, and + // currentLocation contains the device's current location. + NSString * coord = [NSString stringWithFormat:@"%g,%g", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude]; + [[Jason client] success:@{ @"coord": coord }]; } else if (status == INTULocationStatusTimedOut) { - // Wasn't able to locate the user with the requested accuracy within the timeout interval. - // However, currentLocation contains the best location available (if any) as of right now, - // and achievedAccuracy has info on the accuracy/recency of the location in currentLocation. - NSString * coord = [NSString stringWithFormat:@"%g,%g", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude]; - [[Jason client] success:@{ @"coord": coord }]; + // Wasn't able to locate the user with the requested accuracy within the timeout interval. + // However, currentLocation contains the best location available (if any) as of right now, + // and achievedAccuracy has info on the accuracy/recency of the location in currentLocation. + NSString * coord = [NSString stringWithFormat:@"%g,%g", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude]; + [[Jason client] success:@{ @"coord": coord }]; } else { - [[Jason client] error]; + [[Jason client] error]; } }]; } diff --git a/xcode/Jasonette/Actions/$media/JasonMediaAction.m b/xcode/Jasonette/Actions/$media/JasonMediaAction.m index 9aa3efb6..aea4ea15 100644 --- a/xcode/Jasonette/Actions/$media/JasonMediaAction.m +++ b/xcode/Jasonette/Actions/$media/JasonMediaAction.m @@ -218,19 +218,19 @@ - (void)imagePickerCallback:(NSDictionary *)info { exportSession.outputURL = outputUrl; exportSession.outputFileType = AVFileTypeMPEG4; [exportSession exportAsynchronouslyWithCompletionHandler:^(void) - { - NSString * contentType = @"video/mp4"; - NSData * mediaData = [NSData dataWithContentsOfURL:outputUrl]; - NSString * base64 = [mediaData base64EncodedStringWithOptions:0]; + { + NSString * contentType = @"video/mp4"; + NSData * mediaData = [NSData dataWithContentsOfURL:outputUrl]; + NSString * base64 = [mediaData base64EncodedStringWithOptions:0]; - NSString * dataFormatString = @"data:video/mp4;base64,%@"; - NSString * dataString = [NSString stringWithFormat:dataFormatString, base64]; - NSURL * dataURI = [NSURL URLWithString:dataString]; + NSString * dataFormatString = @"data:video/mp4;base64,%@"; + NSString * dataString = [NSString stringWithFormat:dataFormatString, base64]; + NSURL * dataURI = [NSURL URLWithString:dataString]; - NSDictionary * result = @{ @"file_url": url.absoluteString, @"data_uri": dataURI.absoluteString, @"data": base64, @"content_type": contentType }; - [[Jason client] success:result]; - }]; + NSDictionary * result = @{ @"file_url": url.absoluteString, @"data_uri": dataURI.absoluteString, @"data": base64, @"content_type": contentType }; + [[Jason client] success:result]; + }]; } else if (isImage) { UIImage * chosenImage; diff --git a/xcode/Jasonette/Actions/$network/JasonNetworkAction.m b/xcode/Jasonette/Actions/$network/JasonNetworkAction.m index 924a18bd..11a76942 100644 --- a/xcode/Jasonette/Actions/$network/JasonNetworkAction.m +++ b/xcode/Jasonette/Actions/$network/JasonNetworkAction.m @@ -106,14 +106,14 @@ - (void)request { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject + for:url + ofType:dataType + with:responseObject original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; return; @@ -126,14 +126,14 @@ - (void)request { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject + for:url + ofType:dataType + with:responseObject original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); @@ -149,14 +149,14 @@ - (void)request { headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject + for:url + ofType:dataType + with:responseObject original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); return; @@ -171,14 +171,14 @@ - (void)request { headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject - original_url:original_url]; + for:url + ofType:dataType + with:responseObject + original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); @@ -194,14 +194,14 @@ - (void)request { headers:nil success:^(NSURLSessionDataTask * _Nonnull task) { [self done:task - for:url - ofType:dataType - with:nil + for:url + ofType:dataType + with:nil original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); @@ -217,14 +217,14 @@ - (void)request { headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject - original_url:original_url]; + for:url + ofType:dataType + with:responseObject + original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); return; @@ -244,14 +244,14 @@ - (void)request { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { [self done:task - for:url - ofType:dataType - with:responseObject + for:url + ofType:dataType + with:responseObject original_url:original_url]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [weakSelf processError:error - withOriginalUrl:original_url]; + withOriginalUrl :original_url]; }]; }); } @@ -370,15 +370,15 @@ - (void)_uploadData:(NSData *)mediaData ofType:(NSString *)contentType withFilen } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // Ignore if the url is different - if (![JasonHelper isURL:task.originalRequest.URL - equivalentTo :sign_url]) { - return; + if (![JasonHelper isURL:task.originalRequest.URL + equivalentTo :sign_url]) { + return; } if (!responseObject[@"$jason"]) { - [[Jason client] error:@{ @"description": @"The server must return a signed url wrapped with '$jason' key" } - withOriginalUrl:original_url]; - return; + [[Jason client] error:@{ @"description": @"The server must return a signed url wrapped with '$jason' key" } + withOriginalUrl:original_url]; + return; } NSMutableURLRequest * req = [[NSMutableURLRequest alloc] init]; @@ -387,31 +387,31 @@ - (void)_uploadData:(NSData *)mediaData ofType:(NSString *)contentType withFilen [req setHTTPMethod:@"PUT"]; [req setURL:[NSURL URLWithString:responseObject[@"$jason"]]]; - NSURLSessionDataTask * upload_task = [manager dataTaskWithRequest:req - uploadProgress:^(NSProgress * _Nonnull uploadProgress) { - } - downloadProgress:^(NSProgress * _Nonnull downloadProgress) { - } - completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { - if (!error) { - dispatch_async (dispatch_get_main_queue (), ^{ - [self s3UploadDidSucceed:upload_filename - withOriginalUrl:original_url]; - }); - } else { - dispatch_async (dispatch_get_main_queue (), ^{ - DTLogWarning (@"error = %@", error); - [self s3UploadDidFail:error - withOriginalUrl:original_url]; - }); - } - }]; + NSURLSessionDataTask * upload_task = [manager dataTaskWithRequest:req + uploadProgress:^(NSProgress * _Nonnull uploadProgress) { + } + downloadProgress:^(NSProgress * _Nonnull downloadProgress) { + } + completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { + if (!error) { + dispatch_async (dispatch_get_main_queue (), ^{ + [self s3UploadDidSucceed:upload_filename + withOriginalUrl:original_url]; + }); + } else { + dispatch_async (dispatch_get_main_queue (), ^{ + DTLogWarning (@"error = %@", error); + [self s3UploadDidFail:error + withOriginalUrl:original_url]; + }); + } + }]; [upload_task resume]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { - [self s3UploadDidFail:error - withOriginalUrl:original_url]; + [self s3UploadDidFail:error + withOriginalUrl:original_url]; }]; } - (void)s3UploadDidFail:(NSError *)error withOriginalUrl:(NSString *)original_url diff --git a/xcode/Jasonette/Actions/$oauth/JasonOauthAction.m b/xcode/Jasonette/Actions/$oauth/JasonOauthAction.m index ec22c44a..38e47e12 100644 --- a/xcode/Jasonette/Actions/$oauth/JasonOauthAction.m +++ b/xcode/Jasonette/Actions/$oauth/JasonOauthAction.m @@ -9,6 +9,7 @@ #import #import #import "JasonNetworking.h" +#import "JasonLogger.h" #pragma message "TODO: Update managers to use JasonNetworking" @@ -108,9 +109,9 @@ - (void)request { if ([host containsString:@"facebook"]) { options = @{ - ACFacebookAppIdKey: client_id, - // ACFacebookPermissionsKey: @[@"user_friends", @"email"], - ACFacebookAudienceKey: ACFacebookAudienceFriends + ACFacebookAppIdKey: client_id, + // ACFacebookPermissionsKey: @[@"user_friends", @"email"], + ACFacebookAudienceKey: ACFacebookAudienceFriends }; } @@ -131,50 +132,50 @@ - (void)request { options:options completion:^(BOOL granted, NSError * error) { if (granted == YES) { - NSArray * arrayOfAccounts = [account accountsWithAccountType:accountType]; - - if ([arrayOfAccounts count] > 0) { - dispatch_async (dispatch_get_main_queue (), ^{ - AHKActionSheet * actionSheet = [[AHKActionSheet alloc] initWithTitle:nil]; - - for (int i = 0; i < arrayOfAccounts.count; i++) { - ACAccount * a = arrayOfAccounts[i]; - [actionSheet addButtonWithTitle:a.username - type:AHKActionSheetButtonTypeDefault - handler:^(AHKActionSheet * as) { - dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { - UICKeyChainStore * keychain = [UICKeyChainStore keyChainStoreWithService:@"$socialframework"]; - [keychain setString:a.identifier - forKey:client_id]; - [self performSocialFrameworkRequestFor:a]; - }); - }]; - } - - actionSheet.title = @"Select an account"; - actionSheet.blurTintColor = [UIColor colorWithWhite:1.0f - alpha:0.75f]; - actionSheet.blurRadius = 8.0f; - actionSheet.buttonHeight = 45.0f; - - actionSheet.animationDuration = 0.2f; - UIFont * defaultFont = [UIFont fontWithName:@"HelveticaNeue" - size:16.0f]; - actionSheet.buttonTextAttributes = @{ NSFontAttributeName: defaultFont, - NSForegroundColorAttributeName: [UIColor blackColor] }; - actionSheet.disabledButtonTextAttributes = @{ NSFontAttributeName: defaultFont, - NSForegroundColorAttributeName: [UIColor grayColor] }; - actionSheet.destructiveButtonTextAttributes = @{ NSFontAttributeName: defaultFont, - NSForegroundColorAttributeName: [UIColor redColor] }; - actionSheet.cancelButtonTextAttributes = @{ NSFontAttributeName: defaultFont, - NSForegroundColorAttributeName: [UIColor blackColor] }; - [actionSheet show]; - }); + NSArray * arrayOfAccounts = [account accountsWithAccountType:accountType]; + + if ([arrayOfAccounts count] > 0) { + dispatch_async (dispatch_get_main_queue (), ^{ + AHKActionSheet * actionSheet = [[AHKActionSheet alloc] initWithTitle:nil]; + + for (int i = 0; i < arrayOfAccounts.count; i++) { + ACAccount * a = arrayOfAccounts[i]; + [actionSheet addButtonWithTitle:a.username + type:AHKActionSheetButtonTypeDefault + handler:^(AHKActionSheet * as) { + dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { + UICKeyChainStore * keychain = [UICKeyChainStore keyChainStoreWithService:@"$socialframework"]; + [keychain setString:a.identifier + forKey:client_id]; + [self performSocialFrameworkRequestFor:a]; + }); + }]; + } + + actionSheet.title = @"Select an account"; + actionSheet.blurTintColor = [UIColor colorWithWhite:1.0f + alpha:0.75f]; + actionSheet.blurRadius = 8.0f; + actionSheet.buttonHeight = 45.0f; + + actionSheet.animationDuration = 0.2f; + UIFont * defaultFont = [UIFont fontWithName:@"HelveticaNeue" + size:16.0f]; + actionSheet.buttonTextAttributes = @{ NSFontAttributeName: defaultFont, + NSForegroundColorAttributeName: [UIColor blackColor] }; + actionSheet.disabledButtonTextAttributes = @{ NSFontAttributeName: defaultFont, + NSForegroundColorAttributeName: [UIColor grayColor] }; + actionSheet.destructiveButtonTextAttributes = @{ NSFontAttributeName: defaultFont, + NSForegroundColorAttributeName: [UIColor redColor] }; + actionSheet.cancelButtonTextAttributes = @{ NSFontAttributeName: defaultFont, + NSForegroundColorAttributeName: [UIColor blackColor] }; + [actionSheet show]; + }); + } else { + [[Jason client] error]; + } } else { - [[Jason client] error]; - } - } else { - [[Jason client] error]; + [[Jason client] error]; } }]; } @@ -326,10 +327,10 @@ - (void)_process { } completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { if (!error) { - [[Jason client] success:responseObject]; + [[Jason client] success:responseObject]; } else { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [[Jason client] error]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[Jason client] error]; } }] resume]; } @@ -388,32 +389,32 @@ - (void)_process { BOOL same = YES; if ([originalRequestPath isEqualToString:path]) { - if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { - NSArray * originalRequestQueries = [task.originalRequest.URL.query componentsSeparatedByString:@"&"]; - - for (NSString * kv in originalRequestQueries) { - NSArray * pairComponents = [kv componentsSeparatedByString:@"="]; - NSString * key = [[pairComponents firstObject] stringByRemovingPercentEncoding]; - NSString * value = [[pairComponents lastObject] stringByRemovingPercentEncoding]; - - // check if the value is the same as the original - if (![parameters[key] isEqualToString:value]) { - same = NO; - break; - } - } - } + if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { + NSArray * originalRequestQueries = [task.originalRequest.URL.query componentsSeparatedByString:@"&"]; + + for (NSString * kv in originalRequestQueries) { + NSArray * pairComponents = [kv componentsSeparatedByString:@"="]; + NSString * key = [[pairComponents firstObject] stringByRemovingPercentEncoding]; + NSString * value = [[pairComponents lastObject] stringByRemovingPercentEncoding]; + + // check if the value is the same as the original + if (![parameters[key] isEqualToString:value]) { + same = NO; + break; + } + } + } } else { - same = NO; + same = NO; } if (same) { - [[Jason client] success:responseObject]; + [[Jason client] success:responseObject]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { - NSString * ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] - encoding:NSUTF8StringEncoding]; + NSString * ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] + encoding:NSUTF8StringEncoding]; NSLog (@"#E = %@", ErrorResponse); [[Jason client] error]; }]; @@ -430,19 +431,19 @@ - (void)_process { NSString * originalRequestQuery = nil; if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { - originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; + originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; } NSString * originalRequestFullPath; if (originalRequestQuery) { - originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; + originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; } else { - originalRequestFullPath = originalRequestPath; + originalRequestFullPath = originalRequestPath; } if (![originalRequestFullPath isEqualToString:path]) { - return; + return; } [[Jason client] success:responseObject]; @@ -460,19 +461,19 @@ - (void)_process { NSString * originalRequestQuery = nil; if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { - originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; + originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; } NSString * originalRequestFullPath; if (originalRequestQuery) { - originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; + originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; } else { - originalRequestFullPath = originalRequestPath; + originalRequestFullPath = originalRequestPath; } if (![originalRequestFullPath isEqualToString:path]) { - return; + return; } [[Jason client] success:responseObject]; @@ -490,19 +491,19 @@ - (void)_process { NSString * originalRequestQuery = nil; if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { - originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; + originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; } NSString * originalRequestFullPath; if (originalRequestQuery) { - originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; + originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; } else { - originalRequestFullPath = originalRequestPath; + originalRequestFullPath = originalRequestPath; } if (![originalRequestFullPath isEqualToString:path]) { - return; + return; } [[Jason client] success]; @@ -520,19 +521,19 @@ - (void)_process { NSString * originalRequestQuery = nil; if (task.originalRequest.URL.query && task.originalRequest.URL.query.length > 0) { - originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; + originalRequestQuery = [task.originalRequest.URL.query stringByRemovingPercentEncoding]; } NSString * originalRequestFullPath; if (originalRequestQuery) { - originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; + originalRequestFullPath = [NSString stringWithFormat:@"%@?%@", originalRequestPath, originalRequestQuery]; } else { - originalRequestFullPath = originalRequestPath; + originalRequestFullPath = originalRequestPath; } if (![originalRequestFullPath isEqualToString:path]) { - return; + return; } [[Jason client] success:responseObject]; @@ -559,17 +560,17 @@ - (void)access_token { if ([host containsString:@"facebook"]) { options = @{ - ACFacebookAppIdKey: client_id, - // ACFacebookPermissionsKey: @[@"user_friends", @"email"], - ACFacebookAudienceKey: ACFacebookAudienceFriends + ACFacebookAppIdKey: client_id, + // ACFacebookPermissionsKey: @[@"user_friends", @"email"], + ACFacebookAudienceKey: ACFacebookAudienceFriends }; [accountStore requestAccessToAccountsWithType:accountTypeFacebook options:options completion:^(BOOL granted, NSError * error) { if (granted) { - NSArray * accounts = [accountStore accountsWithAccountType:accountTypeFacebook]; - ACAccount * account = [accounts lastObject]; - [[Jason client] success:@{ @"token": account.credential.oauthToken }]; + NSArray * accounts = [accountStore accountsWithAccountType:accountTypeFacebook]; + ACAccount * account = [accounts lastObject]; + [[Jason client] success:@{ @"token": account.credential.oauthToken }]; } }]; } @@ -612,8 +613,8 @@ - (void)refresh_token:(NSString *)provider { refreshToken:credential.refreshToken success:^(AFOAuthCredential * credential) { NSLog (@"Success! your new credential is %@", credential); - [AFOAuthCredential storeCredential:credential - withIdentifier:client_id]; + [AFOAuthCredential storeCredential:credential + withIdentifier:client_id]; [[Jason client] success]; } failure:^(NSError * error) { @@ -706,50 +707,54 @@ - (void)auth { completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { // Ignore if the url is different if (![request.URL.absoluteString isEqualToString:response.URL.absoluteString]) { - return; + return; } if (!error) { - dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { - NSString * s = [[NSString alloc] initWithData:responseObject - encoding:NSUTF8StringEncoding]; - - NSString * urlToParse = [NSString stringWithFormat:@"http://localhost?%@", s]; - NSArray * queryItems = [self extractQueryParams:urlToParse]; - NSString * oauth_token = [self valueForKey:@"oauth_token" - fromQueryItems :queryItems]; - NSString * oauth_token_secret = [self valueForKey:@"oauth_token_secret" - fromQueryItems :queryItems]; - NSString * authorize_url; - - if (oauth_token_secret) { - self.cache = [@{ @"oauth1_three_legged_secret": oauth_token_secret } mutableCopy]; - authorize_url = [NSString stringWithFormat:@"%@://%@%@?oauth_token=%@&oauth_token_secret=%@", authorize_options[@"scheme"], authorize_options[@"host"], authorize_options[@"path"], oauth_token, oauth_token_secret]; + dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { + NSString * s = [[NSString alloc] initWithData:responseObject + encoding:NSUTF8StringEncoding]; + + NSString * urlToParse = [NSString stringWithFormat:@"http://localhost?%@", s]; + NSArray * queryItems = [self extractQueryParams:urlToParse]; + NSString * oauth_token = [self valueForKey:@"oauth_token" + fromQueryItems :queryItems]; + NSString * oauth_token_secret = [self valueForKey:@"oauth_token_secret" + fromQueryItems :queryItems]; + NSString * authorize_url; + + if (oauth_token_secret) { + self.cache = [@{ @"oauth1_three_legged_secret": oauth_token_secret } mutableCopy]; + authorize_url = [NSString stringWithFormat:@"%@://%@%@?oauth_token=%@&oauth_token_secret=%@", authorize_options[@"scheme"], authorize_options[@"host"], authorize_options[@"path"], oauth_token, oauth_token_secret]; + } else { + self.cache = nil; + authorize_url = [NSString stringWithFormat:@"%@://%@%@?oauth_token=%@", authorize_options[@"scheme"], authorize_options[@"host"], authorize_options[@"path"], oauth_token]; + } + + dispatch_async (dispatch_get_main_queue (), ^{ + NSURL * URL = [NSURL URLWithString:authorize_url]; + NSString * view = authorize_options[@"view"]; + + if (view && [view isEqualToString:@"app"]) { + // Launch external safari for oauth + [[UIApplication sharedApplication] openURL:URL + options:@{} + completionHandler:^(BOOL success) { + DTLogDebug (@"Openned %@", URL); + }]; + } else { + // By default use SFSafariViewController + SFSafariViewController * vc = [[SFSafariViewController alloc] initWithURL:URL]; + vc.delegate = self; + [self.VC presentViewController:vc + animated:NO + completion:^{ }]; + } + }); + }); } else { - self.cache = nil; - authorize_url = [NSString stringWithFormat:@"%@://%@%@?oauth_token=%@", authorize_options[@"scheme"], authorize_options[@"host"], authorize_options[@"path"], oauth_token]; - } - - dispatch_async (dispatch_get_main_queue (), ^{ - NSURL * URL = [NSURL URLWithString:authorize_url]; - NSString * view = authorize_options[@"view"]; - - if (view && [view isEqualToString:@"app"]) { - // Launch external safari for oauth - [[UIApplication sharedApplication] openURL:URL]; - } else { - // By default use SFSafariViewController - SFSafariViewController * vc = [[SFSafariViewController alloc] initWithURL:URL]; - vc.delegate = self; - [self.VC presentViewController:vc - animated:NO - completion:^{ }]; - } - }); - }); - } else { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [[Jason client] error]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[Jason client] error]; } }]; @@ -792,11 +797,11 @@ - (void)auth { NSDictionary * access_options = self.options[@"access"]; if ([access_options[@"data"][@"grant_type"] isEqualToString:@"password"]) { - /******************************************************************************** - * - * Case 1: Password type - * - ********************************************************************************/ + /******************************************************************************** + * + * Case 1: Password type + * + ********************************************************************************/ NSString * client_id = self.options[@"access"][@"client_id"]; NSString * client_secret = self.options[@"access"][@"client_secret"]; @@ -844,15 +849,15 @@ - (void)auth { NSString * refresh_token = responseObject[@"refresh_token"]; if (access_token) { - NSString * token_type = responseObject[@"token_type"]; - AFOAuthCredential * credential = [AFOAuthCredential credentialWithOAuthToken:access_token - tokenType:token_type]; - credential.refreshToken = refresh_token; - [AFOAuthCredential storeCredential:credential - withIdentifier:client_id]; - [[Jason client] success]; + NSString * token_type = responseObject[@"token_type"]; + AFOAuthCredential * credential = [AFOAuthCredential credentialWithOAuthToken:access_token + tokenType:token_type]; + credential.refreshToken = refresh_token; + [AFOAuthCredential storeCredential:credential + withIdentifier:client_id]; + [[Jason client] success]; } else { - [[Jason client] error]; + [[Jason client] error]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { @@ -885,7 +890,7 @@ - (void)auth { if (credential && credential.isExpired && credential.refreshToken) { [self refresh_token:client_id]; } else { - // Generate the final url (U) from scheme/host/path/data + // Generate the final url (U) from scheme/host/path/data NSString * url = [NSString stringWithFormat:@"%@://%@%@", authorize_options[@"scheme"], authorize_options[@"host"], authorize_options[@"path"]]; NSMutableDictionary * parameters = [authorize_options[@"data"] mutableCopy]; NSURLComponents * components = [NSURLComponents componentsWithString:url]; @@ -908,7 +913,11 @@ - (void)auth { if (view && [view isEqualToString:@"app"]) { // Launch external safari for oauth - [[UIApplication sharedApplication] openURL:U]; + [[UIApplication sharedApplication] openURL:U + options:@{} + completionHandler:^(BOOL success) { + DTLogDebug (@"Openned %@", U); + }]; } else { // By default use SFSafariViewController SFSafariViewController * vc = [[SFSafariViewController alloc] initWithURL:U]; @@ -1007,34 +1016,34 @@ - (void)oauth_callback:(NSNotification *)notification { completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { // Ignore if the url is different if (![request.URL.absoluteString isEqualToString:response.URL.absoluteString]) { - return; + return; } if (!error) { - // Temp url just to take advantage of componentsWithURL - NSString * s = [[NSString alloc] initWithData:responseObject - encoding:NSUTF8StringEncoding]; - NSString * urlToParse = [NSString stringWithFormat:@"http://localhost?%@", s]; - NSURLComponents * components = [NSURLComponents componentsWithURL:[NSURL URLWithString:urlToParse] - resolvingAgainstBaseURL :NO]; - NSArray * queryItems = [components queryItems]; - NSString * oauth_token = [self valueForKey:@"oauth_token" - fromQueryItems :queryItems]; - NSString * oauth_token_secret = [self valueForKey:@"oauth_token_secret" - fromQueryItems :queryItems]; - - - NSString * APP_NAME = [[NSBundle mainBundle] bundleIdentifier]; - - UICKeyChainStore * keychain = [UICKeyChainStore keyChainStoreWithService:[NSString stringWithFormat:@"%@", APP_NAME]]; - [keychain setString:oauth_token - forKey:[NSString stringWithFormat:@"%@#token", client_id]]; - [keychain setString:oauth_token_secret - forKey:[NSString stringWithFormat:@"%@#secret", client_id]]; - [[Jason client] success]; + // Temp url just to take advantage of componentsWithURL + NSString * s = [[NSString alloc] initWithData:responseObject + encoding:NSUTF8StringEncoding]; + NSString * urlToParse = [NSString stringWithFormat:@"http://localhost?%@", s]; + NSURLComponents * components = [NSURLComponents componentsWithURL:[NSURL URLWithString:urlToParse] + resolvingAgainstBaseURL :NO]; + NSArray * queryItems = [components queryItems]; + NSString * oauth_token = [self valueForKey:@"oauth_token" + fromQueryItems :queryItems]; + NSString * oauth_token_secret = [self valueForKey:@"oauth_token_secret" + fromQueryItems :queryItems]; + + + NSString * APP_NAME = [[NSBundle mainBundle] bundleIdentifier]; + + UICKeyChainStore * keychain = [UICKeyChainStore keyChainStoreWithService:[NSString stringWithFormat:@"%@", APP_NAME]]; + [keychain setString:oauth_token + forKey:[NSString stringWithFormat:@"%@#token", client_id]]; + [keychain setString:oauth_token_secret + forKey:[NSString stringWithFormat:@"%@#secret", client_id]]; + [[Jason client] success]; } else { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [[Jason client] error]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [[Jason client] error]; } }]; @@ -1149,15 +1158,15 @@ - (void)oauth_callback:(NSNotification *)notification { [OAuth2Manager authenticateUsingOAuthWithURLString:access_options[@"path"] parameters:access_data success:^(AFOAuthCredential * credential) { - [AFOAuthCredential storeCredential:credential - withIdentifier:client_id]; + [AFOAuthCredential storeCredential:credential + withIdentifier:client_id]; [[Jason client] success]; } failure:^(NSError * error) { NSLog (@"Error: %@", error); - NSString * ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] - encoding:NSUTF8StringEncoding]; + NSString * ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] + encoding:NSUTF8StringEncoding]; NSLog (@"#ncoded = %@", ErrorResponse); [[Jason client] error]; diff --git a/xcode/Jasonette/Actions/$push/JasonPushAction.m b/xcode/Jasonette/Actions/$push/JasonPushAction.m index 36ea2b81..1da6a1b6 100644 --- a/xcode/Jasonette/Actions/$push/JasonPushAction.m +++ b/xcode/Jasonette/Actions/$push/JasonPushAction.m @@ -192,35 +192,27 @@ - (void)register { // currently only remote notification #ifdef PUSH - if (SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO (@"10.0")) { - UNUserNotificationCenter * center = [UNUserNotificationCenter currentNotificationCenter]; - JasonPushService * service = [Jason client].services[@"JasonPushService"]; + // iOS >= 10 Push only + UNUserNotificationCenter * center = [UNUserNotificationCenter currentNotificationCenter]; + JasonPushService * service = [Jason client].services[@"JasonPushService"]; - if (service) { - center.delegate = service; - } - - [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) - completionHandler:^(BOOL granted, NSError * _Nullable error) - { - if (!error && granted) { - [[UIApplication sharedApplication] registerForRemoteNotifications]; - [[Jason client] success]; - } else { - [[Jason client] error]; - } - }]; - } else { - [[UIApplication sharedApplication] - registerUserNotificationSettings:[UIUserNotificationSettings - settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) - categories:nil]]; - - [[UIApplication sharedApplication] registerForRemoteNotifications]; - - [[Jason client] success]; + if (service) { + center.delegate = service; } + [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) + completionHandler:^(BOOL granted, NSError * _Nullable error) + { + if (!error && granted) { + dispatch_async (dispatch_get_main_queue (), ^{ + [[UIApplication sharedApplication] registerForRemoteNotifications]; + }); + [[Jason client] success]; + } else { + [[Jason client] error]; + } + }]; + #else /* ifdef PUSH */ DTLogWarning (@"Push notification turned off by default. If you'd like to suport push, uncomment the #define statement in Constants.h and turn on the push notification feature from the capabilities tab."); #endif /* ifdef PUSH */ diff --git a/xcode/Jasonette/Actions/$script/JasonScriptAction.m b/xcode/Jasonette/Actions/$script/JasonScriptAction.m index a9ac6e75..fa9fd44b 100644 --- a/xcode/Jasonette/Actions/$script/JasonScriptAction.m +++ b/xcode/Jasonette/Actions/$script/JasonScriptAction.m @@ -44,8 +44,8 @@ - (void)include { progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSString * js = [JasonHelper UTF8StringFromData:((NSData *)responseObject)]; - [self inject:js - into:context]; + [self inject:js + into:context]; dispatch_group_leave (requireGroup); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { diff --git a/xcode/Jasonette/Actions/$util/JasonUtilAction.m b/xcode/Jasonette/Actions/$util/JasonUtilAction.m index d265b8df..45c5fb23 100644 --- a/xcode/Jasonette/Actions/$util/JasonUtilAction.m +++ b/xcode/Jasonette/Actions/$util/JasonUtilAction.m @@ -165,16 +165,16 @@ - (void)alert { DTLogWarning (@"Alert OK"); if (form && form.count > 0) { - for (NSString * input_name in textFields) { - UITextField * textField = (UITextField *)textFields[input_name]; - [form_inputs setObject:textField.text - forKey:input_name]; - } - - DTLogDebug (@"Sending Form Inputs %@", form_inputs); - [[Jason client] success:form_inputs]; + for (NSString * input_name in textFields) { + UITextField * textField = (UITextField *)textFields[input_name]; + [form_inputs setObject:textField.text + forKey:input_name]; + } + + DTLogDebug (@"Sending Form Inputs %@", form_inputs); + [[Jason client] success:form_inputs]; } else { - [[Jason client] success]; + [[Jason client] success]; } }]; @@ -183,8 +183,8 @@ - (void)alert { handler:^(UIAlertAction * action) { DTLogWarning (@"Alert Cancel"); [[Jason client] error]; - [alert dismissViewControllerAnimated:YES - completion:nil]; + [alert dismissViewControllerAnimated:YES + completion:nil]; }]; if (cancelButtonEnabled) { @@ -222,13 +222,13 @@ - (void)share { } completed:^(UIImage * image, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { if (image) { - [share_items addObject:image]; + [share_items addObject:image]; } counter--; if (counter == 0) { - [self openShareWith:share_items]; + [self openShareWith:share_items]; } }]; } else if (file_url) { @@ -347,8 +347,8 @@ - (void)openShareWith:(NSArray *)items { // Present the controller [controller setCompletionWithItemsHandler: ^(NSString * activityType, BOOL completed, NSArray * returnedItems, NSError * activityError) { - [[Jason client] success]; - }]; + [[Jason client] success]; + }]; dispatch_async (dispatch_get_main_queue (), ^{ [self.VC.navigationController presentViewController:controller animated:YES completion:nil]; @@ -368,9 +368,9 @@ - (void)picker { style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { if (item[@"href"]) { - [[Jason client] go:item[@"href"]]; + [[Jason client] go:item[@"href"]]; } else if (item[@"action"]) { - [[Jason client] call:item[@"action"]]; + [[Jason client] call:item[@"action"]]; } }]; [alert addAction:action]; @@ -422,6 +422,7 @@ - (void)datepicker { // Create date selection view controller RMDateSelectionViewController * dateSelectionController = [RMDateSelectionViewController actionControllerWithStyle:style selectAction:selectAction andCancelAction:cancelAction]; + dateSelectionController.title = title; dateSelectionController.message = description; @@ -449,19 +450,19 @@ - (void)addressbook { case APAddressBookAccessUnknown: { // Application didn't request address book access yet [addressbook requestAccess:^(BOOL granted, NSError * error) - { - if (error) { - DTLogWarning (@"%@", error); - [[Jason client] error]; - } else { - if (granted) { - [self fetchAddressbook:addressbook]; - } else { - DTLogWarning (@"%@", error); - [[Jason client] error]; - } - } - }]; + { + if (error) { + DTLogWarning (@"%@", error); + [[Jason client] error]; + } else { + if (granted) { + [self fetchAddressbook:addressbook]; + } else { + DTLogWarning (@"%@", error); + [[Jason client] error]; + } + } + }]; break; } @@ -488,24 +489,24 @@ - (void)fetchAddressbook:(APAddressBook *)addressbook { dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { [addressbook loadContacts:^(NSArray * contacts, NSError * error) - { - // hide activity - if (!error) { - // do something with contacts array - NSMutableArray * result = [NSMutableArray array]; - [contacts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) { - [result addObject:[NSDictionary dictionaryWithObjects:@[[self contactName:obj], [self contactPhones:obj], [self contactEmails:obj]] - forKeys:@[@"name", @"phone", @"email"]]]; - }]; - - DTLogDebug (@"Contacts %@", result); - [[Jason client] success:result]; - } else { - // show error - DTLogDebug (@"%@", error); - [[Jason client] error]; - } - }]; + { + // hide activity + if (!error) { + // do something with contacts array + NSMutableArray * result = [NSMutableArray array]; + [contacts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) { + [result addObject:[NSDictionary dictionaryWithObjects:@[[self contactName:obj], [self contactPhones:obj], [self contactEmails:obj]] + forKeys:@[@"name", @"phone", @"email"]]]; + }]; + + DTLogDebug (@"Contacts %@", result); + [[Jason client] success:result]; + } else { + // show error + DTLogDebug (@"%@", error); + [[Jason client] error]; + } + }]; }); } diff --git a/xcode/Jasonette/Components/button/JasonButtonComponent.m b/xcode/Jasonette/Components/button/JasonButtonComponent.m index 8b00fbda..7ea3381a 100644 --- a/xcode/Jasonette/Components/button/JasonButtonComponent.m +++ b/xcode/Jasonette/Components/button/JasonButtonComponent.m @@ -85,20 +85,20 @@ + (UIView *)build:(UIButton *)component withJSON:(NSDictionary *)json withOption placeholderImage:placeholder_image completed:^(UIImage * i, NSError * error, SDImageCacheType cacheType, NSURL * imageURL) { if (!error) { - JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; - - if (style[@"color"]) { - NSString * colorHex = style[@"color"]; - UIColor * c = [JasonHelper colorwithHexString:colorHex - alpha:1.0]; - UIImage * image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - [component setTintColor:c]; - [component setImage:image - forState:UIControlStateNormal]; - } else { - [component setImage:imageView.image - forState:UIControlStateNormal]; - } + JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; + + if (style[@"color"]) { + NSString * colorHex = style[@"color"]; + UIColor * c = [JasonHelper colorwithHexString:colorHex + alpha:1.0]; + UIImage * image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + [component setTintColor:c]; + [component setImage:image + forState:UIControlStateNormal]; + } else { + [component setImage:imageView.image + forState:UIControlStateNormal]; + } } }]; } diff --git a/xcode/Jasonette/Components/html/JasonHtmlComponent.m b/xcode/Jasonette/Components/html/JasonHtmlComponent.m index dca1ac8c..e2ee3230 100644 --- a/xcode/Jasonette/Components/html/JasonHtmlComponent.m +++ b/xcode/Jasonette/Components/html/JasonHtmlComponent.m @@ -10,27 +10,24 @@ @implementation JasonHtmlComponent + (UIView *)build:(WKWebView *)component withJSON:(NSDictionary *)json withOptions:(NSDictionary *)options { - if (!component) { - WKWebViewConfiguration * config = [[WKWebViewConfiguration alloc] init]; - + [config setAllowsInlineMediaPlayback:YES]; - + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - + if ([config respondsToSelector:@selector(setMediaPlaybackRequiresUserAction:)]) { [config setMediaPlaybackRequiresUserAction:NO]; } - + #pragma clang diagnostic pop - + if (@available(iOS 10, *)) { [config setMediaTypesRequiringUserActionForPlayback:WKAudiovisualMediaTypeNone]; } - - + CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen] bounds].size.height; @@ -43,21 +40,20 @@ + (UIView *)build:(WKWebView *)component withJSON:(NSDictionary *)json withOptio height = [JasonHelper pixelsInDirection:@"vertical" fromExpression:json[@"style"][@"height"]]; } } - - + // TODO: Figure it out what this does NSString * summon = @"var JASON={call: function(e){var n=document.createElement(\"IFRAME\");n.setAttribute(\"src\",\"jason:\"+JSON.stringify(e)),document.documentElement.appendChild(n),n.parentNode.removeChild(n),n=null}};"; - + WKUserScript * summonScript = [[WKUserScript alloc] initWithSource:summon injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; - + WKUserContentController * controller = [WKUserContentController new]; [controller addUserScript:summonScript]; config.userContentController = controller; - + CGRect frame = CGRectMake (0, 0, width, height); component = [[WKWebView alloc] initWithFrame:frame configuration:config]; - + component.translatesAutoresizingMaskIntoConstraints = NO; component.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); component.navigationDelegate = [self self]; @@ -67,39 +63,35 @@ + (UIView *)build:(WKWebView *)component withJSON:(NSDictionary *)json withOptio component.backgroundColor = [UIColor clearColor]; if (json[@"text"] && ![[NSNull null] isEqual:json[@"text"]]) { - // Remember to add // if you want to display properly NSString * html = [json[@"text"] description]; NSString * lowerCaseHtml = [html lowercaseString]; - - if(![lowerCaseHtml containsString:@"viewport"] && ![lowerCaseHtml - containsString:@"initial-scale"]) - { - DTLogWarning(@"html not found. Display could be not properly rendered in html component. Forcing initial-scale=1.0."); - + + if (![lowerCaseHtml containsString:@"viewport"] && ![lowerCaseHtml + containsString:@"initial-scale"]) { + DTLogWarning (@"html not found. Display could be not properly rendered in html component. Forcing initial-scale=1.0."); + NSRange headRange = [[html lowercaseString] rangeOfString:@""]; - DTLogDebug(@"Range location %d length %d", headRange.location, headRange.length); + DTLogDebug (@"Range location %d length %d", headRange.location, headRange.length); - if(headRange.location != NSNotFound) { - + if (headRange.location != NSNotFound) { NSString * head = [[html substringToIndex:headRange.location] stringByAppendingString:@""]; - - DTLogDebug(@"Head", head); - + + DTLogDebug (@"Head", head); + NSString * body = [html substringFromIndex:(headRange.location + @"".length)]; - - DTLogDebug(@"Body", body); - + + DTLogDebug (@"Body", body); + html = [NSString stringWithFormat:@"%@%@", head, body]; } - } - - DTLogDebug(@"Rendering HTML Component %@", html); - + + DTLogDebug (@"Rendering HTML Component %@", html); + [component loadHTMLString:html baseURL:nil]; - + component.scrollView.scrollEnabled = NO; //component.delegate = [self self]; @@ -114,7 +106,6 @@ + (UIView *)build:(WKWebView *)component withJSON:(NSDictionary *)json withOptio // user interaction enable/disable => disabled by default component.userInteractionEnabled = NO; - if (json[@"action"]) { // if there's an 'action' attribute, delegate the event handling to this component @@ -140,7 +131,7 @@ + (UIView *)build:(WKWebView *)component withJSON:(NSDictionary *)json withOptio } + (void)actionButtonClicked:(UIButton *)sender { - DTLogDebug(@"sender.payload = %@", sender.payload); + DTLogDebug (@"sender.payload = %@", sender.payload); if (sender.payload && sender.payload[@"action"]) { [[Jason client] call:sender.payload[@"action"]]; diff --git a/xcode/Jasonette/Components/image/JasonImageComponent.m b/xcode/Jasonette/Components/image/JasonImageComponent.m index 3b92292a..777ae84a 100644 --- a/xcode/Jasonette/Components/image/JasonImageComponent.m +++ b/xcode/Jasonette/Components/image/JasonImageComponent.m @@ -80,16 +80,16 @@ + (UIView *)build:(UIImageView *)component withJSON:(NSDictionary *)json withOpt placeholderImage:placeholder_image completed:^(UIImage * i, NSError * error, SDImageCacheType cacheType, NSURL * imageURL) { if (!error) { - JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; - - if (style[@"color"]) { - NSString * colorHex = style[@"color"]; - UIColor * c = [JasonHelper colorwithHexString:colorHex - alpha:1.0]; - UIImage * image = [i imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - [component setTintColor:c]; - [component setImage:image]; - } + JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; + + if (style[@"color"]) { + NSString * colorHex = style[@"color"]; + UIColor * c = [JasonHelper colorwithHexString:colorHex + alpha:1.0]; + UIImage * image = [i imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + [component setTintColor:c]; + [component setImage:image]; + } } }]; } @@ -108,7 +108,7 @@ + (UIView *)build:(UIImageView *)component withJSON:(NSDictionary *)json withOpt // don't do anything about the height, it will be handled in JasonComponent } else { if (!style[@"height"]) { - // Width is set but height is not + // Width is set but height is not CGFloat aspectRatioMult; if (JasonComponentFactory.imageLoaded[url]) { @@ -139,7 +139,7 @@ + (UIView *)build:(UIImageView *)component withJSON:(NSDictionary *)json withOpt // don't do anything about the width, it will be handled in JasonComponent } else { if (!style[@"width"]) { - // Height is set but width is not + // Height is set but width is not CGFloat aspectRatioMult; if (JasonComponentFactory.imageLoaded[url]) { diff --git a/xcode/Jasonette/Components/map/JasonMapComponent.m b/xcode/Jasonette/Components/map/JasonMapComponent.m index 8deb28ee..e354168b 100644 --- a/xcode/Jasonette/Components/map/JasonMapComponent.m +++ b/xcode/Jasonette/Components/map/JasonMapComponent.m @@ -16,6 +16,7 @@ + (UIView *)build:(MKMapView *)component withJSON:(NSDictionary *)json withOptio // Map Style NSDictionary * style = json[@"style"]; + component.mapType = MKMapTypeStandard; if (style && style[@"type"]) { @@ -119,6 +120,7 @@ + (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id = 14.5 + */ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface JasonATTrackingManager : NSObject + ++ (void) showWithSettings: (NSDictionary *) settings; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Jasonette/Core/AppDelegate/ATTrackingManager/JasonATTrackingManager.m b/xcode/Jasonette/Core/AppDelegate/ATTrackingManager/JasonATTrackingManager.m new file mode 100644 index 00000000..6d16f49e --- /dev/null +++ b/xcode/Jasonette/Core/AppDelegate/ATTrackingManager/JasonATTrackingManager.m @@ -0,0 +1,33 @@ +// +// JasonATTrackingManager.m +// Jasonette +// +// Created by Jasonelle Team on 17-06-21. +// Copyright © 2021 Jasonette. All rights reserved. +// + +#import "JasonATTrackingManager.h" +#import "JasonLogger.h" +#import + +@implementation JasonATTrackingManager + ++ (void) showWithSettings: (NSDictionary *) settings { + + DTLogDebug(@"Checking ATTracking"); + + if (@available(iOS 14, *)) { + BOOL trackingEnabled = [settings[@"tracking_enabled"] boolValue]; + if (trackingEnabled) { + [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { + DTLogDebug (@"ATTracking status %d", status); + }]; + } else { + DTLogDebug (@"ATTracking is disabled."); + } + } else { + DTLogDebug(@"iOS < 14.5 ATTracking not needed."); + } +} + +@end diff --git a/xcode/Jasonette/Core/AppDelegate/JasonAppDelegate.m b/xcode/Jasonette/Core/AppDelegate/JasonAppDelegate.m index 20e6d75c..af41d452 100644 --- a/xcode/Jasonette/Core/AppDelegate/JasonAppDelegate.m +++ b/xcode/Jasonette/Core/AppDelegate/JasonAppDelegate.m @@ -7,6 +7,7 @@ #import "JasonAppDelegate.h" #import "JasonLogger.h" #import "JasonNSClassFromString.h" +#import "JasonATTrackingManager.h" static NSURL * _launchURL; static NSArray * _services; @@ -211,6 +212,9 @@ + (BOOL) application:(UIApplication *)application DTLogInfo (@"Begin Building Screen"); [[Jason client] start:nil]; + + [JasonATTrackingManager showWithSettings:[[Jason client] getSettings]]; + return YES; } @@ -317,20 +321,30 @@ + (void) application:(UIApplication *)application + (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - NSString * device_token = [[NSString alloc]initWithFormat:@"%@", - [[[deviceToken description] - stringByTrimmingCharactersInSet:[NSCharacterSet - characterSetWithCharactersInString:@"<>"]] - stringByReplacingOccurrencesOfString:@" " - withString:@""]]; + // Device token can be have variable length. + // Also using [deviceToken description] is not a good practice (description can change in the future) + // Solution based on this answer https://stackoverflow.com/a/16411517 - DTLogInfo (@"Got Device Token"); - DTLogDebug (@"Got Device Token %@", device_token); + const char * data = [deviceToken bytes]; + NSMutableString * token = [@"" mutableCopy]; + NSMutableString * tokenLowerCase = [@"" mutableCopy]; + + for (NSUInteger i = 0; i < deviceToken.length; i++) { + [token appendFormat:@"%02.2hhX", data[i]]; + [tokenLowerCase appendFormat:@"%02.2hhx", data[i]]; + } + + NSDictionary * params = @{ + @"token": token, + @"tokenlower": tokenLowerCase + }; + + DTLogDebug (@"Got Device Token %@ %@", params, deviceToken); [[NSNotificationCenter defaultCenter] postNotificationName:@"onRemoteNotificationDeviceRegistered" object:nil - userInfo:@{ @"token": device_token }]; + userInfo:params]; } + (void) application:(UIApplication *)application diff --git a/xcode/Jasonette/Core/Components/Factory/JasonComponentFactory.m b/xcode/Jasonette/Core/Components/Factory/JasonComponentFactory.m index 77144619..2c5da6fc 100644 --- a/xcode/Jasonette/Core/Components/Factory/JasonComponentFactory.m +++ b/xcode/Jasonette/Core/Components/Factory/JasonComponentFactory.m @@ -102,6 +102,7 @@ + (NSMutableDictionary *)applyStylesheet:(NSDictionary *)json } NSMutableDictionary * stylizedComponent = [json mutableCopy]; + stylizedComponent[@"style"] = styles; DTLogInfo (@"End Stylesheet"); diff --git a/xcode/Jasonette/Core/Components/JasonComponent/JasonComponent.m b/xcode/Jasonette/Core/Components/JasonComponent/JasonComponent.m index 68244266..f1298aef 100644 --- a/xcode/Jasonette/Core/Components/JasonComponent/JasonComponent.m +++ b/xcode/Jasonette/Core/Components/JasonComponent/JasonComponent.m @@ -220,11 +220,11 @@ + (void)stylize:(NSDictionary *)json DTLogInfo (@"Applying Align %@", style[@"align"]); NSDictionary * alignment_map = @{ - @"left": @(NSTextAlignmentLeft), - @"center": @(NSTextAlignmentCenter), - @"right": @(NSTextAlignmentRight), - @"justified": @(NSTextAlignmentJustified), - @"natural": @(NSTextAlignmentNatural) + @"left": @(NSTextAlignmentLeft), + @"center": @(NSTextAlignmentCenter), + @"right": @(NSTextAlignmentRight), + @"justified": @(NSTextAlignmentJustified), + @"natural": @(NSTextAlignmentNatural) }; if ([el respondsToSelector:@selector(textAlignment)]) { diff --git a/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.h b/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.h old mode 100755 new mode 100644 index 8b5fb0c3..f98117cd --- a/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.h +++ b/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.h @@ -86,8 +86,8 @@ @interface INTUAutoRemoveObserver : NSObject // Notification Center observers -+(void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender; ++ (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender; -+(void)addObserver:(id)notificationObserver forName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification * note))block; ++ (void)addObserver:(id)notificationObserver forName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification * note))block; @end diff --git a/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.m b/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.m old mode 100755 new mode 100644 index b45be5b1..28a8ba80 --- a/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.m +++ b/xcode/Jasonette/Core/Helpers/INTUAutoRemoveObserver/INTUAutoRemoveObserver.m @@ -34,7 +34,7 @@ @interface INTUAutoRemoveObserver () @property (nonatomic, unsafe_unretained) id notificationObserver; @property (nonatomic, assign) id notificationSender; -@property (nonatomic, copy) NSString* notificationName; +@property (nonatomic, copy) NSString * notificationName; // This is to store a reference to any block created observer @property (nonatomic, strong) id blockObserver; @@ -43,52 +43,51 @@ @interface INTUAutoRemoveObserver () @implementation INTUAutoRemoveObserver -+(void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender ++ (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender { - // Create the remover object - INTUAutoRemoveObserver* remover = [[INTUAutoRemoveObserver alloc] init]; - remover.notificationObserver = notificationObserver; - remover.notificationName = notificationName; - remover.notificationSender = notificationSender; - - // Keep this object around for the lifetime of the observer - objc_setAssociatedObject(notificationObserver, (__bridge const void *)(remover), remover, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - // Now register for the notification - [[NSNotificationCenter defaultCenter] addObserver:notificationObserver - selector:notificationSelector - name:notificationName - object:notificationSender]; + // Create the remover object + INTUAutoRemoveObserver * remover = [[INTUAutoRemoveObserver alloc] init]; + + remover.notificationObserver = notificationObserver; + remover.notificationName = notificationName; + remover.notificationSender = notificationSender; + + // Keep this object around for the lifetime of the observer + objc_setAssociatedObject (notificationObserver, (__bridge const void *)(remover), remover, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + // Now register for the notification + [[NSNotificationCenter defaultCenter] addObserver:notificationObserver + selector:notificationSelector + name:notificationName + object:notificationSender]; } -+(void)addObserver:(id)notificationObserver forName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block; -{ - // Create the remover object - INTUAutoRemoveObserver* remover = [[INTUAutoRemoveObserver alloc] init]; - - id blockObserver = [[NSNotificationCenter defaultCenter] addObserverForName:name - object:obj - queue:queue - usingBlock:block]; - - // Keep this object around for the lifetime of the notificationObserver object - objc_setAssociatedObject(notificationObserver, (__bridge const void *)(remover), remover, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - remover.blockObserver = blockObserver; ++ (void)addObserver:(id)notificationObserver forName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *))block; { + // Create the remover object + INTUAutoRemoveObserver * remover = [[INTUAutoRemoveObserver alloc] init]; + + id blockObserver = [[NSNotificationCenter defaultCenter] addObserverForName:name + object:obj + queue:queue + usingBlock:block]; + + // Keep this object around for the lifetime of the notificationObserver object + objc_setAssociatedObject (notificationObserver, (__bridge const void *)(remover), remover, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + remover.blockObserver = blockObserver; } --(void)dealloc +- (void)dealloc { - if ( self.blockObserver ) { - // A block based notification center observer - [[NSNotificationCenter defaultCenter] removeObserver:self.blockObserver]; - } - else { - // A selector based notification center observer - [[NSNotificationCenter defaultCenter] removeObserver:self.notificationObserver - name:self.notificationName - object:self.notificationSender]; - } + if (self.blockObserver) { + // A block based notification center observer + [[NSNotificationCenter defaultCenter] removeObserver:self.blockObserver]; + } else { + // A selector based notification center observer + [[NSNotificationCenter defaultCenter] removeObserver:self.notificationObserver + name:self.notificationName + object:self.notificationSender]; + } } @end diff --git a/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.h b/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.h index 7a7f09b2..3cbc4642 100644 --- a/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.h +++ b/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.h @@ -10,6 +10,7 @@ #import "UICKeyChainStore.h" #import "JasonParser.h" @interface JasonHelper : NSObject + NS_ASSUME_NONNULL_BEGIN + (NSDate *)dateWithISO8601String:(NSString *)dateString; + (NSDate *)dateFromString:(NSString *)dateString withFormat:(NSString *)dateFormat; + (MFMessageComposeViewController *)sendSMS:(NSString *)message to:(NSString *)phone; @@ -48,5 +49,6 @@ + (id)getPlistSettings:(NSString *)key; + (id) loadErrorJson; -+ (nullable NSDictionary *) hjson_to_json: (nonnull NSString *) content; ++ (nullable NSDictionary *)hjson_to_json:(nonnull NSString *)content; +NS_ASSUME_NONNULL_END @end diff --git a/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.m b/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.m index f774505f..a8f1af81 100644 --- a/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.m +++ b/xcode/Jasonette/Core/Helpers/JasonHelper/JasonHelper.m @@ -32,9 +32,11 @@ + (NSDate *)dateFromString:(NSString *)dateString NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; + [dateFormatter setLocale:locale]; NSDate * date = [dateFormatter dateFromString:dateString]; + return date; } @@ -46,6 +48,7 @@ + (MFMessageComposeViewController *)sendSMS:(NSString *)message to:(NSString *)p NSArray * recipents = @[phone]; MFMessageComposeViewController * messageController = [[MFMessageComposeViewController alloc] init]; + [messageController setRecipients:recipents]; [messageController setBody:message]; [messageController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; @@ -183,13 +186,13 @@ + (UIColor *)colorwithHexString:(NSString *)hexStr alpha:(CGFloat)alpha // Less common colors NSDictionary * colors = @{ - @"red": [UIColor redColor], - @"green": [UIColor greenColor], - @"yellow": [UIColor yellowColor], - @"blue": [UIColor blueColor], - @"magenta": [UIColor magentaColor], - @"gray": [UIColor grayColor], - @"orange": [UIColor orangeColor] + @"red": [UIColor redColor], + @"green": [UIColor greenColor], + @"yellow": [UIColor yellowColor], + @"blue": [UIColor blueColor], + @"magenta": [UIColor magentaColor], + @"gray": [UIColor grayColor], + @"orange": [UIColor orangeColor] }; UIColor * color = colors[colorName]; @@ -244,6 +247,7 @@ + (UIImage *)scaleImage:(UIImage *)image ToSize:(CGSize)newSize { UIGraphicsBeginImageContextWithOptions (newSize, NO, 0); [image drawInRect:scaledImageRect]; UIImage * scaledImage = UIGraphicsGetImageFromCurrentImageContext (); + UIGraphicsEndImageContext (); return scaledImage; @@ -327,6 +331,7 @@ + (UIImage *)colorize:(UIImage *)image into:(UIColor *)color { UIGraphicsBeginImageContextWithOptions (image.size, YES, [[UIScreen mainScreen] scale]); CGRect contextRect; + contextRect.origin.x = 0.0f; contextRect.origin.y = 0.0f; contextRect.size = [image size]; @@ -334,6 +339,7 @@ + (UIImage *)colorize:(UIImage *)image into:(UIColor *)color { // Retrieve source image and begin image context CGSize itemImageSize = [image size]; CGPoint itemImagePosition; + itemImagePosition.x = ceilf ((contextRect.size.width - itemImageSize.width) / 2); itemImagePosition.y = ceilf ((contextRect.size.height - itemImageSize.height) ); @@ -364,6 +370,7 @@ + (UIImage *)colorize:(UIImage *)image into:(UIColor *)color { CGContextEndTransparencyLayer (c); UIImage * img = UIGraphicsGetImageFromCurrentImageContext (); + UIGraphicsEndImageContext (); return img; } @@ -418,6 +425,7 @@ + (NSString *)stringify:(id)value writerWithMaxDepth:0 humanReadable:NO sortKeys:YES]; + @try { NSString * ret = [writer stringWithObject:value]; @@ -533,7 +541,8 @@ + (NSString *)prependProtocolToUrl:(NSString *)url { + (void)setStatusBarBackgroundColor:(UIColor *)color { - if (@available(iOS 13, *)) {} else { + if (@available(iOS 13, *)) { + } else { UIView * statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] @@ -588,6 +597,7 @@ + (BOOL)isURL:(NSURL *)url equivalentTo:(NSString *)urlString { NSURLComponents * urlComponents2 = [[NSURLComponents alloc] initWithURL:[NSURL URLWithString:urlString] resolvingAgainstBaseURL:NO]; + urlComponents2.query = nil; // Strip out query parameters. return [urlComponents.string isEqualToString:urlComponents2.string]; } @@ -772,6 +782,7 @@ + (UIImage *)takescreenshot } UIImage * image = UIGraphicsGetImageFromCurrentImageContext (); + UIGraphicsEndImageContext (); return image; } @@ -1074,53 +1085,52 @@ + (id)loadErrorJson return [JasonHelper read_local_json:@"file://error.json"]; } - -+ (nullable NSDictionary *) hjson_to_json: (nonnull NSString *) content { - ++ (nullable NSDictionary *)hjson_to_json:(nonnull NSString *)content { NSStringEncoding encoding; NSError * error = nil; - + JSContext * context = [JSContext new]; + [context setExceptionHandler:^(JSContext * context, JSValue * value) { - DTLogWarning (@"%@", value); - }]; - + DTLogWarning (@"%@", value); + }]; + [context evaluateScript:@"var console = {};"]; context[@"console"][@"log"] = ^(NSString * message) { DTLogDebug (@"JS: %@", message); }; - + NSString * renderfile = [[NSBundle mainBundle] pathForResource:@"hjson" ofType:@"js"]; NSString * renderjs = [NSString stringWithContentsOfFile:renderfile usedEncoding:&encoding error:&error]; - - DTLogDebug(@"Loading hjson.js"); + + DTLogDebug (@"Loading hjson.js"); [context evaluateScript:renderjs]; - + JSValue * render = context[@"to_json"]; JSValue * val = [render callWithArguments:@[content]]; NSString * json = [val toString]; - - DTLogDebug(@"%@", json); - + + DTLogDebug (@"%@", json); + error = nil; - + NSDictionary * result = [NSJSONSerialization - JSONObjectWithData:[json - dataUsingEncoding:NSUTF8StringEncoding] - options:kNilOptions - error:&error]; - - - - - if(error) { - DTLogWarning(@"%@", error); + JSONObjectWithData:[json + dataUsingEncoding:NSUTF8StringEncoding] + options:kNilOptions + error:&error]; + + + + + if (error) { + DTLogWarning (@"%@", error); return nil; } - + return result; } @@ -1150,12 +1160,13 @@ + (id)read_local_json:(NSString *)url if (error) { NSString * content = [JasonHelper read_local_file:json]; - if(content) { - DTLogDebug(@"Trying hjson.js"); + + if (content) { + DTLogDebug (@"Trying hjson.js"); result = [JasonHelper hjson_to_json:content]; } - - if(!result) { + + if (!result) { result = [JasonHelper loadErrorJson]; } } @@ -1172,6 +1183,7 @@ + (NSString *)normalized_url:(NSString *)url forOptions:(id)options { normalized_url = [normalized_url stringByAppendingString:[NSString stringWithFormat:@"|%@", options]]; NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@"[/:]" options:NSRegularExpressionCaseInsensitive error:nil]; + normalized_url = [regex stringByReplacingMatchesInString:normalized_url options:0 range:NSMakeRange (0, [normalized_url length]) withTemplate:@"_"]; normalized_url = [[normalized_url componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; return normalized_url; diff --git a/xcode/Jasonette/Core/Jason/Jason.h b/xcode/Jasonette/Core/Jason/Jason.h index 133125ca..9f13d010 100644 --- a/xcode/Jasonette/Core/Jason/Jason.h +++ b/xcode/Jasonette/Core/Jason/Jason.h @@ -49,6 +49,8 @@ - (Jason *) attach:(JasonViewController *)viewController; - (Jason *)detach:(JasonViewController *)viewController; +- (NSDictionary *) getSettings; + - (void) cancel; - (void) ok; - (void)ok:(NSDictionary *)result; diff --git a/xcode/Jasonette/Core/Jason/Jason.m b/xcode/Jasonette/Core/Jason/Jason.m index 739002ef..d87f6c34 100644 --- a/xcode/Jasonette/Core/Jason/Jason.m +++ b/xcode/Jasonette/Core/Jason/Jason.m @@ -147,20 +147,20 @@ - (void)loadViewByFile:(NSString *)url [self include:jsonResponseObject andCompletionHandler:^(id res) - { - id result = @{}; - - if (res[@"$jason"]) { - result = res[@"$jason"]; - } else { - result = [JasonHelper loadErrorJson][@"$jason"]; - DTLogError (@"Missing $jason property in \n%@\n\n", res); - } - - self->VC.original = @{ @"$jason": result }; - [self drawViewFromJason:self->VC.original - asFinal:final]; - }]; + { + id result = @{}; + + if (res[@"$jason"]) { + result = res[@"$jason"]; + } else { + result = [JasonHelper loadErrorJson][@"$jason"]; + DTLogError (@"Missing $jason property in \n%@\n\n", res); + } + + self->VC.original = @{ @"$jason": result }; + [self drawViewFromJason:self->VC.original + asFinal:final]; + }]; } #pragma mark - Jason Core API (USE ONLY THESE METHODS TO ACCESS Jason Core!) @@ -179,39 +179,36 @@ - (void)start:(NSDictionary *)href JasonAppDelegate * app = (JasonAppDelegate *)[[UIApplication sharedApplication] delegate]; NSDictionary * plist = [self getSettings]; BOOL appendNonce = [plist[@"append_nonce_to_url"] boolValue]; - - DTLogDebug((appendNonce ? @"Nonce Activated" : @"Nonce Inactive")); - + + DTLogDebug ((appendNonce ? @"Nonce Activated" : @"Nonce Inactive")); + ROOT_URL = plist[@"url"]; NSURLComponents * components = [[NSURLComponents alloc] initWithURL:[NSURL URLWithString:ROOT_URL] - resolvingAgainstBaseURL:NO]; - - if(appendNonce && components) { - - if(![components.scheme isEqualToString:@"file"]) { - - DTLogDebug(@"Adding Nonce"); - + resolvingAgainstBaseURL :NO]; + + if (appendNonce && components) { + if (![components.scheme isEqualToString:@"file"]) { + DTLogDebug (@"Adding Nonce"); + NSURLQueryItem * nonce = [[NSURLQueryItem alloc] initWithName:@"jasonnonce" value:[NSString stringWithFormat:@"%u%f", - arc4random_uniform(10000) + 1, - CFAbsoluteTimeGetCurrent()]]; - + arc4random_uniform (10000) + 1, + CFAbsoluteTimeGetCurrent ()]]; + NSMutableArray * items = [NSMutableArray arrayWithCapacity:[components.queryItems count] + 1]; [items addObject:nonce]; - - [components setQueryItems: items]; - + + [components setQueryItems:items]; + ROOT_URL = [components.URL absoluteString]; - } else { - DTLogDebug(@"file:// scheme used. nonce not added."); + DTLogDebug (@"file:// scheme used. nonce not added."); } } - + DTLogDebug (@"Root Url %@", ROOT_URL); if (!ROOT_URL || [ROOT_URL isEqualToString:@""] || !components) { @@ -260,7 +257,7 @@ - (void)start:(NSDictionary *)href } if (href[@"loading"]) { - vc.loading = href[@"loading"]; + vc.loading = [href[@"loading"] boolValue]; DTLogDebug (@"Is Loading? %d", vc.loading); } } @@ -454,11 +451,11 @@ - (void)loading:(BOOL)turnon { if (turnon) { [JDStatusBarNotification addStyleNamed:@"SBStyle1" prepare:^JDStatusBarStyle *(JDStatusBarStyle * style) { - style.barColor = self->navigationController.navigationBar.backgroundColor; - style.textColor = self->navigationController.navigationBar.tintColor; - style.animationType = JDStatusBarAnimationTypeFade; - return style; - }]; + style.barColor = self->navigationController.navigationBar.backgroundColor; + style.textColor = self->navigationController.navigationBar.tintColor; + style.animationType = JDStatusBarAnimationTypeFade; + return style; + }]; [JDStatusBarNotification showWithStatus:@"Loading" styleName:@"SBStyle1"]; if (navigationController.navigationBar.barStyle == UIStatusBarStyleDefault) { @@ -505,6 +502,7 @@ - (void)href { VC.callback = memory._stack; NSDictionary * href = [self options]; + memory._stack = @{}; // empty stack before visiting [self go:href]; } @@ -656,10 +654,10 @@ - (void)menu { [self->menu_component close]; if (item_action) { - [memory set_stack:item_action]; - [self exec]; + [memory set_stack:item_action]; + [self exec]; } else if (item_href) { - [self go:item_href]; + [self go:item_href]; } }]; @@ -861,7 +859,7 @@ - (void)lambda { args = [self filloutTemplate:args withData:memory._register]; memory._register = @{ @"$jason": args }; } else { - // do nothing. keep the register and propgate + // do nothing. keep the register and propgate } id lambda = [[VC valueForKey:@"events"] valueForKey:name]; @@ -1159,6 +1157,64 @@ - (void)scroll { # pragma mark - View initialization & teardown +- (NSDictionary *) getMethodForUrl: (NSString *) url { + // Check for [POST|GET|PUT] method in Url + NSString * pattern = @"\\[(POST|GET|PUT|HEAD|DELETE)\\]"; + NSError * regexError = nil; + + NSRegularExpression * regex = [NSRegularExpression + regularExpressionWithPattern:pattern + options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators + error:®exError]; + + if (regexError) { + DTLogWarning (@"Regex Error in Extracting URL pattern %@ error %@", pattern, regexError); + } + + NSArray * matches = [regex matchesInString:url + options:NSMatchingWithoutAnchoringBounds + range:NSMakeRange (0, url.length)]; + + + NSString * parsed = url; + NSString * method = @"get"; + + + NSTextCheckingResult * match = [matches firstObject]; + NSRange range; + + if(match) { + range = [match rangeAtIndex:0]; + + if(range.length > 0) { + parsed = [url substringWithRange:NSMakeRange(0, url.length - range.length)]; + + method = [[[url substringWithRange:range] + lowercaseString] + stringByTrimmingCharactersInSet:[NSCharacterSet + characterSetWithCharactersInString:@"[]"]]; + } + + } + + BOOL shouldDownload = YES; + // if the url contains brackets [] and its the same as the original + // it means it maybe has wrong format + // so its better to not download it or it could crash the app + if([parsed isEqualToString:url] && ([url containsString:@"["] || [url containsString:@"]"])) { + DTLogDebug(@"Mixin Parsed: %@ is equal to original url %@. Maybe is syntax error. Omitting download.", parsed, url); + parsed = @""; + shouldDownload = NO; + } + + return @{ + @"original": url, + @"parsed": parsed, + @"method": method, + @"shouldDownload": @(shouldDownload) + }; +} + - (void) include:(id)json andCompletionHandler:(void (^)(id obj))callback { @@ -1175,6 +1231,9 @@ - (void) include:(id)json NSString * pattern = @"\"([+@])\"[ ]*:[ ]*\"([^$\"@]+@)?([^$\"]+)\""; NSMutableSet * urlSet = [NSMutableSet new]; + + NSMutableDictionary * parsedMixinItems = [@{} mutableCopy]; + NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators @@ -1208,10 +1267,18 @@ - (void) include:(id)json if (group3.length > 0) { // Group 3 is for the URL NSString * url = [j substringWithRange:group3]; - - if (!VC.requires[url]) { - DTLogDebug (@"Adding object to url set %@", url); - [urlSet addObject:url]; + + NSDictionary * params = [self getMethodForUrl:url]; + + DTLogDebug(@"Mixin Params: %@", params); + + if([params[@"shouldDownload"] boolValue]) { + if (!VC.requires[params[@"parsed"]]) { + DTLogDebug (@"Adding Mixin URL %@", url); + parsedMixinItems[params[@"parsed"]] = params; + parsedMixinItems[url] = params; + [urlSet addObject:params[@"parsed"]]; + } } } } @@ -1307,21 +1374,52 @@ - (void) include:(id)json // 6. Start request #pragma message "Start Request in Include" - [manager GET:url - parameters:parameters - headers:nil - progress:^(NSProgress * _Nonnull downloadProgress) { } - success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) - { - self->VC.requires[url] = responseObject; - dispatch_group_leave (requireGroup); + + DTLogDebug(@"Mixin Fetching %@ With Params %@", url, parsedMixinItems[url]); + + NSString * method = parsedMixinItems[url][@"method"]; + NSString * originalUrl = parsedMixinItems[url][@"original"]; + + // TODO: Maybe add a better handler and more http methods and params + if([method isEqualToString:@"post"]) { + + DTLogDebug(@"Fetching with POST"); + + [manager POST:url + parameters:parameters + headers:nil + progress:^(NSProgress * _Nonnull downloadProgress) { } + success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) + { + self->VC.requires[originalUrl] = responseObject; + DTLogDebug(@"VC.requires %@", self->VC.requires); + dispatch_group_leave (requireGroup); + } + failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) + { + DTLogWarning (@"Error Fetching JSON From Url %@ %@", url, error); + self->VC.requires[originalUrl] = @{}; + dispatch_group_leave (requireGroup); + }]; + } else { + DTLogDebug(@"Fetching with GET"); + [manager GET:url + parameters:parameters + headers:nil + progress:^(NSProgress * _Nonnull downloadProgress) { } + success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) + { + self->VC.requires[originalUrl] = responseObject; + DTLogDebug(@"VC.requires %@", self->VC.requires); + dispatch_group_leave (requireGroup); + } + failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) + { + DTLogWarning (@"Error Fetching JSON From Url %@ %@", url, error); + self->VC.requires[originalUrl] = @{}; + dispatch_group_leave (requireGroup); + }]; } - failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) - { - DTLogWarning (@"Error Fetching JSON From Url %@ %@", url, error); - self->VC.requires[url] = @{}; - dispatch_group_leave (requireGroup); - }]; } } @@ -1341,10 +1439,12 @@ - (void) include:(id)json callback (resolved); } +#pragma mark - $require action - (void)require { DTLogInfo (@"Require Json"); NSString * origin_url = VC.url; + DTLogDebug (@"%@", origin_url); /* @@ -1384,11 +1484,11 @@ - (void)require dispatch_group_enter (requireGroup); if ([url containsString:@"file://"]) { - // local + // local return_value[url] = [JasonHelper read_local_json:url]; dispatch_group_leave (requireGroup); } else { - // 3. Setup networking + // 3. Setup networking AFHTTPSessionManager * manager = [JasonNetworking manager]; AFJSONResponseSerializer * jsonResponseSerializer = [JasonNetworking serializer]; @@ -1441,15 +1541,15 @@ - (void)require headers:nil progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) - { - return_value[url] = responseObject; - dispatch_group_leave (requireGroup); - } + { + return_value[url] = responseObject; + dispatch_group_leave (requireGroup); + } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) - { - DTLogError (@"Failed Requiring %@ %@", url, error); - dispatch_group_leave (requireGroup); - }]; + { + DTLogError (@"Failed Requiring %@ %@", url, error); + dispatch_group_leave (requireGroup); + }]; } } } @@ -1486,11 +1586,14 @@ - (void)require }); } +#pragma mark - Mixin - (id)resolve_remote_reference:(NSString *)json { - DTLogDebug (@"Resolving Remote References"); + DTLogInfo (@"Remote Reference Mixin"); + DTLogDebug (@"Resolving Remote References For Json %@", json); + NSError * error; - + // Mixins can be used with '@' or '+' symbol // Remote url with path - convert "@": "blah.blah@https://www.google.com" to "{{#include $root[\"https://www.google.com\"].blah.blah}}": {} // The pattern leaves out the pattern where it starts with "$" because that's a $document and will be resolved by resolve_local_reference NSString * remote_pattern_with_path = @"\"([+@])\"[ ]*:[ ]*\"(([^$\"@]+)(@))([^\"]+)\""; @@ -1532,7 +1635,8 @@ - (id)resolve_remote_reference:(NSString *)json - (id)resolve_local_reference:(NSString *)json { - DTLogInfo (@"Resolving Local References"); + DTLogInfo (@"Local Reference Mixin"); + DTLogDebug (@"Resolving Local References For Json %@", json); // Local - convert "@": "$document.blah.blah" to "{{#include $root.$document.blah.blah}}": {} NSError * error; @@ -1547,19 +1651,27 @@ - (id)resolve_local_reference:(NSString *)json options:kNilOptions range:NSMakeRange (0, json.length) withTemplate:@"\"{{#include \\$root.$1}}\": {}"]; - + + id tpl = [JasonHelper objectify:converted]; NSMutableDictionary * refs = [VC.requires mutableCopy]; + refs[@"$document"] = VC.original; + + DTLogDebug(@"TPL %@ Refs", tpl, refs); id include_resolved = [JasonParser parse:refs with:tpl]; + VC.original = include_resolved; + + DTLogDebug(@"Resolved References %@", include_resolved); return include_resolved; } +#pragma mark - Lifecycle - (Jason *)detach:(JasonViewController *)viewController { // Need to clean up before leaving the view @@ -1609,12 +1721,12 @@ - (Jason *)detach:(JasonViewController *)viewController DTLogDebug (@"$webcontainer found"); if (VC.isMovingFromParentViewController || VC.isBeingDismissed) { - // Web container AND coming back from the child view therefore it's ok to kill the child view's web container agent + // Web container AND coming back from the child view therefore it's ok to kill the child view's web container agent DTLogDebug (@"Web container AND coming back from the child view therefore it's ok to kill the child view's web container agent"); [agent clear:key forVC:VC]; } else { - // Otherwise it could be: - // 1. Going from view A to view B (Don't kill view A's agent) + // Otherwise it could be: + // 1. Going from view A to view B (Don't kill view A's agent) DTLogDebug (@"Going from view A to view B (Don't kill view A's agent)"); DTLogDebug (@"Not clearing $webcontainer"); } @@ -1690,7 +1802,7 @@ - (Jason *)attach:(JasonViewController *)viewController { header_needs_refresh = YES; if (VC.rendered[@"nav"]) { - // Deprecated + // Deprecated [self setupHeader:VC.rendered[@"nav"]]; } else if (VC.rendered[@"header"]) { [self setupHeader:VC.rendered[@"header"]]; @@ -1734,16 +1846,16 @@ - (Jason *)attach:(JasonViewController *)viewController { * ********************************************************************************************************/ if (VC.rendered && rendered_page) { - /********************************************************************************************************* - * - * We need to redraw the already rendered final result instead of the pre-rendered markup - * - * For example, in: {"head": {"title": "{{$params.name}}", ...}} - * It will draw "{{$params.name}}" as the title of the nav bar if we don't draw from the already rendered markup. - * - ********************************************************************************************************/ + /********************************************************************************************************* + * + * We need to redraw the already rendered final result instead of the pre-rendered markup + * + * For example, in: {"head": {"title": "{{$params.name}}", ...}} + * It will draw "{{$params.name}}" as the title of the nav bar if we don't draw from the already rendered markup. + * + ********************************************************************************************************/ if (VC.rendered[@"nav"]) { - // Deprecated + // Deprecated [self setupHeader:VC.rendered[@"nav"]]; } else if (VC.rendered[@"header"]) { [self setupHeader:VC.rendered[@"header"]]; @@ -1761,11 +1873,11 @@ - (Jason *)attach:(JasonViewController *)viewController { if (VC.rendered[@"footer"] && VC.rendered[@"footer"][@"tabs"]) { if (![old_tabs isEqualToDictionary:VC.rendered[@"footer"][@"tabs"]]) { - // Use this + // Use this [self setupTabBar:VC.rendered[@"footer"][@"tabs"]]; } } else { - // Deprecated + // Deprecated if (![old_tabs isEqualToDictionary:VC.rendered[@"tabs"]]) { [self setupTabBar:VC.rendered[@"tabs"]]; } @@ -1798,12 +1910,12 @@ - (Jason *)attach:(JasonViewController *)viewController { } } - // set "rendered_page" to VC.rendered for cases when we're coming back from another view - // so that rendered_page will be always in sync even when there is no $show handler to refresh the view. + // set "rendered_page" to VC.rendered for cases when we're coming back from another view + // so that rendered_page will be always in sync even when there is no $show handler to refresh the view. rendered_page = VC.rendered; - // if the view gets updated inside onShow, the rendered_page will update automatically + // if the view gets updated inside onShow, the rendered_page will update automatically [self onShow]; } /********************************************************************************************************* @@ -1812,25 +1924,25 @@ - (Jason *)attach:(JasonViewController *)viewController { * ********************************************************************************************************/ else { - /********************************************************************************************************* - * - * If content has been loaded already, - * 1. redraw navbar - * 2. re-setup event listener - * - ********************************************************************************************************/ + /********************************************************************************************************* + * + * If content has been loaded already, + * 1. redraw navbar + * 2. re-setup event listener + * + ********************************************************************************************************/ if (VC.contentLoaded) { - // If content already loaded, - // 1. just setup the navbar so the navbar will have the correct style - // 2. trigger load events ($show or $load) + // If content already loaded, + // 1. just setup the navbar so the navbar will have the correct style + // 2. trigger load events ($show or $load) [self setupHeader:VC.nav]; [self onShow]; } - /********************************************************************************************************* - * - * If content has not been loaded yet, do a fresh reload - * - ********************************************************************************************************/ + /********************************************************************************************************* + * + * If content has not been loaded yet, do a fresh reload + * + ********************************************************************************************************/ else { if (VC.preload && VC.preload[@"style"] && VC.preload[@"style"][@"background"]) { if ([VC.preload[@"style"][@"background"] isKindOfClass:[NSDictionary class]]) { @@ -1979,14 +2091,25 @@ - (NSDictionary *)getEnv { NSDictionary * info = [[NSBundle mainBundle] infoDictionary]; NSString * version = [info objectForKey:@"CFBundleShortVersionString"]; NSString * build = [info objectForKey:(NSString *)kCFBundleVersionKey]; + dict[@"app"] = @{ @"build": build, @"version": version }; CGRect bounds = [[UIScreen mainScreen] bounds]; + dict[@"device"] = @{ - @"width": @(bounds.size.width), - @"height": @(bounds.size.height), - @"os": @{ @"name": @"ios", @"version": [[UIDevice currentDevice] systemVersion] }, - @"language": [[NSLocale preferredLanguages] objectAtIndex:0] + @"uuid": [[[UIDevice currentDevice] identifierForVendor] UUIDString], + @"width": @(bounds.size.width), + @"height": @(bounds.size.height), + @"os": @{ + @"name": [[[UIDevice currentDevice] systemName] lowercaseString], + @"version": [[UIDevice currentDevice] systemVersion] + }, + @"name": [[UIDevice currentDevice] name], + @"model": @{ + @"name": [[UIDevice currentDevice] model], + @"localized": [[UIDevice currentDevice] localizedModel] + }, + @"language": [[NSLocale preferredLanguages] objectAtIndex:0] }; NSURLComponents * components = [NSURLComponents componentsWithString:self->VC.url]; @@ -1999,8 +2122,8 @@ - (NSDictionary *)getEnv { } dict[@"view"] = @{ - @"url": self->VC.url, - @"params": params + @"url": self->VC.url, + @"params": params }; return dict; @@ -2055,6 +2178,7 @@ - (NSDictionary *)variables { } NSDictionary * env = [self getEnv]; + data_stub[@"$env"] = env; if (self->VC.current_cache) { @@ -2226,7 +2350,7 @@ - (void)reload * Handling data uri ***************************************************/ if ([self->VC.url hasPrefix:@"data:application/json"]) { - // if data uri, parse it into NSData + // if data uri, parse it into NSData NSURL * url = [NSURL URLWithString:self->VC.url]; NSData * jsonData = [NSData dataWithContentsOfURL:url]; NSError * error; @@ -2251,7 +2375,7 @@ - (void)reload AFJSONResponseSerializer * jsonResponseSerializer = [JasonNetworking serializer]; NSMutableSet * jsonAcceptableContentTypes = [NSMutableSet setWithSet:jsonResponseSerializer.acceptableContentTypes]; - // Assumes that content type is json, even the text/plain ones (Some hosting sites respond with data_type of text/plain even when it's actually a json, so we accept even text/plain as json by default) + // Assumes that content type is json, even the text/plain ones (Some hosting sites respond with data_type of text/plain even when it's actually a json, so we accept even text/plain as json by default) [jsonAcceptableContentTypes addObject:@"text/plain"]; [jsonAcceptableContentTypes addObject:@"text/html"]; @@ -2276,40 +2400,40 @@ - (void)reload progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // Ignore if the url is different - if (![JasonHelper isURL:task.originalRequest.URL - equivalentTo :self->VC.url]) { - return; + if (![JasonHelper isURL:task.originalRequest.URL + equivalentTo :self->VC.url]) { + return; } self->VC.original = responseObject; [self include:responseObject - andCompletionHandler:^(id res) - { - dispatch_async (dispatch_get_main_queue (), ^{ - self->VC.contentLoaded = NO; - - self->VC.original = @{ @"$jason": res[@"$jason"] }; - [self drawViewFromJason:self->VC.original - asFinal:YES]; - }); + andCompletionHandler:^(id res) + { + dispatch_async (dispatch_get_main_queue (), ^{ + self->VC.contentLoaded = NO; + + self->VC.original = @{ @"$jason": res[@"$jason"] }; + [self drawViewFromJason:self->VC.original + asFinal:YES]; + }); }]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) - { - if (!self->VC.offline) { - DTLogWarning (@"%@", error); - [[Jason client] loadViewByFile:@"file://error.json" - asFinal:YES]; - [[Jason client] call:@{ - @"type": @"$util.alert", - @"options": @{ - @"title": @"Debug", - @"description": [error localizedDescription] - } - }]; - } - }]; + { + if (!self->VC.offline) { + DTLogWarning (@"%@", error); + [[Jason client] loadViewByFile:@"file://error.json" + asFinal:YES]; + [[Jason client] call:@{ + @"type": @"$util.alert", + @"options": @{ + @"title": @"Debug", + @"description": [error localizedDescription] + } + }]; + } + }]; } } } @@ -2353,28 +2477,28 @@ - (void)drawViewFromJason:(NSDictionary *)jason if (body) { if (body[@"nav"]) { - // Deprecated + // Deprecated [self setupHeader:body[@"nav"]]; } else if (body[@"header"]) { - // Use this + // Use this [self setupHeader:body[@"header"]]; } else { [self setupHeader:nil]; } if (body[@"footer"] && body[@"footer"][@"tabs"]) { - // Use this + // Use this [self setupTabBar:body[@"footer"][@"tabs"]]; } else { - // Deprecated + // Deprecated [self setupTabBar:body[@"tabs"]]; } - // By default, "body" is the markup that will be rendered + // By default, "body" is the markup that will be rendered rendered_page = dom[@"body"]; } else { - // Don't remove the header and footer even if it doesn't exist yet - // and let it be overridden in $render + // Don't remove the header and footer even if it doesn't exist yet + // and let it be overridden in $render } /**************************************************************************** @@ -2387,7 +2511,7 @@ - (void)drawViewFromJason:(NSDictionary *)jason NSDictionary * body_parser = VC.parser[@"body"]; if (body_parser) { - // parse the data with the template to dynamically build the view + // parse the data with the template to dynamically build the view NSMutableDictionary * data_stub; if (VC.data) { @@ -2409,21 +2533,21 @@ - (void)drawViewFromJason:(NSDictionary *)jason if (rendered_page[@"style"] && rendered_page[@"style"][@"background"]) { if ([rendered_page[@"style"][@"background"] isKindOfClass:[NSDictionary class]]) { - // Advanced background - // example: - // "background": { - // "type": "camera", - // "options": { - // ... - // } - // } + // Advanced background + // example: + // "background": { + // "type": "camera", + // "options": { + // ... + // } + // } [self drawAdvancedBackground:rendered_page[@"style"][@"background"]]; } else { [self drawBackground:rendered_page[@"style"][@"background"]]; } } else if (rendered_page[@"background"]) { if ([rendered_page[@"background"] isKindOfClass:[NSDictionary class]]) { - // Advanced background + // Advanced background DTLogDebug (@"Detected Advanced Background"); [self drawAdvancedBackground:rendered_page[@"background"]]; } else { @@ -2541,6 +2665,10 @@ - (void)drawAdvancedBackground:(NSDictionary *)bg forVC:(JasonViewController *)v payload[@"com.jasonelle.state:stop-reloading"] = @YES; } + if (bg[@"options"]) { + payload[@"options"] = bg[@"options"]; + } + DTLogDebug (@"Loading Background with Payload %@", payload); #pragma message "JasonAgentService Setup" @@ -2807,7 +2935,7 @@ - (void)setupHead:(NSDictionary *)head { // 3. agents if (!VC.agentReady) { - // Agents must be setup ONLY once, AFTER the true view has finished loading. + // Agents must be setup ONLY once, AFTER the true view has finished loading. if (head[@"agents"] && [head[@"agents"] isKindOfClass:[NSDictionary class]] && [head[@"agents"] count] > 0) { for (NSString * key in head[@"agents"]) { JasonAgentService * agent = self.services[@"JasonAgentService"]; @@ -2851,7 +2979,7 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v if (v.old_header && [[v.old_header description] isEqualToString:[nav description]]) { // if the header is the same as the value trying to set, if (rendered_page[@"header"] && [[rendered_page[@"header"] description] isEqualToString:[v.old_header description]]) { - // and if the currently visible rendered_page's header is the same as the VC's old_header, ignore. + // and if the currently visible rendered_page's header is the same as the VC's old_header, ignore. return; } } @@ -2897,10 +3025,10 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v navigationController.navigationBar.barTintColor = background; navigationController.navigationBar.tintColor = color; navigationController.navigationBar.titleTextAttributes = @{ - NSForegroundColorAttributeName: color, - NSFontAttributeName: [UIFont - fontWithName:@"HelveticaNeue-CondensedBold" - size:18.0] + NSForegroundColorAttributeName: color, + NSFontAttributeName: [UIFont + fontWithName:@"HelveticaNeue-CondensedBold" + size:18.0] }; return; } @@ -2908,10 +3036,10 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; navigationController.navigationBar.titleTextAttributes = @{ - NSForegroundColorAttributeName: color, - NSFontAttributeName: [UIFont - fontWithName:@"HelveticaNeue-CondensedBold" - size:18.0] + NSForegroundColorAttributeName: color, + NSFontAttributeName: [UIFont + fontWithName:@"HelveticaNeue-CondensedBold" + size:18.0] }; navigationController.navigationBar.hidden = NO; @@ -2974,10 +3102,10 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v } navigationController.navigationBar.titleTextAttributes = @{ - NSForegroundColorAttributeName: color, - NSFontAttributeName: [UIFont - fontWithName:font_name - size:[font_size integerValue]] + NSForegroundColorAttributeName: color, + NSFontAttributeName: [UIFont + fontWithName:font_name + size:[font_size integerValue]] }; } else { navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; @@ -2985,10 +3113,10 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v NSString * font_name = @"HelveticaNeue-CondensedBold"; NSString * font_size = @"18"; navigationController.navigationBar.titleTextAttributes = @{ - NSForegroundColorAttributeName: color, - NSFontAttributeName: [UIFont - fontWithName:font_name - size:[font_size integerValue]] + NSForegroundColorAttributeName: color, + NSFontAttributeName: [UIFont + fontWithName:font_name + size:[font_size integerValue]] }; } @@ -3072,11 +3200,11 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v } completed:^(UIImage * image, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { if (image) { - dispatch_async (dispatch_get_main_queue (), ^{ - [self setMenuButtonImage:image - forButton:btn - withMenu:left_menu]; // - }); + dispatch_async (dispatch_get_main_queue (), ^{ + [self setMenuButtonImage:image + forButton:btn + withMenu:left_menu]; // + }); } }]; } @@ -3145,11 +3273,11 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v } completed:^(UIImage * image, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { if (image) { - dispatch_async (dispatch_get_main_queue (), ^{ - [self setMenuButtonImage:image - forButton:btn - withMenu:right_menu]; - }); + dispatch_async (dispatch_get_main_queue (), ^{ + [self setMenuButtonImage:image + forButton:btn + withMenu:right_menu]; + }); } }]; } @@ -3199,11 +3327,11 @@ - (void)setupHeader:(NSDictionary *)nav forVC:(JasonViewController *)v } completed:^(UIImage * image, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { if (image) { - dispatch_async (dispatch_get_main_queue (), ^{ - [self setLogoImage:image - withStyle:style - forVC:v]; - }); + dispatch_async (dispatch_get_main_queue (), ^{ + [self setLogoImage:image + withStyle:style + forVC:v]; + }); } }]; } @@ -3337,6 +3465,7 @@ - (void)setLogoImage:(UIImage *)image withStyle:(NSDictionary *)style forVC:(Jas UIView * logoView = [[UIView alloc] initWithFrame:frame]; UIImageView * logoImageView = [[UIImageView alloc] initWithImage:image]; + logoImageView.frame = frame; [logoView addSubview:logoImageView]; @@ -3386,7 +3515,7 @@ - (void)setupMenuBadge:(BBBadgeBarButtonItem *)barButton forData:(NSDictionary * } } - if (badge[@"text"]) { + if (badge[@"text"] && ![[badge[@"text"] description] isEqualToString:@""]) { barButton.badgeValue = [badge[@"text"] description]; } else { barButton.badgeValue = @" "; @@ -3579,14 +3708,14 @@ - (void)setupTabBar:(NSDictionary *)t forVC:(JasonViewController *)v { if (firstTime) { // First time loading if (i == indexOfTab) { - // for the current tab, simply add the navigationcontrolle to the tabs array - // no need to create a new VC, etc. because it's already been instantiated + // for the current tab, simply add the navigationcontrolle to the tabs array + // no need to create a new VC, etc. because it's already been instantiated tabFound = YES; - // if the tab URL is same as the currently visible VC's url + // if the tab URL is same as the currently visible VC's url self->VC.tabNeedsRefresh = YES; [tabs_array addObject:self->navigationController]; } else { - // for all other tabs, create a new VC and instantiate them, and add them to the tabs array + // for all other tabs, create a new VC and instantiate them, and add them to the tabs array JasonViewController * vc = [[JasonViewController alloc] init]; vc.url = url; @@ -3604,7 +3733,7 @@ - (void)setupTabBar:(NSDictionary *)t forVC:(JasonViewController *)v { // If it's not the first time (the tab bars are already visible) // check the URLs and update if changed. if ([v.url isEqualToString:url]) { - // Do nothing + // Do nothing v.tabNeedsRefresh = YES; tabFound = YES; } else { @@ -3690,7 +3819,11 @@ - (BOOL) tabBarController:(UITabBarController *)theTabBarController if (self->VC.tabNeedsRefresh) { DTLogDebug (@"Tab %ld Needs Refresh", indexOfTab); - [[Jason client] call:@{ @"type": @"$reload" }]; + [((UINavigationController *)viewController) popToRootViewControllerAnimated:NO]; + self->VC = ((UINavigationController *)viewController).viewControllers.lastObject; + self->VC.url = href; + [self->VC reload:nil final:NO]; + [[Jason client] call:@{ @"type": @"$render" }]; return YES; /* This code contains the logic to refresh. * the problem is that refreshing more than one time @@ -3779,9 +3912,9 @@ - (void)setTabBarItem:(UITabBarItem *)item withTab:(NSDictionary *)tab { } completed:^(UIImage * i, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { if (i) { - [self setTabImage:i - withTab:tab - andItem:item]; + [self setTabImage:i + withTab:tab + andItem:item]; } }]; } @@ -3789,7 +3922,7 @@ - (void)setTabBarItem:(UITabBarItem *)item withTab:(NSDictionary *)tab { [item setTitlePositionAdjustment:UIOffsetMake (0.0, -18.0)]; } - if (tab[@"badge"]) { + if (tab[@"badge"] && ![[tab[@"badge"] description] isEqualToString:@""]) { [item setBadgeValue:[tab[@"badge"] description]]; } } @@ -3816,6 +3949,7 @@ - (void)setTabImage:(UIImage *)image withTab:(NSDictionary *)tab andItem:(UITabB } UIImage * newImage = [JasonHelper scaleImage:image ToSize:CGSizeMake (width, height)]; + dispatch_async (dispatch_get_main_queue (), ^{ [item setImage:newImage]; }); @@ -3947,14 +4081,14 @@ - (void)onOrientationChange:(NSNotification *)notification { CGRect frame = [UIScreen mainScreen].bounds; NSDictionary * params = @{ - @"$jason": @{ - @"id": @(device.orientation), - @"portrait": @(UIDeviceOrientationIsPortrait (device.orientation)), - @"size": @{ - @"width": @(frame.size.width), - @"height": @(frame.size.height) - } + @"$jason": @{ + @"id": @(device.orientation), + @"portrait": @(UIDeviceOrientationIsPortrait (device.orientation)), + @"size": @{ + @"width": @(frame.size.width), + @"height": @(frame.size.height) } + } }; DTLogInfo (@"Calling $orientation.changed event %@", params); @@ -3966,6 +4100,14 @@ - (void)onOrientationChange:(NSNotification *)notification { # pragma mark - View Linking - (void)go:(NSDictionary *)href { + DTLogDebug (@"Go to href %@", href); + + // Href should be a dictionary + if (![href respondsToSelector:@selector(objectForKey:)]) { + DTLogDebug (@"href is not a dictionary %@", href); + return; + } + /******************************* * * Linking View to another View @@ -4080,7 +4222,11 @@ - (void)go:(NSDictionary *)href DTLogDebug (@"openURL: %@", encodedUrl); - [[UIApplication sharedApplication] openURL:destination]; + [[UIApplication sharedApplication] openURL:destination + options:@{} + completionHandler:^(BOOL success) { + DTLogDebug (@"Openned %@", encodedUrl); + }]; } else { DTLogWarning (@"Invalid Url"); } @@ -4095,11 +4241,11 @@ - (void)go:(NSDictionary *)href if ([transition isEqualToString:@"replace"]) { DTLogDebug (@"Replacing the current view"); - /**************************************************************************** - * - * Replace the current view - * - ****************************************************************************/ + /**************************************************************************** + * + * Replace the current view + * + ****************************************************************************/ [self unlock]; if (href) { @@ -4440,11 +4586,11 @@ - (void)exec memory.executing = NO; if (memory._stack && memory._stack.count > 0) { - /**************************************************** - * First, handle conditional cases - * If the stack contains an array, it must be a conditional. (#if) - # So run it through 'options' method to generate an actual stack - ****************************************************/ + /**************************************************** + * First, handle conditional cases + * If the stack contains an array, it must be a conditional. (#if) + # So run it through 'options' method to generate an actual stack + ****************************************************/ if ([memory._stack isKindOfClass:[NSArray class]]) { memory._stack = [self filloutTemplate:memory._stack withData:memory._register]; } @@ -4538,14 +4684,14 @@ - (void)exec DTLogDebug (@"Action Call by Type"); NSArray * tokens = [type componentsSeparatedByString:@"."]; - // Jason Core actions: "METHOD" format => Within Jason.m + // Jason Core actions: "METHOD" format => Within Jason.m if (tokens.count == 1) { if (type.length > 1 && [type hasPrefix:@"$"]) { NSString * actionName = [type substringFromIndex:1]; SEL method = NSSelectorFromString (actionName); self.options = [self options]; - // Set 'executing' to YES to prevent other actions from being accidentally executed concurrently + // Set 'executing' to YES to prevent other actions from being accidentally executed concurrently memory.executing = YES; if ([self respondsToSelector:method]) { @@ -4632,7 +4778,7 @@ - (void)exec } }]; } } else { - // ignore error: "@ModuleName" -> missing action name + // ignore error: "@ModuleName" -> missing action name DTLogDebug (@"Missing Action Name"); } } @@ -4641,7 +4787,7 @@ - (void)exec DTLogDebug (@"$class.method format"); NSString * className = tokens[0]; - // first take a look at the json file to resolve classname + // first take a look at the json file to resolve classname NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; NSString * jrjson_filename = [NSString stringWithFormat:@"%@/%@.json", resourcePath, className]; NSFileManager * fileManager = [NSFileManager defaultManager]; @@ -4724,7 +4870,7 @@ - (void)exec // If the stack doesn't include any action to take after success, just finish if (!memory._stack[@"success"] && !memory._stack[@"error"]) { - // VC.contentLoaded is NO if the action is $reload (until it returns) + // VC.contentLoaded is NO if the action is $reload (until it returns) if (VC.contentLoaded) { [self finish]; } @@ -4783,7 +4929,11 @@ - (void)unlock [JasonMemory client].locked = NO; [JasonMemory client].executing = NO; [[NSNotificationCenter defaultCenter] postNotificationName:@"finishRefreshing" object:nil]; - VC.view.userInteractionEnabled = YES; + + dispatch_async (dispatch_get_main_queue (), ^{ + self->VC.view.userInteractionEnabled = YES; + }); + [[NSNotificationCenter defaultCenter] postNotificationName:@"unlock" object:nil]; // In case oauth was in process, set it back to No @@ -4807,7 +4957,7 @@ - (void)cache_view if (self->VC.original && self->VC.rendered && self->VC.original[@"$jason"][@"head"][@"offline"]) { DTLogInfo (@"Offline Mode Activated"); - if (![[VC.rendered description] containsString:@"{{"] && ![[self.options description] containsString:@"}}"]) { + if (![[self->VC.rendered description] containsString:@"{{"] && ![[self.options description] containsString:@"}}"]) { dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSString * normalized_url = [JasonHelper normalized_url:self->VC.url forOptions:self->VC.options]; normalized_url = [normalized_url stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; @@ -4830,6 +4980,7 @@ - (void)cache_view // if not offline, delete the file associated with the url NSString * normalized_url = [JasonHelper normalized_url:self->VC.url forOptions:self->VC.options]; + normalized_url = [normalized_url stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentsDirectory = [paths objectAtIndex:0]; diff --git a/xcode/Jasonette/Core/Logger/JasonLogger.m b/xcode/Jasonette/Core/Logger/JasonLogger.m index 7eca0401..e19fb19b 100644 --- a/xcode/Jasonette/Core/Logger/JasonLogger.m +++ b/xcode/Jasonette/Core/Logger/JasonLogger.m @@ -21,14 +21,14 @@ + (void)setupWithLogLevel:(DTLogLevel)level { [JasonLogger setLogLevel:level]; kLevelNames = @{ - @(DTLogLevelDebug): @"DEBUG", - @(DTLogLevelInfo): @"INFO", - @(DTLogLevelAlert): @"ALERT", - @(DTLogLevelNotice): @"NOTICE", - @(DTLogLevelError): @"ERROR", - @(DTLogLevelWarning): @"WARNING", - @(DTLogLevelCritical): @"CRITICAL", - @(DTLogLevelEmergency): @"EMERGENCY" + @(DTLogLevelDebug): @"DEBUG", + @(DTLogLevelInfo): @"INFO", + @(DTLogLevelAlert): @"ALERT", + @(DTLogLevelNotice): @"NOTICE", + @(DTLogLevelError): @"ERROR", + @(DTLogLevelWarning): @"WARNING", + @(DTLogLevelCritical): @"CRITICAL", + @(DTLogLevelEmergency): @"EMERGENCY" }; } diff --git a/xcode/Jasonette/Core/Networking/Serializer/JASONResponseSerializer.m b/xcode/Jasonette/Core/Networking/Serializer/JASONResponseSerializer.m index 9b97fcfa..575191d3 100644 --- a/xcode/Jasonette/Core/Networking/Serializer/JASONResponseSerializer.m +++ b/xcode/Jasonette/Core/Networking/Serializer/JASONResponseSerializer.m @@ -13,7 +13,13 @@ - (id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError * __autoreleasing *)errorPointer { - id responseObject = [super responseObjectForResponse:response data:data error:errorPointer]; + /* + * Using NSJSONReadingAllowFragments enables parsing JSON files that are just + * a number or string. Accepted JSON can now start with {}, [], "", 0-9. + */ + AFJSONResponseSerializer * serializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingFragmentsAllowed]; + + id responseObject = [serializer responseObjectForResponse:response data:data error:errorPointer]; if (*errorPointer) { NSError * error = *errorPointer; diff --git a/xcode/Jasonette/Core/Parser/JasonParser.m b/xcode/Jasonette/Core/Parser/JasonParser.m index e25a50c4..b8bae89b 100644 --- a/xcode/Jasonette/Core/Parser/JasonParser.m +++ b/xcode/Jasonette/Core/Parser/JasonParser.m @@ -74,7 +74,7 @@ + (id)parse:(id)data JSContext * context = [[JSContext alloc] init]; [context setExceptionHandler:^(JSContext * context, JSValue * value) { DTLogWarning (@"%@", value); - }]; + }]; [context evaluateScript:js]; diff --git a/xcode/Jasonette/Core/Views/Badge/UIBarButtonItem+Badge.m b/xcode/Jasonette/Core/Views/Badge/UIBarButtonItem+Badge.m index 8bb19949..1e980df1 100644 --- a/xcode/Jasonette/Core/Views/Badge/UIBarButtonItem+Badge.m +++ b/xcode/Jasonette/Core/Views/Badge/UIBarButtonItem+Badge.m @@ -85,6 +85,7 @@ - (CGSize)badgeExpectedSize [frameLabel sizeToFit]; CGSize expectedLabelSize = frameLabel.frame.size; + return expectedLabelSize; } @@ -125,6 +126,7 @@ - (void)updateBadgeValueAnimated:(BOOL)animated // Animate the size modification if needed NSTimeInterval duration = animated ? 0.2 : 0; + [UIView animateWithDuration:duration animations:^{ [self updateBadgeFrame]; diff --git a/xcode/Jasonette/Core/Views/JasonViewController.m b/xcode/Jasonette/Core/Views/JasonViewController.m index 985a95e0..cc4a515c 100644 --- a/xcode/Jasonette/Core/Views/JasonViewController.m +++ b/xcode/Jasonette/Core/Views/JasonViewController.m @@ -46,11 +46,11 @@ @interface JasonViewController () { @implementation JasonViewController -- (NSDictionary *) style { - if(!_style) { +- (NSDictionary *)style { + if (!_style) { _style = @{}; } - + return _style; } @@ -195,7 +195,9 @@ - (void)setupIndexPathsForImage:(NSNotification *)notification { } - (void)unlock { - [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; + dispatch_async (dispatch_get_main_queue (), ^{ + [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; + }); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event @@ -627,21 +629,21 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N } } @catch (NSException * e) { NSDictionary * item = @{ - @"type": @"vertical", - @"style": @{ - @"spacing": @"5" - }, - @"components": @[ - @{ - @"type": @"label", - @"text": @"Error", - @"style": @{ @"size": @"30", @"align": @"center", @"padding": @"10" } - }, @{ - @"type": @"label", - @"text": @"Something went wrong.", - @"style": @{ @"size": @"12", @"align": @"center", @"padding": @"10" } - } - ] + @"type": @"vertical", + @"style": @{ + @"spacing": @"5" + }, + @"components": @[ + @{ + @"type": @"label", + @"text": @"Error", + @"style": @{ @"size": @"30", @"align": @"center", @"padding": @"10" } + }, @{ + @"type": @"label", + @"text": @"Something went wrong.", + @"style": @{ @"size": @"12", @"align": @"center", @"padding": @"10" } + } + ] }; hasError = YES; return [self getVerticalSectionItem:item forTableView:tableView atIndexPath:indexPath]; @@ -1044,8 +1046,14 @@ - (NSArray *)cleanArray:(NSArray *)arr { - (void)loadAssets:(NSDictionary *)body { JasonViewController * weakSelf = self; + DTLogDebug (@"Load Assets"); dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - NSArray * keys = [body allKeys]; + DTLogDebug (@"Body %@", body); + NSArray * keys = @[]; + + if ([body respondsToSelector:@selector(allKeys)]) { + keys = [body allKeys]; + } for (NSString * key in keys) { if ([body[key] isKindOfClass:[NSArray class]]) { @@ -1064,16 +1072,16 @@ - (void)loadAssets:(NSDictionary *)body { [self loadAssets:body[key]]; } else { if ([body[key] isKindOfClass:[NSString class]]) { - // String => Terminal Node + // String => Terminal Node if ([key isEqualToString:@"url"]) { - // it's a url! - // see if it's an image type + // it's a url! + // see if it's an image type if (body[@"type"]) { if ([body[@"type"] isEqualToString:@"image"] || [body[@"type"] isEqualToString:@"button"]) { if (body[@"style"]) { - // [Image load optimization] Don't load assets if - // 1. height exists or - // 2. width + ratio exist + // [Image load optimization] Don't load assets if + // 1. height exists or + // 2. width + ratio exist if (body[@"style"][@"height"]) { return; } else if (body[@"style"][@"width"] && body[@"style"][@"ratio"]) { @@ -1108,25 +1116,25 @@ - (void)loadAssets:(NSDictionary *)body { self->download_image_counter--; if (!error) { - JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; + JasonComponentFactory.imageLoaded[url] = [NSValue valueWithCGSize:i.size]; } // [self.tableView visibleCells]; dispatch_async (dispatch_get_main_queue (), ^{ - NSArray * indexPathArray = weakSelf.tableView.indexPathsForVisibleRows; - NSMutableSet * visibleIndexPaths = [[NSMutableSet alloc] initWithArray:indexPathArray]; - [visibleIndexPaths intersectSet:(NSSet *)self->indexPathsForImage[url]]; - - if (visibleIndexPaths.count > 0) { - [weakSelf.tableView reloadData]; - } - - if (!self->top_aligned) { - if (self->download_image_counter == 0) { - [weakSelf scrollToBottom]; - } - } - }); + NSArray * indexPathArray = weakSelf.tableView.indexPathsForVisibleRows; + NSMutableSet * visibleIndexPaths = [[NSMutableSet alloc] initWithArray:indexPathArray]; + [visibleIndexPaths intersectSet:(NSSet *)self->indexPathsForImage[url]]; + + if (visibleIndexPaths.count > 0) { + [weakSelf.tableView reloadData]; + } + + if (!self->top_aligned) { + if (self->download_image_counter == 0) { + [weakSelf scrollToBottom]; + } + } + }); }]; } } @@ -1385,8 +1393,8 @@ - (void)setupHeader:(NSDictionary *)body NSDictionary * header = body[@"header"]; if (header) { - // only handles components specific to TableView (search/tabs). - // common component (menu) is handled in Jason.m + // only handles components specific to TableView (search/tabs). + // common component (menu) is handled in Jason.m tabs = nil; for (NSString * type in [header allKeys]) { @@ -1549,6 +1557,7 @@ - (void)setupSections:(NSDictionary *)body id weakSelf = self; + [weakSelf loadAssets:body]; if (self.events[@"$pull"]) { @@ -1591,8 +1600,20 @@ - (void)reloadSections:(NSArray *)sections } for (NSDictionary * section in self.sections) { - NSMutableDictionary * header = section[@"header"]; - NSNumber * rowcount_for_section = [NSNumber numberWithLong:[section[@"items"] count]]; + NSMutableDictionary * header = [@{} mutableCopy]; + NSArray * items = @[]; + + if ([section respondsToSelector:@selector(objectForKey:)]) { + if (section[@"header"]) { + header = section[@"header"]; + } + + if (section[@"items"] && [section[@"items"] respondsToSelector:@selector(count)]) { + items = section[@"items"]; + } + } + + NSNumber * rowcount_for_section = [NSNumber numberWithLong:[items count]]; [rowcount addObject:rowcount_for_section]; total_rowcount = total_rowcount + [rowcount_for_section longValue]; @@ -1600,7 +1621,7 @@ - (void)reloadSections:(NSArray *)sections // No header [headers addObject:@{}]; } else { - [headers addObject:section[@"header"]]; + [headers addObject:header]; } } @@ -1624,16 +1645,16 @@ - (void)setupFooter:(NSDictionary *)body CGFloat originalHeight = original_height; [self.view addKeyboardPanningWithActionHandler:^(CGRect keyboardFrameInView, BOOL opening, BOOL closing) - { - CGFloat m = MIN (originalHeight, keyboardFrameInView.origin.y); - - if (opening || (closing && m >= weakSelf.view.frame.size.height)) { - CGRect newViewFrame = CGRectMake (weakSelf.view.frame.origin.x, - weakSelf.view.frame.origin.y, - weakSelf.view.frame.size.width, m); - weakSelf.view.frame = newViewFrame; - } - }]; + { + CGFloat m = MIN (originalHeight, keyboardFrameInView.origin.y); + + if (opening || (closing && m >= weakSelf.view.frame.size.height)) { + CGRect newViewFrame = CGRectMake (weakSelf.view.frame.origin.x, + weakSelf.view.frame.origin.y, + weakSelf.view.frame.size.width, m); + weakSelf.view.frame = newViewFrame; + } + }]; // textfield logic @@ -1673,22 +1694,22 @@ - (void)setupFooter:(NSDictionary *)body // input field styling if (field[@"style"]) { - // PHFComposeBarView hack to find relevant views and apply style - // [JasonHelper force_background:@"#000000" intoView:composeBarView]; + // PHFComposeBarView hack to find relevant views and apply style + // [JasonHelper force_background:@"#000000" intoView:composeBarView]; for (UIView * v in self.composeBarView.subviews) { for (UIView * vv in v.subviews) { if ([vv isKindOfClass:[UITextView class]]) { vv.superview.layer.borderWidth = 0; for (UIView * vvv in vv.superview.subviews) { - // textfield background + // textfield background if (field[@"style"][@"background"]) { vvv.backgroundColor = [JasonHelper colorwithHexString:field[@"style"][@"background"] alpha:1.0]; } - // placeholder color + // placeholder color if ([vvv isKindOfClass:[UILabel class]]) { - // placeholder label + // placeholder label ((UILabel *)vvv).textColor = [JasonHelper colorwithHexString:field[@"style"][@"color:placeholder"] alpha:1.0]; } } @@ -1733,17 +1754,17 @@ - (void)setupFooter:(NSDictionary *)body completed:^(UIImage * image, NSError * error, SDImageCacheType cacheType, BOOL finished, NSURL * imageURL) { // colorize if (self->chat_input[@"left"][@"style"] && self->chat_input[@"left"][@"style"][@"color"]) { - UIColor * newColor = [JasonHelper colorwithHexString:self->chat_input[@"left"][@"style"][@"color"] - alpha:1.0]; - image = [JasonHelper colorize:image - into:newColor]; + UIColor * newColor = [JasonHelper colorwithHexString:self->chat_input[@"left"][@"style"][@"color"] + alpha:1.0]; + image = [JasonHelper colorize:image + into:newColor]; } - UIImage * resizedImage = [JasonHelper scaleImage:image - ToSize:CGSizeMake (30, 30)]; + UIImage * resizedImage = [JasonHelper scaleImage:image + ToSize:CGSizeMake (30, 30)]; dispatch_async (dispatch_get_main_queue (), ^{ - [self.composeBarView setUtilityButtonImage:resizedImage]; - }); + [self.composeBarView setUtilityButtonImage:resizedImage]; + }); } ]; }); @@ -1764,16 +1785,16 @@ - (void)setupFooter:(NSDictionary *)body for (UIButton * button in buttons) { if ([button.subviews.firstObject isKindOfClass:[UILabel class]]) { - // set "color" + // set "color" if (chat_input[@"right"][@"style"] && chat_input[@"right"][@"style"][@"color"]) { [button setTitleColor:[JasonHelper colorwithHexString:chat_input[@"right"][@"style"][@"color"] alpha:1.0] forState:UIControlStateNormal]; } - // set "color:disabled" + // set "color:disabled" if (chat_input[@"right"][@"style"] && chat_input[@"right"][@"style"][@"color:disabled"]) { [button setTitleColor:[JasonHelper colorwithHexString:chat_input[@"right"][@"style"][@"color:disabled"] alpha:1.0] forState:UIControlStateDisabled]; } else { - // default + // default [button setTitleColor:[JasonHelper colorwithHexString:chat_input[@"right"][@"style"][@"color"] alpha:1.0] forState:UIControlStateDisabled]; } } diff --git a/xcode/Jasonette/Info.plist b/xcode/Jasonette/Info.plist index 90a61e59..ffc0d5ef 100644 --- a/xcode/Jasonette/Info.plist +++ b/xcode/Jasonette/Info.plist @@ -43,6 +43,8 @@ used to access photo library NSLocationAlwaysUsageDescription used to access location api + NSUserTrackingUsageDescription + Your reason, why you want to track the user UILaunchStoryboardName LaunchScreen UIMainStoryboardFile diff --git a/xcode/Jasonette/Services/$agent/JasonAgentService.m b/xcode/Jasonette/Services/$agent/JasonAgentService.m index 4ae4fca0..0ed292dc 100644 --- a/xcode/Jasonette/Services/$agent/JasonAgentService.m +++ b/xcode/Jasonette/Services/$agent/JasonAgentService.m @@ -73,8 +73,8 @@ - (void)userContentController:(WKUserContentController *)userContentController d // to keep track of the source agent so that a response // can be sent back to the $source later. event[@"$source"] = @{ - @"id": identifier, - @"nonce": m[@"nonce"] + @"id": identifier, + @"nonce": m[@"nonce"] }; DTLogDebug (@"Requesting %@", event); @@ -140,6 +140,7 @@ - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigat // Inject agent.js into agent context NSString * identifier = webView.payload[@"identifier"]; + DTLogDebug (@"Injecting agent.js into context %@", identifier); NSString * raw = [JasonHelper read_local_file:@"file://agent.js"]; @@ -147,7 +148,11 @@ - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigat stringWithFormat:@"$agent.interface = window.webkit.messageHandlers[\"%@\"];\n", identifier]; - NSString * summon = [raw stringByAppendingString:interface]; + DTLogDebug (@"Injecting custom.js into context %@", identifier); + NSString * custom = [JasonHelper read_local_file:@"file://custom.js"]; + NSString * summon = [[raw + stringByAppendingString:interface] + stringByAppendingString:custom]; webView.payload[@"state"] = @"rendered"; @@ -156,7 +161,7 @@ - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigat DTLogInfo (@"Injected $agent into context"); if (error) { - DTLogWarning (@"%@", error); + DTLogWarning (@"%@", error); } }]; @@ -188,20 +193,20 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati NSDictionary * resolved; NSMutableDictionary * data_stub = [[[Jason client] variables] mutableCopy]; - // Prepare the url to return + // Prepare the url to return NSString * url; if ([navigationAction.request.URL.absoluteString hasPrefix:@"file://"]) { NSString * resourcePath = [[NSBundle mainBundle] resourcePath]; if ([navigationAction.request.URL.absoluteString containsString:resourcePath]) { - // it's an internal path. Convert it to regular file format + // it's an internal path. Convert it to regular file format url = [navigationAction.request.URL.absoluteString stringByReplacingOccurrencesOfString:resourcePath withString:@""]; - // Turn 'file:///' into 'file://' + // Turn 'file:///' into 'file://' url = [url stringByReplacingOccurrencesOfString:@"file:///" withString:@"file://"]; } else { - // it's a regular file url, like: file://local.json + // it's a regular file url, like: file://local.json url = navigationAction.request.URL.absoluteString; } } else { @@ -229,8 +234,8 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati decisionHandler (WKNavigationActionPolicyAllow); } else { if ([navigationAction.sourceFrame isEqual:navigationAction.targetFrame]) { - // normal navigation - // Need to handle JASON action + // normal navigation + // Need to handle JASON action if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { decisionHandler (WKNavigationActionPolicyCancel); @@ -297,7 +302,7 @@ - (void)refresh:(WKWebView *)agent withOptions:(NSDictionary *)options { if (url) { // contains "url" attribute if ([url containsString:@"file://"]) { - // File URL + // File URL DTLogDebug (@"Loading with Local File %@", url); NSString * path = [JasonHelper get_local_path:url]; NSURL * u = [NSURL fileURLWithPath:path isDirectory:NO]; @@ -307,9 +312,24 @@ - (void)refresh:(WKWebView *)agent withOptions:(NSDictionary *)options { } } else { // Remote URL - DTLogDebug (@"Loading Remote URL %@", url); + DTLogDebug (@"Loading Remote URL %@ With Options %@", url, options); NSURL * nsurl = [NSURL URLWithString:url]; - NSURLRequest * nsrequest = [NSURLRequest requestWithURL:nsurl]; + NSMutableURLRequest * nsrequest = [[NSURLRequest requestWithURL:nsurl] mutableCopy]; + + NSDictionary * innerOptions = options[@"options"]; + + if (innerOptions) { + NSDictionary * headers = innerOptions[@"header"]; + + if (!headers) { + headers = innerOptions[@"headers"]; + } + + for (NSString * key in headers) { + DTLogDebug (@"Using Header %@ : %@", key, headers[key], nsrequest.URL); + [nsrequest addValue:headers[key] forHTTPHeaderField:key]; + } + } if (shouldReload) { [agent loadRequest:nsrequest]; @@ -342,6 +362,7 @@ - (void)refresh:(WKWebView *)agent withOptions:(NSDictionary *)options { } JasonViewController * vc = (JasonViewController *)[[Jason client] getVC]; + [vc.view setNeedsDisplay]; } @@ -354,13 +375,14 @@ - (void)refresh:(NSDictionary *)options { // 1. Initialize if (vc.agents && vc.agents[identifier]) { - // Already existing agent, juse reuse the old one + // Already existing agent, juse reuse the old one WKWebView * agent = vc.agents[identifier]; agent.payload[@"state"] = @"empty"; NSMutableDictionary * new_options = [options mutableCopy]; new_options[@"text"] = agent.payload[@"text"]; new_options[@"url"] = agent.payload[@"url"]; new_options[@"action"] = agent.payload[@"action"]; + new_options[@"options"] = agent.payload[@"options"]; [self refresh:agent withOptions:new_options]; [[Jason client] success]; } else { @@ -456,16 +478,14 @@ - (WKWebView *)setup:(NSDictionary *)options withId:(NSString *)identifier { forKeyPath:NSStringFromSelector (@selector(estimatedProgress)) options:NSKeyValueObservingOptionNew context:NULL]; - } else { // This helper will allow to continue execution normally. - DTLogDebug(@"iOS <= 10 detected. Using AutoRemoveObserver for agent %@", identifier); + DTLogDebug (@"iOS <= 10 detected. Using AutoRemoveObserver for agent %@", identifier); [INTUAutoRemoveObserver addObserver:self - forKeyPath:NSStringFromSelector (@selector(estimatedProgress)) - options:NSKeyValueObservingOptionNew + forKeyPath:NSStringFromSelector (@selector(estimatedProgress)) + options:NSKeyValueObservingOptionNew context:(__bridge void * _Nullable)(identifier)]; } - agent.hidden = YES; @@ -587,12 +607,14 @@ - (void)inject:(NSDictionary *)options { } - (void)inject:(NSString *)code into:(WKWebView *)agent { - [agent evaluateJavaScript:code - completionHandler:^(id _Nullable res, NSError * _Nullable error) { - // Step 2. Execute the method with params - DTLogDebug (@"Injected code into agent"); - [[Jason client] success]; - }]; + dispatch_async (dispatch_get_main_queue (), ^{ + [agent evaluateJavaScript:code + completionHandler:^(id _Nullable res, NSError * _Nullable error) { + // Step 2. Execute the method with params + DTLogDebug (@"Injected code into agent"); + [[Jason client] success]; + }]; + }); } - (void)request:(NSDictionary *)options { @@ -623,17 +645,19 @@ - (void)request:(NSDictionary *)options { agent.payload[@"$source"] = options[@"$source"]; // Evaluate JavaScript on the agent - [agent evaluateJavaScript:callstring - completionHandler:^(id _Nullable res, NSError * _Nullable error) { - // Don't process return value. - // Instead all communication back to Jasonette is taken care of by an explicit $agent.response() call - if (error) { - DTLogWarning (@"%@", error); - agent.payload[@"pending"] = options; - // The agent might not be ready. Put it in a queue. - } - }]; - // Agent doesn't exist, return with the error callback + dispatch_async (dispatch_get_main_queue (), ^{ + [agent evaluateJavaScript:callstring + completionHandler:^(id _Nullable res, NSError * _Nullable error) { + // Don't process return value. + // Instead all communication back to Jasonette is taken care of by an explicit $agent.response() call + if (error) { + DTLogWarning (@"%@", error); + agent.payload[@"pending"] = options; + // The agent might not be ready. Put it in a queue. + } + }]; + // Agent doesn't exist, return with the error callback + }); } else { [[Jason client] error]; } @@ -646,23 +670,23 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N [progressView setAlpha:1.0f]; [progressView setProgress:((WKWebView *)object).estimatedProgress animated:YES]; DTLogDebug (@"%f", progressView.progress); - - WKWebView * webview = (WKWebView *) object; - + + WKWebView * webview = (WKWebView *)object; + BOOL iOS11 = NO; - - if(@available(iOS 11, *)){ + + if (@available(iOS 11, *)) { iOS11 = YES; } - + if (!iOS11 && context != NULL) { NSString * identifier = (__bridge NSString *)(context); - DTLogDebug(@"iOS <= 10 %@", identifier); + DTLogDebug (@"iOS <= 10 %@", identifier); JasonViewController * vc = (JasonViewController *)[[Jason client] getVC]; webview = vc.agents[identifier]; } - if(webview && [webview respondsToSelector:@selector(estimatedProgress)]){ + if (webview && [webview respondsToSelector:@selector(estimatedProgress)]) { if (webview.estimatedProgress >= 1.0f) { [UIView animateWithDuration:0.3 delay:0.3 @@ -671,8 +695,8 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N [progressView setAlpha:0.0f]; } completion:^(BOOL finished) { - [progressView setProgress:0.0f - animated:NO]; + [progressView setProgress:0.0f + animated:NO]; }]; } } diff --git a/xcode/Jasonette/Services/$push/JasonPushService.m b/xcode/Jasonette/Services/$push/JasonPushService.m index 89f0aba3..6ef8f293 100644 --- a/xcode/Jasonette/Services/$push/JasonPushService.m +++ b/xcode/Jasonette/Services/$push/JasonPushService.m @@ -13,23 +13,67 @@ @implementation JasonPushService + +- (nonnull NSDictionary *)normalize:(nullable NSDictionary *)userInfo { + if (!userInfo) { + return @{}; + } + + // Check if the userInfo is a string + NSDictionary * info = userInfo[@"href"]; + + if (!info) { + info = userInfo[@"action"]; + } + + if ([info respondsToSelector:@selector(containsString:)]) { + // Maybe the userInfo is a json object in a string + // This can be a case when a notification payload is sent via Firebase or similar + // That only strings are allowed in the data attribute of the notification. + NSString * json = (NSString *)info; + NSError * error = nil; + id jsonObject = [NSJSONSerialization + JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] + options:kNilOptions + error:&error]; + + DTLogDebug (@"Detected and parsed json string in userInfo %@", jsonObject); + info = jsonObject; + + if (error) { + DTLogDebug (@"%@", error); + info = nil; + } + } + + NSMutableDictionary * normalized = [userInfo mutableCopy]; + + if (info) { + if (normalized[@"href"]) { + normalized[@"href"] = info; + } else if (normalized[@"action"]) { + normalized[@"action"] = info; + } + } + + return [normalized copy]; +} + - (void)initialize:(NSDictionary *)launchOptions { DTLogDebug (@"initialize"); #ifdef PUSH - NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; + NSDictionary * userInfo = [self normalize:[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]]; - if (userInfo) { - if (userInfo[@"href"]) { - [[Jason client] call:@{ - @"type": @"$href", - @"options": userInfo[@"href"] - }]; - } else if (userInfo[@"action"]) { - [[Jason client] call:userInfo[@"action"]]; - } + if (userInfo[@"href"]) { + [[Jason client] call:@{ + @"type": @"$href", + @"options": userInfo[@"href"] + }]; + } else if (userInfo[@"action"]) { + [[Jason client] call:userInfo[@"action"]]; } [[NSNotificationCenter defaultCenter] removeObserver:self name:@"onRemoteNotification:" object:nil]; @@ -56,7 +100,7 @@ - (void)process:(NSDictionary *)payload DTLogDebug (@"Calling $push.onmessage event"); [[Jason client] call:events[@"$push.onmessage"] - with:@{ @"$jason": payload }]; + with:@{ @"$jason": [self normalize:payload] }]; } } } @@ -67,14 +111,16 @@ - (void)onRemoteNotification:(NSNotification *)notification } - (void)onRemoteNotificationDeviceRegistered:(NSNotification *)notification { - NSDictionary * payload = notification.userInfo; + NSDictionary * payload = [self normalize:notification.userInfo]; NSDictionary * events = [[[Jason client] getVC] valueForKey:@"events"]; if (events) { if (events[@"$push.onregister"]) { - NSDictionary * params = @{ @"$jason": - @{ @"token": - payload[@"token"] } }; + NSDictionary * params = @{ @"$jason": @{ @"token": @"" } }; + + if (payload && payload[@"token"]) { + params = @{ @"$jason": payload }; + } DTLogDebug (@"Calling $push.onregister event with params %@", params); @@ -94,12 +140,14 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNoti if (response.notification.request.content.userInfo) { DTLogDebug (@"Received Notification Response %@", response.notification.request.content.userInfo); - if (response.notification.request.content.userInfo[@"href"]) { + NSDictionary * userInfo = [self normalize:response.notification.request.content.userInfo]; + + if (userInfo[@"href"]) { DTLogDebug (@"Show href"); - [[Jason client] go:response.notification.request.content.userInfo[@"href"]]; - } else if (response.notification.request.content.userInfo[@"action"]) { + [[Jason client] go:userInfo[@"href"]]; + } else if (userInfo[@"action"]) { DTLogDebug (@"Executing Action"); - [[Jason client] call:response.notification.request.content.userInfo[@"action"]]; + [[Jason client] call:userInfo[@"action"]]; } } diff --git a/xcode/Jasonette/Views/Horizontal/JasonHorizontalSection.m b/xcode/Jasonette/Views/Horizontal/JasonHorizontalSection.m index 15c789a1..b2d1aaa2 100644 --- a/xcode/Jasonette/Views/Horizontal/JasonHorizontalSection.m +++ b/xcode/Jasonette/Views/Horizontal/JasonHorizontalSection.m @@ -16,6 +16,7 @@ - (void)awakeFromNib { [super awakeFromNib]; UICollectionViewFlowLayout * flowLayout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout; + flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; flowLayout.minimumLineSpacing = 0.0; flowLayout.minimumInteritemSpacing = 0.0; diff --git a/xcode/Jasonette/Views/Layer/JasonLayer.m b/xcode/Jasonette/Views/Layer/JasonLayer.m index 0ff059fc..c5b0deb6 100644 --- a/xcode/Jasonette/Views/Layer/JasonLayer.m +++ b/xcode/Jasonette/Views/Layer/JasonLayer.m @@ -77,20 +77,20 @@ + (NSArray *)setupLayers:(NSDictionary *)body withView:(UIView *)rootView CGSize size = image.size; if (size.width > 0 && size.height > 0) { - if (layer[@"style"]) { - [self setStyle:layer[@"style"] - ForLayerChild:layerChild - ofSize:[NSValue valueWithCGSize:size]]; - - if (layer[@"style"][@"color"]) { - // Setting tint color for an image - UIColor * newColor = [JasonHelper colorwithHexString:layer[@"style"][@"color"] - alpha:1.0]; - UIImage * newImage = [JasonHelper colorize:image - into:newColor]; - layerChild.image = newImage; - } - } + if (layer[@"style"]) { + [self setStyle:layer[@"style"] + ForLayerChild:layerChild + ofSize:[NSValue valueWithCGSize:size]]; + + if (layer[@"style"][@"color"]) { + // Setting tint color for an image + UIColor * newColor = [JasonHelper colorwithHexString:layer[@"style"][@"color"] + alpha:1.0]; + UIImage * newImage = [JasonHelper colorize:image + into:newColor]; + layerChild.image = newImage; + } + } } }]; } @@ -174,6 +174,7 @@ + (void)addGestureRecognizersTo:(UIView *)view withStyle:(NSDictionary *)style { } UITapGestureRecognizer * singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(layerTap:)]; + [view addGestureRecognizer:singleFingerTap]; } @@ -327,6 +328,7 @@ + (NSMutableDictionary *)applyStylesheet:(NSDictionary *)item { } NSMutableDictionary * stylized_item = [item mutableCopy]; + stylized_item[@"style"] = new_style; return stylized_item; } diff --git a/xcode/Jasonette/Views/Layout/JasonLayout.m b/xcode/Jasonette/Views/Layout/JasonLayout.m index 528e3d1e..c7bf2533 100644 --- a/xcode/Jasonette/Views/Layout/JasonLayout.m +++ b/xcode/Jasonette/Views/Layout/JasonLayout.m @@ -72,9 +72,9 @@ + (NSDictionary *)fill:(UIStackView *)layout with:(NSDictionary *)item atIndexPa // This means it's a single element layout // And therefore needs to be wrapped inside a simple horizontal layout NSDictionary * wrappedItem = @{ - @"type": @"vertical", - @"style": style, - @"components": @[item] + @"type": @"vertical", + @"style": style, + @"components": @[item] }; layout = [JasonLayout fillChildLayout:layout with:wrappedItem atIndexPath:indexPath withForm:form]; } @@ -288,14 +288,14 @@ + (UIStackView *)fillChildLayout:(UIStackView *)layout with:(NSDictionary *)item } NSDictionary * alignment_map = @{ - @"fill": @(UIStackViewAlignmentFill), - @"firstbaseline": @(UIStackViewAlignmentFirstBaseline), - @"lastbaseline": @(UIStackViewAlignmentLastBaseline), - @"left": @(UIStackViewAlignmentLeading), - @"top": @(UIStackViewAlignmentTop), - @"right": @(UIStackViewAlignmentTrailing), - @"bottom": @(UIStackViewAlignmentBottom), - @"center": @(UIStackViewAlignmentCenter) + @"fill": @(UIStackViewAlignmentFill), + @"firstbaseline": @(UIStackViewAlignmentFirstBaseline), + @"lastbaseline": @(UIStackViewAlignmentLastBaseline), + @"left": @(UIStackViewAlignmentLeading), + @"top": @(UIStackViewAlignmentTop), + @"right": @(UIStackViewAlignmentTrailing), + @"bottom": @(UIStackViewAlignmentBottom), + @"center": @(UIStackViewAlignmentCenter) }; if (style[@"align"]) { @@ -304,11 +304,11 @@ + (UIStackView *)fillChildLayout:(UIStackView *)layout with:(NSDictionary *)item } NSDictionary * distribution_map = @{ - @"fill": @(UIStackViewDistributionFill), - @"equalsize": @(UIStackViewDistributionFillEqually), - @"proportional": @(UIStackViewDistributionFillProportionally), - @"equalspace": @(UIStackViewDistributionEqualSpacing), - @"equalcentertocenter": @(UIStackViewDistributionEqualCentering) + @"fill": @(UIStackViewDistributionFill), + @"equalsize": @(UIStackViewDistributionFillEqually), + @"proportional": @(UIStackViewDistributionFillProportionally), + @"equalspace": @(UIStackViewDistributionEqualSpacing), + @"equalcentertocenter": @(UIStackViewDistributionEqualCentering) }; if (style[@"distribution"]) { @@ -403,6 +403,7 @@ + (NSMutableDictionary *)applyStylesheet:(NSDictionary *)item { } NSMutableDictionary * stylized_item = [item mutableCopy]; + stylized_item[@"style"] = new_style; return stylized_item; } diff --git a/xcode/Podfile b/xcode/Podfile index 9ee3adbe..39250778 100644 --- a/xcode/Podfile +++ b/xcode/Podfile @@ -1,11 +1,11 @@ -platform :ios, '9.0' -#inhibit_all_warnings! +platform :ios, '12.0' +inhibit_all_warnings! use_frameworks! target 'Jasonette' do # System - pod 'UICKeyChainStore', :git => 'https://github.com/jasonelle/ios-pod-uickeychainstore.git', :branch => 'jasonelle' + pod 'UICKeyChainStore', :git => 'https://github.com/jasonelle/ios-pod-uickeychainstore.git', :branch => 'jasonelle', :inhibit_warnings => true pod 'libPhoneNumber-iOS', :git => 'https://github.com/jasonelle/ios-pod-libphonenumber.git', :branch => 'jasonelle' pod 'DTFoundation', :git => 'https://github.com/jasonelle/ios-pod-dtfoundation.git', :branch => 'jasonelle' pod 'DTCoreText', :git => 'https://github.com/jasonelle/ios-pod-dtcoretext.git', :branch => 'jasonelle' @@ -25,14 +25,14 @@ target 'Jasonette' do pod 'SocketRocket', :git => 'https://github.com/jasonelle/ios-pod-socketrocket.git', :branch => 'jasonelle' pod 'AFNetworking', :git => 'https://github.com/jasonelle/ios-pod-afnetworking.git', :branch => 'jasonelle' pod 'TDOAuth' - pod 'AFOAuth2Manager' + pod 'AFOAuth2Manager', :git => 'https://github.com/jasonelle/ios-pod-afoauth2manager.git', :branch => 'jasonelle' ## TODO: Update to latest version - pod 'SDWebImage', :git => 'https://github.com/jasonelle/ios-pod-sdwebimage.git', :tag => '3.8.1', :inhibit_warnings => true + pod 'SDWebImage', :git => 'https://github.com/jasonelle/ios-pod-sdwebimage.git', :tag => '3.8.3', :inhibit_warnings => true # Audio pod 'IQAudioRecorderController' - pod 'FreeStreamer', :git => 'https://github.com/jasonelle/ios-pod-freestreamer.git', :branch => 'jasonelle' + pod 'FreeStreamer', :git => 'https://github.com/jasonelle/ios-pod-freestreamer.git', :branch => 'jasonelle', :inhibit_warnings => true # Views pod 'MBProgressHUD', '~> 1.0' @@ -46,7 +46,7 @@ target 'Jasonette' do pod 'BBBadgeBarButtonItem' pod 'REMenu', :git => 'https://github.com/jasonelle/ios-pod-remenu.git', :branch => 'jasonelle' - pod 'JDStatusBarNotification' # $util.toast + pod 'JDStatusBarNotification', :git => 'https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git', :inhibit_warnings => true # $util.toast pod 'HMSegmentedControl', :git => 'https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git', :branch => 'jasonelle' pod 'SWFrameButton' diff --git a/xcode/Podfile.lock b/xcode/Podfile.lock index a9c769df..ba153f26 100644 --- a/xcode/Podfile.lock +++ b/xcode/Podfile.lock @@ -1,21 +1,21 @@ PODS: - - AFNetworking (3.2.1): - - AFNetworking/NSURLSession (= 3.2.1) - - AFNetworking/Reachability (= 3.2.1) - - AFNetworking/Security (= 3.2.1) - - AFNetworking/Serialization (= 3.2.1) - - AFNetworking/UIKit (= 3.2.1) - - AFNetworking/NSURLSession (3.2.1): + - AFNetworking (4.0.1): + - AFNetworking/NSURLSession (= 4.0.1) + - AFNetworking/Reachability (= 4.0.1) + - AFNetworking/Security (= 4.0.1) + - AFNetworking/Serialization (= 4.0.1) + - AFNetworking/UIKit (= 4.0.1) + - AFNetworking/NSURLSession (4.0.1): - AFNetworking/Reachability - AFNetworking/Security - AFNetworking/Serialization - - AFNetworking/Reachability (3.2.1) - - AFNetworking/Security (3.2.1) - - AFNetworking/Serialization (3.2.1) - - AFNetworking/UIKit (3.2.1): + - AFNetworking/Reachability (4.0.1) + - AFNetworking/Security (4.0.1) + - AFNetworking/Serialization (4.0.1) + - AFNetworking/UIKit (4.0.1): - AFNetworking/NSURLSession - - AFOAuth2Manager (3.0.0): - - AFNetworking/NSURLSession (~> 3.0) + - AFOAuth2Manager (3.0.1): + - AFNetworking/NSURLSession (~> 4.0) - AHKActionSheet (0.5.4) - APAddressBook (0.3.2): - APAddressBook/Core (= 0.3.2) @@ -87,17 +87,17 @@ PODS: - DTFoundation/Core - DTFoundation/UIKit_BlocksAdditions (1.7.14): - DTFoundation/Core - - FLEX (3.0.0) + - FLEX (4.1.1) - FreeStreamer (4.0.0): - Reachability (~> 3.0) - HMSegmentedControl (1.5.5) - INTULocationManager (4.3.2) - IQAudioRecorderController (1.2.3): - SCSiriWaveformView - - JDStatusBarNotification (1.6.0) + - JDStatusBarNotification (1.6.1) - JSCoreBom (1.1.2) - libPhoneNumber-iOS (0.9.15) - - MBProgressHUD (1.1.0) + - MBProgressHUD (1.2.0) - NSGIF (1.2.4) - NSHash (1.2.0) - OMGHTTPURLRQ (3.2.4): @@ -107,24 +107,24 @@ PODS: - OMGHTTPURLRQ/FormURLEncode - OMGHTTPURLRQ/UserAgent - OMGHTTPURLRQ/UserAgent (3.2.4) - - PHFComposeBarView (2.0.2): + - PHFComposeBarView (2.1.0): - PHFDelegateChain (~> 1.0) - PHFDelegateChain (1.0.1) - Reachability (3.2) - REMenu (1.10) - - RMActionController (1.0.5) - - RMDateSelectionViewController (2.0.3): - - RMActionController (~> 1.0.5) + - RMActionController (1.3.1) + - RMDateSelectionViewController (2.3.1): + - RMActionController (~> 1.3.1) - SBJson (5.0.0) - SCSiriWaveformView (1.1.1) - - SDWebImage (3.8.1): - - SDWebImage/Core (= 3.8.1) - - SDWebImage/Core (3.8.1) - - SocketRocket (0.5.1) + - SDWebImage (3.8.3): + - SDWebImage/Core (= 3.8.3) + - SDWebImage/Core (3.8.3) + - SocketRocket (0.5.2) - SWFrameButton (1.2.2) - SWTableViewCell (0.3.7) - - SZTextView (1.2.2) - - TDOAuth (1.1.2): + - SZTextView (1.3.0) + - TDOAuth (1.3.0): - OMGHTTPURLRQ/UserAgent - TTTAttributedLabel (2.0.0) - TWMessageBarManager (1.8.1) @@ -132,7 +132,7 @@ PODS: DEPENDENCIES: - AFNetworking (from `https://github.com/jasonelle/ios-pod-afnetworking.git`, branch `jasonelle`) - - AFOAuth2Manager + - AFOAuth2Manager (from `https://github.com/jasonelle/ios-pod-afoauth2manager.git`, branch `jasonelle`) - AHKActionSheet - APAddressBook (from `https://github.com/jasonelle/ios-pod-apaddressbook.git`, branch `jasonelle`) - BBBadgeBarButtonItem @@ -146,7 +146,7 @@ DEPENDENCIES: - HMSegmentedControl (from `https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git`, branch `jasonelle`) - INTULocationManager - IQAudioRecorderController - - JDStatusBarNotification + - JDStatusBarNotification (from `https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git`) - JSCoreBom (from `https://github.com/jasonelle/ios-pod-jscorebom.git`, branch `jasonelle`) - libPhoneNumber-iOS (from `https://github.com/jasonelle/ios-pod-libphonenumber.git`, branch `jasonelle`) - MBProgressHUD (~> 1.0) @@ -158,7 +158,7 @@ DEPENDENCIES: - REMenu (from `https://github.com/jasonelle/ios-pod-remenu.git`, branch `jasonelle`) - RMDateSelectionViewController - SBJson (from `https://github.com/jasonelle/ios-pod-sbjson.git`, branch `jasonelle`) - - SDWebImage (from `https://github.com/jasonelle/ios-pod-sdwebimage.git`, tag `3.8.1`) + - SDWebImage (from `https://github.com/jasonelle/ios-pod-sdwebimage.git`, tag `3.8.3`) - SocketRocket (from `https://github.com/jasonelle/ios-pod-socketrocket.git`, branch `jasonelle`) - SWFrameButton - SWTableViewCell (from `https://github.com/jasonelle/ios-pod-swtableviewcell.git`, branch `jasonelle`) @@ -169,15 +169,13 @@ DEPENDENCIES: - UICKeyChainStore (from `https://github.com/jasonelle/ios-pod-uickeychainstore.git`, branch `jasonelle`) SPEC REPOS: - https://github.com/cocoapods/specs.git: - - AFOAuth2Manager + trunk: - AHKActionSheet - BBBadgeBarButtonItem - DAKeyboardControl - DHSmartScreenshot - INTULocationManager - IQAudioRecorderController - - JDStatusBarNotification - MBProgressHUD - NSGIF - PHFComposeBarView @@ -193,6 +191,9 @@ EXTERNAL SOURCES: AFNetworking: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-afnetworking.git + AFOAuth2Manager: + :branch: jasonelle + :git: https://github.com/jasonelle/ios-pod-afoauth2manager.git APAddressBook: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-apaddressbook.git @@ -213,6 +214,8 @@ EXTERNAL SOURCES: HMSegmentedControl: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git + JDStatusBarNotification: + :git: https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git JSCoreBom: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-jscorebom.git @@ -236,7 +239,7 @@ EXTERNAL SOURCES: :git: https://github.com/jasonelle/ios-pod-sbjson.git SDWebImage: :git: https://github.com/jasonelle/ios-pod-sdwebimage.git - :tag: 3.8.1 + :tag: 3.8.3 SocketRocket: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-socketrocket.git @@ -255,8 +258,11 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: AFNetworking: - :commit: 09ee0ddfa2c5a7cbec5cdcaee892384717ec0e43 + :commit: 7bdce9a849da1e9a7cc29fd4c45a92115145f3d7 :git: https://github.com/jasonelle/ios-pod-afnetworking.git + AFOAuth2Manager: + :commit: eba4ec281a23e9a7b261f5d9e024cb70a8372c67 + :git: https://github.com/jasonelle/ios-pod-afoauth2manager.git APAddressBook: :commit: 77888b7c4939550f84fed887945fbd22892a76c2 :git: https://github.com/jasonelle/ios-pod-apaddressbook.git @@ -267,17 +273,20 @@ CHECKOUT OPTIONS: :commit: 9fccb9b0de0b2eb40c6b33067b03f55f3803c153 :git: https://github.com/jasonelle/ios-pod-dtcoretext.git DTFoundation: - :commit: 91373daf35aafeaa94e626b9dce28a6a7276af57 + :commit: ec0004b82ef2dbc16a93132f498e22f824eab0cb :git: https://github.com/jasonelle/ios-pod-dtfoundation.git FLEX: - :commit: 226e0cd80324e7bed1d524334c2befff6b775b99 + :commit: 2a8cdbdb84c45a89ebd48f9caad9c0420609a348 :git: https://github.com/jasonelle/ios-pod-flex.git FreeStreamer: - :commit: 810f241e40f2f06ccf01b9022164ab896a72b12e + :commit: 43be718aaaafd5dec5ec31aa713cff36af4ee414 :git: https://github.com/jasonelle/ios-pod-freestreamer.git HMSegmentedControl: :commit: ade9a52141a7ba47f02cef9d785cf7384ec334a6 :git: https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git + JDStatusBarNotification: + :commit: 54598de580908a542b513a7d63519511f6dd42da + :git: https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git JSCoreBom: :commit: 5c2143b133248f475c30f1661a83a227c07fe138 :git: https://github.com/jasonelle/ios-pod-jscorebom.git @@ -301,12 +310,12 @@ CHECKOUT OPTIONS: :git: https://github.com/jasonelle/ios-pod-sbjson.git SDWebImage: :git: https://github.com/jasonelle/ios-pod-sdwebimage.git - :tag: 3.8.1 + :tag: 3.8.3 SocketRocket: - :commit: 07b348eb13dc978c3ca84e80975b147667184b5d + :commit: 43d48b7a1d94a5ec8add07fc4ff892ed0ba7cc78 :git: https://github.com/jasonelle/ios-pod-socketrocket.git SWTableViewCell: - :commit: 1c8845e25f520c959391bd79dc6cf271e0cf9a44 + :commit: 5cf396fe8f42dc199b157c96da29b64e9248c2e4 :git: https://github.com/jasonelle/ios-pod-swtableviewcell.git TTTAttributedLabel: :commit: b0f1f93d5d4368a7aaf52e848013a1b40b00dc3c @@ -319,8 +328,8 @@ CHECKOUT OPTIONS: :git: https://github.com/jasonelle/ios-pod-uickeychainstore.git SPEC CHECKSUMS: - AFNetworking: ef6403a1383e5a6fa4ca961d7d524b1898ce0a84 - AFOAuth2Manager: 0566da1be64883e339813d411229fdc9a84dab7c + AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce + AFOAuth2Manager: 3166f6214e646f0bb4bb77378775a45b2290f5c5 AHKActionSheet: f0b312b5c689f72924d231c39dae140ecd5c1d46 APAddressBook: e68ecaf95f2c323b625ae585a0d25fe505291286 BBBadgeBarButtonItem: c2fbca0bff18e21b70defc9438a8a5048008e7ca @@ -328,37 +337,37 @@ SPEC CHECKSUMS: DAKeyboardControl: 9d9bca22a5cc3c1d3cc61e24fbd208c3e84a3d2d DHSmartScreenshot: ee749048bd7126c4826748f98df3a4adc6ad6c78 DTCoreText: 67023bb51b26711d5f640c851f4845aea14c24c9 - DTFoundation: 25aa19bb7c6e225b1dfae195604fb8cf1da0ab4c - FLEX: e94a8d3d52adccff1b13f7ab7e98fddd4d3ff198 + DTFoundation: 2a31900f674de139045f4935a5656497fedda701 + FLEX: 81096107977a09836eb440173010ceeef01105d6 FreeStreamer: 7e9c976045701ac2f7e9c14c17245203c37bf2ea HMSegmentedControl: f514c6dad47aa3065e0ed2e8046b73efc71221b9 INTULocationManager: e5dc524611b0cd582f473bc56cc8c389adb2f338 IQAudioRecorderController: 69a67c2e0b87bd8746cbb4de175fd7a0bf820009 - JDStatusBarNotification: 21b616e7432284fea6eb0ce9eadc37c8038a5544 + JDStatusBarNotification: 6052ca9a51ee0bb058f8dc09cf1d63554ef0f743 JSCoreBom: 787dc056d5b933617a1772ca10fb8437fed0d790 libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75 - MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 + MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 NSGIF: 442808fd1667ebac3d09046c3f6d4bdd6720cded NSHash: 036c03781d372c288d332b512b203e7bb832e46e OMGHTTPURLRQ: 9ac96bdf5c90a33f75836630729ea1adc312a9ed - PHFComposeBarView: 758c73ce54be681df97223bc61543dd8828ae0d3 + PHFComposeBarView: 6382ab846e2f4d8634273c4a78d074bc5deed07f PHFDelegateChain: 491f9cd8a3fb8761f390ff05f74a0e168d48d285 - Reachability: a1dac0017d14de3504a13723b00f2b21f1130aea + Reachability: 07e976fb63651163096e04b1528d4d29a4a212aa REMenu: 30dad195930adf6c5eeb8041e3257aa60bf9fa49 - RMActionController: b83653e7452ed51492094d65dc82151c36443c03 - RMDateSelectionViewController: 354a0f1fe40bac01054528b7a8735f2973bbd813 + RMActionController: 535715be9f3d9eb96a838485370dcccee0dda597 + RMDateSelectionViewController: 1157d34245e6a1dda700e8a9c44417321d181951 SBJson: 72547475887af34b161b2b9dce8c20415d8b6c68 SCSiriWaveformView: 15b9dd6f94c7536e2032b34a35c6ff74d38c7411 - SDWebImage: 35f9627a3e44b4f292a8a8ce6a531fa488239b91 - SocketRocket: dbb1554b8fc288ef8ef370d6285aeca7361be31e + SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c + SocketRocket: 3dad623634f938c3930a9481428960d7e9fdbbf1 SWFrameButton: cd3cc4a8961e8975f4800c0f6d1d3c54c213eb87 SWTableViewCell: 2a94aadc9d47b2b611fa064566bf57948b95b579 - SZTextView: 3a81174dce0710a9ab069bc73a813e6df53b9c82 - TDOAuth: f7e356e834295b83c7b5066ee72a30f128c5f722 + SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1 + TDOAuth: 1334413592cff6947d243035810425ef79bc4ced TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 TWMessageBarManager: fd84e7948ba7968a2b5d9454859135761214ec56 UICKeyChainStore: 85db518bb1d294366d15ec9b92a416c4e670518f -PODFILE CHECKSUM: 013d012277f8fe4cfa5cfff0109e81a816fb5c9b +PODFILE CHECKSUM: 1fc4a3f74f5694a2d347d6d9e52bd7bdb6ce2282 -COCOAPODS: 1.5.3 +COCOAPODS: 1.9.1 diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFCompatibilityMacros.h b/xcode/Pods/AFNetworking/AFNetworking/AFCompatibilityMacros.h index cffbde25..1f0ab26d 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFCompatibilityMacros.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFCompatibilityMacros.h @@ -22,10 +22,16 @@ #ifndef AFCompatibilityMacros_h #define AFCompatibilityMacros_h +#ifdef API_AVAILABLE + #define AF_API_AVAILABLE(...) API_AVAILABLE(__VA_ARGS__) +#else + #define AF_API_AVAILABLE(...) +#endif // API_AVAILABLE + #ifdef API_UNAVAILABLE - #define AF_API_UNAVAILABLE(x) API_UNAVAILABLE(x) + #define AF_API_UNAVAILABLE(...) API_UNAVAILABLE(__VA_ARGS__) #else - #define AF_API_UNAVAILABLE(x) + #define AF_API_UNAVAILABLE(...) #endif // API_UNAVAILABLE #if __has_warning("-Wunguarded-availability-new") diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h index d8882fed..943fc22d 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h @@ -25,12 +25,6 @@ #endif #import -#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV -#import -#else -#import -#endif - #import "AFURLSessionManager.h" /** @@ -40,8 +34,6 @@ Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. - For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. - ## Methods to Override To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:`. @@ -138,39 +130,6 @@ NS_ASSUME_NONNULL_BEGIN /// @name Making HTTP Requests ///--------------------------- -/** - Creates and runs an `NSURLSessionDataTask` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - - -/** - Creates and runs an `NSURLSessionDataTask` with a `GET` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param downloadProgress A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: - */ -- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(nullable id)parameters - progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - /** Creates and runs an `NSURLSessionDataTask` with a `GET` request. @@ -190,21 +149,6 @@ NS_ASSUME_NONNULL_BEGIN success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; -/** - Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - /** Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. @@ -222,38 +166,6 @@ NS_ASSUME_NONNULL_BEGIN success:(nullable void (^)(NSURLSessionDataTask *task))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; -/** - Creates and runs an `NSURLSessionDataTask` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - -/** - Creates and runs an `NSURLSessionDataTask` with a `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - /** Creates and runs an `NSURLSessionDataTask` with a `POST` request. @@ -273,41 +185,6 @@ NS_ASSUME_NONNULL_BEGIN success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; -/** - Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - constructingBodyWithBlock:(nullable void (^)(id formData))block - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - -/** - Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. - @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: - */ -- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(nullable id)parameters - constructingBodyWithBlock:(nullable void (^)(id formData))block - progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; /** Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. @@ -329,21 +206,6 @@ NS_ASSUME_NONNULL_BEGIN success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; -/** - Creates and runs an `NSURLSessionDataTask` with a `PUT` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - /** Creates and runs an `NSURLSessionDataTask` with a `PUT` request. @@ -361,21 +223,6 @@ NS_ASSUME_NONNULL_BEGIN success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; -/** - Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. - - @param URLString The URL string used to create the request URL. - @param parameters The parameters to be encoded according to the client request serializer. - @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. - @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: - */ -- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; - /** Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. @@ -395,35 +242,43 @@ NS_ASSUME_NONNULL_BEGIN /** Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. - + @param URLString The URL string used to create the request URL. @param parameters The parameters to be encoded according to the client request serializer. + @param headers The headers appended to the default headers for this request. @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - + @see -dataTaskWithRequest:completionHandler: */ - (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(nullable id)parameters - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; /** - Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. - + Creates an `NSURLSessionDataTask` with a custom `HTTPMethod` request. + + @param method The HTTPMethod string used to create the request. @param URLString The URL string used to create the request URL. @param parameters The parameters to be encoded according to the client request serializer. @param headers The headers appended to the default headers for this request. + @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param downloadProgress A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. - - @see -dataTaskWithRequest:completionHandler: + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: */ -- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(nullable id)parameters - headers:(nullable NSDictionary *)headers - success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; +- (nullable NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + uploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress + downloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; @end diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m index 8a4f1436..b4ab5915 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m +++ b/xcode/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m @@ -118,30 +118,11 @@ - (void)setSecurityPolicy:(AFSecurityPolicy *)securityPolicy { #pragma mark - - (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - - return [self GET:URLString parameters:parameters headers:nil progress:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters - progress:(void (^)(NSProgress * _Nonnull))downloadProgress - success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success - failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure -{ - - return [self GET:URLString parameters:parameters headers:nil progress:downloadProgress success:success failure:failure]; -} - -- (NSURLSessionDataTask *)GET:(NSString *)URLString - parameters:(id)parameters + parameters:(nullable id)parameters headers:(nullable NSDictionary *)headers - progress:(void (^)(NSProgress * _Nonnull))downloadProgress - success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success - failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure + progress:(nullable void (^)(NSProgress * _Nonnull))downloadProgress + success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure { NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" @@ -159,18 +140,10 @@ - (NSURLSessionDataTask *)GET:(NSString *)URLString } - (NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self HEAD:URLString parameters:parameters headers:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)HEAD:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers - success:(void (^)(NSURLSessionDataTask * _Nonnull))success - failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + success:(nullable void (^)(NSURLSessionDataTask * _Nonnull))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure { NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters headers:headers uploadProgress:nil downloadProgress:nil success:^(NSURLSessionDataTask *task, __unused id responseObject) { if (success) { @@ -183,23 +156,6 @@ - (NSURLSessionDataTask *)HEAD:(NSString *)URLString return dataTask; } -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self POST:URLString parameters:parameters headers:nil progress:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - progress:(void (^)(NSProgress * _Nonnull))uploadProgress - success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success - failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure -{ - return [self POST:URLString parameters:parameters headers:nil progress:uploadProgress success:success failure:failure]; -} - - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(nullable id)parameters headers:(nullable NSDictionary *)headers @@ -216,34 +172,15 @@ - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers constructingBodyWithBlock:(nullable void (^)(id _Nonnull))block - success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure -{ - return [self POST:URLString parameters:parameters headers:nil constructingBodyWithBlock:block progress:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - constructingBodyWithBlock:(void (^)(id formData))block progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self POST:URLString parameters:parameters headers:nil constructingBodyWithBlock:block progress:uploadProgress success:success failure:failure]; -} - -- (NSURLSessionDataTask *)POST:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers - constructingBodyWithBlock:(void (^)(id _Nonnull))block - progress:(void (^)(NSProgress * _Nonnull))uploadProgress - success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure + success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure { NSError *serializationError = nil; NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; for (NSString *headerField in headers.keyEnumerator) { - [request addValue:headers[headerField] forHTTPHeaderField:headerField]; + [request setValue:headers[headerField] forHTTPHeaderField:headerField]; } if (serializationError) { if (failure) { @@ -273,18 +210,10 @@ - (NSURLSessionDataTask *)POST:(NSString *)URLString } - (NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self PUT:URLString parameters:parameters headers:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)PUT:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure { NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters headers:headers uploadProgress:nil downloadProgress:nil success:success failure:failure]; @@ -294,18 +223,10 @@ - (NSURLSessionDataTask *)PUT:(NSString *)URLString } - (NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self PATCH:URLString parameters:parameters headers:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)PATCH:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure { NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters headers:headers uploadProgress:nil downloadProgress:nil success:success failure:failure]; @@ -315,18 +236,10 @@ - (NSURLSessionDataTask *)PATCH:(NSString *)URLString } - (NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(id)parameters - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure -{ - return [self DELETE:URLString parameters:parameters headers:nil success:success failure:failure]; -} - -- (NSURLSessionDataTask *)DELETE:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers - success:(void (^)(NSURLSessionDataTask *task, id responseObject))success - failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers + success:(nullable void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure { NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters headers:headers uploadProgress:nil downloadProgress:nil success:success failure:failure]; @@ -335,19 +248,20 @@ - (NSURLSessionDataTask *)DELETE:(NSString *)URLString return dataTask; } + - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method URLString:(NSString *)URLString - parameters:(id)parameters - headers:(NSDictionary *)headers + parameters:(nullable id)parameters + headers:(nullable NSDictionary *)headers uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress - success:(void (^)(NSURLSessionDataTask *, id))success - failure:(void (^)(NSURLSessionDataTask *, NSError *))failure + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure { NSError *serializationError = nil; NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; for (NSString *headerField in headers.keyEnumerator) { - [request addValue:headers[headerField] forHTTPHeaderField:headerField]; + [request setValue:headers[headerField] forHTTPHeaderField:headerField]; } if (serializationError) { if (failure) { @@ -396,11 +310,7 @@ - (instancetype)initWithCoder:(NSCoder *)decoder { if (!configuration) { NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; if (configurationIdentifier) { -#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; -#else - configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; -#endif } } diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h index c005efa8..9b966a57 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h @@ -45,10 +45,10 @@ NS_ASSUME_NONNULL_BEGIN /** The certificates used to evaluate server trust according to the SSL pinning mode. - - By default, this property is set to any (`.cer`) certificates included in the target compiling AFNetworking. Note that if you are using AFNetworking as embedded framework, no certificates will be pinned by default. Use `certificatesInBundle` to load certificates from your target, and then create a new policy by calling `policyWithPinningMode:withPinnedCertificates`. Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. + + @see policyWithPinningMode:withPinnedCertificates: */ @property (nonatomic, strong, nullable) NSSet *pinnedCertificates; @@ -90,10 +90,14 @@ NS_ASSUME_NONNULL_BEGIN /** Creates and returns a security policy with the specified pinning mode. + + Certificates with the `.cer` extension found in the main bundle will be pinned. If you want more control over which certificates are pinned, please use `policyWithPinningMode:withPinnedCertificates:` instead. @param pinningMode The SSL pinning mode. @return A new security policy. + + @see -policyWithPinningMode:withPinnedCertificates: */ + (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; @@ -104,7 +108,10 @@ NS_ASSUME_NONNULL_BEGIN @param pinnedCertificates The certificates to pin against. @return A new security policy. - */ + + @see +certificatesInBundle: + @see -pinnedCertificates +*/ + (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates; ///------------------------------ diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m index 3cf892e1..da199aa3 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m +++ b/xcode/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m @@ -60,7 +60,10 @@ static id AFPublicKeyForCertificate(NSData *certificate) { policy = SecPolicyCreateBasicX509(); __Require_noErr_Quiet(SecTrustCreateWithCertificates(allowedCertificate, policy, &allowedTrust), _out); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); +#pragma clang diagnostic pop allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); @@ -83,7 +86,10 @@ static id AFPublicKeyForCertificate(NSData *certificate) { static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { BOOL isValid = NO; SecTrustResultType result; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); +#pragma clang diagnostic pop isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); @@ -115,10 +121,11 @@ static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { SecTrustRef trust; __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); - SecTrustResultType result; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); - +#pragma clang diagnostic pop [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; _out: @@ -158,17 +165,6 @@ + (NSSet *)certificatesInBundle:(NSBundle *)bundle { return [NSSet setWithSet:certificates]; } -+ (NSSet *)defaultPinnedCertificates { - static NSSet *_defaultPinnedCertificates = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - _defaultPinnedCertificates = [self certificatesInBundle:bundle]; - }); - - return _defaultPinnedCertificates; -} - + (instancetype)defaultPolicy { AFSecurityPolicy *securityPolicy = [[self alloc] init]; securityPolicy.SSLPinningMode = AFSSLPinningModeNone; @@ -177,7 +173,8 @@ + (instancetype)defaultPolicy { } + (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { - return [self policyWithPinningMode:pinningMode withPinnedCertificates:[self defaultPinnedCertificates]]; + NSSet *defaultPinnedCertificates = [self certificatesInBundle:[NSBundle mainBundle]]; + return [self policyWithPinningMode:pinningMode withPinnedCertificates:defaultPinnedCertificates]; } + (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates { @@ -247,7 +244,7 @@ - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust if (self.SSLPinningMode == AFSSLPinningModeNone) { return self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust); - } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + } else if (!self.allowInvalidCertificates && !AFServerTrustIsValid(serverTrust)) { return NO; } diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h b/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h index 694696b9..b17e871e 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.h @@ -216,7 +216,7 @@ forHTTPHeaderField:(NSString *)field; @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. */ -- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; +- (void)setQueryStringSerializationWithBlock:(nullable NSString * _Nullable (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; ///------------------------------- /// @name Creating Request Objects @@ -234,10 +234,10 @@ forHTTPHeaderField:(NSString *)field; @return An `NSMutableURLRequest` object. */ -- (NSMutableURLRequest *)requestWithMethod:(NSString *)method - URLString:(NSString *)URLString - parameters:(nullable id)parameters - error:(NSError * _Nullable __autoreleasing *)error; +- (nullable NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error; /** Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m index 75672f2b..f60b6f9d 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m @@ -313,7 +313,7 @@ - (NSDictionary *)HTTPRequestHeaders { - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field { - dispatch_barrier_async(self.requestHeaderModificationQueue, ^{ + dispatch_barrier_sync(self.requestHeaderModificationQueue, ^{ [self.mutableHTTPRequestHeaders setValue:value forKey:field]; }); } @@ -335,7 +335,7 @@ - (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username } - (void)clearAuthorizationHeader { - dispatch_barrier_async(self.requestHeaderModificationQueue, ^{ + dispatch_barrier_sync(self.requestHeaderModificationQueue, ^{ [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; }); } diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h b/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h index 490b721f..56a4d28a 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.h @@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN /** Recursively removes `NSNull` values from a JSON object. */ -id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions); +FOUNDATION_EXPORT id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions); /** The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. @@ -62,8 +62,6 @@ id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions - (instancetype)init; -@property (nonatomic, assign) NSStringEncoding stringEncoding DEPRECATED_MSG_ATTRIBUTE("The string encoding is never used. AFHTTPResponseSerializer only validates status codes and content types but does not try to decode the received data in any way."); - /** Creates and returns a serializer with default configuration. */ diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m index 3ddb2fa2..2715a1b3 100755 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m @@ -271,6 +271,10 @@ - (id)responseObjectForResponse:(NSURLResponse *)response #pragma mark - NSSecureCoding ++ (BOOL)supportsSecureCoding { + return YES; +} + - (instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (!self) { @@ -488,6 +492,10 @@ - (id)responseObjectForResponse:(NSURLResponse *)response #pragma mark - NSSecureCoding ++ (BOOL)supportsSecureCoding { + return YES; +} + - (instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (!self) { @@ -704,6 +712,10 @@ - (id)responseObjectForResponse:(NSURLResponse *)response #pragma mark - NSSecureCoding ++ (BOOL)supportsSecureCoding { + return YES; +} + - (instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (!self) { @@ -790,13 +802,18 @@ - (id)responseObjectForResponse:(NSURLResponse *)response #pragma mark - NSSecureCoding ++ (BOOL)supportsSecureCoding { + return YES; +} + - (instancetype)initWithCoder:(NSCoder *)decoder { self = [super initWithCoder:decoder]; if (!self) { return nil; } - self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + NSSet *classes = [NSSet setWithArray:@[[NSArray class], [AFHTTPResponseSerializer class]]]; + self.responseSerializers = [decoder decodeObjectOfClasses:classes forKey:NSStringFromSelector(@selector(responseSerializers))]; return self; } diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h index 93760114..88700c39 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h @@ -165,19 +165,6 @@ NS_ASSUME_NONNULL_BEGIN */ @property (nonatomic, strong, nullable) dispatch_group_t completionGroup; -///--------------------------------- -/// @name Working Around System Bugs -///--------------------------------- - -/** - Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. - - @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. - - @see https://github.com/AFNetworking/AFNetworking/issues/1675 - */ -@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; - ///--------------------- /// @name Initialization ///--------------------- @@ -191,13 +178,6 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; -/** - Invalidates the managed session, optionally canceling pending tasks. - - @param cancelPendingTasks Whether or not to cancel pending tasks. - */ -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks DEPRECATED_ATTRIBUTE; - /** Invalidates the managed session, optionally canceling pending tasks and optionally resets given session. @@ -210,15 +190,6 @@ NS_ASSUME_NONNULL_BEGIN /// @name Running Data Tasks ///------------------------- -/** - Creates an `NSURLSessionDataTask` with the specified request. - - @param request The HTTP request for the request. - @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. - */ -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler DEPRECATED_ATTRIBUTE; - /** Creates an `NSURLSessionDataTask` with the specified request. @@ -344,6 +315,11 @@ NS_ASSUME_NONNULL_BEGIN Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + + @warning Implementing a session authentication challenge handler yourself totally bypasses AFNetworking's security policy defined in `AFSecurityPolicy`. Make sure you fully understand the implications before implementing a custom session authentication challenge handler. If you do not want to bypass AFNetworking's security policy, use `setTaskDidReceiveAuthenticationChallengeBlock:` instead. + + @see -securityPolicy + @see -setTaskDidReceiveAuthenticationChallengeBlock: */ - (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; @@ -367,10 +343,23 @@ NS_ASSUME_NONNULL_BEGIN /** Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. - - @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + + @param authenticationChallengeHandler A block object to be executed when a session task has received a request specific authentication challenge. + + When implementing an authentication challenge handler, you should check the authentication method first (`challenge.protectionSpace.authenticationMethod `) to decide if you want to handle the authentication challenge yourself or if you want AFNetworking to handle it. If you want AFNetworking to handle the authentication challenge, just return `@(NSURLSessionAuthChallengePerformDefaultHandling)`. For example, you certainly want AFNetworking to handle certificate validation (i.e. authentication method == `NSURLAuthenticationMethodServerTrust`) as defined by the security policy. If you want to handle the challenge yourself, you have four options: + + 1. Return `nil` from the authentication challenge handler. You **MUST** call the completion handler with a disposition and credentials yourself. Use this if you need to present a user interface to let the user enter their credentials. + 2. Return an `NSError` object from the authentication challenge handler. You **MUST NOT** call the completion handler when returning an `NSError `. The returned error will be reported in the completion handler of the task. Use this if you need to abort an authentication challenge with a specific error. + 3. Return an `NSURLCredential` object from the authentication challenge handler. You **MUST NOT** call the completion handler when returning an `NSURLCredential`. The returned credentials will be used to fulfil the challenge. Use this when you can get credentials without presenting a user interface. + 4. Return an `NSNumber` object wrapping an `NSURLSessionAuthChallengeDisposition`. Supported values are `@(NSURLSessionAuthChallengePerformDefaultHandling)`, `@(NSURLSessionAuthChallengeCancelAuthenticationChallenge)` and `@(NSURLSessionAuthChallengeRejectProtectionSpace)`. You **MUST NOT** call the completion handler when returning an `NSNumber`. + + If you return anything else from the authentication challenge handler, an exception will be thrown. + + For more information about how URL sessions handle the different types of authentication challenges, see [NSURLSession](https://developer.apple.com/reference/foundation/nsurlsession?language=objc) and [URL Session Programming Guide](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html). + + @see -securityPolicy */ -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; +- (void)setAuthenticationChallengeHandler:(id (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, void (^completionHandler)(NSURLSessionAuthChallengeDisposition , NSURLCredential * _Nullable)))authenticationChallengeHandler; /** Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. @@ -392,7 +381,7 @@ NS_ASSUME_NONNULL_BEGIN @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any metrics that were collected in the process of executing the task. */ #if AF_CAN_INCLUDE_SESSION_TASK_METRICS -- (void)setTaskDidFinishCollectingMetricsBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSURLSessionTaskMetrics * _Nullable metrics))block API_AVAILABLE(ios(10.0)); +- (void)setTaskDidFinishCollectingMetricsBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSURLSessionTaskMetrics * _Nullable metrics))block AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)); #endif ///------------------------------------------- /// @name Setting Data Task Delegate Callbacks @@ -484,6 +473,11 @@ FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidSuspendNotification; */ FOUNDATION_EXPORT NSString * const AFURLSessionDidInvalidateNotification; +/** + Posted when a session download task finished moving the temporary download file to a specified destination successfully. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification; + /** Posted when a session download task encountered an error when moving the temporary download file to a specified destination. */ diff --git a/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m index 6f639ba3..c8b6810e 100644 --- a/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m +++ b/xcode/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m @@ -22,35 +22,6 @@ #import "AFURLSessionManager.h" #import -#ifndef NSFoundationVersionNumber_iOS_8_0 -#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug 1140.11 -#else -#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug NSFoundationVersionNumber_iOS_8_0 -#endif - -static dispatch_queue_t url_session_manager_creation_queue() { - static dispatch_queue_t af_url_session_manager_creation_queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); - }); - - return af_url_session_manager_creation_queue; -} - -static void url_session_manager_create_task_safely(dispatch_block_t _Nonnull block) { - if (block != NULL) { - if (NSFoundationVersionNumber < NSFoundationVersionNumber_With_Fixed_5871104061079552_bug) { - // Fix of bug - // Open Radar:http://openradar.appspot.com/radar?id=5871104061079552 (status: Fixed in iOS8) - // Issue about:https://github.com/AFNetworking/AFNetworking/issues/2093 - dispatch_sync(url_session_manager_creation_queue(), block); - } else { - block(); - } - } -} - static dispatch_queue_t url_session_manager_processing_queue() { static dispatch_queue_t af_url_session_manager_processing_queue; static dispatch_once_t onceToken; @@ -75,6 +46,7 @@ static dispatch_group_t url_session_manager_completion_group() { NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification = @"com.alamofire.networking.session.download.file-manager-succeed"; NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; @@ -86,21 +58,19 @@ static dispatch_group_t url_session_manager_completion_group() { static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; -static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; - typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef id (^AFURLSessionTaskAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, void (^completionHandler)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential)); typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); #if AF_CAN_INCLUDE_SESSION_TASK_METRICS -API_AVAILABLE(ios(10.0)) -typedef void (^AFURLSessionTaskDidFinishCollectingMetricsBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLSessionTaskMetrics * metrics); +typedef void (^AFURLSessionTaskDidFinishCollectingMetricsBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLSessionTaskMetrics * metrics) AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)); #endif typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); @@ -115,10 +85,8 @@ static dispatch_group_t url_session_manager_completion_group() { typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); - #pragma mark - - @interface AFURLSessionManagerTaskDelegate : NSObject - (instancetype)initWithTask:(NSURLSessionTask *)task; @property (nonatomic, weak) AFURLSessionManager *manager; @@ -127,10 +95,7 @@ - (instancetype)initWithTask:(NSURLSessionTask *)task; @property (nonatomic, strong) NSProgress *downloadProgress; @property (nonatomic, copy) NSURL *downloadFileURL; #if AF_CAN_INCLUDE_SESSION_TASK_METRICS -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" -@property (nonatomic, strong) NSURLSessionTaskMetrics *sessionTaskMetrics; -#pragma clang diagnosric pop +@property (nonatomic, strong) NSURLSessionTaskMetrics *sessionTaskMetrics AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)); #endif @property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; @property (nonatomic, copy) AFURLSessionTaskProgressBlock uploadProgressBlock; @@ -163,7 +128,7 @@ - (instancetype)initWithTask:(NSURLSessionTask *)task { [weakTask suspend]; }; #if AF_CAN_USE_AT_AVAILABLE - if (@available(iOS 9, macOS 10.11, *)) + if (@available(macOS 10.11, *)) #else if ([progress respondsToSelector:@selector(setResumingHandler:)]) #endif @@ -201,17 +166,20 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N } } +static const void * const AuthenticationChallengeErrorKey = &AuthenticationChallengeErrorKey; + #pragma mark - NSURLSessionTaskDelegate - (void)URLSession:(__unused NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { + error = objc_getAssociatedObject(task, AuthenticationChallengeErrorKey) ?: error; __strong AFURLSessionManager *manager = self.manager; __block id responseObject = nil; - __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; //Performance Improvement from #2672 @@ -281,7 +249,7 @@ - (void)URLSession:(__unused NSURLSession *)session #if AF_CAN_INCLUDE_SESSION_TASK_METRICS - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task -didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(ios(10.0)){ +didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)) { self.sessionTaskMetrics = metrics; } #endif @@ -339,6 +307,8 @@ - (void)URLSession:(NSURLSession *)session if (![[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]) { [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } else { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification object:downloadTask userInfo:nil]; } } } @@ -486,12 +456,12 @@ @interface AFURLSessionManager () @property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; @property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession AF_API_UNAVAILABLE(macos); @property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskAuthenticationChallengeBlock authenticationChallengeHandler; @property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; @property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; @property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; #if AF_CAN_INCLUDE_SESSION_TASK_METRICS -@property (readwrite, nonatomic, copy) AFURLSessionTaskDidFinishCollectingMetricsBlock taskDidFinishCollectingMetrics; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidFinishCollectingMetricsBlock taskDidFinishCollectingMetrics AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)); #endif @property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; @property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; @@ -536,20 +506,17 @@ - (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)config self.lock = [[NSLock alloc] init]; self.lock.name = AFURLSessionManagerLockName; - __weak typeof(self) weakSelf = self; [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { - - __strong typeof(weakSelf) strongSelf = weakSelf; for (NSURLSessionDataTask *task in dataTasks) { - [strongSelf addDelegateForDataTask:task uploadProgress:nil downloadProgress:nil completionHandler:nil]; + [self addDelegateForDataTask:task uploadProgress:nil downloadProgress:nil completionHandler:nil]; } for (NSURLSessionUploadTask *uploadTask in uploadTasks) { - [strongSelf addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; } for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { - [strongSelf addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; } }]; @@ -730,10 +697,6 @@ - (NSArray *)downloadTasks { #pragma mark - -- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { - [self invalidateSessionCancelingTasks:cancelPendingTasks resetSession:NO]; -} - - (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks resetSession:(BOOL)resetSession { if (cancelPendingTasks) { [self.session invalidateAndCancel]; @@ -766,21 +729,12 @@ - (void)removeNotificationObserverForTask:(NSURLSessionTask *)task { #pragma mark - -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler -{ - return [self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:completionHandler]; -} - - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler { - __block NSURLSessionDataTask *dataTask = nil; - url_session_manager_create_task_safely(^{ - dataTask = [self.session dataTaskWithRequest:request]; - }); + NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request]; [self addDelegateForDataTask:dataTask uploadProgress:uploadProgressBlock downloadProgress:downloadProgressBlock completionHandler:completionHandler]; @@ -794,17 +748,7 @@ - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { - __block NSURLSessionUploadTask *uploadTask = nil; - url_session_manager_create_task_safely(^{ - uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - - // uploadTask may be nil on iOS7 because uploadTaskWithRequest:fromFile: may return nil despite being documented as nonnull (https://devforums.apple.com/message/926113#926113) - if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { - for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { - uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; - } - } - }); + NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; if (uploadTask) { [self addDelegateForUploadTask:uploadTask @@ -820,11 +764,8 @@ - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { - __block NSURLSessionUploadTask *uploadTask = nil; - url_session_manager_create_task_safely(^{ - uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; - }); - + NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; return uploadTask; @@ -834,10 +775,7 @@ - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)reques progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler { - __block NSURLSessionUploadTask *uploadTask = nil; - url_session_manager_create_task_safely(^{ - uploadTask = [self.session uploadTaskWithStreamedRequest:request]; - }); + NSURLSessionUploadTask *uploadTask = [self.session uploadTaskWithStreamedRequest:request]; [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; @@ -851,11 +789,8 @@ - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler { - __block NSURLSessionDownloadTask *downloadTask = nil; - url_session_manager_create_task_safely(^{ - downloadTask = [self.session downloadTaskWithRequest:request]; - }); - + NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request]; + [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; return downloadTask; @@ -866,10 +801,7 @@ - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler { - __block NSURLSessionDownloadTask *downloadTask = nil; - url_session_manager_create_task_safely(^{ - downloadTask = [self.session downloadTaskWithResumeData:resumeData]; - }); + NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithResumeData:resumeData]; [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; @@ -911,10 +843,6 @@ - (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession self.taskWillPerformHTTPRedirection = block; } -- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { - self.taskDidReceiveAuthenticationChallenge = block; -} - - (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { self.taskDidSendBodyData = block; } @@ -924,7 +852,7 @@ - (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTas } #if AF_CAN_INCLUDE_SESSION_TASK_METRICS -- (void)setTaskDidFinishCollectingMetricsBlock:(void (^)(NSURLSession * _Nonnull, NSURLSessionTask * _Nonnull, NSURLSessionTaskMetrics * _Nullable))block { +- (void)setTaskDidFinishCollectingMetricsBlock:(void (^)(NSURLSession * _Nonnull, NSURLSessionTask * _Nonnull, NSURLSessionTaskMetrics * _Nullable))block AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)) { self.taskDidFinishCollectingMetrics = block; } #endif @@ -968,7 +896,9 @@ - (NSString *)description { } - (BOOL)respondsToSelector:(SEL)selector { - if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + if (selector == @selector(URLSession:didReceiveChallenge:completionHandler:)) { + return self.sessionDidReceiveAuthenticationChallenge != nil; + } else if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { return self.taskWillPerformHTTPRedirection != nil; } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { return self.dataTaskDidReceiveResponse != nil; @@ -1000,27 +930,10 @@ - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { - NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; + NSAssert(self.sessionDidReceiveAuthenticationChallenge != nil, @"`respondsToSelector:` implementation forces `URLSession:didReceiveChallenge:completionHandler:` to be called only if `self.sessionDidReceiveAuthenticationChallenge` is not nil"); - if (self.sessionDidReceiveAuthenticationChallenge) { - disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); - } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - if (credential) { - disposition = NSURLSessionAuthChallengeUseCredential; - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } - } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; - } - } + NSURLCredential *credential = nil; + NSURLSessionAuthChallengeDisposition disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); if (completionHandler) { completionHandler(disposition, credential); @@ -1051,21 +964,40 @@ - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { + BOOL evaluateServerTrust = NO; NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; - __block NSURLCredential *credential = nil; + NSURLCredential *credential = nil; - if (self.taskDidReceiveAuthenticationChallenge) { - disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + if (self.authenticationChallengeHandler) { + id result = self.authenticationChallengeHandler(session, task, challenge, completionHandler); + if (result == nil) { + return; + } else if ([result isKindOfClass:NSError.class]) { + objc_setAssociatedObject(task, AuthenticationChallengeErrorKey, result, OBJC_ASSOCIATION_RETAIN); + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } else if ([result isKindOfClass:NSURLCredential.class]) { + credential = result; + disposition = NSURLSessionAuthChallengeUseCredential; + } else if ([result isKindOfClass:NSNumber.class]) { + disposition = [result integerValue]; + NSAssert(disposition == NSURLSessionAuthChallengePerformDefaultHandling || disposition == NSURLSessionAuthChallengeCancelAuthenticationChallenge || disposition == NSURLSessionAuthChallengeRejectProtectionSpace, @""); + evaluateServerTrust = disposition == NSURLSessionAuthChallengePerformDefaultHandling && [challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; + } else { + @throw [NSException exceptionWithName:@"Invalid Return Value" reason:@"The return value from the authentication challenge handler must be nil, an NSError, an NSURLCredential or an NSNumber." userInfo:nil]; + } } else { - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { - disposition = NSURLSessionAuthChallengeUseCredential; - credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - } else { - disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; - } + evaluateServerTrust = [challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; + } + + if (evaluateServerTrust) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; } else { - disposition = NSURLSessionAuthChallengePerformDefaultHandling; + objc_setAssociatedObject(task, AuthenticationChallengeErrorKey, + [self serverTrustErrorForServerTrust:challenge.protectionSpace.serverTrust url:task.currentRequest.URL], + OBJC_ASSOCIATION_RETAIN); + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; } } @@ -1074,6 +1006,31 @@ - (void)URLSession:(NSURLSession *)session } } +- (nonnull NSError *)serverTrustErrorForServerTrust:(nullable SecTrustRef)serverTrust url:(nullable NSURL *)url +{ + NSBundle *CFNetworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.CFNetwork"]; + NSString *defaultValue = @"The certificate for this server is invalid. You might be connecting to a server that is pretending to be “%@” which could put your confidential information at risk."; + NSString *descriptionFormat = NSLocalizedStringWithDefaultValue(@"Err-1202.w", nil, CFNetworkBundle, defaultValue, @"") ?: defaultValue; + NSString *localizedDescription = [descriptionFormat componentsSeparatedByString:@"%@"].count <= 2 ? [NSString localizedStringWithFormat:descriptionFormat, url.host] : descriptionFormat; + NSMutableDictionary *userInfo = [@{ + NSLocalizedDescriptionKey: localizedDescription + } mutableCopy]; + + if (serverTrust) { + userInfo[NSURLErrorFailingURLPeerTrustErrorKey] = (__bridge id)serverTrust; + } + + if (url) { + userInfo[NSURLErrorFailingURLErrorKey] = url; + + if (url.absoluteString) { + userInfo[NSURLErrorFailingURLStringErrorKey] = url.absoluteString; + } + } + + return [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorServerCertificateUntrusted userInfo:userInfo]; +} + - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler @@ -1138,8 +1095,8 @@ - (void)URLSession:(NSURLSession *)session #if AF_CAN_INCLUDE_SESSION_TASK_METRICS - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task -didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics -API_AVAILABLE(ios(10.0)){ +didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics AF_API_AVAILABLE(ios(10), macosx(10.12), watchos(3), tvos(10)) +{ AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; // Metrics may fire after URLSession:task:didCompleteWithError: is called, delegate may be nil if (delegate) { @@ -1239,6 +1196,8 @@ - (void)URLSession:(NSURLSession *)session if (![[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]) { [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } else { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidMoveFileSuccessfullyNotification object:downloadTask userInfo:nil]; } return; diff --git a/xcode/Pods/AFNetworking/LICENSE b/xcode/Pods/AFNetworking/LICENSE index d7076267..f611f42f 100644 --- a/xcode/Pods/AFNetworking/LICENSE +++ b/xcode/Pods/AFNetworking/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2016 Alamofire Software Foundation (http://alamofire.org/) +Copyright (c) 2011-2020 Alamofire Software Foundation (http://alamofire.org/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/xcode/Pods/AFNetworking/README.md b/xcode/Pods/AFNetworking/README.md index 023eedc5..d193dfe8 100644 --- a/xcode/Pods/AFNetworking/README.md +++ b/xcode/Pods/AFNetworking/README.md @@ -2,8 +2,7 @@ AFNetworking

-[![Build Status](https://travis-ci.org/AFNetworking/AFNetworking.svg)](https://travis-ci.org/AFNetworking/AFNetworking) -[![codecov.io](https://codecov.io/github/AFNetworking/AFNetworking/coverage.svg?branch=master)](https://codecov.io/github/AFNetworking/AFNetworking?branch=master) +[![Build Status](https://github.com/AFNetworking/AFNetworking/workflows/AFNetworking%20CI/badge.svg?branch=master)](https://github.com/AFNetworking/AFNetworking/actions) [![CocoaPods Compatible](https://img.shields.io/cocoapods/v/AFNetworking.svg)](https://img.shields.io/cocoapods/v/AFNetworking.svg) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Platform](https://img.shields.io/cocoapods/p/AFNetworking.svg?style=flat)](http://cocoadocs.org/docsets/AFNetworking) @@ -13,14 +12,10 @@ AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvO Perhaps the most important feature of all, however, is the amazing community of developers who use and contribute to AFNetworking every day. AFNetworking powers some of the most popular and critically-acclaimed apps on the iPhone, iPad, and Mac. -Choose AFNetworking for your next project, or migrate over your existing projects—you'll be happy you did! - ## How To Get Started - [Download AFNetworking](https://github.com/AFNetworking/AFNetworking/archive/master.zip) and try out the included Mac and iPhone example apps - Read the ["Getting Started" guide](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking), [FAQ](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ), or [other articles on the Wiki](https://github.com/AFNetworking/AFNetworking/wiki) -- Check out the [documentation](http://cocoadocs.org/docsets/AFNetworking/) for a comprehensive look at all of the APIs available in AFNetworking -- Read the [AFNetworking 3.0 Migration Guide](https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-3.0-Migration-Guide) for an overview of the architectural changes from 2.0. ## Communication @@ -35,56 +30,37 @@ AFNetworking supports multiple methods for installing the library in a project. ## Installation with CocoaPods -[CocoaPods](http://cocoapods.org) is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries like AFNetworking in your projects. See the ["Getting Started" guide for more information](https://github.com/AFNetworking/AFNetworking/wiki/Getting-Started-with-AFNetworking). You can install it with the following command: - -```bash -$ gem install cocoapods -``` - -> CocoaPods 0.39.0+ is required to build AFNetworking 3.0.0+. - -#### Podfile - To integrate AFNetworking into your Xcode project using CocoaPods, specify it in your `Podfile`: ```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' - -target 'TargetName' do -pod 'AFNetworking', '~> 3.0' -end +pod 'AFNetworking', '~> 4.0' ``` -Then, run the following command: +### Installation with Swift Package Manager -```bash -$ pod install -``` - -### Installation with Carthage +Once you have your Swift package set up, adding AFNetworking as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. +```swift +dependencies: [ + .package(url: "https://github.com/AFNetworking/AFNetworking.git", .upToNextMajor(from: "4.0.0")) +] +``` -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: +> Note: AFNetworking's Swift package does not include it's UIKit extensions. -```bash -$ brew update -$ brew install carthage -``` +### Installation with Carthage -To integrate AFNetworking into your Xcode project using Carthage, specify it in your `Cartfile`: +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate AFNetworking, add the following to your `Cartfile`. ```ogdl -github "AFNetworking/AFNetworking" ~> 3.0 +github "AFNetworking/AFNetworking" ~> 4.0 ``` -Run `carthage` to build the framework and drag the built `AFNetworking.framework` into your Xcode project. - ## Requirements | AFNetworking Version | Minimum iOS Target | Minimum macOS Target | Minimum watchOS Target | Minimum tvOS Target | Notes | |:--------------------:|:---------------------------:|:----------------------------:|:----------------------------:|:----------------------------:|:-------------------------------------------------------------------------:| +| 4.x | iOS 9 | macOS 10.10 | watchOS 2.0 | tvOS 9.0 | Xcode 11+ is required. | | 3.x | iOS 7 | OS X 10.9 | watchOS 2.0 | tvOS 9.0 | Xcode 7+ is required. `NSURLConnectionOperation` support has been removed. | | 2.6 -> 2.6.3 | iOS 7 | OS X 10.9 | watchOS 2.0 | n/a | Xcode 7+ is required. | | 2.0 -> 2.5.4 | iOS 6 | OS X 10.8 | n/a | n/a | Xcode 5+ is required. `NSURLSession` subspec requires iOS 7 or OS X 10.9. | diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h index 7e25e373..3bf5a320 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.h @@ -67,7 +67,7 @@ typedef NS_ENUM(NSInteger, AFImageDownloadPrioritization) { /** Defines the order prioritization of incoming download requests being inserted into the queue. `AFImageDownloadPrioritizationFIFO` by default. */ -@property (nonatomic, assign) AFImageDownloadPrioritization downloadPrioritizaton; +@property (nonatomic, assign) AFImageDownloadPrioritization downloadPrioritization; /** The shared default instance of `AFImageDownloader` initialized with default values. diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m index 74bbab0c..008a7828 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFImageDownloader.m @@ -109,20 +109,24 @@ @interface AFImageDownloader () @implementation AFImageDownloader + (NSURLCache *)defaultURLCache { + NSUInteger memoryCapacity = 20 * 1024 * 1024; // 20MB + NSUInteger diskCapacity = 150 * 1024 * 1024; // 150MB + NSURL *cacheURL = [[[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory + inDomain:NSUserDomainMask + appropriateForURL:nil + create:YES + error:nil] + URLByAppendingPathComponent:@"com.alamofire.imagedownloader"]; - // It's been discovered that a crash will occur on certain versions - // of iOS if you customize the cache. - // - // More info can be found here: https://devforums.apple.com/message/1102182#1102182 - // - // When iOS 7 support is dropped, this should be modified to use - // NSProcessInfo methods instead. - if ([[[UIDevice currentDevice] systemVersion] compare:@"8.2" options:NSNumericSearch] == NSOrderedAscending) { - return [NSURLCache sharedURLCache]; - } - return [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024 - diskCapacity:150 * 1024 * 1024 - diskPath:@"com.alamofire.imagedownloader"]; +#if TARGET_OS_MACCATALYST + return [[NSURLCache alloc] initWithMemoryCapacity:memoryCapacity + diskCapacity:diskCapacity + directoryURL:cacheURL]; +#else + return [[NSURLCache alloc] initWithMemoryCapacity:memoryCapacity + diskCapacity:diskCapacity + diskPath:[cacheURL path]]; +#endif } + (NSURLSessionConfiguration *)defaultURLSessionConfiguration { @@ -163,7 +167,7 @@ - (instancetype)initWithSessionManager:(AFHTTPSessionManager *)sessionManager if (self = [super init]) { self.sessionManager = sessionManager; - self.downloadPrioritizaton = downloadPrioritization; + self.downloadPrioritization = downloadPrioritization; self.maximumActiveDownloads = maximumActiveDownloads; self.imageCache = imageCache; @@ -333,7 +337,7 @@ - (void)cancelTaskForImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloa } } - if (mergedTask.responseHandlers.count == 0 && mergedTask.task.state == NSURLSessionTaskStateSuspended) { + if (mergedTask.responseHandlers.count == 0) { [mergedTask.task cancel]; [self removeMergedTaskWithURLIdentifier:URLIdentifier]; } @@ -383,7 +387,7 @@ - (void)startMergedTask:(AFImageDownloaderMergedTask *)mergedTask { } - (void)enqueueMergedTask:(AFImageDownloaderMergedTask *)mergedTask { - switch (self.downloadPrioritizaton) { + switch (self.downloadPrioritization) { case AFImageDownloadPrioritizationFIFO: [self.queuedMergedTasks addObject:mergedTask]; break; diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m index e6f9b65e..8cb5677e 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m @@ -109,11 +109,9 @@ - (BOOL)isNetworkActivityOccurring { - (void)setNetworkActivityIndicatorVisible:(BOOL)networkActivityIndicatorVisible { if (_networkActivityIndicatorVisible != networkActivityIndicatorVisible) { - [self willChangeValueForKey:@"networkActivityIndicatorVisible"]; @synchronized(self) { - _networkActivityIndicatorVisible = networkActivityIndicatorVisible; + _networkActivityIndicatorVisible = networkActivityIndicatorVisible; } - [self didChangeValueForKey:@"networkActivityIndicatorVisible"]; if (self.networkActivityActionBlock) { self.networkActivityActionBlock(networkActivityIndicatorVisible); } else { @@ -122,35 +120,20 @@ - (void)setNetworkActivityIndicatorVisible:(BOOL)networkActivityIndicatorVisible } } -- (void)setActivityCount:(NSInteger)activityCount { - @synchronized(self) { - _activityCount = activityCount; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [self updateCurrentStateForNetworkActivityChange]; - }); -} - (void)incrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { - _activityCount++; - } - [self didChangeValueForKey:@"activityCount"]; - + @synchronized(self) { + self.activityCount++; + } dispatch_async(dispatch_get_main_queue(), ^{ [self updateCurrentStateForNetworkActivityChange]; }); } - (void)decrementActivityCount { - [self willChangeValueForKey:@"activityCount"]; - @synchronized(self) { - _activityCount = MAX(_activityCount - 1, 0); - } - [self didChangeValueForKey:@"activityCount"]; - + @synchronized(self) { + self.activityCount = MAX(_activityCount - 1, 0); + } dispatch_async(dispatch_get_main_queue(), ^{ [self updateCurrentStateForNetworkActivityChange]; }); @@ -172,7 +155,6 @@ - (void)networkRequestDidFinish:(NSNotification *)notification { - (void)setCurrentState:(AFNetworkActivityManagerState)currentState { @synchronized(self) { if (_currentState != currentState) { - [self willChangeValueForKey:@"currentState"]; _currentState = currentState; switch (currentState) { case AFNetworkActivityManagerStateNotActive: @@ -191,9 +173,7 @@ - (void)setCurrentState:(AFNetworkActivityManagerState)currentState { [self startCompletionDelayTimer]; break; } - [self didChangeValueForKey:@"currentState"]; } - } } diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m index 6ac02261..03aaf2a8 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.m @@ -103,11 +103,11 @@ @implementation UIButton (AFNetworking) + (AFImageDownloader *)sharedImageDownloader { - return objc_getAssociatedObject(self, @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; + return objc_getAssociatedObject([UIButton class], @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; } + (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader { - objc_setAssociatedObject(self, @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject([UIButton class], @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } #pragma mark - diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m index d1d615fb..8ae49509 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.m @@ -48,11 +48,11 @@ - (void)af_setActiveImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownload @implementation UIImageView (AFNetworking) + (AFImageDownloader *)sharedImageDownloader { - return objc_getAssociatedObject(self, @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; + return objc_getAssociatedObject([UIImageView class], @selector(sharedImageDownloader)) ?: [AFImageDownloader defaultInstance]; } + (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader { - objc_setAssociatedObject(self, @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject([UIImageView class], @selector(sharedImageDownloader), imageDownloader, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } #pragma mark - diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h index 10167edc..ecb96894 100644 --- a/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h @@ -20,22 +20,25 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#if TARGET_OS_IOS || TARGET_OS_TV -#import +#import #ifndef _UIKIT_AFNETWORKING_ #define _UIKIT_AFNETWORKING_ -#if TARGET_OS_IOS +#if TARGET_OS_IOS || TARGET_OS_TV #import "AFAutoPurgingImageCache.h" #import "AFImageDownloader.h" - #import "AFNetworkActivityIndicatorManager.h" - #import "UIRefreshControl+AFNetworking.h" -#endif - #import "UIActivityIndicatorView+AFNetworking.h" #import "UIButton+AFNetworking.h" + #import "UIImage+AFNetworking.h" #import "UIImageView+AFNetworking.h" #import "UIProgressView+AFNetworking.h" -#endif /* _UIKIT_AFNETWORKING_ */ #endif + +#if TARGET_OS_IOS + #import "AFNetworkActivityIndicatorManager.h" + #import "UIRefreshControl+AFNetworking.h" + #import "WKWebView+AFNetworking.h" +#endif + +#endif /* _UIKIT_AFNETWORKING_ */ diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.h b/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.h new file mode 100644 index 00000000..680fedff --- /dev/null +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.h @@ -0,0 +1,80 @@ +// WkWebView+AFNetworking.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 + +#import + +#if TARGET_OS_IOS + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@class AFHTTPSessionManager; + +@interface WKWebView (AFNetworking) + +/** + The session manager used to download all request + */ +@property (nonatomic, strong) AFHTTPSessionManager *sessionManager; + +/** + Asynchronously loads the specified request. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param navigation The WKNavigation object that containts information for tracking the loading progress of a webpage. This must not be `nil`. + @param progress A progress object monitoring the current download progress. + @param success A block object to be executed when the request finishes loading successfully. This block returns the HTML string to be loaded by the web view, and takes two arguments: the response, and the response string. + @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + navigation:(WKNavigation * _Nonnull)navigation + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(nullable void (^)(NSError *error))failure; + +/** + Asynchronously loads the data associated with a particular request with a specified MIME type and text encoding. + + @param request A URL request identifying the location of the content to load. This must not be `nil`. + @param navigation The WKNavigation object that containts information for tracking the loading progress of a webpage. This must not be `nil`. + @param MIMEType The MIME type of the content. Defaults to the content type of the response if not specified. + @param textEncodingName The IANA encoding name, as in `utf-8` or `utf-16`. Defaults to the response text encoding if not specified. + @param progress A progress object monitoring the current download progress. + @param success A block object to be executed when the request finishes loading successfully. This block returns the data to be loaded by the web view and takes two arguments: the response, and the downloaded data. + @param failure A block object to be executed when the data task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a single argument: the error that occurred. + */ +- (void)loadRequest:(NSURLRequest *)request + navigation:(WKNavigation * _Nonnull)navigation + MIMEType:(nullable NSString *)MIMEType + textEncodingName:(nullable NSString *)textEncodingName + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(nullable void (^)(NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.m b/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.m new file mode 100644 index 00000000..6eca3c3a --- /dev/null +++ b/xcode/Pods/AFNetworking/UIKit+AFNetworking/WKWebView+AFNetworking.m @@ -0,0 +1,154 @@ +// WkWebView+AFNetworking.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "WKWebView+AFNetworking.h" + +#import + +#if TARGET_OS_IOS + +#import "AFHTTPSessionManager.h" +#import "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" + +@interface WKWebView (_AFNetworking) +@property (readwrite, nonatomic, strong, setter = af_setURLSessionTask:) NSURLSessionDataTask *af_URLSessionTask; +@end + +@implementation WKWebView (_AFNetworking) + +- (NSURLSessionDataTask *)af_URLSessionTask { + return (NSURLSessionDataTask *)objc_getAssociatedObject(self, @selector(af_URLSessionTask)); +} + +- (void)af_setURLSessionTask:(NSURLSessionDataTask *)af_URLSessionTask { + objc_setAssociatedObject(self, @selector(af_URLSessionTask), af_URLSessionTask, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end + +#pragma mark - + +@implementation WKWebView (AFNetworking) + +- (AFHTTPSessionManager *)sessionManager { + static AFHTTPSessionManager *_af_defaultHTTPSessionManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultHTTPSessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; + _af_defaultHTTPSessionManager.requestSerializer = [AFHTTPRequestSerializer serializer]; + _af_defaultHTTPSessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; + }); + + return objc_getAssociatedObject(self, @selector(sessionManager)) ?: _af_defaultHTTPSessionManager; +} + +- (void)setSessionManager:(AFHTTPSessionManager *)sessionManager { + objc_setAssociatedObject(self, @selector(sessionManager), sessionManager, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (AFHTTPResponseSerializer *)responseSerializer { + static AFHTTPResponseSerializer *_af_defaultResponseSerializer = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _af_defaultResponseSerializer = [AFHTTPResponseSerializer serializer]; + }); + + return objc_getAssociatedObject(self, @selector(responseSerializer)) ?: _af_defaultResponseSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + objc_setAssociatedObject(self, @selector(responseSerializer), responseSerializer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - + +- (void)loadRequest:(NSURLRequest *)request + navigation:(WKNavigation * _Nonnull)navigation + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSString * (^)(NSHTTPURLResponse *response, NSString *HTML))success + failure:(nullable void (^)(NSError *error))failure { + [self loadRequest:request navigation:navigation MIMEType:nil textEncodingName:nil progress:progress success:^NSData * _Nonnull(NSHTTPURLResponse * _Nonnull response, NSData * _Nonnull data) { + NSStringEncoding stringEncoding = NSUTF8StringEncoding; + if (response.textEncodingName) { + CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName); + if (encoding != kCFStringEncodingInvalidId) { + stringEncoding = CFStringConvertEncodingToNSStringEncoding(encoding); + } + } + + NSString *string = [[NSString alloc] initWithData:data encoding:stringEncoding]; + if (success) { + string = success(response, string); + } + + return [string dataUsingEncoding:stringEncoding]; + } failure:failure]; +} + +- (void)loadRequest:(NSURLRequest *)request + navigation:(WKNavigation * _Nonnull)navigation + MIMEType:(nullable NSString *)MIMEType + textEncodingName:(nullable NSString *)textEncodingName + progress:(NSProgress * _Nullable __autoreleasing * _Nullable)progress + success:(nullable NSData * (^)(NSHTTPURLResponse *response, NSData *data))success + failure:(nullable void (^)(NSError *error))failure { + NSParameterAssert(request); + + if (self.af_URLSessionTask.state == NSURLSessionTaskStateRunning || self.af_URLSessionTask.state == NSURLSessionTaskStateSuspended) { + [self.af_URLSessionTask cancel]; + } + self.af_URLSessionTask = nil; + + __weak __typeof(self)weakSelf = self; + __block NSURLSessionDataTask *dataTask; + __strong __typeof(weakSelf) strongSelf = weakSelf; + __strong __typeof(weakSelf.navigationDelegate) strongSelfDelegate = strongSelf.navigationDelegate; + dataTask = [self.sessionManager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { + if (error) { + if (failure) { + failure(error); + } + } else { + if (success) { + success((NSHTTPURLResponse *)response, responseObject); + } + [strongSelf loadData:responseObject MIMEType:MIMEType characterEncodingName:textEncodingName baseURL:[dataTask.currentRequest URL]]; + + if ([strongSelfDelegate respondsToSelector:@selector(webView:didFinishNavigation:)]) { + [strongSelfDelegate webView:strongSelf didFinishNavigation:navigation]; + } + } + }]; + self.af_URLSessionTask = dataTask; + if (progress != nil) { + *progress = [self.sessionManager downloadProgressForTask:dataTask]; + } + [self.af_URLSessionTask resume]; + + if ([strongSelfDelegate respondsToSelector:@selector(webView:didStartProvisionalNavigation:)]) { + [strongSelfDelegate webView:self didStartProvisionalNavigation:navigation]; + } +} + +@end + +#endif diff --git a/xcode/Pods/AFOAuth2Manager/AFOAuth2Manager/AFOAuth2Manager.m b/xcode/Pods/AFOAuth2Manager/AFOAuth2Manager/AFOAuth2Manager.m index 88d83f11..6ad3ab61 100644 --- a/xcode/Pods/AFOAuth2Manager/AFOAuth2Manager/AFOAuth2Manager.m +++ b/xcode/Pods/AFOAuth2Manager/AFOAuth2Manager/AFOAuth2Manager.m @@ -222,7 +222,10 @@ - (NSURLSessionTask *)authenticateUsingOAuthWithURLString:(NSString *)URLString parameters = [NSDictionary dictionaryWithDictionary:mutableParameters]; NSURLSessionTask *task; - task = [self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { + + task = [self POST:URLString parameters:parameters headers:@{} progress:^(NSProgress * _Nonnull uploadProgress) { + + } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (!responseObject) { if (failure) { failure(nil); @@ -262,7 +265,6 @@ - (NSURLSessionTask *)authenticateUsingOAuthWithURLString:(NSString *)URLString if (success) { success(credential); } - } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { failure(error); diff --git a/xcode/Pods/DTFoundation/Core/Source/DTUTI/NSString+DTUTI.m b/xcode/Pods/DTFoundation/Core/Source/DTUTI/NSString+DTUTI.m index 7a4695f4..db7e3c71 100644 --- a/xcode/Pods/DTFoundation/Core/Source/DTUTI/NSString+DTUTI.m +++ b/xcode/Pods/DTFoundation/Core/Source/DTUTI/NSString+DTUTI.m @@ -9,7 +9,7 @@ #import "NSString+DTUTI.h" #if TARGET_OS_IPHONE -#import +#import #endif @implementation NSString (DTUTI) diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.h b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.h new file mode 100644 index 00000000..492d60da --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.h @@ -0,0 +1,89 @@ +// +// FLEXFilteringTableViewController.h +// FLEX +// +// Created by Tanner on 3/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" + +#pragma mark - FLEXTableViewFiltering +@protocol FLEXTableViewFiltering + +/// 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 *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 *allSections; + +/// This computed property should filter \c allSections for assignment to \c sections +@property (nonatomic, readonly) NSArray *nonemptySections; + +/// This should be able to re-initialize \c allSections +- (NSArray *)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 + +/// 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 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 *sections; +@property (nonatomic, copy) NSArray *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) NSArray *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 *)makeSections; + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.m b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.m new file mode 100644 index 00000000..8b4e7306 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXFilteringTableViewController.m @@ -0,0 +1,203 @@ +// +// FLEXFilteringTableViewController.m +// FLEX +// +// Created by Tanner on 3/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXFilteringTableViewController.h" +#import "FLEXTableViewSection.h" +#import "NSArray+FLEX.h" + +@interface FLEXFilteringTableViewController () + +@end + +@implementation FLEXFilteringTableViewController +@synthesize allSections = _allSections; + +#pragma mark - View controller lifecycle + +- (void)loadView { + [super loadView]; + + if (!self.filterDelegate) { + self.filterDelegate = self; + } else { + [self _registerCellsForReuse]; + } +} + +- (void)_registerCellsForReuse { + for (FLEXTableViewSection *section in self.filterDelegate.allSections) { + if (section.cellRegistrationMapping) { + [self.tableView registerCells:section.cellRegistrationMapping]; + } + } +} + + +#pragma mark - Public + +- (void)setFilterDelegate:(id)filterDelegate { + _filterDelegate = filterDelegate; + filterDelegate.allSections = [filterDelegate makeSections]; + + if (self.isViewLoaded) { + [self _registerCellsForReuse]; + } +} + +- (void)reloadData { + [self reloadData:self.nonemptySections]; +} + +- (void)reloadData:(NSArray *)nonemptySections { + // Recalculate displayed sections + self.filterDelegate.sections = nonemptySections; + + // Refresh table view + if (self.isViewLoaded) { + [self.tableView reloadData]; + } +} + +- (void)reloadSections { + for (FLEXTableViewSection *section in self.filterDelegate.allSections) { + [section reloadData]; + } +} + + +#pragma mark - Search + +- (void)updateSearchResults:(NSString *)newText { + NSArray *(^filter)() = ^NSArray *{ + self.filterText = newText; + + // Sections will adjust data based on this property + for (FLEXTableViewSection *section in self.filterDelegate.allSections) { + section.filterText = newText; + } + + return nil; + }; + + if (self.filterInBackground) { + [self onBackgroundQueue:filter thenOnMainQueue:^(NSArray *unused) { + if ([self.searchText isEqualToString:newText]) { + [self reloadData]; + } + }]; + } else { + filter(); + [self reloadData]; + } +} + + +#pragma mark Filtering + +- (NSArray *)nonemptySections { + return [self.filterDelegate.allSections flex_filtered:^BOOL(FLEXTableViewSection *section, NSUInteger idx) { + return section.numberOfRows > 0; + }]; +} + +- (NSArray *)makeSections { + return @[]; +} + +- (void)setAllSections:(NSArray *)allSections { + _allSections = allSections.copy; + self.sections = self.nonemptySections; +} + + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.filterDelegate.sections.count; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.filterDelegate.sections[section].numberOfRows; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + return self.filterDelegate.sections[section].title; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + NSString *reuse = [self.filterDelegate.sections[indexPath.section] reuseIdentifierForRow:indexPath.row]; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuse forIndexPath:indexPath]; + [self.filterDelegate.sections[indexPath.section] configureCell:cell forRow:indexPath.row]; + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return UITableViewAutomaticDimension; +} + +- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { + if (self.wantsSectionIndexTitles) { + return [NSArray flex_forEachUpTo:self.filterDelegate.sections.count map:^id(NSUInteger i) { + return @"⦁"; + }]; + } + + return nil; +} + + +#pragma mark - UITableViewDelegate + +- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { + return [self.filterDelegate.sections[indexPath.section] canSelectRow:indexPath.row]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXTableViewSection *section = self.filterDelegate.sections[indexPath.section]; + + void (^action)(UIViewController *) = [section didSelectRowAction:indexPath.row]; + UIViewController *details = [section viewControllerToPushForRow:indexPath.row]; + + if (action) { + action(self); + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + } else if (details) { + [self.navigationController pushViewController:details animated:YES]; + } else { + [NSException raise:NSInternalInconsistencyException + format:@"Row is selectable but has no action or view controller"]; + } +} + +- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { + [self.filterDelegate.sections[indexPath.section] didPressInfoButtonAction:indexPath.row](self); +} + +#if FLEX_AT_LEAST_IOS13_SDK + +- (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point __IOS_AVAILABLE(13.0) { + FLEXTableViewSection *section = self.filterDelegate.sections[indexPath.section]; + NSString *title = [section menuTitleForRow:indexPath.row]; + NSArray *menuItems = [section menuItemsForRow:indexPath.row sender:self]; + + if (menuItems.count) { + return [UIContextMenuConfiguration + configurationWithIdentifier:nil + previewProvider:nil + actionProvider:^UIMenu *(NSArray *suggestedActions) { + return [UIMenu menuWithTitle:title children:menuItems]; + } + ]; + } + + return nil; +} + +#endif + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.h b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.h new file mode 100644 index 00000000..6f8f1e10 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.h @@ -0,0 +1,19 @@ +// +// FLEXNavigationController.h +// FLEX +// +// Created by Tanner on 1/30/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXNavigationController : UINavigationController + ++ (instancetype)withRootViewController:(UIViewController *)rootVC; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.m b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.m new file mode 100644 index 00000000..27731763 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXNavigationController.m @@ -0,0 +1,178 @@ +// +// FLEXNavigationController.m +// FLEX +// +// Created by Tanner on 1/30/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXNavigationController.h" +#import "FLEXExplorerViewController.h" +#import "FLEXTabList.h" + +@interface UINavigationController (Private) +- (void)_gestureRecognizedInteractiveHide:(UIGestureRecognizer *)sender; +@end +@interface UIPanGestureRecognizer (Private) +- (void)_setDelegate:(id)delegate; +@end + +@interface FLEXNavigationController () +@property (nonatomic, readonly) BOOL toolbarWasHidden; +@property (nonatomic) BOOL waitingToAddTab; +@property (nonatomic) BOOL didSetupPendingDismissButtons; +@property (nonatomic) UISwipeGestureRecognizer *navigationBarSwipeGesture; +@end + +@implementation FLEXNavigationController + ++ (instancetype)withRootViewController:(UIViewController *)rootVC { + return [[self alloc] initWithRootViewController:rootVC]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.waitingToAddTab = YES; + + // Add gesture to reveal toolbar if hidden + self.navigationBar.userInteractionEnabled = YES; + [self.navigationBar addGestureRecognizer:[[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(handleNavigationBarTap:) + ]]; + + // Add gesture to dismiss if not presented with a sheet style + if (@available(iOS 13, *)) { + switch (self.modalPresentationStyle) { + case UIModalPresentationAutomatic: + case UIModalPresentationPageSheet: + case UIModalPresentationFormSheet: + break; + + default: + [self addNavigationBarSwipeGesture]; + break; + } + } else { + [self addNavigationBarSwipeGesture]; + } +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + if (self.beingPresented && !self.didSetupPendingDismissButtons) { + for (UIViewController *vc in self.viewControllers) { + [self addNavigationBarItemsToViewController:vc.navigationItem]; + } + + self.didSetupPendingDismissButtons = YES; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + if (self.waitingToAddTab) { + // Only add new tab if we're presented properly + if ([self.presentingViewController isKindOfClass:[FLEXExplorerViewController class]]) { + // New navigation controllers always add themselves as new tabs, + // tabs are closed by FLEXExplorerViewController + [FLEXTabList.sharedList addTab:self]; + self.waitingToAddTab = NO; + } + } +} + +- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { + [super pushViewController:viewController animated:animated]; + [self addNavigationBarItemsToViewController:viewController.navigationItem]; +} + +- (void)dismissAnimated { + // Tabs are only closed if the done button is pressed; this + // allows you to leave a tab open by dragging down to dismiss + [FLEXTabList.sharedList closeTab:self]; + [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)addNavigationBarItemsToViewController:(UINavigationItem *)navigationItem { + if (!self.presentingViewController) { + return; + } + + // Check if a done item already exists + for (UIBarButtonItem *item in navigationItem.rightBarButtonItems) { + if (item.style == UIBarButtonItemStyleDone) { + return; + } + } + + // Give root view controllers a Done button if it does not already have one + UIBarButtonItem *done = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemDone + target:self + action:@selector(dismissAnimated) + ]; + + // Prepend the button if other buttons exist already + NSArray *existingItems = navigationItem.rightBarButtonItems; + if (existingItems.count) { + navigationItem.rightBarButtonItems = [@[done] arrayByAddingObjectsFromArray:existingItems]; + } else { + navigationItem.rightBarButtonItem = done; + } + + // Keeps us from calling this method again on + // the same view controllers in -viewWillAppear: + self.didSetupPendingDismissButtons = YES; +} + +- (void)addNavigationBarSwipeGesture { + UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self action:@selector(handleNavigationBarSwipe:) + ]; + swipe.direction = UISwipeGestureRecognizerDirectionDown; + swipe.delegate = self; + self.navigationBarSwipeGesture = swipe; + [self.navigationBar addGestureRecognizer:swipe]; +} + +- (void)handleNavigationBarSwipe:(UISwipeGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateRecognized) { + [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; + } +} + +- (void)handleNavigationBarTap:(UIGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateRecognized) { + if (self.toolbarHidden) { + [self setToolbarHidden:NO animated:YES]; + } + } +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)g1 shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)g2 { + if (g1 == self.navigationBarSwipeGesture && g2 == self.barHideOnSwipeGestureRecognizer) { + return YES; + } + + return NO; +} + +- (void)_gestureRecognizedInteractiveHide:(UIPanGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateRecognized) { + BOOL show = self.topViewController.toolbarItems.count; + CGFloat yTranslation = [sender translationInView:self.view].y; + CGFloat yVelocity = [sender velocityInView:self.view].y; + if (yVelocity > 2000) { + [self setToolbarHidden:YES animated:YES]; + } else if (show && yTranslation > 20 && yVelocity > 250) { + [self setToolbarHidden:NO animated:YES]; + } else if (yTranslation < -20) { + [self setToolbarHidden:YES animated:YES]; + } + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.h b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.h new file mode 100644 index 00000000..230545a0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.h @@ -0,0 +1,149 @@ +// +// FLEXTableViewController.h +// FLEX +// +// Created by Tanner on 7/5/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import +#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 +/// 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 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) 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 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 *)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 diff --git a/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.m b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.m new file mode 100644 index 00000000..e493fa21 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Controllers/FLEXTableViewController.m @@ -0,0 +1,590 @@ +// +// FLEXTableViewController.m +// FLEX +// +// Created by Tanner on 7/5/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" +#import "FLEXExplorerViewController.h" +#import "FLEXBookmarksViewController.h" +#import "FLEXTabsViewController.h" +#import "FLEXScopeCarousel.h" +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "FLEXResources.h" +#import "UIBarButtonItem+FLEX.h" +#import + +@interface Block : NSObject +- (void)invoke; +@end + +CGFloat const kFLEXDebounceInstant = 0.f; +CGFloat const kFLEXDebounceFast = 0.05; +CGFloat const kFLEXDebounceForAsyncSearch = 0.15; +CGFloat const kFLEXDebounceForExpensiveIO = 0.5; + +@interface FLEXTableViewController () +@property (nonatomic) NSTimer *debounceTimer; +@property (nonatomic) BOOL didInitiallyRevealSearchBar; +@property (nonatomic) UITableViewStyle style; + +@property (nonatomic) BOOL hasAppeared; +@property (nonatomic, readonly) UIView *tableHeaderViewContainer; + +@property (nonatomic, readonly) BOOL manuallyDeactivateSearchOnDisappear; + +@property (nonatomic) UIBarButtonItem *middleToolbarItem; +@property (nonatomic) UIBarButtonItem *middleLeftToolbarItem; +@property (nonatomic) UIBarButtonItem *leftmostToolbarItem; +@end + +@implementation FLEXTableViewController +@dynamic tableView; +@synthesize showsShareToolbarItem = _showsShareToolbarItem; +@synthesize tableHeaderViewContainer = _tableHeaderViewContainer; +@synthesize automaticallyShowsSearchBarCancelButton = _automaticallyShowsSearchBarCancelButton; + +#pragma mark - Initialization + +- (id)init { +#if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13.0, *)) { + self = [self initWithStyle:UITableViewStyleInsetGrouped]; + } else { + self = [self initWithStyle:UITableViewStyleGrouped]; + } +#else + self = [self initWithStyle:UITableViewStyleGrouped]; +#endif + return self; +} + +- (id)initWithStyle:(UITableViewStyle)style { + self = [super initWithStyle:style]; + + if (self) { + _searchBarDebounceInterval = kFLEXDebounceFast; + _showSearchBarInitially = YES; + _style = style; + _manuallyDeactivateSearchOnDisappear = ({ + NSProcessInfo.processInfo.operatingSystemVersion.majorVersion < 11; + }); + + // We will be our own search delegate if we implement this method + if ([self respondsToSelector:@selector(updateSearchResults:)]) { + self.searchDelegate = (id)self; + } + } + + return self; +} + + +#pragma mark - Public + +- (FLEXWindow *)window { + return (id)self.view.window; +} + +- (void)setShowsSearchBar:(BOOL)showsSearchBar { + if (_showsSearchBar == showsSearchBar) return; + _showsSearchBar = showsSearchBar; + + if (showsSearchBar) { + UIViewController *results = self.searchResultsController; + self.searchController = [[UISearchController alloc] initWithSearchResultsController:results]; + self.searchController.searchBar.placeholder = @"Filter"; + self.searchController.searchResultsUpdater = (id)self; + self.searchController.delegate = (id)self; + self.searchController.dimsBackgroundDuringPresentation = NO; + self.searchController.hidesNavigationBarDuringPresentation = NO; + /// Not necessary in iOS 13; remove this when iOS 13 is the minimum deployment target + self.searchController.searchBar.delegate = self; + + self.automaticallyShowsSearchBarCancelButton = YES; + + #if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13, *)) { + self.searchController.automaticallyShowsScopeBar = NO; + } + #endif + + [self addSearchController:self.searchController]; + } else { + // Search already shown and just set to NO, so remove it + [self removeSearchController:self.searchController]; + } +} + +- (void)setShowsCarousel:(BOOL)showsCarousel { + if (_showsCarousel == showsCarousel) return; + _showsCarousel = showsCarousel; + + if (showsCarousel) { + _carousel = ({ + __weak __typeof(self) weakSelf = self; + + FLEXScopeCarousel *carousel = [FLEXScopeCarousel new]; + carousel.selectedIndexChangedAction = ^(NSInteger idx) { + __typeof(self) self = weakSelf; + [self.searchDelegate updateSearchResults:self.searchText]; + }; + + // UITableView won't update the header size unless you reset the header view + [carousel registerBlockForDynamicTypeChanges:^(FLEXScopeCarousel *carousel) { + __typeof(self) self = weakSelf; + [self layoutTableHeaderIfNeeded]; + }]; + + carousel; + }); + [self addCarousel:_carousel]; + } else { + // Carousel already shown and just set to NO, so remove it + [self removeCarousel:_carousel]; + } +} + +- (NSInteger)selectedScope { + if (self.searchController.searchBar.showsScopeBar) { + return self.searchController.searchBar.selectedScopeButtonIndex; + } else if (self.showsCarousel) { + return self.carousel.selectedIndex; + } else { + return 0; + } +} + +- (void)setSelectedScope:(NSInteger)selectedScope { + if (self.searchController.searchBar.showsScopeBar) { + self.searchController.searchBar.selectedScopeButtonIndex = selectedScope; + } else if (self.showsCarousel) { + self.carousel.selectedIndex = selectedScope; + } + + [self.searchDelegate updateSearchResults:self.searchText]; +} + +- (NSString *)searchText { + return self.searchController.searchBar.text; +} + +- (BOOL)automaticallyShowsSearchBarCancelButton { +#if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13, *)) { + return self.searchController.automaticallyShowsCancelButton; + } +#endif + + return _automaticallyShowsSearchBarCancelButton; +} + +- (void)setAutomaticallyShowsSearchBarCancelButton:(BOOL)value { +#if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13, *)) { + self.searchController.automaticallyShowsCancelButton = value; + } +#endif + + _automaticallyShowsSearchBarCancelButton = value; +} + +- (void)onBackgroundQueue:(NSArray *(^)(void))backgroundBlock thenOnMainQueue:(void(^)(NSArray *))mainBlock { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSArray *items = backgroundBlock(); + dispatch_async(dispatch_get_main_queue(), ^{ + mainBlock(items); + }); + }); +} + +- (void)setsShowsShareToolbarItem:(BOOL)showsShareToolbarItem { + _showsShareToolbarItem = showsShareToolbarItem; + if (self.isViewLoaded) { + [self setupToolbarItems]; + } +} + +- (void)disableToolbar { + self.navigationController.toolbarHidden = YES; + self.navigationController.hidesBarsOnSwipe = NO; + self.toolbarItems = nil; +} + + +#pragma mark - View Controller Lifecycle + +- (void)loadView { + self.view = [FLEXTableView style:self.style]; + self.tableView.dataSource = self; + self.tableView.delegate = self; + + _shareToolbarItem = FLEXBarButtonItemSystem(Action, self, @selector(shareButtonPressed:)); + _bookmarksToolbarItem = [UIBarButtonItem + itemWithImage:FLEXResources.bookmarksIcon target:self action:@selector(showBookmarks) + ]; + _openTabsToolbarItem = [UIBarButtonItem + itemWithImage:FLEXResources.openTabsIcon target:self action:@selector(showTabSwitcher) + ]; + + self.leftmostToolbarItem = UIBarButtonItem.flex_fixedSpace; + self.middleLeftToolbarItem = UIBarButtonItem.flex_fixedSpace; + self.middleToolbarItem = UIBarButtonItem.flex_fixedSpace; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; + + // Toolbar + self.navigationController.toolbarHidden = NO; + self.navigationController.hidesBarsOnSwipe = YES; + + // On iOS 13, the root view controller shows it's search bar no matter what. + // Turning this off avoids some weird flash the navigation bar does when we + // toggle navigationItem.hidesSearchBarWhenScrolling on and off. The flash + // will still happen on subsequent view controllers, but we can at least + // avoid it for the root view controller + if (@available(iOS 13, *)) { + if (self.navigationController.viewControllers.firstObject == self) { + _showSearchBarInitially = NO; + } + } +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // When going back, make the search bar reappear instead of hiding + if (@available(iOS 11.0, *)) { + if ((self.pinSearchBar || self.showSearchBarInitially) && !self.didInitiallyRevealSearchBar) { + self.navigationItem.hidesSearchBarWhenScrolling = NO; + } + } + + [self setupToolbarItems]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + // Allow scrolling to collapse the search bar, only if we don't want it pinned + if (@available(iOS 11.0, *)) { + if (self.showSearchBarInitially && !self.pinSearchBar && !self.didInitiallyRevealSearchBar) { + // All this mumbo jumbo is necessary to work around a bug in iOS 13 up to 13.2 + // wherein quickly toggling navigationItem.hidesSearchBarWhenScrolling to make + // the search bar appear initially results in a bugged search bar that + // becomes transparent and floats over the screen as you scroll + [UIView animateWithDuration:0.2 animations:^{ + self.navigationItem.hidesSearchBarWhenScrolling = YES; + [self.navigationController.view setNeedsLayout]; + [self.navigationController.view layoutIfNeeded]; + }]; + } + } + + // We only want to reveal the search bar when the view controller first appears. + self.didInitiallyRevealSearchBar = YES; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + + if (self.manuallyDeactivateSearchOnDisappear && self.searchController.isActive) { + self.searchController.active = NO; + } +} + +- (void)didMoveToParentViewController:(UIViewController *)parent { + [super didMoveToParentViewController:parent]; + // Reset this since we are re-appearing under a new + // parent view controller and need to show it again + self.didInitiallyRevealSearchBar = NO; +} + + +#pragma mark - Toolbar, Public + +- (void)setupToolbarItems { + if (!self.isViewLoaded) { + return; + } + + self.toolbarItems = @[ + self.leftmostToolbarItem, + UIBarButtonItem.flex_flexibleSpace, + self.middleLeftToolbarItem, + UIBarButtonItem.flex_flexibleSpace, + self.middleToolbarItem, + UIBarButtonItem.flex_flexibleSpace, + self.bookmarksToolbarItem, + UIBarButtonItem.flex_flexibleSpace, + self.openTabsToolbarItem, + ]; + + for (UIBarButtonItem *item in self.toolbarItems) { + [item _setWidth:60]; + // This does not work for anything but fixed spaces for some reason + // item.width = 60; + } + + // Disable tabs entirely when not presented by FLEXExplorerViewController + UIViewController *presenter = self.navigationController.presentingViewController; + if (![presenter isKindOfClass:[FLEXExplorerViewController class]]) { + self.openTabsToolbarItem.enabled = NO; + } +} + +- (void)addToolbarItems:(NSArray *)items { + if (self.showsShareToolbarItem) { + // Share button is in the middle, skip middle button + if (items.count > 0) { + self.middleLeftToolbarItem = items[0]; + } + if (items.count > 1) { + self.leftmostToolbarItem = items[1]; + } + } else { + // Add buttons right-to-left + if (items.count > 0) { + self.middleToolbarItem = items[0]; + } + if (items.count > 1) { + self.middleLeftToolbarItem = items[1]; + } + if (items.count > 2) { + self.leftmostToolbarItem = items[2]; + } + } + + [self setupToolbarItems]; +} + +- (void)setShowsShareToolbarItem:(BOOL)showShare { + if (_showsShareToolbarItem != showShare) { + _showsShareToolbarItem = showShare; + + if (showShare) { + // Push out leftmost item + self.leftmostToolbarItem = self.middleLeftToolbarItem; + self.middleLeftToolbarItem = self.middleToolbarItem; + + // Use share for middle + self.middleToolbarItem = self.shareToolbarItem; + } else { + // Remove share, shift custom items rightward + self.middleToolbarItem = self.middleLeftToolbarItem; + self.middleLeftToolbarItem = self.leftmostToolbarItem; + self.leftmostToolbarItem = UIBarButtonItem.flex_fixedSpace; + } + } + + [self setupToolbarItems]; +} + +- (void)shareButtonPressed:(UIBarButtonItem *)sender { + +} + + +#pragma mark - Private + +- (void)debounce:(void(^)(void))block { + [self.debounceTimer invalidate]; + + self.debounceTimer = [NSTimer + scheduledTimerWithTimeInterval:self.searchBarDebounceInterval + target:block + selector:@selector(invoke) + userInfo:nil + repeats:NO + ]; +} + +- (void)layoutTableHeaderIfNeeded { + if (self.showsCarousel) { + self.carousel.frame = FLEXRectSetHeight( + self.carousel.frame, self.carousel.intrinsicContentSize.height + ); + } + + self.tableView.tableHeaderView = self.tableView.tableHeaderView; +} + +- (void)addCarousel:(FLEXScopeCarousel *)carousel { + if (@available(iOS 11.0, *)) { + self.tableView.tableHeaderView = carousel; + } else { + carousel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; + + CGRect frame = self.tableHeaderViewContainer.frame; + CGRect subviewFrame = carousel.frame; + subviewFrame.origin.y = 0; + + // Put the carousel below the search bar if it's already there + if (self.showsSearchBar) { + carousel.frame = subviewFrame = FLEXRectSetY( + subviewFrame, self.searchController.searchBar.frame.size.height + ); + frame.size.height += carousel.intrinsicContentSize.height; + } else { + frame.size.height = carousel.intrinsicContentSize.height; + } + + self.tableHeaderViewContainer.frame = frame; + [self.tableHeaderViewContainer addSubview:carousel]; + } + + [self layoutTableHeaderIfNeeded]; +} + +- (void)removeCarousel:(FLEXScopeCarousel *)carousel { + [carousel removeFromSuperview]; + + if (@available(iOS 11.0, *)) { + self.tableView.tableHeaderView = nil; + } else { + if (self.showsSearchBar) { + [self removeSearchController:self.searchController]; + [self addSearchController:self.searchController]; + } else { + self.tableView.tableHeaderView = nil; + _tableHeaderViewContainer = nil; + } + } +} + +- (void)addSearchController:(UISearchController *)controller { + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = controller; + } else { + controller.searchBar.autoresizingMask |= UIViewAutoresizingFlexibleBottomMargin; + [self.tableHeaderViewContainer addSubview:controller.searchBar]; + CGRect subviewFrame = controller.searchBar.frame; + CGRect frame = self.tableHeaderViewContainer.frame; + frame.size.width = MAX(frame.size.width, subviewFrame.size.width); + frame.size.height = subviewFrame.size.height; + + // Move the carousel down if it's already there + if (self.showsCarousel) { + self.carousel.frame = FLEXRectSetY( + self.carousel.frame, subviewFrame.size.height + ); + frame.size.height += self.carousel.frame.size.height; + } + + self.tableHeaderViewContainer.frame = frame; + [self layoutTableHeaderIfNeeded]; + } +} + +- (void)removeSearchController:(UISearchController *)controller { + if (@available(iOS 11.0, *)) { + self.navigationItem.searchController = nil; + } else { + [controller.searchBar removeFromSuperview]; + + if (self.showsCarousel) { +// self.carousel.frame = FLEXRectRemake(CGPointZero, self.carousel.frame.size); + [self removeCarousel:self.carousel]; + [self addCarousel:self.carousel]; + } else { + self.tableView.tableHeaderView = nil; + _tableHeaderViewContainer = nil; + } + } +} + +- (UIView *)tableHeaderViewContainer { + if (!_tableHeaderViewContainer) { + _tableHeaderViewContainer = [UIView new]; + self.tableView.tableHeaderView = self.tableHeaderViewContainer; + } + + return _tableHeaderViewContainer; +} + +- (void)showBookmarks { + UINavigationController *nav = [[UINavigationController alloc] + initWithRootViewController:[FLEXBookmarksViewController new] + ]; + [self presentViewController:nav animated:YES completion:nil]; +} + +- (void)showTabSwitcher { + UINavigationController *nav = [[UINavigationController alloc] + initWithRootViewController:[FLEXTabsViewController new] + ]; + [self presentViewController:nav animated:YES completion:nil]; +} + + +#pragma mark - Search Bar + +#pragma mark UISearchResultsUpdating + +- (void)updateSearchResultsForSearchController:(UISearchController *)searchController { + [self.debounceTimer invalidate]; + NSString *text = searchController.searchBar.text; + + void (^updateSearchResults)() = ^{ + if (self.searchResultsUpdater) { + [self.searchResultsUpdater updateSearchResults:text]; + } else { + [self.searchDelegate updateSearchResults:text]; + } + }; + + // Only debounce if we want to, and if we have a non-empty string + // Empty string events are sent instantly + if (text.length && self.searchBarDebounceInterval > kFLEXDebounceInstant) { + [self debounce:updateSearchResults]; + } else { + updateSearchResults(); + } +} + + +#pragma mark UISearchControllerDelegate + +- (void)willPresentSearchController:(UISearchController *)searchController { + // Manually show cancel button for < iOS 13 + if (!@available(iOS 13, *) && self.automaticallyShowsSearchBarCancelButton) { + [searchController.searchBar setShowsCancelButton:YES animated:YES]; + } +} + +- (void)willDismissSearchController:(UISearchController *)searchController { + // Manually hide cancel button for < iOS 13 + if (!@available(iOS 13, *) && self.automaticallyShowsSearchBarCancelButton) { + [searchController.searchBar setShowsCancelButton:NO animated:YES]; + } +} + + +#pragma mark UISearchBarDelegate + +/// Not necessary in iOS 13; remove this when iOS 13 is the deployment target +- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope { + [self updateSearchResultsForSearchController:self.searchController]; +} + + +#pragma mark Table View + +/// Not having a title in the first section looks weird with a rounded-corner table view style +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if (@available(iOS 13, *)) { + if (self.style == UITableViewStyleInsetGrouped) { + return @" "; + } + } + + return nil; // For plain/gropued style +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.h b/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.h new file mode 100644 index 00000000..3ba81ee7 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.h @@ -0,0 +1,28 @@ +// +// FLEXSingleRowSection.h +// FLEX +// +// Created by Tanner Bennett on 9/25/19. +// Copyright © 2019 Flipboard. 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 diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.m b/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.m new file mode 100644 index 00000000..95f557e8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/FLEXSingleRowSection.m @@ -0,0 +1,87 @@ +// +// FLEXSingleRowSection.m +// FLEX +// +// Created by Tanner Bennett on 9/25/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXSingleRowSection.h" +#import "FLEXTableView.h" + +@interface FLEXSingleRowSection () +@property (nonatomic, readonly) NSString *reuseIdentifier; +@property (nonatomic, readonly) void (^cellConfiguration)(__kindof UITableViewCell *cell); + +@property (nonatomic) NSString *lastTitle; +@property (nonatomic) NSString *lastSubitle; +@end + +@implementation FLEXSingleRowSection + +#pragma mark - Public + ++ (instancetype)title:(NSString *)title + reuse:(NSString *)reuse + cell:(void (^)(__kindof UITableViewCell *))config { + return [[self alloc] initWithTitle:title reuse:reuse cell:config]; +} + +- (id)initWithTitle:(NSString *)sectionTitle + reuse:(NSString *)reuseIdentifier + cell:(void (^)(__kindof UITableViewCell *))cellConfiguration { + self = [super init]; + if (self) { + _title = sectionTitle; + _reuseIdentifier = reuseIdentifier ?: kFLEXDefaultCell; + _cellConfiguration = cellConfiguration; + } + + return self; +} + +#pragma mark - Overrides + +- (NSInteger)numberOfRows { + if (self.filterMatcher && self.filterText.length) { + return self.filterMatcher(self.filterText) ? 1 : 0; + } + + return 1; +} + +- (BOOL)canSelectRow:(NSInteger)row { + return self.pushOnSelection || self.selectionAction; +} + +- (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { + return self.selectionAction; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return self.pushOnSelection; +} + +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + return self.reuseIdentifier; +} + +- (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row { + cell.textLabel.text = nil; + cell.detailTextLabel.text = nil; + cell.accessoryType = UITableViewCellAccessoryNone; + + self.cellConfiguration(cell); + self.lastTitle = cell.textLabel.text; + self.lastSubitle = cell.detailTextLabel.text; +} + +- (NSString *)titleForRow:(NSInteger)row { + return self.lastTitle; +} + +- (NSString *)subtitleForRow:(NSInteger)row { + return self.lastSubitle; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.h b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.h deleted file mode 100644 index 561f68ae..00000000 --- a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// FLEXTableViewController.h -// FLEX -// -// Created by Tanner on 7/5/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import -@class FLEXScopeCarousel; - -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; - -@interface FLEXTableViewController : UITableViewController - -/// A grouped table view. Inset on iOS 13. -/// -/// Simply calls into initWithStyle: -- (id)init; - -/// 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 hideSearchBarInitially; - -/// nil unless showsSearchBar is set to YES. -/// -/// self is used as the default search results updater and delegate. -/// Make sure your subclass conforms to UISearchControllerDelegate. -/// 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. -@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, readonly) NSInteger selectedScope; -/// self.searchController.searchBar.text -@property (nonatomic, readonly) NSString *searchText; - -/// Subclasses should override to handle search query update events. -/// -/// 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; - -/// Convenient for doing some async processor-intensive searching -/// in the background before updating the UI back on the main queue. -- (void)onBackgroundQueue:(NSArray *(^)())backgroundBlock thenOnMainQueue:(void(^)(NSArray *))mainBlock; - -@end diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.m b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.m deleted file mode 100644 index 9a50b0f0..00000000 --- a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewController.m +++ /dev/null @@ -1,229 +0,0 @@ -// -// FLEXTableViewController.m -// FLEX -// -// Created by Tanner on 7/5/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXScopeCarousel.h" -#import "FLEXTableView.h" -#import - -@interface Block : NSObject -- (void)invoke; -@end - -CGFloat const kFLEXDebounceInstant = 0.f; -CGFloat const kFLEXDebounceFast = 0.05; -CGFloat const kFLEXDebounceForAsyncSearch = 0.15; -CGFloat const kFLEXDebounceForExpensiveIO = 0.5; - -@interface FLEXTableViewController () -@property (nonatomic) NSTimer *debounceTimer; - -@end - -@implementation FLEXTableViewController - -#pragma mark - Public - -- (id)init { -#if FLEX_AT_LEAST_IOS13_SDK - if (@available(iOS 13.0, *)) { - self = [self initWithStyle:UITableViewStyleInsetGrouped]; - } else { - self = [self initWithStyle:UITableViewStyleGrouped]; - } -#else - self = [self initWithStyle:UITableViewStyleGrouped]; -#endif - return self; -} - -- (id)initWithStyle:(UITableViewStyle)style { - self = [super initWithStyle:style]; - - if (self) { - self.searchBarDebounceInterval = kFLEXDebounceFast; - } - - return self; -} - -- (void)setShowsSearchBar:(BOOL)showsSearchBar { - if (_showsSearchBar == showsSearchBar) return; - _showsSearchBar = showsSearchBar; - - UIViewController *results = self.searchResultsController; - self.searchController = [[UISearchController alloc] initWithSearchResultsController:results]; - self.searchController.searchBar.placeholder = @"Filter"; - self.searchController.searchResultsUpdater = (id)self; - self.searchController.delegate = (id)self; - self.searchController.dimsBackgroundDuringPresentation = NO; - self.searchController.hidesNavigationBarDuringPresentation = NO; - /// Not necessary in iOS 13; remove this when iOS 13 is the deployment target - self.searchController.searchBar.delegate = self; - - if (@available(iOS 11.0, *)) { - self.navigationItem.searchController = self.searchController; - } else { - self.tableView.tableHeaderView = self.searchController.searchBar; - } -} - -- (void)setShowsCarousel:(BOOL)showsCarousel { - if (_showsCarousel == showsCarousel) return; - _showsCarousel = showsCarousel; - - _carousel = ({ - __weak __typeof(self) weakSelf = self; - - FLEXScopeCarousel *carousel = [FLEXScopeCarousel new]; - carousel.selectedIndexChangedAction = ^(NSInteger idx) { - __typeof(self) self = weakSelf; - [self updateSearchResults:self.searchText]; - }; - - self.tableView.tableHeaderView = carousel; - [self.tableView layoutIfNeeded]; - // UITableView won't update the header size unless you reset the header view - [carousel registerBlockForDynamicTypeChanges:^(FLEXScopeCarousel *carousel) { - __typeof(self) self = weakSelf; - self.tableView.tableHeaderView = carousel; - [self.tableView layoutIfNeeded]; - }]; - - carousel; - }); -} - -- (NSInteger)selectedScope { - if (self.searchController.searchBar.showsScopeBar) { - return self.searchController.searchBar.selectedScopeButtonIndex; - } else if (self.showsCarousel) { - return self.carousel.selectedIndex; - } else { - return NSNotFound; - } -} - -- (NSString *)searchText { - return self.searchController.searchBar.text; -} - -- (void)setAutomaticallyShowsSearchBarCancelButton:(BOOL)autoShowCancel { -#if FLEX_AT_LEAST_IOS13_SDK - if (@available(iOS 13.0, *)) { - self.searchController.automaticallyShowsCancelButton = autoShowCancel; - } else { - _automaticallyShowsSearchBarCancelButton = autoShowCancel; - } -#else - _automaticallyShowsSearchBarCancelButton = autoShowCancel; -#endif -} - -- (void)updateSearchResults:(NSString *)newText { } - -- (void)onBackgroundQueue:(NSArray *(^)())backgroundBlock thenOnMainQueue:(void(^)(NSArray *))mainBlock { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSArray *items = backgroundBlock(); - dispatch_async(dispatch_get_main_queue(), ^{ - mainBlock(items); - }); - }); -} - -#pragma mark - View Controller Lifecycle - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - // Make the search bar re-appear instead of hiding - if (@available(iOS 11.0, *)) if (!self.hideSearchBarInitially) { - self.navigationItem.hidesSearchBarWhenScrolling = NO; - } -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - // Allow scrolling to collapse the search bar, - // only if we don't want it pinned - if (@available(iOS 11.0, *)) if (!self.hideSearchBarInitially) { - self.navigationItem.hidesSearchBarWhenScrolling = !self.pinSearchBar; - } -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - - if (self.searchController.active) { - self.searchController.active = NO; - } -} - -#pragma mark - Private - -- (void)debounce:(void(^)())block { - [self.debounceTimer invalidate]; - - self.debounceTimer = [NSTimer - scheduledTimerWithTimeInterval:self.searchBarDebounceInterval - target:block - selector:@selector(invoke) - userInfo:nil - repeats:NO - ]; -} - -#pragma mark - Search Bar - -#pragma mark UISearchResultsUpdating - -- (void)updateSearchResultsForSearchController:(UISearchController *)searchController -{ - [self.debounceTimer invalidate]; - NSString *text = searchController.searchBar.text; - - // Only debounce if we want to, and if we have a non-empty string - // Empty string events are sent instantly - if (text.length && self.searchBarDebounceInterval > kFLEXDebounceInstant) { - [self debounce:^{ - [self updateSearchResults:text]; - }]; - } else { - [self updateSearchResults:text]; - } -} - -#pragma mark UISearchControllerDelegate - -- (void)willPresentSearchController:(UISearchController *)searchController { - if (self.automaticallyShowsSearchBarCancelButton) { - [searchController.searchBar setShowsCancelButton:YES animated:YES]; - } -} - -- (void)willDismissSearchController:(UISearchController *)searchController { - if (self.automaticallyShowsSearchBarCancelButton) { - [searchController.searchBar setShowsCancelButton:NO animated:YES]; - } -} - -#pragma mark UISearchBarDelegate - -/// Not necessary in iOS 13; remove this when iOS 13 is the deployment target -- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope { - [self updateSearchResultsForSearchController:self.searchController]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.h b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.h index a2866e4a..f7959cea 100644 --- a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.h +++ b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.h @@ -2,38 +2,133 @@ // FLEXTableViewSection.h // FLEX // -// Created by Tanner Bennett on 7/11/19. -// Copyright © 2019 Flipboard. All rights reserved. +// Created by Tanner on 1/29/20. +// Copyright © 2020 Flipboard. All rights reserved. // -#import +#import +#import "FLEXMacros.h" +#import "NSArray+FLEX.h" +@class FLEXTableView; NS_ASSUME_NONNULL_BEGIN -/// A protocol for arbitrary case-insensitive pattern matching -@protocol FLEXPatternMatching -/// @return YES if the receiver matches the query, case-insensitive -- (BOOL)matches:(NSString *)query; -@end +#pragma mark FLEXTableViewSection -@interface FLEXTableViewSection<__covariant ObjectType> : NSObject +/// 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; +} -+ (instancetype)section:(NSInteger)section title:(NSString *)title rows:(NSArray> *)rows; +#pragma mark - Data -@property (nonatomic, readonly) NSInteger section; -@property (nonatomic, readonly) NSString *title; -@property (nonatomic, readonly) NSArray> *rows; +/// A title to be displayed for the custom section. +/// Subclasses may override or use the \c _title ivar. +@property (nonatomic, readonly, nullable) 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 *cellRegistrationMapping; -@property (nonatomic, readonly) NSInteger count; +/// 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; -/// @return A new section containing only rows that match the string, -/// or nil if the section was empty and no rows matched the string. -- (nullable instancetype)newSectionWithRowsMatchingQuery:(NSString *)query; +/// 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; -@end +#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 *)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 *)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; -@interface FLEXTableViewSection<__covariant ObjectType> (Subscripting) -- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idx; @end NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.m b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.m index b1cf4c19..9090f99e 100644 --- a/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.m +++ b/xcode/Pods/FLEX/Classes/Core/FLEXTableViewSection.m @@ -2,48 +2,127 @@ // FLEXTableViewSection.m // FLEX // -// Created by Tanner Bennett on 7/11/19. -// Copyright © 2019 Flipboard. All rights reserved. +// Created by Tanner on 1/29/20. +// Copyright © 2020 Flipboard. All rights reserved. // #import "FLEXTableViewSection.h" +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "UIMenu+FLEX.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wincomplete-implementation" @implementation FLEXTableViewSection -+ (instancetype)section:(NSInteger)section title:(NSString *)title rows:(NSArray *)rows { - FLEXTableViewSection *s = [self new]; - s->_section = section; - s->_title = title; - s->_rows = rows.copy; +- (NSInteger)numberOfRows { + return 0; +} + +- (void)reloadData { } + +- (NSDictionary *)cellRegistrationMapping { + return nil; +} + +- (BOOL)canSelectRow:(NSInteger)row { return NO; } + +- (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { + UIViewController *toPush = [self viewControllerToPushForRow:row]; + if (toPush) { + return ^(UIViewController *host) { + [host.navigationController pushViewController:toPush animated:YES]; + }; + } + + return nil; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return nil; +} + +- (void (^)(__kindof UIViewController *))didPressInfoButtonAction:(NSInteger)row { + return nil; +} - return s; +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + return kFLEXDefaultCell; } -- (instancetype)newSectionWithRowsMatchingQuery:(NSString *)query { - // Find rows containing the search string - NSPredicate *containsString = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) { - return [obj matches:query]; - }]; - NSArray *filteredRows = [self.rows filteredArrayUsingPredicate:containsString]; +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSString *)menuTitleForRow:(NSInteger)row { + NSString *title = [self titleForRow:row]; + NSString *subtitle = [self menuSubtitleForRow:row]; - // Only return new section if not empty - if (filteredRows.count) { - return [[self class] section:self.section title:self.title rows:filteredRows]; + if (subtitle.length) { + return [NSString stringWithFormat:@"%@\n\n%@", title, subtitle]; } - return nil; + return title; } -- (NSInteger)count { - return self.rows.count; +- (NSString *)menuSubtitleForRow:(NSInteger)row { + return @""; } -@end +- (NSArray *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender API_AVAILABLE(ios(13)) { + NSArray *copyItems = [self copyMenuItemsForRow:row]; + NSAssert(copyItems.count % 2 == 0, @"copyMenuItemsForRow: should return an even list"); + + if (copyItems.count) { + NSInteger numberOfActions = copyItems.count / 2; + BOOL collapseMenu = numberOfActions > 4; + UIImage *copyIcon = [UIImage systemImageNamed:@"doc.on.doc"]; + + NSMutableArray *actions = [NSMutableArray new]; + + for (NSInteger i = 0; i < copyItems.count; i += 2) { + NSString *key = copyItems[i], *value = copyItems[i+1]; + NSString *title = collapseMenu ? key : [@"Copy " stringByAppendingString:key]; + + UIAction *copy = [UIAction + actionWithTitle:title + image:copyIcon + identifier:nil + handler:^(__kindof UIAction *action) { + UIPasteboard.generalPasteboard.string = value; + } + ]; + if (!value.length) { + copy.attributes = UIMenuElementAttributesDisabled; + } + + [actions addObject:copy]; + } + + UIMenu *copyMenu = [UIMenu + inlineMenuWithTitle:@"Copy…" + image:copyIcon + children:actions + ]; + + if (collapseMenu) { + return @[[copyMenu collapsed]]; + } else { + return @[copyMenu]; + } + } + + return @[]; +} -@implementation FLEXTableViewSection (Subscripting) +#endif -- (id)objectAtIndexedSubscript:(NSUInteger)idx { - return self.rows[idx]; +- (NSArray *)copyMenuItemsForRow:(NSInteger)row { + return nil; } +- (NSString *)titleForRow:(NSInteger)row { return nil; } +- (NSString *)subtitleForRow:(NSInteger)row { return nil; } + @end + +#pragma clang diagnostic pop diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXCarouselCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXCarouselCell.h similarity index 100% rename from xcode/Pods/FLEX/Classes/Core/FLEXCarouselCell.h rename to xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXCarouselCell.h diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXCarouselCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXCarouselCell.m similarity index 91% rename from xcode/Pods/FLEX/Classes/Core/FLEXCarouselCell.m rename to xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXCarouselCell.m index 062540ae..6965a098 100644 --- a/xcode/Pods/FLEX/Classes/Core/FLEXCarouselCell.m +++ b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXCarouselCell.m @@ -8,7 +8,7 @@ #import "FLEXCarouselCell.h" #import "FLEXColor.h" -#import "UIView+Layout.h" +#import "UIView+FLEX_Layout.h" @interface FLEXCarouselCell () @property (nonatomic, readonly) UILabel *titleLabel; @@ -25,8 +25,10 @@ - (instancetype)initWithFrame:(CGRect)frame { _selectionIndicatorStripe = [UIView new]; self.titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; - self.titleLabel.adjustsFontForContentSizeCategory = YES; self.selectionIndicatorStripe.backgroundColor = self.tintColor; + if (@available(iOS 10, *)) { + self.titleLabel.adjustsFontForContentSizeCategory = YES; + } [self.contentView addSubview:self.titleLabel]; [self.contentView addSubview:self.selectionIndicatorStripe]; @@ -45,7 +47,7 @@ - (void)updateAppearance { if (self.selected) { self.titleLabel.textColor = self.tintColor; } else { - self.titleLabel.textColor = [FLEXColor deemphasizedTextColor]; + self.titleLabel.textColor = FLEXColor.deemphasizedTextColor; } } diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXScopeCarousel.h b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXScopeCarousel.h similarity index 100% rename from xcode/Pods/FLEX/Classes/Core/FLEXScopeCarousel.h rename to xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXScopeCarousel.h diff --git a/xcode/Pods/FLEX/Classes/Core/FLEXScopeCarousel.m b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXScopeCarousel.m similarity index 85% rename from xcode/Pods/FLEX/Classes/Core/FLEXScopeCarousel.m rename to xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXScopeCarousel.m index 43bbdb26..c96663eb 100644 --- a/xcode/Pods/FLEX/Classes/Core/FLEXScopeCarousel.m +++ b/xcode/Pods/FLEX/Classes/Core/Views/Carousel/FLEXScopeCarousel.m @@ -9,7 +9,7 @@ #import "FLEXScopeCarousel.h" #import "FLEXCarouselCell.h" #import "FLEXColor.h" -#import "UIView+Layout.h" +#import "UIView+FLEX_Layout.h" const CGFloat kCarouselItemSpacing = 0; NSString * const kCarouselCellReuseIdentifier = @"kCarouselCellReuseIdentifier"; @@ -17,7 +17,6 @@ @interface FLEXScopeCarousel () @property (nonatomic, readonly) UICollectionView *collectionView; @property (nonatomic, readonly) FLEXCarouselCell *sizingCell; -@property (nonatomic, readonly) NSLayoutConstraint *heightConstraint; @property (nonatomic, readonly) id dynamicTypeObserver; @property (nonatomic, readonly) NSMutableArray *dynamicTypeHandlers; @@ -30,9 +29,15 @@ @implementation FLEXScopeCarousel - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - self.backgroundColor = [FLEXColor primaryBackgroundColor]; + self.backgroundColor = FLEXColor.primaryBackgroundColor; self.autoresizingMask = UIViewAutoresizingFlexibleWidth; + self.translatesAutoresizingMaskIntoConstraints = YES; _dynamicTypeHandlers = [NSMutableArray new]; + + CGSize itemSize = CGSizeZero; + if (@available(iOS 10.0, *)) { + itemSize = UICollectionViewFlowLayoutAutomaticSize; + } // Collection view layout UICollectionViewFlowLayout *layout = ({ @@ -40,8 +45,8 @@ - (id)initWithFrame:(CGRect)frame { layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; layout.sectionInset = UIEdgeInsetsZero; layout.minimumLineSpacing = kCarouselItemSpacing; - layout.itemSize = UICollectionViewFlowLayoutAutomaticSize; - layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize; + layout.itemSize = itemSize; + layout.estimatedItemSize = itemSize; layout; }); @@ -76,7 +81,7 @@ - (id)initWithFrame:(CGRect)frame { // Notify observers __typeof(self) self = weakSelf; - for (void (^block)() in self.dynamicTypeHandlers) { + for (void (^block)(FLEXScopeCarousel *) in self.dynamicTypeHandlers) { block(self); } } @@ -99,7 +104,7 @@ - (void)drawRect:(CGRect)rect { // Draw hairline CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetStrokeColorWithColor(context, [FLEXColor hairlineColor].CGColor); + CGContextSetStrokeColorWithColor(context, FLEXColor.hairlineColor.CGColor); CGContextSetLineWidth(context, width); CGContextMoveToPoint(context, 0, rect.size.height - width); CGContextAddLineToPoint(context, rect.size.width, rect.size.height - width); @@ -112,25 +117,22 @@ + (BOOL)requiresConstraintBasedLayout { - (void)updateConstraints { if (!self.constraintsInstalled) { - self.translatesAutoresizingMaskIntoConstraints = NO; self.collectionView.translatesAutoresizingMaskIntoConstraints = NO; - - [self.centerXAnchor constraintEqualToAnchor:self.superview.centerXAnchor].active = YES; - [self.widthAnchor constraintEqualToAnchor:self.superview.widthAnchor].active = YES; - [self.topAnchor constraintEqualToAnchor:self.superview.topAnchor].active = YES; - [self.collectionView pinEdgesToSuperview]; - _heightConstraint = [self.heightAnchor constraintEqualToConstant:100]; - self.heightConstraint.active = YES; - + self.constraintsInstalled = YES; } - - self.heightConstraint.constant = [self.sizingCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; [super updateConstraints]; } +- (CGSize)intrinsicContentSize { + return CGSizeMake( + UIViewNoIntrinsicMetric, + [self.sizingCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + ); +} + #pragma mark - Public - (void)setItems:(NSArray *)items { @@ -161,6 +163,10 @@ - (void)registerBlockForDynamicTypeChanges:(void (^)(FLEXScopeCarousel *))handle #pragma mark - UICollectionView - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { +// if (@available(iOS 10.0, *)) { +// return UICollectionViewFlowLayoutAutomaticSize; +// } + self.sizingCell.title = self.items[indexPath.item]; return [self.sizingCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; } diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.h new file mode 100644 index 00000000..8be8b217 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.h @@ -0,0 +1,17 @@ +// +// FLEXCodeFontCell.h +// FLEX +// +// Created by Tanner on 12/27/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXMultilineTableViewCell.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXCodeFontCell : FLEXMultilineDetailTableViewCell + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.m new file mode 100644 index 00000000..ab7272e8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXCodeFontCell.m @@ -0,0 +1,34 @@ +// +// FLEXCodeFontCell.m +// FLEX +// +// Created by Tanner on 12/27/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXCodeFontCell.h" +#import "UIFont+FLEX.h" + +@implementation FLEXCodeFontCell + +- (void)postInit { + [super postInit]; + + self.titleLabel.font = UIFont.flex_codeFont; + self.subtitleLabel.font = UIFont.flex_codeFont; + + self.titleLabel.adjustsFontSizeToFitWidth = YES; + self.titleLabel.minimumScaleFactor = 0.9; + self.subtitleLabel.adjustsFontSizeToFitWidth = YES; + self.subtitleLabel.minimumScaleFactor = 0.75; + + // Disable mutli-line pre iOS 11 + if (@available(iOS 11, *)) { + self.subtitleLabel.numberOfLines = 5; + } else { + self.titleLabel.numberOfLines = 1; + self.subtitleLabel.numberOfLines = 1; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.h new file mode 100644 index 00000000..c04dbaf9 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.h @@ -0,0 +1,13 @@ +// +// FLEXKeyValueTableViewCell.h +// FLEX +// +// Created by Tanner Bennett on 1/23/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewCell.h" + +@interface FLEXKeyValueTableViewCell : FLEXTableViewCell + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.m new file mode 100644 index 00000000..f869d46e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.m @@ -0,0 +1,17 @@ +// +// FLEXKeyValueTableViewCell.m +// FLEX +// +// Created by Tanner Bennett on 1/23/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXKeyValueTableViewCell.h" + +@implementation FLEXKeyValueTableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + return [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.h new file mode 100644 index 00000000..acdf9d4a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.h @@ -0,0 +1,24 @@ +// +// FLEXMultilineTableViewCell.h +// FLEX +// +// Created by Ryan Olson on 2/13/15. +// Copyright (c) 2015 f. 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 diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.m new file mode 100644 index 00000000..c55ee754 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXMultilineTableViewCell.m @@ -0,0 +1,67 @@ +// +// FLEXMultilineTableViewCell.m +// FLEX +// +// Created by Ryan Olson on 2/13/15. +// Copyright (c) 2015 f. All rights reserved. +// + +#import "FLEXMultilineTableViewCell.h" +#import "UIView+FLEX_Layout.h" +#import "FLEXUtility.h" + +@interface FLEXMultilineTableViewCell () +@property (nonatomic, readonly) UILabel *_titleLabel; +@property (nonatomic, readonly) UILabel *_subtitleLabel; +@property (nonatomic) BOOL constraintsUpdated; +@end + +@implementation FLEXMultilineTableViewCell + +- (void)postInit { + [super postInit]; + + self.titleLabel.numberOfLines = 0; + self.subtitleLabel.numberOfLines = 0; +} + ++ (UIEdgeInsets)labelInsets { + return UIEdgeInsetsMake(10.0, 16.0, 10.0, 8.0); +} + ++ (CGFloat)preferredHeightWithAttributedText:(NSAttributedString *)attributedText + maxWidth:(CGFloat)contentViewWidth + style:(UITableViewStyle)style + showsAccessory:(BOOL)showsAccessory { + CGFloat labelWidth = contentViewWidth; + + // Content view inset due to accessory view observed on iOS 8.1 iPhone 6. + if (showsAccessory) { + labelWidth -= 34.0; + } + + UIEdgeInsets labelInsets = [self labelInsets]; + labelWidth -= (labelInsets.left + labelInsets.right); + + CGSize constrainSize = CGSizeMake(labelWidth, CGFLOAT_MAX); + CGRect boundingBox = [attributedText + boundingRectWithSize:constrainSize + options:NSStringDrawingUsesLineFragmentOrigin + context:nil + ]; + CGFloat preferredLabelHeight = FLEXFloor(boundingBox.size.height); + CGFloat preferredCellHeight = preferredLabelHeight + labelInsets.top + labelInsets.bottom + 1.0; + + return preferredCellHeight; +} + +@end + + +@implementation FLEXMultilineDetailTableViewCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + return [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.h new file mode 100644 index 00000000..e835012f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.h @@ -0,0 +1,14 @@ +// +// FLEXSubtitleTableViewCell.h +// FLEX +// +// Created by Tanner on 4/17/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableViewCell.h" + +/// A cell initialized with \c UITableViewCellStyleSubtitle +@interface FLEXSubtitleTableViewCell : FLEXTableViewCell + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.m similarity index 92% rename from xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.m rename to xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.m index fc09db50..e487b614 100644 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.m +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.m @@ -10,8 +10,7 @@ @implementation FLEXSubtitleTableViewCell -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { return [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; } diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.h b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.h new file mode 100644 index 00000000..ab43760b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.h @@ -0,0 +1,23 @@ +// +// FLEXTableViewCell.h +// FLEX +// +// Created by Tanner on 4/17/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +@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 diff --git a/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.m b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.m new file mode 100644 index 00000000..56deaf33 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/Cells/FLEXTableViewCell.m @@ -0,0 +1,57 @@ +// +// FLEXTableViewCell.m +// FLEX +// +// Created by Tanner on 4/17/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableViewCell.h" +#import "FLEXUtility.h" +#import "FLEXColor.h" +#import "FLEXTableView.h" + +@interface UITableView (Internal) +// Exists at least since iOS 5 +- (BOOL)_canPerformAction:(SEL)action forCell:(UITableViewCell *)cell sender:(id)sender; +- (void)_performAction:(SEL)action forCell:(UITableViewCell *)cell sender:(id)sender; +@end + +@interface UITableViewCell (Internal) +// Exists at least since iOS 5 +@property (nonatomic, readonly) FLEXTableView *_tableView; +@end + +@implementation FLEXTableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self postInit]; + } + + return self; +} + +- (void)postInit { + UIFont *cellFont = UIFont.flex_defaultTableCellFont; + self.titleLabel.font = cellFont; + self.subtitleLabel.font = cellFont; + self.subtitleLabel.textColor = FLEXColor.deemphasizedTextColor; + + self.titleLabel.lineBreakMode = NSLineBreakByTruncatingMiddle; + self.subtitleLabel.lineBreakMode = NSLineBreakByTruncatingMiddle; + + self.titleLabel.numberOfLines = 1; + self.subtitleLabel.numberOfLines = 1; +} + +- (UILabel *)titleLabel { + return self.textLabel; +} + +- (UILabel *)subtitleLabel { + return self.detailTextLabel; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.h b/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.h new file mode 100644 index 00000000..a750c0b5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.h @@ -0,0 +1,48 @@ +// +// FLEXTableView.h +// FLEX +// +// Created by Tanner on 4/17/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +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 *)registrationMapping; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.m b/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.m new file mode 100644 index 00000000..073f76ff --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Core/Views/FLEXTableView.m @@ -0,0 +1,91 @@ +// +// FLEXTableView.m +// FLEX +// +// Created by Tanner on 4/17/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "FLEXSubtitleTableViewCell.h" +#import "FLEXMultilineTableViewCell.h" +#import "FLEXKeyValueTableViewCell.h" +#import "FLEXCodeFontCell.h" + +FLEXTableViewCellReuseIdentifier const kFLEXDefaultCell = @"kFLEXDefaultCell"; +FLEXTableViewCellReuseIdentifier const kFLEXDetailCell = @"kFLEXDetailCell"; +FLEXTableViewCellReuseIdentifier const kFLEXMultilineCell = @"kFLEXMultilineCell"; +FLEXTableViewCellReuseIdentifier const kFLEXMultilineDetailCell = @"kFLEXMultilineDetailCell"; +FLEXTableViewCellReuseIdentifier const kFLEXKeyValueCell = @"kFLEXKeyValueCell"; +FLEXTableViewCellReuseIdentifier const kFLEXCodeFontCell = @"kFLEXCodeFontCell"; + +#pragma mark Private + +@interface UITableView (Private) +- (CGFloat)_heightForHeaderInSection:(NSInteger)section; +- (NSString *)_titleForHeaderInSection:(NSInteger)section; +@end + +@implementation FLEXTableView + ++ (instancetype)flexDefaultTableView { +#if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13.0, *)) { + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped]; + } else { + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + } +#else + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; +#endif +} + +#pragma mark - Initialization + ++ (id)groupedTableView { +#if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13.0, *)) { + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped]; + } else { + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + } +#else + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; +#endif +} + ++ (id)plainTableView { + return [[self alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; +} + ++ (id)style:(UITableViewStyle)style { + return [[self alloc] initWithFrame:CGRectZero style:style]; +} + +- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style { + self = [super initWithFrame:frame style:style]; + if (self) { + [self registerCells:@{ + kFLEXDefaultCell : [FLEXTableViewCell class], + kFLEXDetailCell : [FLEXSubtitleTableViewCell class], + kFLEXMultilineCell : [FLEXMultilineTableViewCell class], + kFLEXMultilineDetailCell : [FLEXMultilineDetailTableViewCell class], + kFLEXKeyValueCell : [FLEXKeyValueTableViewCell class], + kFLEXCodeFontCell : [FLEXCodeFontCell class], + }]; + } + + return self; +} + + +#pragma mark - Public + +- (void)registerCells:(NSDictionary *)registrationMapping { + [registrationMapping enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, Class cellClass, BOOL *stop) { + [self registerClass:cellClass forCellReuseIdentifier:identifier]; + }]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h index ab3bd7b3..858528f3 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/30/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m index 61f60456..f4ca604f 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/30/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputColorView.h" @@ -30,18 +30,16 @@ - (void)colorComponentInputViewValueDidChange:(FLEXColorComponentInputView *)col @implementation FLEXColorComponentInputView -- (id)initWithFrame:(CGRect)frame -{ +- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.slider = [UISlider new]; - self.slider.backgroundColor = self.backgroundColor; [self.slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged]; [self addSubview:self.slider]; self.valueLabel = [UILabel new]; self.valueLabel.backgroundColor = self.backgroundColor; - self.valueLabel.font = [FLEXUtility defaultFontOfSize:14.0]; + self.valueLabel.font = [UIFont systemFontOfSize:14.0]; self.valueLabel.textAlignment = NSTextAlignmentRight; [self addSubview:self.valueLabel]; @@ -50,15 +48,13 @@ - (id)initWithFrame:(CGRect)frame return self; } -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.slider.backgroundColor = backgroundColor; self.valueLabel.backgroundColor = backgroundColor; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; const CGFloat kValueLabelWidth = 50.0; @@ -73,19 +69,16 @@ - (void)layoutSubviews self.valueLabel.frame = CGRectMake(valueLabelOriginX, valueLabelOriginY, kValueLabelWidth, self.valueLabel.frame.size.height); } -- (void)sliderChanged:(id)sender -{ +- (void)sliderChanged:(id)sender { [self.delegate colorComponentInputViewValueDidChange:self]; [self updateValueLabel]; } -- (void)updateValueLabel -{ +- (void)updateValueLabel { self.valueLabel.text = [NSString stringWithFormat:@"%.3f", self.slider.value]; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat height = [self.slider sizeThatFits:size].height; return CGSizeMake(size.width, height); } @@ -102,8 +95,7 @@ @interface FLEXColorPreviewBox : UIView @implementation FLEXColorPreviewBox -- (id)initWithFrame:(CGRect)frame -{ +- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.layer.borderWidth = 1.0; @@ -118,18 +110,15 @@ - (id)initWithFrame:(CGRect)frame return self; } -- (void)setColor:(UIColor *)color -{ +- (void)setColor:(UIColor *)color { self.colorOverlayView.backgroundColor = color; } -- (UIColor *)color -{ +- (UIColor *)color { return self.colorOverlayView.backgroundColor; } -+ (UIImage *)backgroundPatternImage -{ ++ (UIImage *)backgroundPatternImage { const CGFloat kSquareDimension = 5.0; CGSize squareSize = CGSizeMake(kSquareDimension, kSquareDimension); CGSize imageSize = CGSizeMake(2.0 * kSquareDimension, 2.0 * kSquareDimension); @@ -164,8 +153,7 @@ @interface FLEXArgumentInputColorView () @implementation FLEXArgumentInputColorView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.colorPreviewBox = [FLEXColorPreviewBox new]; @@ -174,7 +162,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding self.hexLabel = [UILabel new]; self.hexLabel.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.9]; self.hexLabel.textAlignment = NSTextAlignmentCenter; - self.hexLabel.font = [FLEXUtility defaultFontOfSize:12.0]; + self.hexLabel.font = [UIFont systemFontOfSize:12.0]; [self addSubview:self.hexLabel]; self.alphaInput = [FLEXColorComponentInputView new]; @@ -200,8 +188,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.alphaInput.backgroundColor = backgroundColor; self.redInput.backgroundColor = backgroundColor; @@ -209,8 +196,7 @@ - (void)setBackgroundColor:(UIColor *)backgroundColor self.blueInput.backgroundColor = backgroundColor; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; CGFloat runningOriginY = 0; @@ -236,8 +222,7 @@ - (void)layoutSubviews } } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { if ([inputValue isKindOfClass:[UIColor class]]) { [self updateWithColor:inputValue]; } else if ([inputValue isKindOfClass:[NSValue class]]) { @@ -248,21 +233,20 @@ - (void)setInputValue:(id)inputValue UIColor *color = [[UIColor alloc] initWithCGColor:colorRef]; [self updateWithColor:color]; } + } else { + [self updateWithColor:UIColor.clearColor]; } } -- (id)inputValue -{ +- (id)inputValue { return [UIColor colorWithRed:self.redInput.slider.value green:self.greenInput.slider.value blue:self.blueInput.slider.value alpha:self.alphaInput.slider.value]; } -- (void)colorComponentInputViewValueDidChange:(FLEXColorComponentInputView *)colorComponentInputView -{ +- (void)colorComponentInputViewValueDidChange:(FLEXColorComponentInputView *)colorComponentInputView { [self updateColorPreview]; } -- (void)updateWithColor:(UIColor *)color -{ +- (void)updateWithColor:(UIColor *)color { CGFloat red, green, blue, white, alpha; if ([color getRed:&red green:&green blue:&blue alpha:&alpha]) { self.alphaInput.slider.value = alpha; @@ -286,8 +270,7 @@ - (void)updateWithColor:(UIColor *)color [self updateColorPreview]; } -- (void)updateColorPreview -{ +- (void)updateColorPreview { self.colorPreviewBox.color = self.inputValue; unsigned char redByte = self.redInput.slider.value * 255; unsigned char greenByte = self.greenInput.slider.value * 255; @@ -296,8 +279,7 @@ - (void)updateColorPreview [self setNeedsLayout]; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat height = 0; height += [[self class] colorPreviewBoxHeight]; height += [[self class] inputViewVerticalPadding]; @@ -311,19 +293,19 @@ - (CGSize)sizeThatFits:(CGSize)size return CGSizeMake(size.width, height); } -+ (CGFloat)inputViewVerticalPadding -{ ++ (CGFloat)inputViewVerticalPadding { return 10.0; } -+ (CGFloat)colorPreviewBoxHeight -{ ++ (CGFloat)colorPreviewBoxHeight { return 40.0; } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - return (type && (strcmp(type, @encode(CGColorRef)) == 0 || strcmp(type, FLEXEncodeClass(UIColor)) == 0)) || [value isKindOfClass:[UIColor class]]; ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + + // We don't care if currentValue is a color or not; we will default to +clearColor + return (strcmp(type, @encode(CGColorRef)) == 0) || (strcmp(type, FLEXEncodeClass(UIColor)) == 0); } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h index 54e63a97..7566d02d 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Daniel Rodriguez Troitino on 2/14/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m index 14471825..5e350d9f 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Daniel Rodriguez Troitino on 2/14/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputDateView.h" @@ -17,8 +17,7 @@ @interface FLEXArgumentInputDateView () @implementation FLEXArgumentInputDateView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.datePicker = [UIDatePicker new]; @@ -31,33 +30,29 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { if ([inputValue isKindOfClass:[NSDate class]]) { self.datePicker.date = inputValue; } } -- (id)inputValue -{ +- (id)inputValue { return self.datePicker.date; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; self.datePicker.frame = self.bounds; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat height = [self.datePicker sizeThatFits:size].height; return CGSizeMake(size.width, height); } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - return (type && (strcmp(type, FLEXEncodeClass(NSDate)) == 0)) || [value isKindOfClass:[NSDate class]]; ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + return strcmp(type, FLEXEncodeClass(NSDate)) == 0; } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h index 11847e60..b0ee9751 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m index 9e13aeaf..42908621 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputFontView.h" @@ -20,18 +20,15 @@ @interface FLEXArgumentInputFontView () @implementation FLEXArgumentInputFontView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.fontNameInput = [[FLEXArgumentInputFontsPickerView alloc] initWithArgumentTypeEncoding:FLEXEncodeClass(NSString)]; - self.fontNameInput.backgroundColor = self.backgroundColor; self.fontNameInput.targetSize = FLEXArgumentInputViewSizeSmall; self.fontNameInput.title = @"Font Name:"; [self addSubview:self.fontNameInput]; self.pointSizeInput = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:@encode(CGFloat)]; - self.pointSizeInput.backgroundColor = self.backgroundColor; self.pointSizeInput.targetSize = FLEXArgumentInputViewSizeSmall; self.pointSizeInput.title = @"Point Size:"; [self addSubview:self.pointSizeInput]; @@ -39,15 +36,13 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.fontNameInput.backgroundColor = backgroundColor; self.pointSizeInput.backgroundColor = backgroundColor; } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { if ([inputValue isKindOfClass:[UIFont class]]) { UIFont *font = (UIFont *)inputValue; self.fontNameInput.inputValue = font.fontName; @@ -55,8 +50,7 @@ - (void)setInputValue:(id)inputValue } } -- (id)inputValue -{ +- (id)inputValue { CGFloat pointSize = 0; if ([self.pointSizeInput.inputValue isKindOfClass:[NSValue class]]) { NSValue *pointSizeValue = (NSValue *)self.pointSizeInput.inputValue; @@ -67,16 +61,14 @@ - (id)inputValue return [UIFont fontWithName:self.fontNameInput.inputValue size:pointSize]; } -- (BOOL)inputViewIsFirstResponder -{ +- (BOOL)inputViewIsFirstResponder { return [self.fontNameInput inputViewIsFirstResponder] || [self.pointSizeInput inputViewIsFirstResponder]; } #pragma mark - Layout and Sizing -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; CGFloat runningOriginY = self.topInputFieldVerticalLayoutGuide; @@ -89,13 +81,11 @@ - (void)layoutSubviews self.pointSizeInput.frame = CGRectMake(0, runningOriginY, pointSizeFitSize.width, pointSizeFitSize.height); } -+ (CGFloat)verticalPaddingBetweenFields -{ ++ (CGFloat)verticalPaddingBetweenFields { return 10.0; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; CGSize constrainSize = CGSizeMake(size.width, CGFLOAT_MAX); @@ -111,11 +101,9 @@ - (CGSize)sizeThatFits:(CGSize)size #pragma mark - -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - BOOL supported = type && strcmp(type, FLEXEncodeClass(UIFont)) == 0; - supported = supported || (value && [value isKindOfClass:[UIFont class]]); - return supported; ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + return strcmp(type, FLEXEncodeClass(UIFont)) == 0; } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m index 1b4a3e1f..f280be0f 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m @@ -18,8 +18,7 @@ @interface FLEXArgumentInputFontsPickerView () @implementation FLEXArgumentInputFontsPickerView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.targetSize = FLEXArgumentInputViewSizeSmall; @@ -29,8 +28,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { self.inputTextView.text = inputValue; if ([self.availableFonts indexOfObject:inputValue] == NSNotFound) { [self.availableFonts insertObject:inputValue atIndex:0]; @@ -38,15 +36,13 @@ - (void)setInputValue:(id)inputValue [(UIPickerView *)self.inputTextView.inputView selectRow:[self.availableFonts indexOfObject:inputValue] inComponent:0 animated:NO]; } -- (id)inputValue -{ +- (id)inputValue { return self.inputTextView.text.length > 0 ? [self.inputTextView.text copy] : nil; } #pragma mark - private -- (UIPickerView*)createFontsPicker -{ +- (UIPickerView*)createFontsPicker { UIPickerView *fontsPicker = [UIPickerView new]; fontsPicker.dataSource = self; fontsPicker.delegate = self; @@ -54,10 +50,9 @@ - (UIPickerView*)createFontsPicker return fontsPicker; } -- (void)createAvailableFonts -{ - NSMutableArray *unsortedFontsArray = [NSMutableArray array]; - for (NSString *eachFontFamily in [UIFont familyNames]) { +- (void)createAvailableFonts { + NSMutableArray *unsortedFontsArray = [NSMutableArray new]; + for (NSString *eachFontFamily in UIFont.familyNames) { for (NSString *eachFontName in [UIFont fontNamesForFamilyName:eachFontFamily]) { [unsortedFontsArray addObject:eachFontName]; } @@ -67,20 +62,17 @@ - (void)createAvailableFonts #pragma mark - UIPickerViewDataSource -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView -{ +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component -{ +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return self.availableFonts.count; } #pragma mark - UIPickerViewDelegate -- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view -{ +- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *fontLabel; if (!view) { fontLabel = [UILabel new]; @@ -97,8 +89,7 @@ - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forC return fontLabel; } -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component -{ +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { self.inputTextView.text = self.availableFonts[row]; } diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h index 77923efc..76105579 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputTextView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m index b4945756..2dc25e34 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m @@ -3,20 +3,20 @@ // Flipboard // // Created by Ryan Olson on 6/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputNotSupportedView.h" +#import "FLEXColor.h" @implementation FLEXArgumentInputNotSupportedView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.inputTextView.userInteractionEnabled = NO; - self.inputTextView.backgroundColor = [UIColor colorWithWhite:0.8 alpha:1.0]; - self.inputTextView.text = @"nil"; + self.inputTextView.backgroundColor = [FLEXColor secondaryGroupedBackgroundColorWithAlpha:0.5]; + self.inputPlaceholderText = @"nil (type not supported)"; self.targetSize = FLEXArgumentInputViewSizeSmall; } return self; diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h index 754ea613..42d50b85 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputTextView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m index a6bc207c..b8689a7e 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputNumberView.h" @@ -11,48 +11,52 @@ @implementation FLEXArgumentInputNumberView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.inputTextView.keyboardType = UIKeyboardTypeNumbersAndPunctuation; self.targetSize = FLEXArgumentInputViewSizeSmall; } + return self; } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { if ([inputValue respondsToSelector:@selector(stringValue)]) { self.inputTextView.text = [inputValue stringValue]; } } -- (id)inputValue -{ +- (id)inputValue { return [FLEXRuntimeUtility valueForNumberWithObjCType:self.typeEncoding.UTF8String fromInputString:self.inputTextView.text]; } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - static NSArray *primitiveTypes = nil; ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + + static NSArray *supportedTypes = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - primitiveTypes = @[@(@encode(char)), - @(@encode(int)), - @(@encode(short)), - @(@encode(long)), - @(@encode(long long)), - @(@encode(unsigned char)), - @(@encode(unsigned int)), - @(@encode(unsigned short)), - @(@encode(unsigned long)), - @(@encode(unsigned long long)), - @(@encode(float)), - @(@encode(double)), - @(@encode(long double))]; + supportedTypes = @[ + @FLEXEncodeClass(NSNumber), + @FLEXEncodeClass(NSDecimalNumber), + @(@encode(char)), + @(@encode(int)), + @(@encode(short)), + @(@encode(long)), + @(@encode(long long)), + @(@encode(unsigned char)), + @(@encode(unsigned int)), + @(@encode(unsigned short)), + @(@encode(unsigned long)), + @(@encode(unsigned long long)), + @(@encode(float)), + @(@encode(double)), + @(@encode(long double)) + ]; }); - return type && [primitiveTypes containsObject:@(type)]; + + return type && [supportedTypes containsObject:@(type)]; } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h index 5f1e4d46..89cad157 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputTextView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m index 881d6c7b..7ed4c208 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputObjectView.h" @@ -25,8 +25,7 @@ @interface FLEXArgumentInputObjectView () @implementation FLEXArgumentInputObjectView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { // Start with the numbers and punctuation keyboard since quotes, curly braces, or @@ -46,8 +45,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)didChangeType -{ +- (void)didChangeType { self.inputType = self.objectTypeSegmentControl.selectedSegmentIndex; if (super.inputValue) { @@ -61,8 +59,7 @@ - (void)didChangeType } } -- (void)setInputType:(FLEXArgInputObjectType)inputType -{ +- (void)setInputType:(FLEXArgInputObjectType)inputType { if (_inputType == inputType) return; _inputType = inputType; @@ -98,14 +95,12 @@ - (void)setInputType:(FLEXArgInputObjectType)inputType [self.superview setNeedsLayout]; } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { super.inputValue = inputValue; [self populateTextAreaFromValue:inputValue]; } -- (id)inputValue -{ +- (id)inputValue { switch (self.inputType) { case FLEXArgInputObjectTypeJSON: return [FLEXRuntimeUtility objectValueFromEditableJSONString:self.inputTextView.text]; @@ -122,8 +117,7 @@ - (id)inputValue } } -- (void)populateTextAreaFromValue:(id)value -{ +- (void)populateTextAreaFromValue:(id)value { if (!value) { self.inputTextView.text = nil; } else { @@ -138,16 +132,14 @@ - (void)populateTextAreaFromValue:(id)value [self textViewDidChange:self.inputTextView]; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; fitSize.height += [self.objectTypeSegmentControl sizeThatFits:size].height + kSegmentInputMargin; return fitSize; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { CGFloat segmentHeight = [self.objectTypeSegmentControl sizeThatFits:self.frame.size].height; self.objectTypeSegmentControl.frame = CGRectMake( 0.0, @@ -162,23 +154,20 @@ - (void)layoutSubviews [super layoutSubviews]; } -- (CGFloat)topInputFieldVerticalLayoutGuide -{ +- (CGFloat)topInputFieldVerticalLayoutGuide { // Our text view is offset from the segmented control CGFloat segmentHeight = [self.objectTypeSegmentControl sizeThatFits:self.frame.size].height; return segmentHeight + super.topInputFieldVerticalLayoutGuide + kSegmentInputMargin; } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { NSParameterAssert(type); // Must be object type - return type[0] == '@'; + return type[0] == FLEXTypeEncodingObjcObject || type[0] == FLEXTypeEncodingObjcClass; } -+ (FLEXArgInputObjectType)preferredDefaultTypeForObjCType:(const char *)type withCurrentValue:(id)value -{ - NSParameterAssert(type[0] == '@'); ++ (FLEXArgInputObjectType)preferredDefaultTypeForObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type[0] == FLEXTypeEncodingObjcObject || type[0] == FLEXTypeEncodingObjcClass); if (value) { // If there's a current value, it must be serializable to JSON diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h index 2c16b6cb..484737ef 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputTextView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m index 3816e9e0..27ffffa5 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputStringView.h" @@ -11,36 +11,119 @@ @implementation FLEXArgumentInputStringView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { - self.targetSize = FLEXArgumentInputViewSizeLarge; + FLEXTypeEncoding type = typeEncoding[0]; + if (type == FLEXTypeEncodingConst) { + // A crash here would mean an invalid type encoding string + type = typeEncoding[1]; + } + + // Selectors don't need a multi-line text box + if (type == FLEXTypeEncodingSelector) { + self.targetSize = FLEXArgumentInputViewSizeSmall; + } else { + self.targetSize = FLEXArgumentInputViewSizeLarge; + } } return self; } -- (void)setInputValue:(id)inputValue -{ - self.inputTextView.text = inputValue; +- (void)setInputValue:(id)inputValue { + if ([inputValue isKindOfClass:[NSString class]]) { + self.inputTextView.text = inputValue; + } else if ([inputValue isKindOfClass:[NSValue class]]) { + NSValue *value = (id)inputValue; + NSParameterAssert(strlen(value.objCType) == 1); + + // C-String or SEL from NSValue + FLEXTypeEncoding type = value.objCType[0]; + if (type == FLEXTypeEncodingConst) { + // A crash here would mean an invalid type encoding string + type = value.objCType[1]; + } + + if (type == FLEXTypeEncodingCString) { + self.inputTextView.text = @((const char *)value.pointerValue); + } else if (type == FLEXTypeEncodingSelector) { + self.inputTextView.text = NSStringFromSelector((SEL)value.pointerValue); + } + } } -- (id)inputValue -{ +- (id)inputValue { + NSString *text = self.inputTextView.text; // Interpret empty string as nil. We loose the ability to set empty string as a string value, // but we accept that tradeoff in exchange for not having to type quotes for every string. - return self.inputTextView.text.length > 0 ? [self.inputTextView.text copy] : nil; + if (!text.length) { + return nil; + } + + // Case: C-strings and SELs + if (self.typeEncoding.length <= 2) { + FLEXTypeEncoding type = [self.typeEncoding characterAtIndex:0]; + if (type == FLEXTypeEncodingConst) { + // A crash here would mean an invalid type encoding string + type = [self.typeEncoding characterAtIndex:1]; + } + + if (type == FLEXTypeEncodingCString || type == FLEXTypeEncodingSelector) { + const char *encoding = self.typeEncoding.UTF8String; + SEL selector = NSSelectorFromString(text); + return [NSValue valueWithBytes:&selector objCType:encoding]; + } + } + + // Case: NSStrings + return self.inputTextView.text.copy; } // TODO: Support using object address for strings, as in the object arg view. -#pragma mark - ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + unsigned long len = strlen(type); + + BOOL isConst = type[0] == FLEXTypeEncodingConst; + NSInteger i = isConst ? 1 : 0; + + BOOL typeIsString = strcmp(type, FLEXEncodeClass(NSString)) == 0; + BOOL typeIsCString = len <= 2 && type[i] == FLEXTypeEncodingCString; + BOOL typeIsSEL = len <= 2 && type[i] == FLEXTypeEncodingSelector; + BOOL valueIsString = [value isKindOfClass:[NSString class]]; + + BOOL typeIsPrimitiveString = typeIsSEL || typeIsCString; + BOOL typeIsSupported = typeIsString || typeIsCString || typeIsSEL; + + BOOL valueIsNSValueWithCorrectType = NO; + if ([value isKindOfClass:[NSValue class]]) { + NSValue *v = (id)value; + len = strlen(v.objCType); + if (len == 1) { + FLEXTypeEncoding type = v.objCType[i]; + if (type == FLEXTypeEncodingCString && typeIsCString) { + valueIsNSValueWithCorrectType = YES; + } else if (type == FLEXTypeEncodingSelector && typeIsSEL) { + valueIsNSValueWithCorrectType = YES; + } + } + } + + if (!value && typeIsSupported) { + return YES; + } + + if (typeIsString && valueIsString) { + return YES; + } + + // Primitive strings can be input as NSStrings or NSValues + if (typeIsPrimitiveString && (valueIsString || valueIsNSValueWithCorrectType)) { + return YES; + } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - BOOL supported = type && strcmp(type, FLEXEncodeClass(NSString)) == 0; - supported = supported || (value && [value isKindOfClass:[NSString class]]); - return supported; + return NO; } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h index 3e3b6f94..1a8b0349 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m index f41e991c..eeb625ee 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m @@ -3,12 +3,13 @@ // Flipboard // // Created by Ryan Olson on 6/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputStructView.h" #import "FLEXArgumentInputViewFactory.h" #import "FLEXRuntimeUtility.h" +#import "FLEXTypeEncodingParser.h" @interface FLEXArgumentInputStructView () @@ -18,22 +19,26 @@ @interface FLEXArgumentInputStructView () @implementation FLEXArgumentInputStructView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { - NSMutableArray *inputViews = [NSMutableArray array]; + NSMutableArray *inputViews = [NSMutableArray new]; NSArray *customTitles = [[self class] customFieldTitlesForTypeEncoding:typeEncoding]; - [FLEXRuntimeUtility enumerateTypesInStructEncoding:typeEncoding usingBlock:^(NSString *structName, const char *fieldTypeEncoding, NSString *prettyTypeEncoding, NSUInteger fieldIndex, NSUInteger fieldOffset) { + [FLEXRuntimeUtility enumerateTypesInStructEncoding:typeEncoding usingBlock:^(NSString *structName, + const char *fieldTypeEncoding, + NSString *prettyTypeEncoding, + NSUInteger fieldIndex, + NSUInteger fieldOffset) { FLEXArgumentInputView *inputView = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:fieldTypeEncoding]; - inputView.backgroundColor = self.backgroundColor; inputView.targetSize = FLEXArgumentInputViewSizeSmall; if (fieldIndex < customTitles.count) { inputView.title = customTitles[fieldIndex]; } else { - inputView.title = [NSString stringWithFormat:@"%@ field %lu (%@)", structName, (unsigned long)fieldIndex, prettyTypeEncoding]; + inputView.title = [NSString stringWithFormat:@"%@ field %lu (%@)", + structName, (unsigned long)fieldIndex, prettyTypeEncoding + ]; } [inputViews addObject:inputView]; @@ -47,29 +52,27 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding #pragma mark - Superclass Overrides -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; for (FLEXArgumentInputView *inputView in self.argumentInputViews) { inputView.backgroundColor = backgroundColor; } } -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { if ([inputValue isKindOfClass:[NSValue class]]) { const char *structTypeEncoding = [inputValue objCType]; if (strcmp(self.typeEncoding.UTF8String, structTypeEncoding) == 0) { NSUInteger valueSize = 0; - @try { - // NSGetSizeAndAlignment barfs on type encoding for bitfields. - NSGetSizeAndAlignment(structTypeEncoding, &valueSize, NULL); - } @catch (NSException *exception) { } - if (valueSize > 0) { + if (FLEXGetSizeAndAlignment(structTypeEncoding, &valueSize, NULL)) { void *unboxedValue = malloc(valueSize); [inputValue getValue:unboxedValue]; - [FLEXRuntimeUtility enumerateTypesInStructEncoding:structTypeEncoding usingBlock:^(NSString *structName, const char *fieldTypeEncoding, NSString *prettyTypeEncoding, NSUInteger fieldIndex, NSUInteger fieldOffset) { + [FLEXRuntimeUtility enumerateTypesInStructEncoding:structTypeEncoding usingBlock:^(NSString *structName, + const char *fieldTypeEncoding, + NSString *prettyTypeEncoding, + NSUInteger fieldIndex, + NSUInteger fieldOffset) { void *fieldPointer = unboxedValue + fieldOffset; FLEXArgumentInputView *inputView = self.argumentInputViews[fieldIndex]; @@ -87,19 +90,18 @@ - (void)setInputValue:(id)inputValue } } -- (id)inputValue -{ +- (id)inputValue { NSValue *boxedStruct = nil; const char *structTypeEncoding = self.typeEncoding.UTF8String; NSUInteger structSize = 0; - @try { - // NSGetSizeAndAlignment barfs on type encoding for bitfields. - NSGetSizeAndAlignment(structTypeEncoding, &structSize, NULL); - } @catch (NSException *exception) { } - if (structSize > 0) { + if (FLEXGetSizeAndAlignment(structTypeEncoding, &structSize, NULL)) { void *unboxedStruct = malloc(structSize); - [FLEXRuntimeUtility enumerateTypesInStructEncoding:structTypeEncoding usingBlock:^(NSString *structName, const char *fieldTypeEncoding, NSString *prettyTypeEncoding, NSUInteger fieldIndex, NSUInteger fieldOffset) { + [FLEXRuntimeUtility enumerateTypesInStructEncoding:structTypeEncoding usingBlock:^(NSString *structName, + const char *fieldTypeEncoding, + NSString *prettyTypeEncoding, + NSUInteger fieldIndex, + NSUInteger fieldOffset) { void *fieldPointer = unboxedStruct + fieldOffset; FLEXArgumentInputView *inputView = self.argumentInputViews[fieldIndex]; @@ -123,8 +125,7 @@ - (id)inputValue return boxedStruct; } -- (BOOL)inputViewIsFirstResponder -{ +- (BOOL)inputViewIsFirstResponder { BOOL isFirstResponder = NO; for (FLEXArgumentInputView *inputView in self.argumentInputViews) { if ([inputView inputViewIsFirstResponder]) { @@ -138,8 +139,7 @@ - (BOOL)inputViewIsFirstResponder #pragma mark - Layout and Sizing -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; CGFloat runningOriginY = self.topInputFieldVerticalLayoutGuide; @@ -151,13 +151,11 @@ - (void)layoutSubviews } } -+ (CGFloat)verticalPaddingBetweenFields -{ ++ (CGFloat)verticalPaddingBetweenFields { return 10.0; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; CGSize constrainSize = CGSizeMake(size.width, CGFLOAT_MAX); @@ -174,13 +172,16 @@ - (CGSize)sizeThatFits:(CGSize)size #pragma mark - Class Helpers -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ - return type && type[0] == FLEXTypeEncodingStructBegin; ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); + if (type[0] == FLEXTypeEncodingStructBegin) { + return FLEXGetSizeAndAlignment(type, nil, nil); + } + + return NO; } -+ (NSArray *)customFieldTitlesForTypeEncoding:(const char *)typeEncoding -{ ++ (NSArray *)customFieldTitlesForTypeEncoding:(const char *)typeEncoding { NSArray *customTitles = nil; if (strcmp(typeEncoding, @encode(CGRect)) == 0) { customTitles = @[@"CGPoint origin", @"CGSize size"]; diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h index 973639df..a1ae58ab 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m index fc12b908..bd0ddf79 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputSwitchView.h" @@ -16,8 +16,7 @@ @interface FLEXArgumentInputSwitchView () @implementation FLEXArgumentInputSwitchView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.inputSwitch = [UISwitch new]; @@ -31,8 +30,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding #pragma mark Input/Output -- (void)setInputValue:(id)inputValue -{ +- (void)setInputValue:(id)inputValue { BOOL on = NO; if ([inputValue isKindOfClass:[NSNumber class]]) { NSNumber *number = (NSNumber *)inputValue; @@ -46,30 +44,26 @@ - (void)setInputValue:(id)inputValue self.inputSwitch.on = on; } -- (id)inputValue -{ +- (id)inputValue { BOOL isOn = [self.inputSwitch isOn]; NSValue *boxedBool = [NSValue value:&isOn withObjCType:@encode(BOOL)]; return boxedBool; } -- (void)switchValueDidChange:(id)sender -{ +- (void)switchValueDidChange:(id)sender { [self.delegate argumentInputViewValueDidChange:self]; } #pragma mark - Layout and Sizing -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; self.inputSwitch.frame = CGRectMake(0, self.topInputFieldVerticalLayoutGuide, self.inputSwitch.frame.size.width, self.inputSwitch.frame.size.height); } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; fitSize.height += self.inputSwitch.frame.size.height; return fitSize; @@ -78,10 +72,10 @@ - (CGSize)sizeThatFits:(CGSize)size #pragma mark - Class Helpers -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { + NSParameterAssert(type); // Only BOOLs. Current value is irrelevant. - return type && strcmp(type, @encode(BOOL)) == 0; + return strcmp(type, @encode(BOOL)) == 0; } @end diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m index da7ddca6..30d92b5a 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m @@ -20,26 +20,31 @@ @interface FLEXArgumentInputTextView () @implementation FLEXArgumentInputTextView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.inputTextView = [UITextView new]; self.inputTextView.font = [[self class] inputFont]; - self.inputTextView.backgroundColor = [FLEXColor primaryBackgroundColor]; - self.inputTextView.layer.borderColor = [FLEXColor borderColor].CGColor; - self.inputTextView.layer.borderWidth = 1.f; - self.inputTextView.layer.cornerRadius = 5.f; + self.inputTextView.backgroundColor = FLEXColor.secondaryGroupedBackgroundColor; + self.inputTextView.layer.cornerRadius = 10.f; + self.inputTextView.contentInset = UIEdgeInsetsMake(0, 5, 0, 0); self.inputTextView.autocapitalizationType = UITextAutocapitalizationTypeNone; self.inputTextView.autocorrectionType = UITextAutocorrectionTypeNo; self.inputTextView.delegate = self; self.inputTextView.inputAccessoryView = [self createToolBar]; - [self addSubview:self.inputTextView]; + if (@available(iOS 11, *)) { + [self.inputTextView.layer setValue:@YES forKey:@"continuousCorners"]; + } else { + self.inputTextView.layer.borderWidth = 1.f; + self.inputTextView.layer.borderColor = FLEXColor.borderColor.CGColor; + } self.placeholderLabel = [UILabel new]; self.placeholderLabel.font = self.inputTextView.font; - self.placeholderLabel.textColor = [FLEXColor deemphasizedTextColor]; + self.placeholderLabel.textColor = FLEXColor.deemphasizedTextColor; self.placeholderLabel.numberOfLines = 0; + + [self addSubview:self.inputTextView]; [self.inputTextView addSubview:self.placeholderLabel]; } @@ -48,23 +53,26 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding #pragma mark - Private -- (UIToolbar *)createToolBar -{ +- (UIToolbar *)createToolBar { UIToolbar *toolBar = [UIToolbar new]; [toolBar sizeToFit]; - UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; - UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(textViewDone)]; - toolBar.items = @[spaceItem, doneItem]; + UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace + target:nil action:nil + ]; + UIBarButtonItem *pasteItem = [[UIBarButtonItem alloc] + initWithTitle:@"Paste" style:UIBarButtonItemStyleDone + target:self.inputTextView action:@selector(paste:) + ]; + UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemDone + target:self.inputTextView action:@selector(resignFirstResponder) + ]; + toolBar.items = @[spaceItem, pasteItem, doneItem]; return toolBar; } -- (void)textViewDone -{ - [self.inputTextView resignFirstResponder]; -} - -- (void)setInputPlaceholderText:(NSString *)placeholder -{ +- (void)setInputPlaceholderText:(NSString *)placeholder { self.placeholderLabel.text = placeholder; if (placeholder.length) { if (!self.inputTextView.text.length) { @@ -79,41 +87,35 @@ - (void)setInputPlaceholderText:(NSString *)placeholder [self setNeedsLayout]; } -- (NSString *)inputPlaceholderText -{ +- (NSString *)inputPlaceholderText { return self.placeholderLabel.text; } #pragma mark - Superclass Overrides -- (BOOL)inputViewIsFirstResponder -{ +- (BOOL)inputViewIsFirstResponder { return self.inputTextView.isFirstResponder; } #pragma mark - Layout and Sizing -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; self.inputTextView.frame = CGRectMake(0, self.topInputFieldVerticalLayoutGuide, self.bounds.size.width, [self inputTextViewHeight]); - // Placeholder label is positioned by insetting origin, - // which is the line fragment padding for X and 0 for Y, + // Placeholder label is positioned by insetting then origin // by the content inset then the text container inset - CGFloat leading = self.inputTextView.textContainer.lineFragmentPadding; CGSize s = self.inputTextView.frame.size; - self.placeholderLabel.frame = CGRectMake(leading, 0, s.width, s.height); + self.placeholderLabel.frame = CGRectMake(0, 0, s.width, s.height); self.placeholderLabel.frame = UIEdgeInsetsInsetRect( UIEdgeInsetsInsetRect(self.placeholderLabel.frame, self.inputTextView.contentInset), self.inputTextView.textContainerInset ); } -- (NSUInteger)numberOfInputLines -{ +- (NSUInteger)numberOfInputLines { switch (self.targetSize) { case FLEXArgumentInputViewSizeDefault: return 2; @@ -124,45 +126,27 @@ - (NSUInteger)numberOfInputLines } } -- (CGFloat)inputTextViewHeight -{ +- (CGFloat)inputTextViewHeight { return ceil([[self class] inputFont].lineHeight * self.numberOfInputLines) + 16.0; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGSize fitSize = [super sizeThatFits:size]; fitSize.height += [self inputTextViewHeight]; return fitSize; } -#pragma mark - Trait collection changes - -- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection -{ -#if FLEX_AT_LEAST_IOS13_SDK - if (@available(iOS 13.0, *)) { - if (previousTraitCollection.userInterfaceStyle != self.traitCollection.userInterfaceStyle) { - self.inputTextView.layer.borderColor = [FLEXColor borderColor].CGColor; - } - } -#endif -} - - #pragma mark - Class Helpers -+ (UIFont *)inputFont -{ - return [FLEXUtility defaultFontOfSize:14.0]; ++ (UIFont *)inputFont { + return [UIFont systemFontOfSize:14.0]; } #pragma mark - UITextViewDelegate -- (void)textViewDidChange:(UITextView *)textView -{ +- (void)textViewDidChange:(UITextView *)textView { [self.delegate argumentInputViewValueDidChange:self]; self.placeholderLabel.hidden = !(self.inputPlaceholderText.length && !textView.text.length); } diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h index 677e509d..d09a1395 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h @@ -3,14 +3,17 @@ // Flipboard // // Created by Ryan Olson on 5/30/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import typedef NS_ENUM(NSUInteger, FLEXArgumentInputViewSize) { + /// 2 lines, medium-sized FLEXArgumentInputViewSizeDefault = 0, + /// One line FLEXArgumentInputViewSizeSmall, + /// Several lines FLEXArgumentInputViewSizeLarge }; diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m index be3b1a50..513bd6a3 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m +++ b/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m @@ -3,11 +3,12 @@ // Flipboard // // Created by Ryan Olson on 5/30/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXArgumentInputView.h" #import "FLEXUtility.h" +#import "FLEXColor.h" @interface FLEXArgumentInputView () @@ -18,8 +19,7 @@ @interface FLEXArgumentInputView () @implementation FLEXArgumentInputView -- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding -{ +- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithFrame:CGRectZero]; if (self) { self.typeEncoding = typeEncoding != NULL ? @(typeEncoding) : nil; @@ -27,8 +27,7 @@ - (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding return self; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; if (self.showsTitle) { @@ -38,14 +37,12 @@ - (void)layoutSubviews } } -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.titleLabel.backgroundColor = backgroundColor; } -- (void)setTitle:(NSString *)title -{ +- (void)setTitle:(NSString *)title { if (![_title isEqual:title]) { _title = title; self.titleLabel.text = title; @@ -53,26 +50,22 @@ - (void)setTitle:(NSString *)title } } -- (UILabel *)titleLabel -{ +- (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [UILabel new]; _titleLabel.font = [[self class] titleFont]; - _titleLabel.backgroundColor = self.backgroundColor; - _titleLabel.textColor = [UIColor colorWithWhite:0.3 alpha:1.0]; + _titleLabel.textColor = FLEXColor.primaryTextColor; _titleLabel.numberOfLines = 0; [self addSubview:_titleLabel]; } return _titleLabel; } -- (BOOL)showsTitle -{ +- (BOOL)showsTitle { return self.title.length > 0; } -- (CGFloat)topInputFieldVerticalLayoutGuide -{ +- (CGFloat)topInputFieldVerticalLayoutGuide { CGFloat verticalLayoutGuide = 0; if (self.showsTitle) { CGFloat titleHeight = [self.titleLabel sizeThatFits:self.bounds.size].height; @@ -84,34 +77,29 @@ - (CGFloat)topInputFieldVerticalLayoutGuide #pragma mark - Subclasses Can Override -- (BOOL)inputViewIsFirstResponder -{ +- (BOOL)inputViewIsFirstResponder { return NO; } -+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value -{ ++ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value { return NO; } #pragma mark - Class Helpers -+ (UIFont *)titleFont -{ - return [FLEXUtility defaultFontOfSize:12.0]; ++ (UIFont *)titleFont { + return [UIFont systemFontOfSize:12.0]; } -+ (CGFloat)titleBottomPadding -{ ++ (CGFloat)titleBottomPadding { return 4.0; } #pragma mark - Sizing -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat height = 0; if (self.title.length > 0) { diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h b/xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.h similarity index 95% rename from xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h rename to xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.h index 0680903e..f72e9073 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.h @@ -7,8 +7,7 @@ // #import - -@class FLEXArgumentInputView; +#import "FLEXArgumentInputSwitchView.h" @interface FLEXArgumentInputViewFactory : NSObject diff --git a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m b/xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.m similarity index 95% rename from xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m rename to xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.m index 93a46aa7..fde1c8f3 100644 --- a/xcode/Pods/FLEX/Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXArgumentInputViewFactory.m @@ -21,13 +21,11 @@ @implementation FLEXArgumentInputViewFactory -+ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding -{ ++ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding { return [self argumentInputViewForTypeEncoding:typeEncoding currentValue:nil]; } -+ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue -{ ++ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue { Class subclass = [self argumentInputViewSubclassForTypeEncoding:typeEncoding currentValue:currentValue]; if (!subclass) { // Fall back to a FLEXArgumentInputNotSupportedView if we can't find a subclass that fits the type encoding. @@ -39,8 +37,7 @@ + (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEn return [[subclass alloc] initWithArgumentTypeEncoding:typeEncoding + fieldNameOffset]; } -+ (Class)argumentInputViewSubclassForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue -{ ++ (Class)argumentInputViewSubclassForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue { // Remove the field name if there is any (e.g. \"width\"d -> d) const NSUInteger fieldNameOffset = [FLEXRuntimeUtility fieldNameOffsetForTypeEncoding:typeEncoding]; Class argumentInputViewSubclass = nil; @@ -66,8 +63,7 @@ + (Class)argumentInputViewSubclassForTypeEncoding:(const char *)typeEncoding cur return argumentInputViewSubclass; } -+ (BOOL)canEditFieldWithTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue -{ ++ (BOOL)canEditFieldWithTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue { return [self argumentInputViewSubclassForTypeEncoding:typeEncoding currentValue:currentValue] != nil; } diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.h index 98df087f..1f36193b 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.h +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.h @@ -3,12 +3,12 @@ // Flipboard // // Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import "FLEXMutableFieldEditorViewController.h" +#import "FLEXFieldEditorViewController.h" -@interface FLEXDefaultEditorViewController : FLEXMutableFieldEditorViewController +@interface FLEXDefaultEditorViewController : FLEXFieldEditorViewController - (id)initWithDefaults:(NSUserDefaults *)defaults key:(NSString *)key; diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.m index 2e2deca6..739aa988 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.m +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXDefaultEditorViewController.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXDefaultEditorViewController.h" @@ -21,8 +21,7 @@ @interface FLEXDefaultEditorViewController () @implementation FLEXDefaultEditorViewController -- (id)initWithDefaults:(NSUserDefaults *)defaults key:(NSString *)key -{ +- (id)initWithDefaults:(NSUserDefaults *)defaults key:(NSString *)key { self = [super initWithTarget:defaults]; if (self) { self.key = key; @@ -31,13 +30,11 @@ - (id)initWithDefaults:(NSUserDefaults *)defaults key:(NSString *)key return self; } -- (NSUserDefaults *)defaults -{ +- (NSUserDefaults *)defaults { return [self.target isKindOfClass:[NSUserDefaults class]] ? self.target : nil; } -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; self.fieldEditorView.fieldDescription = self.key; @@ -52,8 +49,7 @@ - (void)viewDidLoad self.fieldEditorView.argumentInputViews = @[inputView]; } -- (void)actionButtonPressed:(id)sender -{ +- (void)actionButtonPressed:(id)sender { [super actionButtonPressed:sender]; id value = self.firstInputView.inputValue; @@ -67,15 +63,13 @@ - (void)actionButtonPressed:(id)sender self.firstInputView.inputValue = [self.defaults objectForKey:self.key]; } -- (void)getterButtonPressed:(id)sender -{ +- (void)getterButtonPressed:(id)sender { [super getterButtonPressed:sender]; id returnedObject = [self.defaults objectForKey:self.key]; [self exploreObjectOrPopViewController:returnedObject]; } -+ (BOOL)canEditDefaultWithValue:(id)currentValue -{ ++ (BOOL)canEditDefaultWithValue:(id)currentValue { return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:FLEXEncodeObject(currentValue) currentValue:currentValue diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.h b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.h index 780d5641..1345805a 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.h +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @@ -15,6 +15,6 @@ @property (nonatomic, copy) NSString *targetDescription; @property (nonatomic, copy) NSString *fieldDescription; -@property (nonatomic) NSArray *argumentInputViews; +@property (nonatomic, copy) NSArray *argumentInputViews; @end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.m b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.m index c5898cd5..5295261e 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.m +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorView.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXFieldEditorView.h" @@ -21,8 +21,7 @@ @interface FLEXFieldEditorView () @implementation FLEXFieldEditorView -- (id)initWithFrame:(CGRect)frame -{ +- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.targetDescriptionLabel = [UILabel new]; @@ -44,8 +43,7 @@ - (id)initWithFrame:(CGRect)frame return self; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; CGFloat horizontalPadding = [[self class] horizontalPadding]; @@ -78,15 +76,13 @@ - (void)layoutSubviews } } -- (void)setBackgroundColor:(UIColor *)backgroundColor -{ +- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; self.targetDescriptionLabel.backgroundColor = backgroundColor; self.fieldDescriptionLabel.backgroundColor = backgroundColor; } -- (void)setTargetDescription:(NSString *)targetDescription -{ +- (void)setTargetDescription:(NSString *)targetDescription { if (![_targetDescription isEqual:targetDescription]) { _targetDescription = targetDescription; self.targetDescriptionLabel.text = targetDescription; @@ -94,8 +90,7 @@ - (void)setTargetDescription:(NSString *)targetDescription } } -- (void)setFieldDescription:(NSString *)fieldDescription -{ +- (void)setFieldDescription:(NSString *)fieldDescription { if (![_fieldDescription isEqual:fieldDescription]) { _fieldDescription = fieldDescription; self.fieldDescriptionLabel.text = fieldDescription; @@ -103,8 +98,7 @@ - (void)setFieldDescription:(NSString *)fieldDescription } } -- (void)setArgumentInputViews:(NSArray *)argumentInputViews -{ +- (void)setArgumentInputViews:(NSArray *)argumentInputViews { if (![_argumentInputViews isEqual:argumentInputViews]) { for (FLEXArgumentInputView *inputView in _argumentInputViews) { @@ -121,40 +115,33 @@ - (void)setArgumentInputViews:(NSArray *)argumentInputV } } -+ (UIView *)dividerView -{ ++ (UIView *)dividerView { UIView *dividerView = [UIView new]; dividerView.backgroundColor = [self dividerColor]; return dividerView; } -+ (UIColor *)dividerColor -{ ++ (UIColor *)dividerColor { return UIColor.lightGrayColor; } -+ (CGFloat)horizontalPadding -{ ++ (CGFloat)horizontalPadding { return 10.0; } -+ (CGFloat)verticalPadding -{ ++ (CGFloat)verticalPadding { return 20.0; } -+ (UIFont *)labelFont -{ - return [FLEXUtility defaultFontOfSize:14.0]; ++ (UIFont *)labelFont { + return [UIFont systemFontOfSize:14.0]; } -+ (CGFloat)dividerLineHeight -{ ++ (CGFloat)dividerLineHeight { return 1.0; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat horizontalPadding = [[self class] horizontalPadding]; CGFloat verticalPadding = [[self class] verticalPadding]; CGFloat dividerLineHeight = [[self class] dividerLineHeight]; diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.h index 1b6afef8..e109cebd 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.h +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.h @@ -1,32 +1,29 @@ // // FLEXFieldEditorViewController.h -// Flipboard +// FLEX // -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Created by Tanner on 11/22/18. +// Copyright © 2018 Flipboard. All rights reserved. // -#import +#import "FLEXVariableEditorViewController.h" +#import "FLEXProperty.h" +#import "FLEXIvar.h" -@class FLEXFieldEditorView; -@class FLEXArgumentInputView; +NS_ASSUME_NONNULL_BEGIN -@interface FLEXFieldEditorViewController : UIViewController +@interface FLEXFieldEditorViewController : FLEXVariableEditorViewController -- (id)initWithTarget:(id)target; +/// @return nil if the property is readonly or if the type is unsupported ++ (nullable instancetype)target:(id)target property:(FLEXProperty *)property; +/// @return nil if the ivar type is unsupported ++ (nullable instancetype)target:(id)target ivar:(FLEXIvar *)ivar; -// Convenience accessor since many subclasses only use one input view -@property (nonatomic, readonly) FLEXArgumentInputView *firstInputView; +/// Subclasses can change the button title via the \c title property +@property (nonatomic, readonly) UIBarButtonItem *getterButton; -// For subclass use only. -@property (nonatomic, readonly) id target; -@property (nonatomic, readonly) FLEXFieldEditorView *fieldEditorView; -@property (nonatomic, readonly) UIBarButtonItem *setterButton; - -- (void)actionButtonPressed:(id)sender; -- (NSString *)titleForActionButton; -/// Pushes an explorer view controller for the given object -/// or pops the current view controller. -- (void)exploreObjectOrPopViewController:(id)objectOrNil; +- (void)getterButtonPressed:(id)sender; @end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.m index 4d8d93b6..7a5db17d 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.m +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXFieldEditorViewController.m @@ -1,132 +1,163 @@ // // FLEXFieldEditorViewController.m -// Flipboard +// FLEX // -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Created by Tanner on 11/22/18. +// Copyright © 2018 Flipboard. All rights reserved. // -#import "FLEXColor.h" #import "FLEXFieldEditorViewController.h" #import "FLEXFieldEditorView.h" +#import "FLEXArgumentInputViewFactory.h" +#import "FLEXPropertyAttributes.h" #import "FLEXRuntimeUtility.h" #import "FLEXUtility.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXArgumentInputView.h" -#import "FLEXArgumentInputViewFactory.h" -#import "FLEXObjectExplorerViewController.h" +#import "FLEXColor.h" +#import "UIBarButtonItem+FLEX.h" -@interface FLEXFieldEditorViewController () +@interface FLEXFieldEditorViewController () -@property (nonatomic) UIScrollView *scrollView; +@property (nonatomic) FLEXProperty *property; +@property (nonatomic) FLEXIvar *ivar; -@property (nonatomic, readwrite) id target; -@property (nonatomic, readwrite) FLEXFieldEditorView *fieldEditorView; -@property (nonatomic, readwrite) UIBarButtonItem *setterButton; +@property (nonatomic, readonly) id currentValue; +@property (nonatomic, readonly) const FLEXTypeEncoding *typeEncoding; +@property (nonatomic, readonly) NSString *fieldDescription; @end @implementation FLEXFieldEditorViewController -- (id)initWithTarget:(id)target -{ - self = [super initWithNibName:nil bundle:nil]; - if (self) { - self.target = target; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +#pragma mark - Initialization + ++ (instancetype)target:(id)target property:(FLEXProperty *)property { + id value = [property getValue:target]; + if (![self canEditProperty:property onObject:target currentValue:value]) { + return nil; } - return self; + + FLEXFieldEditorViewController *editor = [self target:target]; + editor.title = [@"Property: " stringByAppendingString:property.name]; + editor.property = property; + return editor; } -- (void)dealloc -{ - [NSNotificationCenter.defaultCenter removeObserver:self]; ++ (instancetype)target:(id)target ivar:(nonnull FLEXIvar *)ivar { + FLEXFieldEditorViewController *editor = [self target:target]; + editor.title = [@"Ivar: " stringByAppendingString:ivar.name]; + editor.ivar = ivar; + return editor; } -- (void)keyboardDidShow:(NSNotification *)notification -{ - CGRect keyboardRectInWindow = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - CGSize keyboardSize = [self.view convertRect:keyboardRectInWindow fromView:nil].size; - UIEdgeInsets scrollInsets = self.scrollView.contentInset; - scrollInsets.bottom = keyboardSize.height; - self.scrollView.contentInset = scrollInsets; - self.scrollView.scrollIndicatorInsets = scrollInsets; - - // Find the active input view and scroll to make sure it's visible. - for (FLEXArgumentInputView *argumentInputView in self.fieldEditorView.argumentInputViews) { - if (argumentInputView.inputViewIsFirstResponder) { - CGRect scrollToVisibleRect = [self.scrollView convertRect:argumentInputView.bounds fromView:argumentInputView]; - [self.scrollView scrollRectToVisible:scrollToVisibleRect animated:YES]; - break; - } +#pragma mark - Overrides + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = FLEXColor.groupedBackgroundColor; + + // Create getter button + _getterButton = [[UIBarButtonItem alloc] + initWithTitle:@"Get" + style:UIBarButtonItemStyleDone + target:self + action:@selector(getterButtonPressed:) + ]; + self.toolbarItems = @[ + UIBarButtonItem.flex_flexibleSpace, self.getterButton, self.actionButton + ]; + + // Configure input view + self.fieldEditorView.fieldDescription = self.fieldDescription; + FLEXArgumentInputView *inputView = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:self.typeEncoding]; + inputView.inputValue = self.currentValue; + inputView.delegate = self; + self.fieldEditorView.argumentInputViews = @[inputView]; + + // Don't show a "set" button for switches; we mutate when the switch is flipped + if ([inputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { + self.actionButton.enabled = NO; + self.actionButton.title = @"Flip the switch to call the setter"; + // Put getter button before setter button + self.toolbarItems = @[ + UIBarButtonItem.flex_flexibleSpace, self.actionButton, self.getterButton + ]; } } -- (void)keyboardWillHide:(NSNotification *)notification -{ - UIEdgeInsets scrollInsets = self.scrollView.contentInset; - scrollInsets.bottom = 0.0; - self.scrollView.contentInset = scrollInsets; - self.scrollView.scrollIndicatorInsets = scrollInsets; -} +- (void)actionButtonPressed:(id)sender { + [super actionButtonPressed:sender]; + + if (self.property) { + id userInputObject = self.firstInputView.inputValue; + NSArray *arguments = userInputObject ? @[userInputObject] : nil; + SEL setterSelector = self.property.likelySetter; + NSError *error = nil; + [FLEXRuntimeUtility performSelector:setterSelector onObject:self.target withArguments:arguments error:&error]; + if (error) { + [FLEXAlert showAlert:@"Property Setter Failed" message:error.localizedDescription from:self]; + sender = nil; // Don't pop back + } + } else { + // TODO: check mutability and use mutableCopy if necessary; + // this currently could and would assign NSArray to NSMutableArray + [self.ivar setValue:self.firstInputView.inputValue onObject:self.target]; + } -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [FLEXColor scrollViewBackgroundColor]; - - self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; - self.scrollView.backgroundColor = self.view.backgroundColor; - self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.scrollView.delegate = self; - [self.view addSubview:self.scrollView]; - - self.fieldEditorView = [FLEXFieldEditorView new]; - self.fieldEditorView.backgroundColor = self.view.backgroundColor; - self.fieldEditorView.targetDescription = [NSString stringWithFormat:@"%@ %p", [self.target class], self.target]; - [self.scrollView addSubview:self.fieldEditorView]; - - self.setterButton = [[UIBarButtonItem alloc] initWithTitle:[self titleForActionButton] style:UIBarButtonItemStyleDone target:self action:@selector(actionButtonPressed:)]; - self.navigationItem.rightBarButtonItem = self.setterButton; + // Go back after setting, but not for switches. + if (sender) { + [self.navigationController popViewControllerAnimated:YES]; + } else { + self.firstInputView.inputValue = self.currentValue; + } } -- (void)viewWillLayoutSubviews -{ - CGSize constrainSize = CGSizeMake(self.scrollView.bounds.size.width, CGFLOAT_MAX); - CGSize fieldEditorSize = [self.fieldEditorView sizeThatFits:constrainSize]; - self.fieldEditorView.frame = CGRectMake(0, 0, fieldEditorSize.width, fieldEditorSize.height); - self.scrollView.contentSize = fieldEditorSize; +- (void)getterButtonPressed:(id)sender { + [self.fieldEditorView endEditing:YES]; + + [self exploreObjectOrPopViewController:self.currentValue]; } -- (FLEXArgumentInputView *)firstInputView -{ - return [self.fieldEditorView argumentInputViews].firstObject; +- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView { + if ([argumentInputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { + [self actionButtonPressed:nil]; + } } -- (void)actionButtonPressed:(id)sender -{ - // Subclasses can override - [self.fieldEditorView endEditing:YES]; +#pragma mark - Private + +- (id)currentValue { + if (self.property) { + return [self.property getValue:self.target]; + } else { + return [self.ivar getValue:self.target]; + } } -- (NSString *)titleForActionButton -{ - // Subclasses can override. - return @"Set"; +- (const FLEXTypeEncoding *)typeEncoding { + if (self.property) { + return self.property.attributes.typeEncoding.UTF8String; + } else { + return self.ivar.typeEncoding.UTF8String; + } } -- (void)exploreObjectOrPopViewController:(id)objectOrNil { - if (objectOrNil) { - // For non-nil (or void) return types, push an explorer view controller to display the object - FLEXObjectExplorerViewController *explorerViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:objectOrNil]; - [self.navigationController pushViewController:explorerViewController animated:YES]; +- (NSString *)fieldDescription { + if (self.property) { + return self.property.fullDescription; } else { - // If we didn't get a returned object but the method call succeeded, - // pop this view controller off the stack to indicate that the call went through. - [self.navigationController popViewControllerAnimated:YES]; + return self.ivar.description; } } ++ (BOOL)canEditProperty:(FLEXProperty *)property onObject:(id)object currentValue:(id)value { + const FLEXTypeEncoding *typeEncoding = property.attributes.typeEncoding.UTF8String; + BOOL canEditType = [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:typeEncoding currentValue:value]; + return canEditType && [object respondsToSelector:property.likelySetter]; +} + ++ (BOOL)canEditIvar:(Ivar)ivar currentValue:(id)value { + return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:ivar_getTypeEncoding(ivar) currentValue:value]; +} + @end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.h deleted file mode 100644 index 8fc505ba..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FLEXIvarEditorViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXMutableFieldEditorViewController.h" -#import - -@interface FLEXIvarEditorViewController : FLEXMutableFieldEditorViewController - -- (id)initWithTarget:(id)target ivar:(Ivar)ivar; - -+ (BOOL)canEditIvar:(Ivar)ivar currentValue:(id)value; - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.m deleted file mode 100644 index bddcaa82..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXIvarEditorViewController.m +++ /dev/null @@ -1,86 +0,0 @@ -// -// FLEXIvarEditorViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXIvarEditorViewController.h" -#import "FLEXFieldEditorView.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXArgumentInputView.h" -#import "FLEXArgumentInputViewFactory.h" -#import "FLEXArgumentInputSwitchView.h" - -@interface FLEXIvarEditorViewController () - -@property (nonatomic) Ivar ivar; - -@end - -@implementation FLEXIvarEditorViewController - -- (id)initWithTarget:(id)target ivar:(Ivar)ivar -{ - self = [super initWithTarget:target]; - if (self) { - self.ivar = ivar; - self.title = @"Instance Variable"; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.fieldEditorView.fieldDescription = [FLEXRuntimeUtility prettyNameForIvar:self.ivar]; - - FLEXArgumentInputView *inputView = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:ivar_getTypeEncoding(self.ivar)]; - inputView.backgroundColor = self.view.backgroundColor; - inputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target]; - inputView.delegate = self; - self.fieldEditorView.argumentInputViews = @[inputView]; - - // Don't show a "set" button for switches. Set the ivar when the switch toggles. - if ([inputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { - self.navigationItem.rightBarButtonItem = nil; - } -} - -- (void)actionButtonPressed:(id)sender -{ - [super actionButtonPressed:sender]; - - // TODO: check mutability and use mutableCopy if necessary; - // this currently could and would assign NSArray to NSMutableArray - - [FLEXRuntimeUtility setValue:self.firstInputView.inputValue forIvar:self.ivar onObject:self.target]; - self.firstInputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target]; - - // Pop view controller for consistency; - // property setters and method calls also pop on success. - [self.navigationController popViewControllerAnimated:YES]; -} - -- (void)getterButtonPressed:(id)sender -{ - [super getterButtonPressed:sender]; - id returnedObject = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target]; - [self exploreObjectOrPopViewController:returnedObject]; -} - -- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView -{ - if ([argumentInputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { - [self actionButtonPressed:nil]; - } -} - -+ (BOOL)canEditIvar:(Ivar)ivar currentValue:(id)value -{ - return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:ivar_getTypeEncoding(ivar) currentValue:value]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.h index 66e73607..6ae928f5 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.h +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.h @@ -3,14 +3,14 @@ // Flipboard // // Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import "FLEXFieldEditorViewController.h" -#import +#import "FLEXVariableEditorViewController.h" +#import "FLEXMethod.h" -@interface FLEXMethodCallingViewController : FLEXFieldEditorViewController +@interface FLEXMethodCallingViewController : FLEXVariableEditorViewController -- (id)initWithTarget:(id)target method:(Method)method; ++ (instancetype)target:(id)target method:(FLEXMethod *)method; @end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.m index 34bf2909..cc4a3eb4 100644 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.m +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXMethodCallingViewController.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXMethodCallingViewController.h" @@ -16,93 +16,90 @@ #import "FLEXUtility.h" @interface FLEXMethodCallingViewController () - -@property (nonatomic) Method method; -@property (nonatomic) FLEXTypeEncoding *returnType; - +@property (nonatomic) FLEXMethod *method; @end @implementation FLEXMethodCallingViewController -- (id)initWithTarget:(id)target method:(Method)method -{ ++ (instancetype)target:(id)target method:(FLEXMethod *)method { + return [[self alloc] initWithTarget:target method:method]; +} + +- (id)initWithTarget:(id)target method:(FLEXMethod *)method { + NSParameterAssert(method.isInstanceMethod == !object_isClass(target)); + self = [super initWithTarget:target]; if (self) { self.method = method; - self.returnType = [FLEXRuntimeUtility returnTypeForMethod:method]; - self.title = [self isClassMethod] ? @"Class Method" : @"Method";; + self.title = method.isInstanceMethod ? @"Method: " : @"Class Method: "; + self.title = [self.title stringByAppendingString:method.selectorString]; } + return self; } -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; - - NSString *returnType = @((const char *)self.returnType); - NSString *methodDescription = [FLEXRuntimeUtility prettyNameForMethod:self.method isClassMethod:[self isClassMethod]]; - NSString *format = @"Signature:\n%@\n\nReturn Type:\n%@"; - NSString *info = [NSString stringWithFormat:format, methodDescription, returnType]; - self.fieldEditorView.fieldDescription = info; - - NSArray *methodComponents = [FLEXRuntimeUtility prettyArgumentComponentsForMethod:self.method]; - NSMutableArray *argumentInputViews = [NSMutableArray array]; + + self.actionButton.title = @"Call"; + + // Configure field editor view + self.fieldEditorView.argumentInputViews = [self argumentInputViews]; + self.fieldEditorView.fieldDescription = [NSString stringWithFormat: + @"Signature:\n%@\n\nReturn Type:\n%s", + self.method.description, (char *)self.method.returnType + ]; +} + +- (NSArray *)argumentInputViews { + Method method = self.method.objc_method; + NSArray *methodComponents = [FLEXRuntimeUtility prettyArgumentComponentsForMethod:method]; + NSMutableArray *argumentInputViews = [NSMutableArray new]; unsigned int argumentIndex = kFLEXNumberOfImplicitArgs; + for (NSString *methodComponent in methodComponents) { - char *argumentTypeEncoding = method_copyArgumentType(self.method, argumentIndex); + char *argumentTypeEncoding = method_copyArgumentType(method, argumentIndex); FLEXArgumentInputView *inputView = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:argumentTypeEncoding]; free(argumentTypeEncoding); - + inputView.backgroundColor = self.view.backgroundColor; inputView.title = methodComponent; [argumentInputViews addObject:inputView]; argumentIndex++; } - self.fieldEditorView.argumentInputViews = argumentInputViews; -} - -- (void)dealloc -{ - free(self.returnType); - self.returnType = NULL; -} -- (BOOL)isClassMethod -{ - return self.target && self.target == [self.target class]; + return argumentInputViews; } -- (NSString *)titleForActionButton -{ - return @"Call"; -} - -- (void)actionButtonPressed:(id)sender -{ +- (void)actionButtonPressed:(id)sender { [super actionButtonPressed:sender]; - - NSMutableArray *arguments = [NSMutableArray array]; + + // Gather arguments + NSMutableArray *arguments = [NSMutableArray new]; for (FLEXArgumentInputView *inputView in self.fieldEditorView.argumentInputViews) { - id argumentValue = inputView.inputValue; - if (!argumentValue) { - // Use NSNulls as placeholders in the array. They will be interpreted as nil arguments. - argumentValue = [NSNull null]; - } - [arguments addObject:argumentValue]; + // Use NSNull as a nil placeholder; it will be interpreted as nil + [arguments addObject:inputView.inputValue ?: NSNull.null]; } - + + // Call method NSError *error = nil; - id returnedObject = [FLEXRuntimeUtility performSelector:method_getName(self.method) onObject:self.target withArguments:arguments error:&error]; - + id returnValue = [FLEXRuntimeUtility + performSelector:self.method.selector + onObject:self.target + withArguments:arguments + error:&error + ]; + + // Display return value or error if (error) { - [FLEXAlert showAlert:@"Method Call Failed" message:[error localizedDescription] from:self]; - } else if (returnedObject) { + [FLEXAlert showAlert:@"Method Call Failed" message:error.localizedDescription from:self]; + } else if (returnValue) { // For non-nil (or void) return types, push an explorer view controller to display the returned object - returnedObject = [FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:returnedObject type:self.returnType]; - FLEXObjectExplorerViewController *explorerViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:returnedObject]; - [self.navigationController pushViewController:explorerViewController animated:YES]; + returnValue = [FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:returnValue type:self.method.returnType]; + FLEXObjectExplorerViewController *explorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:returnValue]; + [self.navigationController pushViewController:explorer animated:YES]; } else { - [self exploreObjectOrPopViewController:returnedObject]; + [self exploreObjectOrPopViewController:returnValue]; } } diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.h deleted file mode 100644 index 6ea033c1..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FLEXMutableFieldEditorViewController.h -// FLEX -// -// Created by Tanner on 11/22/18. -// Copyright © 2018 Flipboard. All rights reserved. -// - -#import "FLEXFieldEditorViewController.h" - -@interface FLEXMutableFieldEditorViewController : FLEXFieldEditorViewController - -@property (nonatomic, readonly) UIBarButtonItem *getterButton; - -- (void)getterButtonPressed:(id)sender; -- (NSString *)titleForGetterButton; - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.m deleted file mode 100644 index 65dcd615..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXMutableFieldEditorViewController.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// FLEXMutableFieldEditorViewController.m -// FLEX -// -// Created by Tanner on 11/22/18. -// Copyright © 2018 Flipboard. All rights reserved. -// - -#import "FLEXMutableFieldEditorViewController.h" -#import "FLEXFieldEditorView.h" - -@interface FLEXMutableFieldEditorViewController () - -@property (nonatomic, readwrite) UIBarButtonItem *getterButton; - -@end - -@implementation FLEXMutableFieldEditorViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.getterButton = [[UIBarButtonItem alloc] initWithTitle:[self titleForGetterButton] style:UIBarButtonItemStyleDone target:self action:@selector(getterButtonPressed:)]; - self.navigationItem.rightBarButtonItems = @[self.setterButton, self.getterButton]; -} - -- (void)getterButtonPressed:(id)sender { - // Subclasses can override - [self.fieldEditorView endEditing:YES]; -} - -- (NSString *)titleForGetterButton { - return @"Get"; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.h deleted file mode 100644 index 1914a993..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FLEXPropertyEditorViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/20/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXMutableFieldEditorViewController.h" -#import - -@interface FLEXPropertyEditorViewController : FLEXMutableFieldEditorViewController - -- (id)initWithTarget:(id)target property:(objc_property_t)property; - -+ (BOOL)canEditProperty:(objc_property_t)property onObject:(id)object currentValue:(id)value; - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.m deleted file mode 100644 index 303d1d82..00000000 --- a/xcode/Pods/FLEX/Classes/Editing/FLEXPropertyEditorViewController.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// FLEXPropertyEditorViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/20/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXPropertyEditorViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXFieldEditorView.h" -#import "FLEXArgumentInputView.h" -#import "FLEXArgumentInputViewFactory.h" -#import "FLEXArgumentInputSwitchView.h" -#import "FLEXUtility.h" - -@interface FLEXPropertyEditorViewController () - -@property (nonatomic) objc_property_t property; - -@end - -@implementation FLEXPropertyEditorViewController - -- (id)initWithTarget:(id)target property:(objc_property_t)property -{ - self = [super initWithTarget:target]; - if (self) { - self.property = property; - self.title = @"Property"; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.fieldEditorView.fieldDescription = [FLEXRuntimeUtility fullDescriptionForProperty:self.property]; - id currentValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target]; - self.setterButton.enabled = [[self class] canEditProperty:self.property onObject:self.target currentValue:currentValue]; - - const char *typeEncoding = [FLEXRuntimeUtility typeEncodingForProperty:self.property].UTF8String; - FLEXArgumentInputView *inputView = [FLEXArgumentInputViewFactory argumentInputViewForTypeEncoding:typeEncoding]; - inputView.backgroundColor = self.view.backgroundColor; - inputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target]; - inputView.delegate = self; - self.fieldEditorView.argumentInputViews = @[inputView]; - - // Don't show a "set" button for switches - just call the setter immediately after the switch toggles. - if ([inputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { - self.navigationItem.rightBarButtonItem = nil; - } -} - -- (void)actionButtonPressed:(id)sender -{ - [super actionButtonPressed:sender]; - - id userInputObject = self.firstInputView.inputValue; - NSArray *arguments = userInputObject ? @[userInputObject] : nil; - SEL setterSelector = [FLEXRuntimeUtility setterSelectorForProperty:self.property]; - NSError *error = nil; - [FLEXRuntimeUtility performSelector:setterSelector onObject:self.target withArguments:arguments error:&error]; - if (error) { - [FLEXAlert showAlert:@"Property Setter Failed" message:[error localizedDescription] from:self]; - self.firstInputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target]; - } else { - // If the setter was called without error, pop the view controller to indicate that and make the user's life easier. - // Don't do this for simulated taps on the action button (i.e. from switch/BOOL editors). The experience is weird there. - if (sender) { - [self.navigationController popViewControllerAnimated:YES]; - } - } -} - -- (void)getterButtonPressed:(id)sender -{ - [super getterButtonPressed:sender]; - id returnedObject = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target]; - [self exploreObjectOrPopViewController:returnedObject]; -} - -- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView -{ - if ([argumentInputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) { - [self actionButtonPressed:nil]; - } -} - -+ (BOOL)canEditProperty:(objc_property_t)property onObject:(id)object currentValue:(id)value -{ - const char *typeEncoding = [FLEXRuntimeUtility typeEncodingForProperty:property].UTF8String; - BOOL canEditType = [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:typeEncoding currentValue:value]; - SEL setterSelector = [FLEXRuntimeUtility setterSelectorForProperty:property]; - BOOL isReadonly = [FLEXRuntimeUtility isReadonlyProperty:property] && (!setterSelector || ![object respondsToSelector:setterSelector]); - return canEditType && !isReadonly; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.h b/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.h new file mode 100644 index 00000000..045ba7d4 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.h @@ -0,0 +1,35 @@ +// +// FLEXVariableEditorViewController.h +// Flipboard +// +// Created by Ryan Olson on 5/16/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import + +@class FLEXFieldEditorView; +@class FLEXArgumentInputView; + +/// Provides a screen for editing or configuring one or more variables. +@interface FLEXVariableEditorViewController : UIViewController + ++ (instancetype)target:(id)target; +- (id)initWithTarget:(id)target; + +// Convenience accessor since many subclasses only use one input view +@property (nonatomic, readonly) FLEXArgumentInputView *firstInputView; + +// For subclass use only. +@property (nonatomic, readonly) id target; +@property (nonatomic, readonly) FLEXFieldEditorView *fieldEditorView; +/// Subclasses can change the button title via the button's \c title property +@property (nonatomic, readonly) UIBarButtonItem *actionButton; + +- (void)actionButtonPressed:(id)sender; + +/// Pushes an explorer view controller for the given object +/// or pops the current view controller. +- (void)exploreObjectOrPopViewController:(id)objectOrNil; + +@end diff --git a/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.m b/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.m new file mode 100644 index 00000000..c2d29d9c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Editing/FLEXVariableEditorViewController.m @@ -0,0 +1,137 @@ +// +// FLEXVariableEditorViewController.m +// Flipboard +// +// Created by Ryan Olson on 5/16/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXColor.h" +#import "FLEXVariableEditorViewController.h" +#import "FLEXFieldEditorView.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXUtility.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXArgumentInputView.h" +#import "FLEXArgumentInputViewFactory.h" +#import "FLEXObjectExplorerViewController.h" +#import "UIBarButtonItem+FLEX.h" + +@interface FLEXVariableEditorViewController () +@property (nonatomic) UIScrollView *scrollView; +@property (nonatomic) id target; +@end + +@implementation FLEXVariableEditorViewController + +#pragma mark - Initialization + ++ (instancetype)target:(id)target { + return [[self alloc] initWithTarget:target]; +} + +- (id)initWithTarget:(id)target { + self = [super init]; + if (self) { + self.target = target; + [NSNotificationCenter.defaultCenter + addObserver:self selector:@selector(keyboardDidShow:) + name:UIKeyboardDidShowNotification object:nil + ]; + [NSNotificationCenter.defaultCenter + addObserver:self selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification object:nil + ]; + } + + return self; +} + +- (void)dealloc { + [NSNotificationCenter.defaultCenter removeObserver:self]; +} + +#pragma mark - UIViewController methods + +- (void)keyboardDidShow:(NSNotification *)notification { + CGRect keyboardRectInWindow = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + CGSize keyboardSize = [self.view convertRect:keyboardRectInWindow fromView:nil].size; + UIEdgeInsets scrollInsets = self.scrollView.contentInset; + scrollInsets.bottom = keyboardSize.height; + self.scrollView.contentInset = scrollInsets; + self.scrollView.scrollIndicatorInsets = scrollInsets; + + // Find the active input view and scroll to make sure it's visible. + for (FLEXArgumentInputView *argumentInputView in self.fieldEditorView.argumentInputViews) { + if (argumentInputView.inputViewIsFirstResponder) { + CGRect scrollToVisibleRect = [self.scrollView convertRect:argumentInputView.bounds fromView:argumentInputView]; + [self.scrollView scrollRectToVisible:scrollToVisibleRect animated:YES]; + break; + } + } +} + +- (void)keyboardWillHide:(NSNotification *)notification { + UIEdgeInsets scrollInsets = self.scrollView.contentInset; + scrollInsets.bottom = 0.0; + self.scrollView.contentInset = scrollInsets; + self.scrollView.scrollIndicatorInsets = scrollInsets; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.view.backgroundColor = FLEXColor.scrollViewBackgroundColor; + + self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; + self.scrollView.backgroundColor = self.view.backgroundColor; + self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.scrollView.delegate = self; + [self.view addSubview:self.scrollView]; + + _fieldEditorView = [FLEXFieldEditorView new]; + self.fieldEditorView.targetDescription = [NSString stringWithFormat:@"%@ %p", [self.target class], self.target]; + [self.scrollView addSubview:self.fieldEditorView]; + + _actionButton = [[UIBarButtonItem alloc] + initWithTitle:@"Set" + style:UIBarButtonItemStyleDone + target:self + action:@selector(actionButtonPressed:) + ]; + + self.navigationController.toolbarHidden = NO; + self.toolbarItems = @[UIBarButtonItem.flex_flexibleSpace, self.actionButton]; +} + +- (void)viewWillLayoutSubviews { + CGSize constrainSize = CGSizeMake(self.scrollView.bounds.size.width, CGFLOAT_MAX); + CGSize fieldEditorSize = [self.fieldEditorView sizeThatFits:constrainSize]; + self.fieldEditorView.frame = CGRectMake(0, 0, fieldEditorSize.width, fieldEditorSize.height); + self.scrollView.contentSize = fieldEditorSize; +} + +#pragma mark - Public + +- (FLEXArgumentInputView *)firstInputView { + return [self.fieldEditorView argumentInputViews].firstObject; +} + +- (void)actionButtonPressed:(id)sender { + // Subclasses can override + [self.fieldEditorView endEditing:YES]; +} + +- (void)exploreObjectOrPopViewController:(id)objectOrNil { + if (objectOrNil) { + // For non-nil (or void) return types, push an explorer view controller to display the object + FLEXObjectExplorerViewController *explorerViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:objectOrNil]; + [self.navigationController pushViewController:explorerViewController animated:YES]; + } else { + // If we didn't get a returned object but the method call succeeded, + // pop this view controller off the stack to indicate that the call went through. + [self.navigationController popViewControllerAnimated:YES]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.h new file mode 100644 index 00000000..4a0b9036 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.h @@ -0,0 +1,19 @@ +// +// FLEXBookmarkManager.h +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXBookmarkManager : NSObject + +@property (nonatomic, readonly, class) NSMutableArray *bookmarks; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.m new file mode 100644 index 00000000..58229dcd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.m @@ -0,0 +1,25 @@ +// +// FLEXBookmarkManager.m +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXBookmarkManager.h" + +static NSMutableArray *kFLEXBookmarkManagerBookmarks = nil; + +@implementation FLEXBookmarkManager + ++ (void)initialize { + if (self == [FLEXBookmarkManager class]) { + kFLEXBookmarkManagerBookmarks = [NSMutableArray new]; + } +} + ++ (NSMutableArray *)bookmarks { + return kFLEXBookmarkManagerBookmarks; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.h new file mode 100644 index 00000000..207f206f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.h @@ -0,0 +1,17 @@ +// +// FLEXBookmarksViewController.h +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXBookmarksViewController : FLEXTableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.m new file mode 100644 index 00000000..36e21920 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.m @@ -0,0 +1,235 @@ +// +// FLEXBookmarksViewController.m +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXBookmarksViewController.h" +#import "FLEXExplorerViewController.h" +#import "FLEXNavigationController.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXBookmarkManager.h" +#import "UIBarButtonItem+FLEX.h" +#import "FLEXColor.h" +#import "FLEXUtility.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXTableView.h" + +@interface FLEXBookmarksViewController () +@property (nonatomic, copy) NSArray *bookmarks; +@property (nonatomic, readonly) FLEXExplorerViewController *corePresenter; +@end + +@implementation FLEXBookmarksViewController + +#pragma mark - Initialization + +- (id)init { + return [self initWithStyle:UITableViewStylePlain]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.navigationController.hidesBarsOnSwipe = NO; + self.tableView.allowsMultipleSelectionDuringEditing = YES; + + [self reloadData]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self setupDefaultBarItems]; +} + + +#pragma mark - Private + +- (void)reloadData { + // We assume the bookmarks aren't going to change out from under us, since + // presenting any other tool via keyboard shortcuts should dismiss us first + self.bookmarks = FLEXBookmarkManager.bookmarks; + self.title = [NSString stringWithFormat:@"Bookmarks (%@)", @(self.bookmarks.count)]; +} + +- (void)setupDefaultBarItems { + self.navigationItem.rightBarButtonItem = FLEXBarButtonItemSystem(Done, self, @selector(dismissAnimated)); + self.toolbarItems = @[ + UIBarButtonItem.flex_flexibleSpace, + FLEXBarButtonItemSystem(Edit, self, @selector(toggleEditing)), + ]; + + // Disable editing if no bookmarks available + self.toolbarItems.lastObject.enabled = self.bookmarks.count > 0; +} + +- (void)setupEditingBarItems { + self.navigationItem.rightBarButtonItem = nil; + self.toolbarItems = @[ + [UIBarButtonItem itemWithTitle:@"Close All" target:self action:@selector(closeAllButtonPressed:)], + UIBarButtonItem.flex_flexibleSpace, + // We use a non-system done item because we change its title dynamically + [UIBarButtonItem doneStyleitemWithTitle:@"Done" target:self action:@selector(toggleEditing)] + ]; + + self.toolbarItems.firstObject.tintColor = FLEXColor.destructiveColor; +} + +- (FLEXExplorerViewController *)corePresenter { + // We must be presented by a FLEXExplorerViewController, or presented + // by another view controller that was presented by FLEXExplorerViewController + FLEXExplorerViewController *presenter = (id)self.presentingViewController; + presenter = (id)presenter.presentingViewController ?: presenter; + presenter = (id)presenter.presentingViewController ?: presenter; + NSAssert( + [presenter isKindOfClass:[FLEXExplorerViewController class]], + @"The bookmarks view controller expects to be presented by the explorer controller" + ); + return presenter; +} + +#pragma mark Button Actions + +- (void)dismissAnimated { + [self dismissAnimated:nil]; +} + +- (void)dismissAnimated:(id)selectedObject { + if (selectedObject) { + UIViewController *explorer = [FLEXObjectExplorerFactory + explorerViewControllerForObject:selectedObject + ]; + if ([self.presentingViewController isKindOfClass:[FLEXNavigationController class]]) { + // I am presented on an existing navigation stack, so + // dismiss myself and push the bookmark there + UINavigationController *presenter = (id)self.presentingViewController; + [presenter dismissViewControllerAnimated:YES completion:^{ + [presenter pushViewController:explorer animated:YES]; + }]; + } else { + // Dismiss myself and present explorer + UIViewController *presenter = self.corePresenter; + [presenter dismissViewControllerAnimated:YES completion:^{ + [presenter presentViewController:[FLEXNavigationController + withRootViewController:explorer + ] animated:YES completion:nil]; + }]; + } + } else { + // Just dismiss myself + [self dismissViewControllerAnimated:YES completion:nil]; + } +} + +- (void)toggleEditing { + NSArray *selected = self.tableView.indexPathsForSelectedRows; + self.editing = !self.editing; + + if (self.isEditing) { + [self setupEditingBarItems]; + } else { + [self setupDefaultBarItems]; + + // Get index set of bookmarks to close + NSMutableIndexSet *indexes = [NSMutableIndexSet new]; + for (NSIndexPath *ip in selected) { + [indexes addIndex:ip.row]; + } + + if (selected.count) { + // Close bookmarks and update data source + [FLEXBookmarkManager.bookmarks removeObjectsAtIndexes:indexes]; + [self reloadData]; + + // Remove deleted rows + [self.tableView deleteRowsAtIndexPaths:selected withRowAnimation:UITableViewRowAnimationAutomatic]; + } + } +} + +- (void)closeAllButtonPressed:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + NSInteger count = self.bookmarks.count; + NSString *title = FLEXPluralFormatString(count, @"Remove %@ bookmarks", @"Remove %@ bookmark"); + make.button(title).destructiveStyle().handler(^(NSArray *strings) { + [self closeAll]; + [self toggleEditing]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + +- (void)closeAll { + NSInteger rowCount = self.bookmarks.count; + + // Close bookmarks and update data source + [FLEXBookmarkManager.bookmarks removeAllObjects]; + [self reloadData]; + + // Delete rows from table view + NSArray *allRows = [NSArray flex_forEachUpTo:rowCount map:^id(NSUInteger row) { + return [NSIndexPath indexPathForRow:row inSection:0]; + }]; + [self.tableView deleteRowsAtIndexPaths:allRows withRowAnimation:UITableViewRowAnimationAutomatic]; +} + + +#pragma mark - Table View Data Source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.bookmarks.count; +} + +- (UITableViewCell *)tableView:(FLEXTableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXDetailCell forIndexPath:indexPath]; + + id object = self.bookmarks[indexPath.row]; + cell.textLabel.text = [FLEXRuntimeUtility safeDescriptionForObject:object]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ — %p", [object class], object]; + + return cell; +} + + +#pragma mark - Table View Delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.editing) { + // Case: editing with multi-select + self.toolbarItems.lastObject.title = @"Remove Selected"; + self.toolbarItems.lastObject.tintColor = FLEXColor.destructiveColor; + } else { + // Case: selected a bookmark + [self dismissAnimated:self.bookmarks[indexPath.row]]; + } +} + +- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + NSParameterAssert(self.editing); + + if (tableView.indexPathsForSelectedRows.count == 0) { + self.toolbarItems.lastObject.title = @"Done"; + self.toolbarItems.lastObject.tintColor = self.view.tintColor; + } +} + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +- (void)tableView:(UITableView *)table +commitEditingStyle:(UITableViewCellEditingStyle)edit +forRowAtIndexPath:(NSIndexPath *)indexPath { + NSParameterAssert(edit == UITableViewCellEditingStyleDelete); + + // Remove bookmark and update data source + [FLEXBookmarkManager.bookmarks removeObjectAtIndex:indexPath.row]; + [self reloadData]; + + // Delete row from table view + [table deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.h index 2ff99a98..d4bedb31 100644 --- a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.h +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.h @@ -3,26 +3,29 @@ // Flipboard // // Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import +#import "FLEXExplorerToolbar.h" +@class FLEXWindow; @protocol FLEXExplorerViewControllerDelegate; /// A view controller that manages the FLEX toolbar. @interface FLEXExplorerViewController : UIViewController @property (nonatomic, weak) id delegate; +@property (nonatomic, readonly) BOOL wantsWindowToBecomeKey; + +@property (nonatomic, readonly) FLEXExplorerToolbar *explorerToolbar; - (BOOL)shouldReceiveTouchAtWindowPoint:(CGPoint)pointInWindowCoordinates; -- (BOOL)wantsWindowToBecomeKey; /// @brief Used to present (or dismiss) a modal view controller ("tool"), typically triggered by pressing a button in the toolbar. /// /// If a tool is already presented, this method simply dismisses it and calls the completion block. /// If no tool is presented, @code future() @endcode is presented and the completion block is called. -- (void)toggleToolWithViewControllerProvider:(UIViewController *(^)(void))future completion:(void(^)(void))completion; +- (void)toggleToolWithViewControllerProvider:(UINavigationController *(^)(void))future completion:(void(^)(void))completion; // Keyboard shortcut helpers @@ -30,15 +33,19 @@ - (void)toggleMoveTool; - (void)toggleViewsTool; - (void)toggleMenuTool; -- (void)handleDownArrowKeyPressed; -- (void)handleUpArrowKeyPressed; -- (void)handleRightArrowKeyPressed; -- (void)handleLeftArrowKeyPressed; + +/// @return YES if the explorer used the key press to perform an action, NO otherwise +- (BOOL)handleDownArrowKeyPressed; +/// @return YES if the explorer used the key press to perform an action, NO otherwise +- (BOOL)handleUpArrowKeyPressed; +/// @return YES if the explorer used the key press to perform an action, NO otherwise +- (BOOL)handleRightArrowKeyPressed; +/// @return YES if the explorer used the key press to perform an action, NO otherwise +- (BOOL)handleLeftArrowKeyPressed; @end +#pragma mark - @protocol FLEXExplorerViewControllerDelegate - - (void)explorerViewControllerDidFinish:(FLEXExplorerViewController *)explorerViewController; - @end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.m index 02752f44..b966795d 100644 --- a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.m +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXExplorerViewController.m @@ -3,20 +3,24 @@ // Flipboard // // Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXExplorerViewController.h" -#import "FLEXExplorerToolbar.h" -#import "FLEXToolbarItem.h" +#import "FLEXExplorerToolbarItem.h" #import "FLEXUtility.h" -#import "FLEXHierarchyTableViewController.h" -#import "FLEXGlobalsTableViewController.h" +#import "FLEXWindow.h" +#import "FLEXTabList.h" +#import "FLEXNavigationController.h" +#import "FLEXHierarchyViewController.h" +#import "FLEXGlobalsViewController.h" #import "FLEXObjectExplorerViewController.h" #import "FLEXObjectExplorerFactory.h" -#import "FLEXNetworkHistoryTableViewController.h" - -static NSString *const kFLEXToolbarTopMarginDefaultsKey = @"com.flex.FLEXToolbar.topMargin"; +#import "FLEXNetworkMITMViewController.h" +#import "FLEXTabsViewController.h" +#import "FLEXWindowManagerController.h" +#import "FLEXViewControllersViewController.h" +#import "NSUserDefaults+FLEX.h" typedef NS_ENUM(NSUInteger, FLEXExplorerMode) { FLEXExplorerModeDefault, @@ -24,9 +28,7 @@ typedef NS_ENUM(NSUInteger, FLEXExplorerMode) { FLEXExplorerModeMove }; -@interface FLEXExplorerViewController () - -@property (nonatomic) FLEXExplorerToolbar *explorerToolbar; +@interface FLEXExplorerViewController () /// Tracks the currently active tool/mode @property (nonatomic) FLEXExplorerMode currentMode; @@ -56,55 +58,60 @@ @interface FLEXExplorerViewController () *observedViews; +/// Used to preserve the target app's UIMenuController items. +@property (nonatomic) NSArray *appMenuItems; + @end @implementation FLEXExplorerViewController -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { - self.observedViews = [NSMutableSet set]; + self.observedViews = [NSMutableSet new]; } return self; } --(void)dealloc -{ +- (void)dealloc { for (UIView *view in _observedViews) { [self stopObservingView:view]; } } -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; // Toolbar - self.explorerToolbar = [FLEXExplorerToolbar new]; + _explorerToolbar = [FLEXExplorerToolbar new]; // Start the toolbar off below any bars that may be at the top of the view. - id toolbarOriginYDefault = [[NSUserDefaults standardUserDefaults] objectForKey:kFLEXToolbarTopMarginDefaultsKey]; - CGFloat toolbarOriginY = toolbarOriginYDefault ? [toolbarOriginYDefault doubleValue] : 100; + CGFloat toolbarOriginY = NSUserDefaults.standardUserDefaults.flex_toolbarTopMargin; CGRect safeArea = [self viewSafeArea]; - CGSize toolbarSize = [self.explorerToolbar sizeThatFits:CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetHeight(safeArea))]; - [self updateToolbarPositionWithUnconstrainedFrame:CGRectMake(CGRectGetMinX(safeArea), toolbarOriginY, toolbarSize.width, toolbarSize.height)]; - self.explorerToolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; + CGSize toolbarSize = [self.explorerToolbar sizeThatFits:CGSizeMake( + CGRectGetWidth(self.view.bounds), CGRectGetHeight(safeArea) + )]; + [self updateToolbarPositionWithUnconstrainedFrame:CGRectMake( + CGRectGetMinX(safeArea), toolbarOriginY, toolbarSize.width, toolbarSize.height + )]; + self.explorerToolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleBottomMargin | + UIViewAutoresizingFlexibleTopMargin; [self.view addSubview:self.explorerToolbar]; [self setupToolbarActions]; [self setupToolbarGestures]; // View selection - UITapGestureRecognizer *selectionTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSelectionTap:)]; + UITapGestureRecognizer *selectionTapGR = [[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(handleSelectionTap:) + ]; [self.view addGestureRecognizer:selectionTapGR]; // View moving @@ -113,8 +120,7 @@ - (void)viewDidLoad [self.view addGestureRecognizer:self.movePanGR]; } -- (void)viewWillAppear:(BOOL)animated -{ +- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self updateButtonStates]; @@ -123,32 +129,35 @@ - (void)viewWillAppear:(BOOL)animated #pragma mark - Rotation -- (UIViewController *)viewControllerForRotationAndOrientation -{ - UIWindow *window = self.previousKeyWindow ?: [UIApplication.sharedApplication keyWindow]; - UIViewController *viewController = window.rootViewController; +- (UIViewController *)viewControllerForRotationAndOrientation { + UIViewController *viewController = FLEXUtility.appKeyWindow.rootViewController; // Obfuscating selector _viewControllerForSupportedInterfaceOrientations - NSString *viewControllerSelectorString = [@[@"_vie", @"wContro", @"llerFor", @"Supported", @"Interface", @"Orientations"] componentsJoinedByString:@""]; + NSString *viewControllerSelectorString = [@[ + @"_vie", @"wContro", @"llerFor", @"Supported", @"Interface", @"Orientations" + ] componentsJoinedByString:@""]; SEL viewControllerSelector = NSSelectorFromString(viewControllerSelectorString); if ([viewController respondsToSelector:viewControllerSelector]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - viewController = [viewController performSelector:viewControllerSelector]; -#pragma clang diagnostic pop + viewController = [viewController valueForKey:viewControllerSelectorString]; } + return viewController; } -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + // Commenting this out until I can figure out a better way to solve this +// if (self.window.isKeyWindow) { +// [self.window resignKeyWindow]; +// } + UIViewController *viewControllerToAsk = [self viewControllerForRotationAndOrientation]; - UIInterfaceOrientationMask supportedOrientations = [FLEXUtility infoPlistSupportedInterfaceOrientationsMask]; - if (viewControllerToAsk && viewControllerToAsk != self) { + UIInterfaceOrientationMask supportedOrientations = FLEXUtility.infoPlistSupportedInterfaceOrientationsMask; + if (viewControllerToAsk && ![viewControllerToAsk isKindOfClass:[self class]]) { supportedOrientations = [viewControllerToAsk supportedInterfaceOrientations]; } // The UIViewController docs state that this method must not return zero. - // If we weren't able to get a valid value for the supported interface orientations, default to all supported. + // If we weren't able to get a valid value for the supported interface + // orientations, default to all supported. if (supportedOrientations == 0) { supportedOrientations = UIInterfaceOrientationMaskAll; } @@ -156,8 +165,7 @@ - (UIInterfaceOrientationMask)supportedInterfaceOrientations return supportedOrientations; } -- (BOOL)shouldAutorotate -{ +- (BOOL)shouldAutorotate { UIViewController *viewControllerToAsk = [self viewControllerForRotationAndOrientation]; BOOL shouldAutorotate = YES; if (viewControllerToAsk && viewControllerToAsk != self) { @@ -166,8 +174,9 @@ - (BOOL)shouldAutorotate return shouldAutorotate; } -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator:(id)coordinator { + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id context) { for (UIView *outlineView in self.outlineViewsForVisibleViews.allValues) { outlineView.hidden = YES; @@ -190,10 +199,10 @@ - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id *)viewsAtTapPoint -{ +- (void)setViewsAtTapPoint:(NSArray *)viewsAtTapPoint { if (![_viewsAtTapPoint isEqual:viewsAtTapPoint]) { for (UIView *view in _viewsAtTapPoint) { if (view != self.selectedView) { @@ -248,8 +261,7 @@ - (void)setViewsAtTapPoint:(NSArray *)viewsAtTapPoint } } -- (void)setCurrentMode:(FLEXExplorerMode)currentMode -{ +- (void)setCurrentMode:(FLEXExplorerMode)currentMode { if (_currentMode != currentMode) { _currentMode = currentMode; switch (currentMode) { @@ -268,7 +280,8 @@ - (void)setCurrentMode:(FLEXExplorerMode)currentMode break; case FLEXExplorerModeMove: - // Hide all the outline views to focus on the selected view, which is the only one that will move. + // Hide all the outline views to focus on the selected view, + // which is the only one that will move. for (NSValue *key in self.outlineViewsForVisibleViews) { UIView *outlineView = self.outlineViewsForVisibleViews[key]; outlineView.hidden = YES; @@ -283,35 +296,32 @@ - (void)setCurrentMode:(FLEXExplorerMode)currentMode #pragma mark - View Tracking -- (void)beginObservingView:(UIView *)view -{ +- (void)beginObservingView:(UIView *)view { // Bail if we're already observing this view or if there's nothing to observe. if (!view || [self.observedViews containsObject:view]) { return; } - for (NSString *keyPath in [[self class] viewKeyPathsToTrack]) { + for (NSString *keyPath in self.viewKeyPathsToTrack) { [view addObserver:self forKeyPath:keyPath options:0 context:NULL]; } [self.observedViews addObject:view]; } -- (void)stopObservingView:(UIView *)view -{ +- (void)stopObservingView:(UIView *)view { if (!view) { return; } - for (NSString *keyPath in [[self class] viewKeyPathsToTrack]) { + for (NSString *keyPath in self.viewKeyPathsToTrack) { [view removeObserver:self forKeyPath:keyPath]; } [self.observedViews removeObject:view]; } -+ (NSArray *)viewKeyPathsToTrack -{ +- (NSArray *)viewKeyPathsToTrack { static NSArray *trackedViewKeyPaths = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -321,13 +331,13 @@ - (void)stopObservingView:(UIView *)view return trackedViewKeyPaths; } -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { [self updateOverlayAndDescriptionForObjectIfNeeded:object]; } -- (void)updateOverlayAndDescriptionForObjectIfNeeded:(id)object -{ +- (void)updateOverlayAndDescriptionForObjectIfNeeded:(id)object { NSUInteger indexOfView = [self.viewsAtTapPoint indexOfObject:object]; if (indexOfView != NSNotFound) { UIView *view = self.viewsAtTapPoint[indexOfView]; @@ -339,106 +349,135 @@ - (void)updateOverlayAndDescriptionForObjectIfNeeded:(id)object } if (object == self.selectedView) { // Update the selected view description since we show the frame value there. - self.explorerToolbar.selectedViewDescription = [FLEXUtility descriptionForView:self.selectedView includingFrame:YES]; + self.explorerToolbar.selectedViewDescription = [FLEXUtility + descriptionForView:self.selectedView includingFrame:YES + ]; CGRect selectedViewOutlineFrame = [self frameInLocalCoordinatesForView:self.selectedView]; self.selectedViewOverlay.frame = selectedViewOutlineFrame; } } -- (CGRect)frameInLocalCoordinatesForView:(UIView *)view -{ - // First convert to window coordinates since the view may be in a different window than our view. +- (CGRect)frameInLocalCoordinatesForView:(UIView *)view { + // Convert to window coordinates since the view may be in a different window than our view CGRect frameInWindow = [view convertRect:view.bounds toView:nil]; - // Then convert from the window to our view's coordinate space. + // Convert from the window to our view's coordinate space return [self.view convertRect:frameInWindow fromView:nil]; } #pragma mark - Toolbar Buttons -- (void)setupToolbarActions -{ - [self.explorerToolbar.selectItem addTarget:self action:@selector(selectButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - [self.explorerToolbar.hierarchyItem addTarget:self action:@selector(hierarchyButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - [self.explorerToolbar.moveItem addTarget:self action:@selector(moveButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - [self.explorerToolbar.globalsItem addTarget:self action:@selector(globalsButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - [self.explorerToolbar.closeItem addTarget:self action:@selector(closeButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; +- (void)setupToolbarActions { + FLEXExplorerToolbar *toolbar = self.explorerToolbar; + NSDictionary *actionsToItems = @{ + NSStringFromSelector(@selector(selectButtonTapped:)): toolbar.selectItem, + NSStringFromSelector(@selector(hierarchyButtonTapped:)): toolbar.hierarchyItem, + NSStringFromSelector(@selector(recentButtonTapped:)): toolbar.recentItem, + NSStringFromSelector(@selector(moveButtonTapped:)): toolbar.moveItem, + NSStringFromSelector(@selector(globalsButtonTapped:)): toolbar.globalsItem, + NSStringFromSelector(@selector(closeButtonTapped:)): toolbar.closeItem, + }; + + [actionsToItems enumerateKeysAndObjectsUsingBlock:^(NSString *sel, FLEXExplorerToolbarItem *item, BOOL *stop) { + [item addTarget:self action:NSSelectorFromString(sel) forControlEvents:UIControlEventTouchUpInside]; + }]; } -- (void)selectButtonTapped:(FLEXToolbarItem *)sender -{ +- (void)selectButtonTapped:(FLEXExplorerToolbarItem *)sender { [self toggleSelectTool]; } -- (void)hierarchyButtonTapped:(FLEXToolbarItem *)sender -{ +- (void)hierarchyButtonTapped:(FLEXExplorerToolbarItem *)sender { [self toggleViewsTool]; } -- (NSArray *)allViewsInHierarchy -{ - NSMutableArray *allViews = [NSMutableArray array]; - NSArray *windows = [FLEXUtility allWindows]; - for (UIWindow *window in windows) { - if (window != self.view.window) { - [allViews addObject:window]; - [allViews addObjectsFromArray:[self allRecursiveSubviewsInView:window]]; - } - } - return allViews; -} - -- (UIWindow *)statusWindow -{ +- (UIWindow *)statusWindow { NSString *statusBarString = [NSString stringWithFormat:@"%@arWindow", @"_statusB"]; return [UIApplication.sharedApplication valueForKey:statusBarString]; } -- (void)moveButtonTapped:(FLEXToolbarItem *)sender -{ +- (void)recentButtonTapped:(FLEXExplorerToolbarItem *)sender { + NSAssert(FLEXTabList.sharedList.activeTab, @"Must have active tab"); + [self presentViewController:FLEXTabList.sharedList.activeTab animated:YES completion:nil]; +} + +- (void)moveButtonTapped:(FLEXExplorerToolbarItem *)sender { [self toggleMoveTool]; } -- (void)globalsButtonTapped:(FLEXToolbarItem *)sender -{ +- (void)globalsButtonTapped:(FLEXExplorerToolbarItem *)sender { [self toggleMenuTool]; } -- (void)closeButtonTapped:(FLEXToolbarItem *)sender -{ +- (void)closeButtonTapped:(FLEXExplorerToolbarItem *)sender { self.currentMode = FLEXExplorerModeDefault; [self.delegate explorerViewControllerDidFinish:self]; } -- (void)updateButtonStates -{ - // Move and details only active when an object is selected. +- (void)updateButtonStates { + FLEXExplorerToolbar *toolbar = self.explorerToolbar; + + toolbar.selectItem.selected = self.currentMode == FLEXExplorerModeSelect; + + // Move only enabled when an object is selected. BOOL hasSelectedObject = self.selectedView != nil; - self.explorerToolbar.moveItem.enabled = hasSelectedObject; - self.explorerToolbar.selectItem.selected = self.currentMode == FLEXExplorerModeSelect; - self.explorerToolbar.moveItem.selected = self.currentMode == FLEXExplorerModeMove; + toolbar.moveItem.enabled = hasSelectedObject; + toolbar.moveItem.selected = self.currentMode == FLEXExplorerModeMove; + + // Recent only enabled when we have a last active tab + toolbar.recentItem.enabled = FLEXTabList.sharedList.activeTab != nil; } #pragma mark - Toolbar Dragging -- (void)setupToolbarGestures -{ +- (void)setupToolbarGestures { + FLEXExplorerToolbar *toolbar = self.explorerToolbar; + // Pan gesture for dragging. - UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleToolbarPanGesture:)]; - [self.explorerToolbar.dragHandle addGestureRecognizer:panGR]; + [toolbar.dragHandle addGestureRecognizer:[[UIPanGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarPanGesture:) + ]]; // Tap gesture for hinting. - UITapGestureRecognizer *hintTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleToolbarHintTapGesture:)]; - [self.explorerToolbar.dragHandle addGestureRecognizer:hintTapGR]; + [toolbar.dragHandle addGestureRecognizer:[[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarHintTapGesture:) + ]]; // Tap gesture for showing additional details - self.detailsTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleToolbarDetailsTapGesture:)]; - [self.explorerToolbar.selectedViewDescriptionContainer addGestureRecognizer:self.detailsTapGR]; + self.detailsTapGR = [[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarDetailsTapGesture:) + ]; + [toolbar.selectedViewDescriptionContainer addGestureRecognizer:self.detailsTapGR]; + // Swipe gestures for selecting deeper / higher views at a point + UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self action:@selector(handleChangeViewAtPointGesture:) + ]; + UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self action:@selector(handleChangeViewAtPointGesture:) + ]; + leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; + rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; + [toolbar.selectedViewDescriptionContainer addGestureRecognizer:leftSwipe]; + [toolbar.selectedViewDescriptionContainer addGestureRecognizer:rightSwipe]; + + // Long press gesture to present tabs manager + [toolbar.globalsItem addGestureRecognizer:[[UILongPressGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarShowTabsGesture:) + ]]; + + // Long press gesture to present window manager + [toolbar.selectItem addGestureRecognizer:[[UILongPressGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarWindowManagerGesture:) + ]]; + + // Long press gesture to present view controllers at tap + [toolbar.hierarchyItem addGestureRecognizer:[[UILongPressGestureRecognizer alloc] + initWithTarget:self action:@selector(handleToolbarShowViewControllersGesture:) + ]]; } -- (void)handleToolbarPanGesture:(UIPanGestureRecognizer *)panGR -{ +- (void)handleToolbarPanGesture:(UIPanGestureRecognizer *)panGR { switch (panGR.state) { case UIGestureRecognizerStateBegan: self.toolbarFrameBeforeDragging = self.explorerToolbar.frame; @@ -455,8 +494,7 @@ - (void)handleToolbarPanGesture:(UIPanGestureRecognizer *)panGR } } -- (void)updateToolbarPositionWithDragGesture:(UIPanGestureRecognizer *)panGR -{ +- (void)updateToolbarPositionWithDragGesture:(UIPanGestureRecognizer *)panGR { CGPoint translation = [panGR translationInView:self.view]; CGRect newToolbarFrame = self.toolbarFrameBeforeDragging; newToolbarFrame.origin.y += translation.y; @@ -464,10 +502,10 @@ - (void)updateToolbarPositionWithDragGesture:(UIPanGestureRecognizer *)panGR [self updateToolbarPositionWithUnconstrainedFrame:newToolbarFrame]; } -- (void)updateToolbarPositionWithUnconstrainedFrame:(CGRect)unconstrainedFrame -{ +- (void)updateToolbarPositionWithUnconstrainedFrame:(CGRect)unconstrainedFrame { CGRect safeArea = [self viewSafeArea]; - // We only constrain the Y-axis because We want the toolbar to handle the X-axis safeArea layout by itself + // We only constrain the Y-axis because we want the toolbar + // to handle the X-axis safeArea layout by itself CGFloat minY = CGRectGetMinY(safeArea); CGFloat maxY = CGRectGetMaxY(safeArea) - unconstrainedFrame.size.height; if (unconstrainedFrame.origin.y < minY) { @@ -477,12 +515,10 @@ - (void)updateToolbarPositionWithUnconstrainedFrame:(CGRect)unconstrainedFrame } self.explorerToolbar.frame = unconstrainedFrame; - - [[NSUserDefaults standardUserDefaults] setDouble:unconstrainedFrame.origin.y forKey:kFLEXToolbarTopMarginDefaultsKey]; + NSUserDefaults.standardUserDefaults.flex_toolbarTopMargin = unconstrainedFrame.origin.y; } -- (void)handleToolbarHintTapGesture:(UITapGestureRecognizer *)tapGR -{ +- (void)handleToolbarHintTapGesture:(UITapGestureRecognizer *)tapGR { // Bounce the toolbar to indicate that it is draggable. // TODO: make it bouncier. if (tapGR.state == UIGestureRecognizerStateRecognized) { @@ -501,24 +537,60 @@ - (void)handleToolbarHintTapGesture:(UITapGestureRecognizer *)tapGR } } -- (void)handleToolbarDetailsTapGesture:(UITapGestureRecognizer *)tapGR -{ +- (void)handleToolbarDetailsTapGesture:(UITapGestureRecognizer *)tapGR { if (tapGR.state == UIGestureRecognizerStateRecognized && self.selectedView) { - FLEXObjectExplorerViewController *selectedViewExplorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:self.selectedView]; - selectedViewExplorer.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(selectedViewExplorerFinished:)]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:selectedViewExplorer]; - [self makeKeyAndPresentViewController:navigationController animated:YES completion:nil]; + UIViewController *topStackVC = [FLEXObjectExplorerFactory explorerViewControllerForObject:self.selectedView]; + [self presentViewController: + [FLEXNavigationController withRootViewController:topStackVC] + animated:YES completion:nil]; + } +} + +- (void)handleToolbarShowTabsGesture:(UILongPressGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateBegan) { + // Back up the UIMenuController items since dismissViewController: will attempt to replace them + self.appMenuItems = UIMenuController.sharedMenuController.menuItems; + + // Don't use FLEXNavigationController because the tab viewer itself is not a tab + [super presentViewController:[[UINavigationController alloc] + initWithRootViewController:[FLEXTabsViewController new] + ] animated:YES completion:nil]; + } +} + +- (void)handleToolbarWindowManagerGesture:(UILongPressGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateBegan) { + // Back up the UIMenuController items since dismissViewController: will attempt to replace them + self.appMenuItems = UIMenuController.sharedMenuController.menuItems; + + [super presentViewController:[FLEXNavigationController + withRootViewController:[FLEXWindowManagerController new] + ] animated:YES completion:nil]; + } +} + +- (void)handleToolbarShowViewControllersGesture:(UILongPressGestureRecognizer *)sender { + if (sender.state == UIGestureRecognizerStateBegan && self.viewsAtTapPoint.count) { + // Back up the UIMenuController items since dismissViewController: will attempt to replace them + self.appMenuItems = UIMenuController.sharedMenuController.menuItems; + + UIViewController *list = [FLEXViewControllersViewController + controllersForViews:self.viewsAtTapPoint + ]; + [self presentViewController: + [FLEXNavigationController withRootViewController:list + ] animated:YES completion:nil]; } } #pragma mark - View Selection -- (void)handleSelectionTap:(UITapGestureRecognizer *)tapGR -{ +- (void)handleSelectionTap:(UITapGestureRecognizer *)tapGR { // Only if we're in selection mode if (self.currentMode == FLEXExplorerModeSelect && tapGR.state == UIGestureRecognizerStateRecognized) { - // Note that [tapGR locationInView:nil] is broken in iOS 8, so we have to do a two step conversion to window coordinates. + // Note that [tapGR locationInView:nil] is broken in iOS 8, + // so we have to do a two step conversion to window coordinates. // Thanks to @lascorbe for finding this: https://github.com/Flipboard/FLEX/pull/31 CGPoint tapPointInView = [tapGR locationInView:self.view]; CGPoint tapPointInWindow = [self.view convertPoint:tapPointInView toView:nil]; @@ -526,8 +598,23 @@ - (void)handleSelectionTap:(UITapGestureRecognizer *)tapGR } } -- (void)updateOutlineViewsForSelectionPoint:(CGPoint)selectionPointInWindow -{ +- (void)handleChangeViewAtPointGesture:(UISwipeGestureRecognizer *)sender { + NSInteger max = self.viewsAtTapPoint.count - 1; + NSInteger currentIdx = [self.viewsAtTapPoint indexOfObject:self.selectedView]; + switch (sender.direction) { + case UISwipeGestureRecognizerDirectionLeft: + self.selectedView = self.viewsAtTapPoint[MIN(max, currentIdx + 1)]; + break; + case UISwipeGestureRecognizerDirectionRight: + self.selectedView = self.viewsAtTapPoint[MAX(0, currentIdx - 1)]; + break; + + default: + break; + } +} + +- (void)updateOutlineViewsForSelectionPoint:(CGPoint)selectionPointInWindow { [self removeAndClearOutlineViews]; // Include hidden views in the "viewsAtTapPoint" array so we can show them in the hierarchy list. @@ -536,7 +623,7 @@ - (void)updateOutlineViewsForSelectionPoint:(CGPoint)selectionPointInWindow // For outlined views and the selected view, only use visible views. // Outlining hidden views adds clutter and makes the selection behavior confusing. NSArray *visibleViewsAtTapPoint = [self viewsAtPoint:selectionPointInWindow skipHiddenViews:YES]; - NSMutableDictionary *newOutlineViewsForVisibleViews = [NSMutableDictionary dictionary]; + NSMutableDictionary *newOutlineViewsForVisibleViews = [NSMutableDictionary new]; for (UIView *view in visibleViewsAtTapPoint) { UIView *outlineView = [self outlineViewForView:view]; [self.view addSubview:outlineView]; @@ -552,8 +639,7 @@ - (void)updateOutlineViewsForSelectionPoint:(CGPoint)selectionPointInWindow [self updateButtonStates]; } -- (UIView *)outlineViewForView:(UIView *)view -{ +- (UIView *)outlineViewForView:(UIView *)view { CGRect outlineFrame = [self frameInLocalCoordinatesForView:view]; UIView *outlineView = [[UIView alloc] initWithFrame:outlineFrame]; outlineView.backgroundColor = UIColor.clearColor; @@ -562,8 +648,7 @@ - (UIView *)outlineViewForView:(UIView *)view return outlineView; } -- (void)removeAndClearOutlineViews -{ +- (void)removeAndClearOutlineViews { for (NSValue *key in self.outlineViewsForVisibleViews) { UIView *outlineView = self.outlineViewsForVisibleViews[key]; [outlineView removeFromSuperview]; @@ -571,25 +656,26 @@ - (void)removeAndClearOutlineViews self.outlineViewsForVisibleViews = nil; } -- (NSArray *)viewsAtPoint:(CGPoint)tapPointInWindow skipHiddenViews:(BOOL)skipHidden -{ - NSMutableArray *views = [NSMutableArray array]; - for (UIWindow *window in [FLEXUtility allWindows]) { +- (NSArray *)viewsAtPoint:(CGPoint)tapPointInWindow skipHiddenViews:(BOOL)skipHidden { + NSMutableArray *views = [NSMutableArray new]; + for (UIWindow *window in FLEXUtility.allWindows) { // Don't include the explorer's own window or subviews. if (window != self.view.window && [window pointInside:tapPointInWindow withEvent:nil]) { [views addObject:window]; - [views addObjectsFromArray:[self recursiveSubviewsAtPoint:tapPointInWindow inView:window skipHiddenViews:skipHidden]]; + [views addObjectsFromArray:[self + recursiveSubviewsAtPoint:tapPointInWindow inView:window skipHiddenViews:skipHidden + ]]; } } return views; } -- (UIView *)viewForSelectionAtPoint:(CGPoint)tapPointInWindow -{ - // Select in the window that would handle the touch, but don't just use the result of hitTest:withEvent: so we can still select views with interaction disabled. +- (UIView *)viewForSelectionAtPoint:(CGPoint)tapPointInWindow { + // Select in the window that would handle the touch, but don't just use the result of + // hitTest:withEvent: so we can still select views with interaction disabled. // Default to the the application's key window if none of the windows want the touch. - UIWindow *windowForSelection = [UIApplication.sharedApplication keyWindow]; - for (UIWindow *window in [FLEXUtility allWindows].reverseObjectEnumerator) { + UIWindow *windowForSelection = UIApplication.sharedApplication.keyWindow; + for (UIWindow *window in FLEXUtility.allWindows.reverseObjectEnumerator) { // Ignore the explorer's own window. if (window != self.view.window) { if ([window hitTest:tapPointInWindow withEvent:nil]) { @@ -603,9 +689,10 @@ - (UIView *)viewForSelectionAtPoint:(CGPoint)tapPointInWindow return [self recursiveSubviewsAtPoint:tapPointInWindow inView:windowForSelection skipHiddenViews:YES].lastObject; } -- (NSArray *)recursiveSubviewsAtPoint:(CGPoint)pointInView inView:(UIView *)view skipHiddenViews:(BOOL)skipHidden -{ - NSMutableArray *subviewsAtPoint = [NSMutableArray array]; +- (NSArray *)recursiveSubviewsAtPoint:(CGPoint)pointInView + inView:(UIView *)view + skipHiddenViews:(BOOL)skipHidden { + NSMutableArray *subviewsAtPoint = [NSMutableArray new]; for (UIView *subview in view.subviews) { BOOL isHidden = subview.hidden || subview.alpha < 0.01; if (skipHidden && isHidden) { @@ -617,46 +704,22 @@ - (UIView *)viewForSelectionAtPoint:(CGPoint)tapPointInWindow [subviewsAtPoint addObject:subview]; } - // If this view doesn't clip to its bounds, we need to check its subviews even if it doesn't contain the selection point. - // They may be visible and contain the selection point. + // If this view doesn't clip to its bounds, we need to check its subviews even if it + // doesn't contain the selection point. They may be visible and contain the selection point. if (subviewContainsPoint || !subview.clipsToBounds) { CGPoint pointInSubview = [view convertPoint:pointInView toView:subview]; - [subviewsAtPoint addObjectsFromArray:[self recursiveSubviewsAtPoint:pointInSubview inView:subview skipHiddenViews:skipHidden]]; + [subviewsAtPoint addObjectsFromArray:[self + recursiveSubviewsAtPoint:pointInSubview inView:subview skipHiddenViews:skipHidden + ]]; } } return subviewsAtPoint; } -- (NSArray *)allRecursiveSubviewsInView:(UIView *)view -{ - NSMutableArray *subviews = [NSMutableArray array]; - for (UIView *subview in view.subviews) { - [subviews addObject:subview]; - [subviews addObjectsFromArray:[self allRecursiveSubviewsInView:subview]]; - } - return subviews; -} - -- (NSDictionary *)hierarchyDepthsForViews:(NSArray *)views -{ - NSMutableDictionary *hierarchyDepths = [NSMutableDictionary dictionary]; - for (UIView *view in views) { - NSInteger depth = 0; - UIView *tryView = view; - while (tryView.superview) { - tryView = tryView.superview; - depth++; - } - [hierarchyDepths setObject:@(depth) forKey:[NSValue valueWithNonretainedObject:view]]; - } - return hierarchyDepths; -} - #pragma mark - Selected View Moving -- (void)handleMovePan:(UIPanGestureRecognizer *)movePanGR -{ +- (void)handleMovePan:(UIPanGestureRecognizer *)movePanGR { switch (movePanGR.state) { case UIGestureRecognizerStateBegan: self.selectedViewFrameBeforeDragging = self.selectedView.frame; @@ -673,8 +736,7 @@ - (void)handleMovePan:(UIPanGestureRecognizer *)movePanGR } } -- (void)updateSelectedViewPositionWithDragGesture:(UIPanGestureRecognizer *)movePanGR -{ +- (void)updateSelectedViewPositionWithDragGesture:(UIPanGestureRecognizer *)movePanGR { CGPoint translation = [movePanGR translationInView:self.selectedView.superview]; CGRect newSelectedViewFrame = self.selectedViewFrameBeforeDragging; newSelectedViewFrame.origin.x = FLEXFloor(newSelectedViewFrame.origin.x + translation.x); @@ -685,8 +747,7 @@ - (void)updateSelectedViewPositionWithDragGesture:(UIPanGestureRecognizer *)move #pragma mark - Safe Area Handling -- (CGRect)viewSafeArea -{ +- (CGRect)viewSafeArea { CGRect safeArea = self.view.bounds; if (@available(iOS 11.0, *)) { safeArea = UIEdgeInsetsInsetRect(self.view.bounds, self.view.safeAreaInsets); @@ -695,22 +756,27 @@ - (CGRect)viewSafeArea return safeArea; } -- (void)viewSafeAreaInsetsDidChange -{ +- (void)viewSafeAreaInsetsDidChange { if (@available(iOS 11.0, *)) { [super viewSafeAreaInsetsDidChange]; CGRect safeArea = [self viewSafeArea]; - CGSize toolbarSize = [self.explorerToolbar sizeThatFits:CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetHeight(safeArea))]; - [self updateToolbarPositionWithUnconstrainedFrame:CGRectMake(CGRectGetMinX(self.explorerToolbar.frame), CGRectGetMinY(self.explorerToolbar.frame), toolbarSize.width, toolbarSize.height)]; + CGSize toolbarSize = [self.explorerToolbar sizeThatFits:CGSizeMake( + CGRectGetWidth(self.view.bounds), CGRectGetHeight(safeArea) + )]; + [self updateToolbarPositionWithUnconstrainedFrame:CGRectMake( + CGRectGetMinX(self.explorerToolbar.frame), + CGRectGetMinY(self.explorerToolbar.frame), + toolbarSize.width, + toolbarSize.height) + ]; } } #pragma mark - Touch Handling -- (BOOL)shouldReceiveTouchAtWindowPoint:(CGPoint)pointInWindowCoordinates -{ +- (BOOL)shouldReceiveTouchAtWindowPoint:(CGPoint)pointInWindowCoordinates { BOOL shouldReceiveTouch = NO; CGPoint pointInLocalCoordinates = [self.view convertPoint:pointInWindowCoordinates fromView:nil]; @@ -739,12 +805,11 @@ - (BOOL)shouldReceiveTouchAtWindowPoint:(CGPoint)pointInWindowCoordinates } -#pragma mark - FLEXHierarchyTableViewControllerDelegate +#pragma mark - FLEXHierarchyDelegate -- (void)hierarchyViewController:(FLEXHierarchyTableViewController *)hierarchyViewController didFinishWithSelectedView:(UIView *)selectedView -{ - // Note that we need to wait until the view controller is dismissed to calculated the frame of the outline view. - // Otherwise the coordinate conversion doesn't give the correct result. +- (void)viewHierarchyDidDismiss:(UIView *)selectedView { + // Note that we need to wait until the view controller is dismissed to calculate the frame + // of the outline view, otherwise the coordinate conversion doesn't give the correct result. [self toggleViewsToolWithCompletion:^{ // If the selected view is outside of the tap point array (selected from "Full Hierarchy"), // then clear out the tap point array and remove all the outline views. @@ -764,71 +829,71 @@ - (void)hierarchyViewController:(FLEXHierarchyTableViewController *)hierarchyVie } -#pragma mark - FLEXGlobalsViewControllerDelegate - -- (void)globalsViewControllerDidFinish:(FLEXGlobalsTableViewController *)globalsViewController -{ - [self resignKeyAndDismissViewControllerAnimated:YES completion:nil]; -} - - -#pragma mark - FLEXObjectExplorerViewController Done Action - -- (void)selectedViewExplorerFinished:(id)sender -{ - [self resignKeyAndDismissViewControllerAnimated:YES completion:nil]; -} - - #pragma mark - Modal Presentation and Window Management -- (void)makeKeyAndPresentViewController:(UIViewController *)viewController animated:(BOOL)animated completion:(void (^)(void))completion -{ - // Save the current key window so we can restore it following dismissal. - self.previousKeyWindow = [UIApplication.sharedApplication keyWindow]; - +- (void)presentViewController:(UIViewController *)toPresent + animated:(BOOL)animated + completion:(void (^)(void))completion { // Make our window key to correctly handle input. [self.view.window makeKeyWindow]; - + // Move the status bar on top of FLEX so we can get scroll to top behavior for taps. - [[self statusWindow] setWindowLevel:self.view.window.windowLevel + 1.0]; + if (!@available(iOS 13, *)) { + [self statusWindow].windowLevel = self.view.window.windowLevel + 1.0; + } + + // Back up and replace the UIMenuController items + // Edit: no longer replacing the items, but still backing them + // up in case we start replacing them again in the future + self.appMenuItems = UIMenuController.sharedMenuController.menuItems; - // Show the view controller. - [self presentViewController:viewController animated:animated completion:completion]; + // Show the view controller + [super presentViewController:toPresent animated:animated completion:completion]; } -- (void)resignKeyAndDismissViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion -{ - UIWindow *previousKeyWindow = self.previousKeyWindow; - self.previousKeyWindow = nil; - [previousKeyWindow makeKeyWindow]; - [[previousKeyWindow rootViewController] setNeedsStatusBarAppearanceUpdate]; +- (void)dismissViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion { + UIWindow *appWindow = self.window.previousKeyWindow; + [appWindow makeKeyWindow]; + [appWindow.rootViewController setNeedsStatusBarAppearanceUpdate]; + + // Restore previous UIMenuController items + // Back up and replace the UIMenuController items + UIMenuController.sharedMenuController.menuItems = self.appMenuItems; + [UIMenuController.sharedMenuController update]; + self.appMenuItems = nil; // Restore the status bar window's normal window level. - // We want it above FLEX while a modal is presented for scroll to top, but below FLEX otherwise for exploration. - [[self statusWindow] setWindowLevel:UIWindowLevelStatusBar]; + // We want it above FLEX while a modal is presented for + // scroll to top, but below FLEX otherwise for exploration. + [self statusWindow].windowLevel = UIWindowLevelStatusBar; - [self dismissViewControllerAnimated:animated completion:completion]; + [self updateButtonStates]; + + [super dismissViewControllerAnimated:animated completion:completion]; } - (BOOL)wantsWindowToBecomeKey { - return self.previousKeyWindow != nil; + return self.window.previousKeyWindow != nil; } -- (void)toggleToolWithViewControllerProvider:(UIViewController *(^)(void))future completion:(void(^)(void))completion -{ +- (void)toggleToolWithViewControllerProvider:(UINavigationController *(^)(void))future + completion:(void(^)(void))completion { if (self.presentedViewController) { - [self resignKeyAndDismissViewControllerAnimated:YES completion:completion]; + [self dismissViewControllerAnimated:YES completion:completion]; } else if (future) { - [self makeKeyAndPresentViewController:future() animated:YES completion:completion]; + [self presentViewController:future() animated:YES completion:completion]; } } +- (FLEXWindow *)window { + return (id)self.view.window; +} + + #pragma mark - Keyboard Shortcut Helpers -- (void)toggleSelectTool -{ +- (void)toggleSelectTool { if (self.currentMode == FLEXExplorerModeSelect) { self.currentMode = FLEXExplorerModeDefault; } else { @@ -836,28 +901,29 @@ - (void)toggleSelectTool } } -- (void)toggleMoveTool -{ +- (void)toggleMoveTool { if (self.currentMode == FLEXExplorerModeMove) { - self.currentMode = FLEXExplorerModeDefault; - } else { + self.currentMode = FLEXExplorerModeSelect; + } else if (self.currentMode == FLEXExplorerModeSelect && self.selectedView) { self.currentMode = FLEXExplorerModeMove; } } -- (void)toggleViewsTool -{ +- (void)toggleViewsTool { [self toggleViewsToolWithCompletion:nil]; } -- (void)toggleViewsToolWithCompletion:(void(^)(void))completion -{ - [self toggleToolWithViewControllerProvider:^UIViewController *{ - NSArray *allViews = [self allViewsInHierarchy]; - NSDictionary *depthsForViews = [self hierarchyDepthsForViews:allViews]; - FLEXHierarchyTableViewController *hierarchyTVC = [[FLEXHierarchyTableViewController alloc] initWithViews:allViews viewsAtTap:self.viewsAtTapPoint selectedView:self.selectedView depths:depthsForViews]; - hierarchyTVC.delegate = self; - return [[UINavigationController alloc] initWithRootViewController:hierarchyTVC]; +- (void)toggleViewsToolWithCompletion:(void(^)(void))completion { + [self toggleToolWithViewControllerProvider:^UINavigationController *{ + if (self.selectedView) { + return [FLEXHierarchyViewController + delegate:self + viewsAtTap:self.viewsAtTapPoint + selectedView:self.selectedView + ]; + } else { + return [FLEXHierarchyViewController delegate:self]; + } } completion:^{ if (completion) { completion(); @@ -865,18 +931,13 @@ - (void)toggleViewsToolWithCompletion:(void(^)(void))completion }]; } -- (void)toggleMenuTool -{ - [self toggleToolWithViewControllerProvider:^UIViewController *{ - FLEXGlobalsTableViewController *globalsViewController = [FLEXGlobalsTableViewController new]; - globalsViewController.delegate = self; - [FLEXGlobalsTableViewController setApplicationWindow:[UIApplication.sharedApplication keyWindow]]; - return [[UINavigationController alloc] initWithRootViewController:globalsViewController]; +- (void)toggleMenuTool { + [self toggleToolWithViewControllerProvider:^UINavigationController *{ + return [FLEXNavigationController withRootViewController:[FLEXGlobalsViewController new]]; } completion:nil]; } -- (void)handleDownArrowKeyPressed -{ +- (BOOL)handleDownArrowKeyPressed { if (self.currentMode == FLEXExplorerModeMove) { CGRect frame = self.selectedView.frame; frame.origin.y += 1.0 / UIScreen.mainScreen.scale; @@ -886,11 +947,14 @@ - (void)handleDownArrowKeyPressed if (selectedViewIndex > 0) { self.selectedView = [self.viewsAtTapPoint objectAtIndex:selectedViewIndex - 1]; } + } else { + return NO; } + + return YES; } -- (void)handleUpArrowKeyPressed -{ +- (BOOL)handleUpArrowKeyPressed { if (self.currentMode == FLEXExplorerModeMove) { CGRect frame = self.selectedView.frame; frame.origin.y -= 1.0 / UIScreen.mainScreen.scale; @@ -900,25 +964,33 @@ - (void)handleUpArrowKeyPressed if (selectedViewIndex < self.viewsAtTapPoint.count - 1) { self.selectedView = [self.viewsAtTapPoint objectAtIndex:selectedViewIndex + 1]; } + } else { + return NO; } + + return YES; } -- (void)handleRightArrowKeyPressed -{ +- (BOOL)handleRightArrowKeyPressed { if (self.currentMode == FLEXExplorerModeMove) { CGRect frame = self.selectedView.frame; frame.origin.x += 1.0 / UIScreen.mainScreen.scale; self.selectedView.frame = frame; + return YES; } + + return NO; } -- (void)handleLeftArrowKeyPressed -{ +- (BOOL)handleLeftArrowKeyPressed { if (self.currentMode == FLEXExplorerModeMove) { CGRect frame = self.selectedView.frame; frame.origin.x -= 1.0 / UIScreen.mainScreen.scale; self.selectedView.frame = frame; + return YES; } + + return NO; } @end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.h new file mode 100644 index 00000000..dcc6decc --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.h @@ -0,0 +1,19 @@ +// +// FLEXViewControllersViewController.h +// FLEX +// +// Created by Tanner Bennett on 2/13/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXFilteringTableViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXViewControllersViewController : FLEXFilteringTableViewController + ++ (instancetype)controllersForViews:(NSArray *)views; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.m new file mode 100644 index 00000000..41833f6d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXViewControllersViewController.m @@ -0,0 +1,79 @@ +// +// FLEXViewControllersViewController.m +// FLEX +// +// Created by Tanner Bennett on 2/13/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXViewControllersViewController.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXMutableListSection.h" +#import "FLEXUtility.h" + +@interface FLEXViewControllersViewController () +@property (nonatomic, readonly) FLEXMutableListSection *section; +@property (nonatomic, readonly) NSArray *controllers; +@end + +@implementation FLEXViewControllersViewController +@dynamic sections, allSections; + +#pragma mark - Initialization + ++ (instancetype)controllersForViews:(NSArray *)views { + return [[self alloc] initWithViews:views]; +} + +- (id)initWithViews:(NSArray *)views { + NSParameterAssert(views.count); + + self = [self initWithStyle:UITableViewStylePlain]; + if (self) { + _controllers = [views flex_mapped:^id(UIView *view, NSUInteger idx) { + return [FLEXUtility viewControllerForView:view]; + }]; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"View Controllers at Tap"; + self.showsSearchBar = YES; + [self disableToolbar]; +} + +- (NSArray *)makeSections { + _section = [FLEXMutableListSection list:self.controllers + cellConfiguration:^(UITableViewCell *cell, UIViewController *controller, NSInteger row) { + cell.textLabel.text = [NSString + stringWithFormat:@"%@ — %p", NSStringFromClass(controller.class), controller + ]; + cell.detailTextLabel.text = controller.view.description; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.lineBreakMode = NSLineBreakByTruncatingTail; + } filterMatcher:^BOOL(NSString *filterText, UIViewController *controller) { + return [NSStringFromClass(controller.class) localizedCaseInsensitiveContainsString:filterText]; + }]; + + self.section.selectionHandler = ^(UIViewController *host, UIViewController *controller) { + [host.navigationController pushViewController: + [FLEXObjectExplorerFactory explorerViewControllerForObject:controller] + animated:YES]; + }; + + self.section.customTitle = @"View Controllers"; + return @[self.section]; +} + + +#pragma mark - Private + +- (void)dismissAnimated { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.h index 8643c630..5e08df3c 100644 --- a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.h +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.h @@ -3,22 +3,27 @@ // Flipboard // // Created by Ryan Olson on 4/13/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import -@protocol FLEXWindowEventDelegate; - -@interface FLEXWindow : UIWindow +@protocol FLEXWindowEventDelegate -@property (nonatomic, weak) id eventDelegate; +- (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow; +- (BOOL)canBecomeKeyWindow; @end -@protocol FLEXWindowEventDelegate +#pragma mark - +@interface FLEXWindow : UIWindow -- (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow; -- (BOOL)canBecomeKeyWindow; +@property (nonatomic, weak) id eventDelegate; + +/// Tracked so we can restore the key window after dismissing a modal. +/// We need to become key after modal presentation so we can correctly capture input. +/// If we're just showing the toolbar, we want the main app's window to remain key +/// so that we don't interfere with input, status bar, etc. +@property (nonatomic, readonly) UIWindow *previousKeyWindow; @end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.m index f74c8bdf..e5ea04bb 100644 --- a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.m +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindow.m @@ -3,19 +3,18 @@ // Flipboard // // Created by Ryan Olson on 4/13/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXWindow.h" +#import "FLEXUtility.h" #import @implementation FLEXWindow -- (id)initWithFrame:(CGRect)frame -{ +- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - self.backgroundColor = UIColor.clearColor; // Some apps have windows at UIWindowLevelStatusBar + n. // If we make the window level too high, we block out UIAlertViews. // There's a balance between staying above the app's windows and staying below alerts. @@ -25,8 +24,7 @@ - (id)initWithFrame:(CGRect)frame return self; } -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event -{ +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { BOOL pointInside = NO; if ([self.eventDelegate shouldHandleTouchAtPoint:point]) { pointInside = [super pointInside:point withEvent:event]; @@ -34,18 +32,25 @@ - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event return pointInside; } -- (BOOL)shouldAffectStatusBarAppearance -{ +- (BOOL)shouldAffectStatusBarAppearance { return [self isKeyWindow]; } -- (BOOL)canBecomeKeyWindow -{ +- (BOOL)canBecomeKeyWindow { return [self.eventDelegate canBecomeKeyWindow]; } -+ (void)initialize -{ +- (void)makeKeyWindow { + _previousKeyWindow = FLEXUtility.appKeyWindow; + [super makeKeyWindow]; +} + +- (void)resignKeyWindow { + [super resignKeyWindow]; + _previousKeyWindow = nil; +} + ++ (void)initialize { // This adds a method (superclass override) at runtime which gives us the status bar behavior we want. // The FLEX window is intended to be an overlay that generally doesn't affect the app underneath. // Most of the time, we want the app's main window(s) to be in control of status bar behavior. diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.h new file mode 100644 index 00000000..a2a87536 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.h @@ -0,0 +1,17 @@ +// +// FLEXWindowManagerController.h +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXWindowManagerController : FLEXTableViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.m new file mode 100644 index 00000000..4b6e9bbc --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/FLEXWindowManagerController.m @@ -0,0 +1,302 @@ +// +// FLEXWindowManagerController.m +// FLEX +// +// Created by Tanner on 2/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXWindowManagerController.h" +#import "FLEXManager+Private.h" +#import "FLEXUtility.h" +#import "FLEXObjectExplorerFactory.h" + +@interface FLEXWindowManagerController () +@property (nonatomic) UIWindow *keyWindow; +@property (nonatomic, copy) NSString *keyWindowSubtitle; +@property (nonatomic, copy) NSArray *windows; +@property (nonatomic, copy) NSArray *windowSubtitles; +@property (nonatomic, copy) NSArray *scenes API_AVAILABLE(ios(13)); +@property (nonatomic, copy) NSArray *sceneSubtitles; +@property (nonatomic, copy) NSArray *sections; +@end + +@implementation FLEXWindowManagerController + +#pragma mark - Initialization + +- (id)init { + return [self initWithStyle:UITableViewStylePlain]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"Windows"; + if (@available(iOS 13, *)) { + self.title = @"Windows and Scenes"; + } + + [self disableToolbar]; + [self reloadData]; +} + + +#pragma mark - Private + +- (void)reloadData { + self.keyWindow = UIApplication.sharedApplication.keyWindow; + self.windows = UIApplication.sharedApplication.windows; + self.keyWindowSubtitle = self.windowSubtitles[[self.windows indexOfObject:self.keyWindow]]; + self.windowSubtitles = [self.windows flex_mapped:^id(UIWindow *window, NSUInteger idx) { + return [NSString stringWithFormat:@"Level: %@ — Root: %@", + @(window.windowLevel), window.rootViewController + ]; + }]; + + if (@available(iOS 13, *)) { + self.scenes = UIApplication.sharedApplication.connectedScenes.allObjects; + self.sceneSubtitles = [self.scenes flex_mapped:^id(UIScene *scene, NSUInteger idx) { + return [self sceneDescription:scene]; + }]; + + self.sections = @[@[self.keyWindow], self.windows, self.scenes]; + } else { + self.sections = @[@[self.keyWindow], self.windows]; + } + + [self.tableView reloadData]; +} + +- (void)dismissAnimated { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)showRevertOrDismissAlert:(void(^)())revertBlock { + [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; + [self reloadData]; + [self.tableView reloadData]; + + UIWindow *highestWindow = UIApplication.sharedApplication.keyWindow; + UIWindowLevel maxLevel = 0; + for (UIWindow *window in UIApplication.sharedApplication.windows) { + if (window.windowLevel > maxLevel) { + maxLevel = window.windowLevel; + highestWindow = window; + } + } + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Keep Changes?"); + make.message(@"If you do not wish to keep these settings, choose 'Revert Changes' below."); + + make.button(@"Keep Changes").destructiveStyle(); + make.button(@"Keep Changes and Dismiss").destructiveStyle().handler(^(NSArray *strings) { + [self dismissAnimated]; + }); + make.button(@"Revert Changes").cancelStyle().handler(^(NSArray *strings) { + revertBlock(); + [self reloadData]; + [self.tableView reloadData]; + }); + } showFrom:[FLEXUtility topViewControllerInWindow:highestWindow]]; +} + +- (NSString *)sceneDescription:(UIScene *)scene API_AVAILABLE(ios(13)) { + NSString *state = [self stringFromSceneState:scene.activationState]; + NSString *title = scene.title.length ? scene.title : nil; + NSString *suffix = nil; + + if ([scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (id)scene; + suffix = FLEXPluralString(windowScene.windows.count, @"windows", @"window"); + } + + NSMutableString *description = state.mutableCopy; + if (title) { + [description appendFormat:@" — %@", title]; + } + if (suffix) { + [description appendFormat:@" — %@", suffix]; + } + + return description.copy; +} + +- (NSString *)stringFromSceneState:(UISceneActivationState)state API_AVAILABLE(ios(13)) { + switch (state) { + case UISceneActivationStateUnattached: + return @"Unattached"; + case UISceneActivationStateForegroundActive: + return @"Active"; + case UISceneActivationStateForegroundInactive: + return @"Inactive"; + case UISceneActivationStateBackground: + return @"Backgrounded"; + } + + return [NSString stringWithFormat:@"Unknown state: %@", @(state)]; +} + + +#pragma mark - Table View Data Source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.sections.count; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.sections[section].count; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + switch (section) { + case 0: return @"Key Window"; + case 1: return @"Windows"; + case 2: return @"Connected Scenes"; + } + + return nil; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXDetailCell forIndexPath:indexPath]; + cell.accessoryType = UITableViewCellAccessoryDetailButton; + cell.textLabel.lineBreakMode = NSLineBreakByTruncatingTail; + + UIWindow *window = nil; + NSString *subtitle = nil; + + switch (indexPath.section) { + case 0: + window = self.keyWindow; + subtitle = self.keyWindowSubtitle; + break; + case 1: + window = self.windows[indexPath.row]; + subtitle = self.windowSubtitles[indexPath.row]; + break; + case 2: + if (@available(iOS 13, *)) { + UIScene *scene = self.scenes[indexPath.row]; + cell.textLabel.text = scene.description; + cell.detailTextLabel.text = self.sceneSubtitles[indexPath.row]; + return cell; + } + } + + cell.textLabel.text = window.description; + cell.detailTextLabel.text = [NSString + stringWithFormat:@"Level: %@ — Root: %@", + @((NSInteger)window.windowLevel), window.rootViewController.class + ]; + + return cell; +} + + +#pragma mark - Table View Delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + UIWindow *window = nil; + NSString *subtitle = nil; + FLEXWindow *flex = FLEXManager.sharedManager.explorerWindow; + + id cancelHandler = ^{ + [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; + }; + + switch (indexPath.section) { + case 0: + window = self.keyWindow; + subtitle = self.keyWindowSubtitle; + break; + case 1: + window = self.windows[indexPath.row]; + subtitle = self.windowSubtitles[indexPath.row]; + break; + case 2: + if (@available(iOS 13, *)) { + UIScene *scene = self.scenes[indexPath.row]; + UIWindowScene *oldScene = flex.windowScene; + BOOL isWindowScene = [scene isKindOfClass:[UIWindowScene class]]; + BOOL isFLEXScene = isWindowScene ? flex.windowScene == scene : NO; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(NSStringFromClass(scene.class)); + + if (isWindowScene) { + if (isFLEXScene) { + make.message(@"Already the FLEX window scene"); + } + + make.button(@"Set as FLEX Window Scene") + .handler(^(NSArray *strings) { + flex.windowScene = (id)scene; + [self showRevertOrDismissAlert:^{ + flex.windowScene = oldScene; + }]; + }).enabled(!isFLEXScene); + make.button(@"Cancel").cancelStyle(); + } else { + make.message(@"Not a UIWindowScene"); + make.button(@"Dismiss").cancelStyle().handler(cancelHandler); + } + } showFrom:self]; + } + } + + __block UIWindow *targetWindow = nil, *oldKeyWindow = nil; + __block UIWindowLevel oldLevel; + __block BOOL wasVisible; + + subtitle = [subtitle stringByAppendingString: + @"\n\n1) Adjust the FLEX window level relative to this window,\n" + "2) adjust this window's level relative to the FLEX window,\n" + "3) set this window's level to a specific value, or\n" + "4) make this window the key window if it isn't already." + ]; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(NSStringFromClass(window.class)).message(subtitle); + make.button(@"Adjust FLEX Window Level").handler(^(NSArray *strings) { + targetWindow = flex; oldLevel = flex.windowLevel; + flex.windowLevel = window.windowLevel + strings.firstObject.integerValue; + + [self showRevertOrDismissAlert:^{ targetWindow.windowLevel = oldLevel; }]; + }); + make.button(@"Adjust This Window's Level").handler(^(NSArray *strings) { + targetWindow = window; oldLevel = window.windowLevel; + window.windowLevel = flex.windowLevel + strings.firstObject.integerValue; + + [self showRevertOrDismissAlert:^{ targetWindow.windowLevel = oldLevel; }]; + }); + make.button(@"Set This Window's Level").handler(^(NSArray *strings) { + targetWindow = window; oldLevel = window.windowLevel; + window.windowLevel = strings.firstObject.integerValue; + + [self showRevertOrDismissAlert:^{ targetWindow.windowLevel = oldLevel; }]; + }); + make.button(@"Make Key And Visible").handler(^(NSArray *strings) { + oldKeyWindow = UIApplication.sharedApplication.keyWindow; + wasVisible = window.hidden; + [window makeKeyAndVisible]; + + [self showRevertOrDismissAlert:^{ + window.hidden = wasVisible; + [oldKeyWindow makeKeyWindow]; + }]; + }).enabled(!window.isKeyWindow && !window.hidden); + make.button(@"Cancel").cancelStyle().handler(cancelHandler); + + make.textField(@"+/- window level, i.e. 5 or -10"); + } showFrom:self]; +} + +- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)ip { + [self.navigationController pushViewController: + [FLEXObjectExplorerFactory explorerViewControllerForObject:self.sections[ip.section][ip.row]] + animated:YES]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.h new file mode 100644 index 00000000..a0464c15 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.h @@ -0,0 +1,45 @@ +// +// FLEXTabList.h +// FLEX +// +// Created by Tanner on 2/1/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXTabList : NSObject + +@property (nonatomic, readonly, class) FLEXTabList *sharedList; + +@property (nonatomic, readonly, nullable) UINavigationController *activeTab; +@property (nonatomic, readonly) NSArray *openTabs; +/// Snapshots of each tab when they were last active. +@property (nonatomic, readonly) NSArray *openTabSnapshots; +/// \c NSNotFound if no tabs are present. +/// Setting this property changes the active tab to one of the already open tabs. +@property (nonatomic) NSInteger activeTabIndex; + +/// Adds a new tab and sets the new tab as the active tab. +- (void)addTab:(UINavigationController *)newTab; +/// Closes the given tab. If this tab was the active tab, +/// the most recent tab before that becomes the active tab. +- (void)closeTab:(UINavigationController *)tab; +/// Closes a tab at the given index. If this tab was the active tab, +/// the most recent tab before that becomes the active tab. +- (void)closeTabAtIndex:(NSInteger)idx; +/// Closes all of the tabs at the given indexes. If the active tab +/// is included, the most recent still-open tab becomes the active tab. +- (void)closeTabsAtIndexes:(NSIndexSet *)indexes; +/// A shortcut to close the active tab. +- (void)closeActiveTab; +/// A shortcut to close \e every tab. +- (void)closeAllTabs; + +- (void)updateSnapshotForActiveTab; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.m new file mode 100644 index 00000000..e5af93f9 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabList.m @@ -0,0 +1,133 @@ +// +// FLEXTabList.m +// FLEX +// +// Created by Tanner on 2/1/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTabList.h" +#import "FLEXUtility.h" + +@interface FLEXTabList () { + NSMutableArray *_openTabs; + NSMutableArray *_openTabSnapshots; +} +@end +#pragma mark - +@implementation FLEXTabList + +#pragma mark Initialization + ++ (FLEXTabList *)sharedList { + static FLEXTabList *sharedList = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedList = [self new]; + }); + + return sharedList; +} + +- (id)init { + self = [super init]; + if (self) { + _openTabs = [NSMutableArray new]; + _openTabSnapshots = [NSMutableArray new]; + _activeTabIndex = NSNotFound; + } + + return self; +} + + +#pragma mark Private + +- (void)chooseNewActiveTab { + if (self.openTabs.count) { + self.activeTabIndex = self.openTabs.count - 1; + } else { + self.activeTabIndex = NSNotFound; + } +} + + +#pragma mark Public + +- (void)setActiveTabIndex:(NSInteger)idx { + NSParameterAssert(idx < self.openTabs.count || idx == NSNotFound); + if (_activeTabIndex == idx) return; + + _activeTabIndex = idx; + _activeTab = (idx == NSNotFound) ? nil : self.openTabs[idx]; +} + +- (void)addTab:(UINavigationController *)newTab { + NSParameterAssert(newTab); + + // Update snapshot of the last active tab + if (self.activeTab) { + [self updateSnapshotForActiveTab]; + } + + // Add new tab and snapshot, + // update active tab and index + [_openTabs addObject:newTab]; + [_openTabSnapshots addObject:[FLEXUtility previewImageForView:newTab.view]]; + _activeTab = newTab; + _activeTabIndex = self.openTabs.count - 1; +} + +- (void)closeTab:(UINavigationController *)tab { + NSParameterAssert(tab); + NSParameterAssert([self.openTabs containsObject:tab]); + NSInteger idx = [self.openTabs indexOfObject:tab]; + + [self closeTabAtIndex:idx]; +} + +- (void)closeTabAtIndex:(NSInteger)idx { + NSParameterAssert(idx < self.openTabs.count); + + // Remove old tab and snapshot + [_openTabs removeObjectAtIndex:idx]; + [_openTabSnapshots removeObjectAtIndex:idx]; + + // Update active tab and index if needed + if (self.activeTabIndex == idx) { + [self chooseNewActiveTab]; + } +} + +- (void)closeTabsAtIndexes:(NSIndexSet *)indexes { + // Remove old tabs and snapshot + [_openTabs removeObjectsAtIndexes:indexes]; + [_openTabSnapshots removeObjectsAtIndexes:indexes]; + + // Update active tab and index if needed + if ([indexes containsIndex:self.activeTabIndex]) { + [self chooseNewActiveTab]; + } +} + +- (void)closeActiveTab { + [self closeTab:self.activeTab]; +} + +- (void)closeAllTabs { + // Remove tabs and snapshots + [_openTabs removeAllObjects]; + [_openTabSnapshots removeAllObjects]; + + // Update active tab index + self.activeTabIndex = NSNotFound; +} + +- (void)updateSnapshotForActiveTab { + if (self.activeTabIndex != NSNotFound) { + UIImage *newSnapshot = [FLEXUtility previewImageForView:self.activeTab.view]; + [_openTabSnapshots replaceObjectAtIndex:self.activeTabIndex withObject:newSnapshot]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.h b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.h new file mode 100644 index 00000000..d3d72f6d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.h @@ -0,0 +1,13 @@ +// +// FLEXTabsViewController.h +// FLEX +// +// Created by Tanner on 2/4/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" + +@interface FLEXTabsViewController : FLEXTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.m b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.m new file mode 100644 index 00000000..8e2eca47 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ExplorerInterface/Tabs/FLEXTabsViewController.m @@ -0,0 +1,335 @@ +// +// FLEXTabsViewController.m +// FLEX +// +// Created by Tanner on 2/4/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXTabsViewController.h" +#import "FLEXNavigationController.h" +#import "FLEXTabList.h" +#import "FLEXBookmarkManager.h" +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "FLEXColor.h" +#import "UIBarButtonItem+FLEX.h" +#import "FLEXExplorerViewController.h" +#import "FLEXGlobalsViewController.h" +#import "FLEXBookmarksViewController.h" + +@interface FLEXTabsViewController () +@property (nonatomic, copy) NSArray *openTabs; +@property (nonatomic, copy) NSArray *tabSnapshots; +@property (nonatomic) NSInteger activeIndex; +@property (nonatomic) BOOL presentNewActiveTabOnDismiss; + +@property (nonatomic, readonly) FLEXExplorerViewController *corePresenter; +@end + +@implementation FLEXTabsViewController + +#pragma mark - Initialization + +- (id)init { + return [self initWithStyle:UITableViewStylePlain]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"Open Tabs"; + self.navigationController.hidesBarsOnSwipe = NO; + self.tableView.allowsMultipleSelectionDuringEditing = YES; + + [self reloadData:NO]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self setupDefaultBarItems]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + // Instead of updating the active snapshot before we present, + // we update it after we present to avoid pre-presenation latency + dispatch_async(dispatch_get_main_queue(), ^{ + [FLEXTabList.sharedList updateSnapshotForActiveTab]; + [self reloadData:NO]; + [self.tableView reloadData]; + }); +} + + +#pragma mark - Private + +/// @param trackActiveTabDelta whether to check if the active +/// tab changed and needs to be presented upon "Done" dismissal. +/// @return whether the active tab changed or not (if there are any tabs left) +- (BOOL)reloadData:(BOOL)trackActiveTabDelta { + BOOL activeTabDidChange = NO; + FLEXTabList *list = FLEXTabList.sharedList; + + // Flag to enable check to determine whether + if (trackActiveTabDelta) { + NSInteger oldActiveIndex = self.activeIndex; + if (oldActiveIndex != list.activeTabIndex && list.activeTabIndex != NSNotFound) { + self.presentNewActiveTabOnDismiss = YES; + activeTabDidChange = YES; + } else if (self.presentNewActiveTabOnDismiss) { + // If we had something to present before, now we don't + // (i.e. activeTabIndex == NSNotFound) + self.presentNewActiveTabOnDismiss = NO; + } + } + + // We assume the tabs aren't going to change out from under us, since + // presenting any other tool via keyboard shortcuts should dismiss us first + self.openTabs = list.openTabs; + self.tabSnapshots = list.openTabSnapshots; + self.activeIndex = list.activeTabIndex; + + return activeTabDidChange; +} + +- (void)reloadActiveTabRowIfChanged:(BOOL)activeTabChanged { + // Refresh the newly active tab row if needed + if (activeTabChanged) { + NSIndexPath *active = [NSIndexPath + indexPathForRow:self.activeIndex inSection:0 + ]; + [self.tableView reloadRowsAtIndexPaths:@[active] withRowAnimation:UITableViewRowAnimationNone]; + } +} + +- (void)setupDefaultBarItems { + self.navigationItem.rightBarButtonItem = FLEXBarButtonItemSystem(Done, self, @selector(dismissAnimated)); + self.toolbarItems = @[ + UIBarButtonItem.flex_fixedSpace, + UIBarButtonItem.flex_flexibleSpace, + FLEXBarButtonItemSystem(Add, self, @selector(addTabButtonPressed:)), + UIBarButtonItem.flex_flexibleSpace, + FLEXBarButtonItemSystem(Edit, self, @selector(toggleEditing)), + ]; + + // Disable editing if no tabs available + self.toolbarItems.lastObject.enabled = self.openTabs.count > 0; +} + +- (void)setupEditingBarItems { + self.navigationItem.rightBarButtonItem = nil; + self.toolbarItems = @[ + [UIBarButtonItem itemWithTitle:@"Close All" target:self action:@selector(closeAllButtonPressed:)], + UIBarButtonItem.flex_flexibleSpace, + [UIBarButtonItem disabledSystemItem:UIBarButtonSystemItemAdd], + UIBarButtonItem.flex_flexibleSpace, + // We use a non-system done item because we change its title dynamically + [UIBarButtonItem doneStyleitemWithTitle:@"Done" target:self action:@selector(toggleEditing)] + ]; + + self.toolbarItems.firstObject.tintColor = FLEXColor.destructiveColor; +} + +- (FLEXExplorerViewController *)corePresenter { + // We must be presented by a FLEXExplorerViewController, or presented + // by another view controller that was presented by FLEXExplorerViewController + FLEXExplorerViewController *presenter = (id)self.presentingViewController; + presenter = (id)presenter.presentingViewController ?: presenter; + NSAssert( + [presenter isKindOfClass:[FLEXExplorerViewController class]], + @"The tabs view controller expects to be presented by the explorer controller" + ); + return presenter; +} + + +#pragma mark Button Actions + +- (void)dismissAnimated { + if (self.presentNewActiveTabOnDismiss) { + // The active tab was closed so we need to present the new one + UIViewController *activeTab = FLEXTabList.sharedList.activeTab; + FLEXExplorerViewController *presenter = self.corePresenter; + [presenter dismissViewControllerAnimated:YES completion:^{ + [presenter presentViewController:activeTab animated:YES completion:nil]; + }]; + } else if (self.activeIndex == NSNotFound) { + // The only tab was closed, so dismiss everything + [self.corePresenter dismissViewControllerAnimated:YES completion:nil]; + } else { + // Simple dismiss with the same active tab, only dismiss myself + [self dismissViewControllerAnimated:YES completion:nil]; + } +} + +- (void)toggleEditing { + NSArray *selected = self.tableView.indexPathsForSelectedRows; + self.editing = !self.editing; + + if (self.isEditing) { + [self setupEditingBarItems]; + } else { + [self setupDefaultBarItems]; + + // Get index set of tabs to close + NSMutableIndexSet *indexes = [NSMutableIndexSet new]; + for (NSIndexPath *ip in selected) { + [indexes addIndex:ip.row]; + } + + if (selected.count) { + // Close tabs and update data source + [FLEXTabList.sharedList closeTabsAtIndexes:indexes]; + BOOL activeTabChanged = [self reloadData:YES]; + + // Remove deleted rows + [self.tableView deleteRowsAtIndexPaths:selected withRowAnimation:UITableViewRowAnimationAutomatic]; + + // Refresh the newly active tab row if needed + [self reloadActiveTabRowIfChanged:activeTabChanged]; + } + } +} + +- (void)addTabButtonPressed:(UIBarButtonItem *)sender { + if (FLEXBookmarkManager.bookmarks.count) { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + make.title(@"New Tab"); + make.button(@"Main Menu").handler(^(NSArray *strings) { + [self addTabAndDismiss:[FLEXNavigationController + withRootViewController:[FLEXGlobalsViewController new] + ]]; + }); + make.button(@"Choose from Bookmarks").handler(^(NSArray *strings) { + [self presentViewController:[FLEXNavigationController + withRootViewController:[FLEXBookmarksViewController new] + ] animated:YES completion:nil]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; + } else { + // No bookmarks, just open the main menu + [self addTabAndDismiss:[FLEXNavigationController + withRootViewController:[FLEXGlobalsViewController new] + ]]; + } +} + +- (void)addTabAndDismiss:(UINavigationController *)newTab { + FLEXExplorerViewController *presenter = self.corePresenter; + [presenter dismissViewControllerAnimated:YES completion:^{ + [presenter presentViewController:newTab animated:YES completion:nil]; + }]; +} + +- (void)closeAllButtonPressed:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + NSInteger count = self.openTabs.count; + NSString *title = FLEXPluralFormatString(count, @"Close %@ tabs", @"Close %@ tab"); + make.button(title).destructiveStyle().handler(^(NSArray *strings) { + [self closeAll]; + [self toggleEditing]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + +- (void)closeAll { + NSInteger rowCount = self.openTabs.count; + + // Close tabs and update data source + [FLEXTabList.sharedList closeAllTabs]; + [self reloadData:YES]; + + // Delete rows from table view + NSArray *allRows = [NSArray flex_forEachUpTo:rowCount map:^id(NSUInteger row) { + return [NSIndexPath indexPathForRow:row inSection:0]; + }]; + [self.tableView deleteRowsAtIndexPaths:allRows withRowAnimation:UITableViewRowAnimationAutomatic]; +} + + +#pragma mark - Table View Data Source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.openTabs.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXDetailCell forIndexPath:indexPath]; + + UINavigationController *tab = self.openTabs[indexPath.row]; + cell.imageView.image = self.tabSnapshots[indexPath.row]; + cell.textLabel.text = tab.topViewController.title; + cell.detailTextLabel.text = FLEXPluralString(tab.viewControllers.count, @"pages", @"page"); + + if (!cell.tag) { + cell.textLabel.lineBreakMode = NSLineBreakByTruncatingTail; + cell.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; + cell.detailTextLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; + cell.tag = 1; + } + + if (indexPath.row == self.activeIndex) { + cell.backgroundColor = FLEXColor.secondaryBackgroundColor; + } else { + cell.backgroundColor = FLEXColor.primaryBackgroundColor; + } + + return cell; +} + + +#pragma mark - Table View Delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.editing) { + // Case: editing with multi-select + self.toolbarItems.lastObject.title = @"Close Selected"; + self.toolbarItems.lastObject.tintColor = FLEXColor.destructiveColor; + } else { + if (self.activeIndex == indexPath.row && self.corePresenter != self.presentingViewController) { + // Case: selected the already active tab + [self dismissAnimated]; + } else { + // Case: selected a different tab, + // or selected a tab when presented from the FLEX toolbar + FLEXTabList.sharedList.activeTabIndex = indexPath.row; + self.presentNewActiveTabOnDismiss = YES; + [self dismissAnimated]; + } + } +} + +- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + NSParameterAssert(self.editing); + + if (tableView.indexPathsForSelectedRows.count == 0) { + self.toolbarItems.lastObject.title = @"Done"; + self.toolbarItems.lastObject.tintColor = self.view.tintColor; + } +} + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +- (void)tableView:(UITableView *)table +commitEditingStyle:(UITableViewCellEditingStyle)edit +forRowAtIndexPath:(NSIndexPath *)indexPath { + NSParameterAssert(edit == UITableViewCellEditingStyleDelete); + + // Close tab and update data source + [FLEXTabList.sharedList closeTab:self.openTabs[indexPath.row]]; + BOOL activeTabChanged = [self reloadData:YES]; + + // Delete row from table view + [table deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; + + // Refresh the newly active tab row if needed + [self reloadActiveTabRowIfChanged:activeTabChanged]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/FLEX-Categories.h b/xcode/Pods/FLEX/Classes/FLEX-Categories.h new file mode 100644 index 00000000..fb9a5fca --- /dev/null +++ b/xcode/Pods/FLEX/Classes/FLEX-Categories.h @@ -0,0 +1,27 @@ +// +// FLEX-Categories.h +// FLEX +// +// Created by Tanner on 3/12/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + + + +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/xcode/Pods/FLEX/Classes/FLEX-Core.h b/xcode/Pods/FLEX/Classes/FLEX-Core.h new file mode 100644 index 00000000..5f0f11cf --- /dev/null +++ b/xcode/Pods/FLEX/Classes/FLEX-Core.h @@ -0,0 +1,23 @@ +// +// FLEX-Core.h +// FLEX +// +// Created by Tanner on 3/11/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import +#import +#import +#import + +#import +#import + +#import +#import +#import +#import +#import + +#import diff --git a/xcode/Pods/FLEX/Classes/FLEX-ObjectExploring.h b/xcode/Pods/FLEX/Classes/FLEX-ObjectExploring.h new file mode 100644 index 00000000..808b9bbc --- /dev/null +++ b/xcode/Pods/FLEX/Classes/FLEX-ObjectExploring.h @@ -0,0 +1,30 @@ +// +// FLEX-ObjectExploring.h +// FLEX +// +// Created by Tanner on 3/11/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import +#import + +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import diff --git a/xcode/Pods/FLEX/Classes/FLEX-Runtime.h b/xcode/Pods/FLEX/Classes/FLEX-Runtime.h new file mode 100644 index 00000000..91e8288f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/FLEX-Runtime.h @@ -0,0 +1,25 @@ +// +// FLEX-Runtime.h +// FLEX +// +// Created by Tanner on 3/11/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import +#import +#import +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import +#import diff --git a/xcode/Pods/FLEX/Classes/FLEX.h b/xcode/Pods/FLEX/Classes/FLEX.h index bb6cd2f1..14fba2d9 100644 --- a/xcode/Pods/FLEX/Classes/FLEX.h +++ b/xcode/Pods/FLEX/Classes/FLEX.h @@ -3,7 +3,23 @@ // FLEX // // Created by Eric Horacek on 7/18/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Modified by Tanner Bennett on 3/12/20. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import +#import +#import + +#import +#import +#import + +#import +#import +#import +#import + +#import +#import +#import diff --git a/xcode/Pods/FLEX/Classes/FLEXManager.h b/xcode/Pods/FLEX/Classes/FLEXManager.h deleted file mode 100644 index 6b520569..00000000 --- a/xcode/Pods/FLEX/Classes/FLEXManager.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// FLEXManager.h -// Flipboard -// -// Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import -#import - -#if !FLEX_AT_LEAST_IOS13_SDK -@class UIWindowScene; -#endif - -typedef UIViewController *(^FLEXCustomContentViewerFuture)(NSData *data); - -@interface FLEXManager : NSObject - -+ (instancetype)sharedManager; - -@property (nonatomic, readonly) BOOL isHidden; - -- (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 - Network Debugging - -/// 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, copy) NSArray *networkRequestHostBlacklist; - - -#pragma mark - Keyboard 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 compiled 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; - -#pragma mark - Extensions - -/// 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; - -/// 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; - -/// 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 diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.h new file mode 100644 index 00000000..a4791a8c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.h @@ -0,0 +1,19 @@ +// +// FLEXDBQueryRowCell.h +// FLEX +// +// Created by Peng Tao on 15/11/24. +// Copyright © 2015年 f. All rights reserved. +// + +#import + +extern NSString * const kFLEXDBQueryRowCellReuse; + + +@interface FLEXDBQueryRowCell : UITableViewCell + +/// An array of NSString, NSNumber, or NSData objects +@property (nonatomic) NSArray *data; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.m new file mode 100644 index 00000000..ce6ff581 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.m @@ -0,0 +1,74 @@ +// +// FLEXDBQueryRowCell.m +// FLEX +// +// Created by Peng Tao on 15/11/24. +// Copyright © 2015年 f. All rights reserved. +// + +#import "FLEXDBQueryRowCell.h" +#import "FLEXMultiColumnTableView.h" +#import "NSArray+FLEX.h" +#import "UIFont+FLEX.h" +#import "FLEXColor.h" + +NSString * const kFLEXDBQueryRowCellReuse = @"kFLEXDBQueryRowCellReuse"; + +@interface FLEXDBQueryRowCell () +@property (nonatomic) NSInteger columnCount; +@property (nonatomic) NSArray *labels; +@end + +@implementation FLEXDBQueryRowCell + +- (void)setData:(NSArray *)data { + _data = data; + self.columnCount = data.count; + + [self.labels flex_forEach:^(UILabel *label, NSUInteger idx) { + id content = self.data[idx]; + + if ([content isKindOfClass:[NSString class]]) { + label.text = content; + } else if (content == NSNull.null) { + label.text = @""; + label.textColor = FLEXColor.deemphasizedTextColor; + } else { + label.text = [content description]; + } + }]; +} + +- (void)setColumnCount:(NSInteger)columnCount { + if (columnCount != _columnCount) { + _columnCount = columnCount; + + // Remove existing labels + for (UILabel *l in self.labels) { + [l removeFromSuperview]; + } + + // Create new labels + self.labels = [NSArray flex_forEachUpTo:columnCount map:^id(NSUInteger i) { + UILabel *label = [UILabel new]; + label.font = UIFont.flex_defaultTableCellFont; + label.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:label]; + + return label; + }]; + } +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat width = self.contentView.frame.size.width / self.labels.count; + CGFloat height = self.contentView.frame.size.height; + + [self.labels flex_forEach:^(UILabel *label, NSUInteger i) { + label.frame = CGRectMake(width * i + 5, 0, (width - 10), height); + }]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h index 19312a07..a28d0ced 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h @@ -12,15 +12,23 @@ // which Flying Meat Inc. licenses this file to you. #import +#import "FLEXSQLResult.h" +/// Conformers should automatically open and close the database @protocol FLEXDatabaseManager @required -- (instancetype)initWithPath:(NSString*)path; -- (BOOL)open; -- (NSArray *> *)queryAllTables; -- (NSArray *)queryAllColumnsWithTableName:(NSString *)tableName; -- (NSArray *> *)queryAllDataWithTableName:(NSString *)tableName; +/// @return \c nil if the database couldn't be opened ++ (instancetype)managerForDatabase:(NSString *)path; + +/// @return a list of all table names +- (NSArray *)queryAllTables; +- (NSArray *)queryAllColumnsOfTable:(NSString *)tableName; +- (NSArray *)queryAllDataInTable:(NSString *)tableName; + +@optional + +- (FLEXSQLResult *)executeStatement:(NSString *)SQLStatement; @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h index fca6cc87..34ae1c11 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h @@ -14,8 +14,8 @@ @protocol FLEXMultiColumnTableViewDelegate @required -- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapLabelWithText:(NSString *)text; -- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapHeaderWithText:(NSString *)text sortType:(FLEXTableColumnHeaderSortType)sortType; +- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didSelectRow:(NSInteger)row; +- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didSelectHeaderForColumn:(NSInteger)column sortType:(FLEXTableColumnHeaderSortType)sortType; @end @@ -25,10 +25,9 @@ - (NSInteger)numberOfColumnsInTableView:(FLEXMultiColumnTableView *)tableView; - (NSInteger)numberOfRowsInTableView:(FLEXMultiColumnTableView *)tableView; -- (NSString *)columnNameInColumn:(NSInteger)column; -- (NSString *)rowNameInRow:(NSInteger)row; -- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row; -- (NSArray *)contentAtRow:(NSInteger)row; +- (NSString *)columnTitle:(NSInteger)column; +- (NSString *)rowTitle:(NSInteger)row; +- (NSArray *)contentForRow:(NSInteger)row; - (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView widthForContentCellInColumn:(NSInteger)column; - (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView heightForContentCellInRow:(NSInteger)row; @@ -40,8 +39,8 @@ @interface FLEXMultiColumnTableView : UIView -@property (nonatomic, weak) iddataSource; -@property (nonatomic, weak) iddelegate; +@property (nonatomic, weak) id dataSource; +@property (nonatomic, weak) id delegate; - (void)reloadData; diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m index 23902567..385434f6 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m @@ -7,11 +7,13 @@ // #import "FLEXMultiColumnTableView.h" -#import "FLEXTableContentCell.h" +#import "FLEXDBQueryRowCell.h" #import "FLEXTableLeftCell.h" +#import "FLEXColor.h" -@interface FLEXMultiColumnTableView () - +@interface FLEXMultiColumnTableView () < + UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate +> @property (nonatomic) UIScrollView *contentScrollView; @property (nonatomic) UIScrollView *headerScrollView; @@ -19,38 +21,49 @@ @interface FLEXMultiColumnTableView () @property (nonatomic) UITableView *contentTableView; @property (nonatomic) UIView *leftHeader; -@property (nonatomic) NSDictionary *sortStatusDict; +/// \c NSNotFound if no column selected +@property (nonatomic) NSInteger sortColumn; +@property (nonatomic) FLEXTableColumnHeaderSortType sortType; + @property (nonatomic) NSArray *rowData; + +@property (nonatomic, readonly) NSInteger numberOfColumns; +@property (nonatomic, readonly) NSInteger numberOfRows; +@property (nonatomic, readonly) CGFloat topHeaderHeight; +@property (nonatomic, readonly) CGFloat leftHeaderWidth; +@property (nonatomic, readonly) CGFloat columnMargin; + @end static const CGFloat kColumnMargin = 1; @implementation FLEXMultiColumnTableView +#pragma mark - Initialization -- (instancetype)initWithFrame:(CGRect)frame -{ +- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - [self loadUI]; + self.autoresizingMask |= UIViewAutoresizingFlexibleWidth; + self.autoresizingMask |= UIViewAutoresizingFlexibleHeight; + self.autoresizingMask |= UIViewAutoresizingFlexibleTopMargin; + self.backgroundColor = FLEXColor.groupedBackgroundColor; + + [self loadHeaderScrollView]; + [self loadContentScrollView]; + [self loadLeftView]; } + return self; } -- (void)didMoveToSuperview -{ - [super didMoveToSuperview]; - [self reloadData]; -} - -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; CGFloat width = self.frame.size.width; CGFloat height = self.frame.size.height; - CGFloat topheaderHeight = [self topHeaderHeight]; - CGFloat leftHeaderWidth = [self leftHeaderWidth]; + CGFloat topheaderHeight = self.topHeaderHeight; + CGFloat leftHeaderWidth = self.leftHeaderWidth; CGFloat topInsets = 0.f; if (@available (iOS 11.0, *)) { @@ -58,50 +71,45 @@ - (void)layoutSubviews } CGFloat contentWidth = 0.0; - NSInteger rowsCount = [self numberOfColumns]; + NSInteger rowsCount = self.numberOfColumns; for (int i = 0; i < rowsCount; i++) { contentWidth += [self contentWidthForColumn:i]; } - self.leftTableView.frame = CGRectMake(0, topheaderHeight + topInsets, leftHeaderWidth, height - topheaderHeight - topInsets); - self.headerScrollView.frame = CGRectMake(leftHeaderWidth, topInsets, width - leftHeaderWidth, topheaderHeight); - self.headerScrollView.contentSize = CGSizeMake( self.contentTableView.frame.size.width, self.headerScrollView.frame.size.height); - self.contentTableView.frame = CGRectMake(0, 0, contentWidth + [self numberOfColumns] * [self columnMargin] , height - topheaderHeight - topInsets); - self.contentScrollView.frame = CGRectMake(leftHeaderWidth, topheaderHeight + topInsets, width - leftHeaderWidth, height - topheaderHeight - topInsets); + CGFloat contentHeight = height - topheaderHeight - topInsets; + + self.leftHeader.frame = CGRectMake(0, topInsets, self.leftHeaderWidth, self.topHeaderHeight); + self.leftTableView.frame = CGRectMake( + 0, topheaderHeight + topInsets, leftHeaderWidth, contentHeight + ); + self.headerScrollView.frame = CGRectMake( + leftHeaderWidth, topInsets, width - leftHeaderWidth, topheaderHeight + ); + self.headerScrollView.contentSize = CGSizeMake( + self.contentTableView.frame.size.width, self.headerScrollView.frame.size.height + ); + self.contentTableView.frame = CGRectMake( + 0, 0, contentWidth + self.numberOfColumns * self.columnMargin , contentHeight + ); + self.contentScrollView.frame = CGRectMake( + leftHeaderWidth, topheaderHeight + topInsets, width - leftHeaderWidth, contentHeight + ); self.contentScrollView.contentSize = self.contentTableView.frame.size; - self.leftHeader.frame = CGRectMake(0, topInsets, [self leftHeaderWidth], [self topHeaderHeight]); -} - - -- (void)loadUI -{ - [self loadHeaderScrollView]; - [self loadContentScrollView]; - [self loadLeftView]; } -- (void)reloadData -{ - [self loadLeftViewData]; - [self loadContentData]; - [self loadHeaderData]; -} #pragma mark - UI -- (void)loadHeaderScrollView -{ - UIScrollView *headerScrollView = [UIScrollView new]; - headerScrollView.delegate = self; - self.headerScrollView = headerScrollView; - self.headerScrollView.backgroundColor = [UIColor colorWithWhite:0.803 alpha:0.850]; +- (void)loadHeaderScrollView { + UIScrollView *headerScrollView = [UIScrollView new]; + headerScrollView.delegate = self; + headerScrollView.backgroundColor = FLEXColor.secondaryGroupedBackgroundColor; + self.headerScrollView = headerScrollView; [self addSubview:headerScrollView]; } -- (void)loadContentScrollView -{ - +- (void)loadContentScrollView { UIScrollView *scrollView = [UIScrollView new]; scrollView.bounces = NO; scrollView.delegate = self; @@ -110,149 +118,137 @@ - (void)loadContentScrollView tableView.delegate = self; tableView.dataSource = self; tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + [tableView registerClass:[FLEXDBQueryRowCell class] + forCellReuseIdentifier:kFLEXDBQueryRowCellReuse + ]; - [self addSubview:scrollView]; [scrollView addSubview:tableView]; + [self addSubview:scrollView]; self.contentScrollView = scrollView; - self.contentTableView = tableView; - + self.contentTableView = tableView; } -- (void)loadLeftView -{ - UITableView *leftTableView = [UITableView new]; +- (void)loadLeftView { + UITableView *leftTableView = [UITableView new]; leftTableView.delegate = self; leftTableView.dataSource = self; leftTableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.leftTableView = leftTableView; [self addSubview:leftTableView]; - UIView *leftHeader = [UIView new]; - leftHeader.backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.668]; + UIView *leftHeader = [UIView new]; + leftHeader.backgroundColor = FLEXColor.secondaryBackgroundColor; self.leftHeader = leftHeader; [self addSubview:leftHeader]; - } #pragma mark - Data -- (void)loadHeaderData -{ - NSArray *subviews = self.headerScrollView.subviews; - - for (UIView *subview in subviews) { +- (void)reloadData { + [self loadLeftViewData]; + [self loadContentData]; + [self loadHeaderData]; +} + +- (void)loadHeaderData { + // Remove existing headers, if any + for (UIView *subview in self.headerScrollView.subviews) { [subview removeFromSuperview]; } - CGFloat x = 0.0; - CGFloat w = 0.0; - for (int i = 0; i < [self numberOfColumns] ; i++) { - w = [self contentWidthForColumn:i] + [self columnMargin]; + + CGFloat xOffset = 0.0; + for (NSInteger column = 0; column < self.numberOfColumns; column++) { + CGFloat width = [self contentWidthForColumn:column] + self.columnMargin; - FLEXTableColumnHeader *cell = [[FLEXTableColumnHeader alloc] initWithFrame:CGRectMake(x, 0, w, [self topHeaderHeight] - 1)]; - cell.label.text = [self columnTitleForColumn:i]; - [self.headerScrollView addSubview:cell]; + FLEXTableColumnHeader *header = [[FLEXTableColumnHeader alloc] + initWithFrame:CGRectMake(xOffset, 0, width, self.topHeaderHeight - 1) + ]; + header.titleLabel.text = [self columnTitle:column]; - FLEXTableColumnHeaderSortType type = [self.sortStatusDict[[self columnTitleForColumn:i]] integerValue]; - [cell changeSortStatusWithType:type]; + if (column == self.sortColumn) { + header.sortType = self.sortType; + } - UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self - action:@selector(contentHeaderTap:)]; - [cell addGestureRecognizer:gesture]; - cell.userInteractionEnabled = YES; + // Header tap gesture + UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(contentHeaderTap:) + ]; + [header addGestureRecognizer:gesture]; + header.userInteractionEnabled = YES; - x = x + w; + [self.headerScrollView addSubview:header]; + xOffset += width; } } -- (void)contentHeaderTap:(UIGestureRecognizer *)gesture -{ - FLEXTableColumnHeader *header = (FLEXTableColumnHeader *)gesture.view; - NSString *string = header.label.text; - FLEXTableColumnHeaderSortType currentType = [self.sortStatusDict[string] integerValue]; - FLEXTableColumnHeaderSortType newType ; +- (void)contentHeaderTap:(UIGestureRecognizer *)gesture { + NSInteger newSortColumn = [self.headerScrollView.subviews indexOfObject:gesture.view]; + FLEXTableColumnHeaderSortType newType = FLEXNextTableColumnHeaderSortType(self.sortType); - switch (currentType) { - case FLEXTableColumnHeaderSortTypeNone: - newType = FLEXTableColumnHeaderSortTypeAsc; - break; - case FLEXTableColumnHeaderSortTypeAsc: - newType = FLEXTableColumnHeaderSortTypeDesc; - break; - case FLEXTableColumnHeaderSortTypeDesc: - newType = FLEXTableColumnHeaderSortTypeAsc; - break; - } + // Reset old header + FLEXTableColumnHeader *oldHeader = (id)self.headerScrollView.subviews[self.sortColumn]; + oldHeader.sortType = FLEXTableColumnHeaderSortTypeNone; - self.sortStatusDict = @{header.label.text : @(newType)}; - [header changeSortStatusWithType:newType]; - [self.delegate multiColumnTableView:self didTapHeaderWithText:string sortType:newType]; + // Update new header + FLEXTableColumnHeader *newHeader = (id)self.headerScrollView.subviews[newSortColumn]; + newHeader.sortType = newType; + // Update self + self.sortColumn = newSortColumn; + self.sortType = newType; + + // Notify delegate + [self.delegate multiColumnTableView:self didSelectHeaderForColumn:newSortColumn sortType:newType]; } -- (void)loadContentData -{ +- (void)loadContentData { [self.contentTableView reloadData]; } -- (void)loadLeftViewData -{ +- (void)loadLeftViewData { [self.leftTableView reloadData]; } -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UIColor *backgroundColor = UIColor.whiteColor; +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + // Alternating background color + UIColor *backgroundColor = FLEXColor.primaryBackgroundColor; if (indexPath.row % 2 != 0) { - backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.750]; + backgroundColor = FLEXColor.secondaryBackgroundColor; } - if (tableView != self.leftTableView) { - self.rowData = [self.dataSource contentAtRow:indexPath.row]; - FLEXTableContentCell *cell = [FLEXTableContentCell cellWithTableView:tableView - columnNumber:[self numberOfColumns]]; + // Left side table view for row numbers + if (tableView == self.leftTableView) { + FLEXTableLeftCell *cell = [FLEXTableLeftCell cellWithTableView:tableView]; cell.contentView.backgroundColor = backgroundColor; - cell.delegate = self; - - for (int i = 0 ; i < cell.labels.count; i++) { - - UILabel *label = cell.labels[i]; - label.textColor = UIColor.blackColor; - - NSString *content = [NSString stringWithFormat:@"%@",self.rowData[i]]; - if ([content isEqualToString:@""]) { - label.textColor = UIColor.lightGrayColor; - content = @"NULL"; - } - label.text = content; - label.backgroundColor = backgroundColor; - } + cell.titlelabel.text = [self rowTitle:indexPath.row]; return cell; } + // Right side table view for data else { - FLEXTableLeftCell *cell = [FLEXTableLeftCell cellWithTableView:tableView]; + self.rowData = [self.dataSource contentForRow:indexPath.row]; + FLEXDBQueryRowCell *cell = [tableView + dequeueReusableCellWithIdentifier:kFLEXDBQueryRowCellReuse forIndexPath:indexPath + ]; + cell.contentView.backgroundColor = backgroundColor; - cell.titlelabel.text = [self rowTitleForRow:indexPath.row]; + cell.data = [self.dataSource contentForRow:indexPath.row]; + NSAssert(cell.data.count == self.numberOfColumns, @"Count of data provided was incorrect"); return cell; } } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.dataSource numberOfRowsInTableView:self]; } - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [self.dataSource multiColumnTableView:self heightForContentCellInRow:indexPath.row]; } - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView -{ +// Scroll all scroll views in sync +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView == self.contentScrollView) { self.headerScrollView.contentOffset = scrollView.contentOffset; } @@ -267,80 +263,59 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView } } -#pragma mark - + #pragma mark UITableView Delegate -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (tableView == self.leftTableView) { - [self.contentTableView selectRowAtIndexPath:indexPath - animated:NO - scrollPosition:UITableViewScrollPositionNone]; + [self.contentTableView + selectRowAtIndexPath:indexPath + animated:NO + scrollPosition:UITableViewScrollPositionNone + ]; } else if (tableView == self.contentTableView) { - [self.leftTableView selectRowAtIndexPath:indexPath - animated:NO - scrollPosition:UITableViewScrollPositionNone]; + [self.delegate multiColumnTableView:self didSelectRow:indexPath.row]; } } -#pragma mark - + #pragma mark DataSource Accessor -- (NSInteger)numberOfRows -{ +- (NSInteger)numberOfRows { return [self.dataSource numberOfRowsInTableView:self]; } -- (NSInteger)numberOfColumns -{ +- (NSInteger)numberOfColumns { return [self.dataSource numberOfColumnsInTableView:self]; } -- (NSString *)columnTitleForColumn:(NSInteger)column -{ - return [self.dataSource columnNameInColumn:column]; +- (NSString *)columnTitle:(NSInteger)column { + return [self.dataSource columnTitle:column]; } -- (NSString *)rowTitleForRow:(NSInteger)row -{ - return [self.dataSource rowNameInRow:row]; +- (NSString *)rowTitle:(NSInteger)row { + return [self.dataSource rowTitle:row]; } -- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row; -{ - return [self.dataSource contentAtColumn:column row:row]; -} - -- (CGFloat)contentWidthForColumn:(NSInteger)column -{ +- (CGFloat)contentWidthForColumn:(NSInteger)column { return [self.dataSource multiColumnTableView:self widthForContentCellInColumn:column]; } -- (CGFloat)contentHeightForRow:(NSInteger)row -{ +- (CGFloat)contentHeightForRow:(NSInteger)row { return [self.dataSource multiColumnTableView:self heightForContentCellInRow:row]; } -- (CGFloat)topHeaderHeight -{ +- (CGFloat)topHeaderHeight { return [self.dataSource heightForTopHeaderInTableView:self]; } -- (CGFloat)leftHeaderWidth -{ +- (CGFloat)leftHeaderWidth { return [self.dataSource widthForLeftHeaderInTableView:self]; } -- (CGFloat)columnMargin -{ +- (CGFloat)columnMargin { return kColumnMargin; } - -- (void)tableContentCell:(FLEXTableContentCell *)tableView labelDidTapWithText:(NSString *)text -{ - [self.delegate multiColumnTableView:self didTapLabelWithText:text]; -} - @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m index b7800d90..94200485 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m @@ -7,6 +7,8 @@ // #import "FLEXRealmDatabaseManager.h" +#import "NSArray+FLEX.h" +#import "FLEXSQLResult.h" #if __has_include() #import @@ -18,97 +20,81 @@ @interface FLEXRealmDatabaseManager () @property (nonatomic, copy) NSString *path; -@property (nonatomic) RLMRealm * realm; +@property (nonatomic) RLMRealm *realm; @end -//#endif - @implementation FLEXRealmDatabaseManager +static Class RLMRealmClass = nil; + ++ (void)load { + RLMRealmClass = NSClassFromString(@"RLMRealm"); +} -- (instancetype)initWithPath:(NSString*)aPath -{ - Class realmClass = NSClassFromString(@"RLMRealm"); - if (realmClass == nil) { ++ (instancetype)managerForDatabase:(NSString *)path { + return [[self alloc] initWithPath:path]; +} + +- (instancetype)initWithPath:(NSString *)path { + if (!RLMRealmClass) { return nil; } self = [super init]; - if (self) { - _path = aPath; + _path = path; + + if (![self open]) { + return nil; + } } + return self; } -- (BOOL)open -{ - Class realmClass = NSClassFromString(@"RLMRealm"); +- (BOOL)open { Class configurationClass = NSClassFromString(@"RLMRealmConfiguration"); - - if (realmClass == nil || configurationClass == nil) { + if (!RLMRealmClass || !configurationClass) { return NO; } NSError *error = nil; id configuration = [configurationClass new]; [(RLMRealmConfiguration *)configuration setFileURL:[NSURL fileURLWithPath:self.path]]; - self.realm = [realmClass realmWithConfiguration:configuration error:&error]; + self.realm = [RLMRealmClass realmWithConfiguration:configuration error:&error]; + return (error == nil); } -- (NSArray *> *)queryAllTables -{ - NSMutableArray *> *allTables = [NSMutableArray array]; - RLMSchema *schema = [self.realm schema]; - - for (RLMObjectSchema *objectSchema in schema.objectSchema) { - if (objectSchema.className == nil) { - continue; - } - - NSDictionary *dictionary = @{@"name":objectSchema.className}; - [allTables addObject:dictionary]; - } - - return allTables; +- (NSArray *)queryAllTables { + // Map each schema to its name + return [self.realm.schema.objectSchema flex_mapped:^id(RLMObjectSchema *schema, NSUInteger idx) { + return schema.className ?: nil; + }]; } -- (NSArray *)queryAllColumnsWithTableName:(NSString *)tableName -{ - RLMObjectSchema *objectSchema = [[self.realm schema] schemaForClassName:tableName]; - if (objectSchema == nil) { - return nil; - } - - NSMutableArray *columnNames = [NSMutableArray array]; - for (RLMProperty *property in objectSchema.properties) { - [columnNames addObject:property.name]; - } - - return columnNames; +- (NSArray *)queryAllColumnsOfTable:(NSString *)tableName { + RLMObjectSchema *objectSchema = [self.realm.schema schemaForClassName:tableName]; + // Map each column to its name + return [objectSchema.properties flex_mapped:^id(RLMProperty *property, NSUInteger idx) { + return property.name; + }]; } -- (NSArray *> *)queryAllDataWithTableName:(NSString *)tableName -{ - RLMObjectSchema *objectSchema = [[self.realm schema] schemaForClassName:tableName]; +- (NSArray *)queryAllDataInTable:(NSString *)tableName { + RLMObjectSchema *objectSchema = [self.realm.schema schemaForClassName:tableName]; RLMResults *results = [self.realm allObjects:tableName]; - if (results.count == 0 || objectSchema == nil) { + if (results.count == 0 || !objectSchema) { return nil; } - NSMutableArray *> *allDataEntries = [NSMutableArray array]; - for (RLMObject *result in results) { - NSMutableDictionary *entry = [NSMutableDictionary dictionary]; - for (RLMProperty *property in objectSchema.properties) { - id value = [result valueForKey:property.name]; - entry[property.name] = (value) ? (value) : [NSNull null]; - } - - [allDataEntries addObject:entry]; - } - - return allDataEntries; + // Map results to an array of rows + return [NSArray flex_mapped:results block:^id(RLMObject *result, NSUInteger idx) { + // Map each row to an array of the values of its properties + return [objectSchema.properties flex_mapped:^id(RLMProperty *property, NSUInteger idx) { + return [result valueForKey:property.name] ?: NSNull.null; + }]; + }]; } @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.h new file mode 100644 index 00000000..d7ae856d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.h @@ -0,0 +1,48 @@ +// +// FLEXSQLResult.h +// FLEX +// +// Created by Tanner on 3/3/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXSQLResult : NSObject + +/// Describes the result of a non-select query, or an error of any kind of query ++ (instancetype)message:(NSString *)message; +/// Describes the result of a known failed execution ++ (instancetype)error:(NSString *)message; + +/// @param rowData A list of rows, where each element in the row +/// corresponds to the column given in /c columnNames ++ (instancetype)columns:(NSArray *)columnNames + rows:(NSArray *> *)rowData; + +@property (nonatomic, readonly, nullable) NSString *message; + +/// A value of YES means this is surely an error, +/// but it still might be an error even with a value of NO +@property (nonatomic, readonly) BOOL isError; + +/// A list of column names +@property (nonatomic, readonly, nullable) NSArray *columns; +/// A list of rows, where each element in the row corresponds +/// to the value of the column at the same index in \c columns. +/// +/// That is, given a row, looping over the contents of the row and +/// the contents of \c columns will give you key-value pairs of +/// column names to column values for that row. +@property (nonatomic, readonly, nullable) NSArray *> *rows; +/// A list of rows where the fields are paired to column names. +/// +/// This property is lazily constructed by looping over +/// the rows and columns present in the other two properties. +@property (nonatomic, readonly, nullable) NSArray *> *keyedRows; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.m new file mode 100644 index 00000000..f1637583 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.m @@ -0,0 +1,53 @@ +// +// FLEXSQLResult.m +// FLEX +// +// Created by Tanner on 3/3/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXSQLResult.h" +#import "NSArray+FLEX.h" + +@implementation FLEXSQLResult +@synthesize keyedRows = _keyedRows; + ++ (instancetype)message:(NSString *)message { + return [[self alloc] initWithmessage:message columns:nil rows:nil]; +} + ++ (instancetype)error:(NSString *)message { + FLEXSQLResult *result = [self message:message]; + result->_isError = YES; + return result; +} + ++ (instancetype)columns:(NSArray *)columnNames rows:(NSArray *> *)rowData { + return [[self alloc] initWithmessage:nil columns:columnNames rows:rowData]; +} + +- (id)initWithmessage:(NSString *)message columns:(NSArray *)columns rows:(NSArray *)rows { + NSParameterAssert(message || (columns && rows)); + NSParameterAssert(columns.count == rows.firstObject.count); + + self = [super init]; + if (self) { + _message = message; + _columns = columns; + _rows = rows; + } + + return self; +} + +- (NSArray *> *)keyedRows { + if (!_keyedRows) { + _keyedRows = [self.rows flex_mapped:^id(NSArray *row, NSUInteger idx) { + return [NSDictionary dictionaryWithObjects:row forKeys:self.columns]; + }]; + } + + return _keyedRows; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h index 9ab461bb..50dc4cd7 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h @@ -13,7 +13,20 @@ #import #import "FLEXDatabaseManager.h" +#import "FLEXSQLResult.h" @interface FLEXSQLiteDatabaseManager : NSObject +/// Contains the result of the last operation, which may be an error +@property (nonatomic, readonly) FLEXSQLResult *lastResult; +/// Calls into \c sqlite3_last_insert_rowid() +@property (nonatomic, readonly) NSInteger lastRowID; + +/// Given a statement like 'SELECT * from @table where @col = @val' and arguments +/// like { @"table": @"Album", @"col": @"year", @"val" @1 } this method will +/// invoke the statement and properly bind the given arguments to the statement. +/// +/// You may pass NSStrings, NSData, NSNumbers, or NSNulls as values. +- (FLEXSQLResult *)executeStatement:(NSString *)statement arguments:(NSDictionary *)args; + @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m index 561f4fbc..6eb4c1f5 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m @@ -8,62 +8,71 @@ #import "FLEXSQLiteDatabaseManager.h" #import "FLEXManager.h" +#import "NSArray+FLEX.h" +#import "FLEXRuntimeConstants.h" #import +static NSString * const QUERY_TABLENAMES = @"SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"; -static NSString *const QUERY_TABLENAMES_SQL = @"SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"; +@interface FLEXSQLiteDatabaseManager () +@property (nonatomic) sqlite3 *db; +@property (nonatomic, copy) NSString *path; +@end @implementation FLEXSQLiteDatabaseManager -{ - sqlite3* _db; - NSString* _databasePath; + +#pragma mark - FLEXDatabaseManager + ++ (instancetype)managerForDatabase:(NSString *)path { + return [[self alloc] initWithPath:path]; } -- (instancetype)initWithPath:(NSString*)aPath -{ +- (instancetype)initWithPath:(NSString *)path { self = [super init]; - if (self) { - _databasePath = [aPath copy]; + self.path = path;; } + return self; } +- (void)dealloc { + [self close]; +} + - (BOOL)open { - if (_db) { + if (self.db) { return YES; } - int err = sqlite3_open(_databasePath.UTF8String, &_db); + + int err = sqlite3_open(self.path.UTF8String, &_db); #if SQLITE_HAS_CODEC - NSString *defaultSqliteDatabasePassword = [FLEXManager sharedManager].defaultSqliteDatabasePassword; - + NSString *defaultSqliteDatabasePassword = FLEXManager.sharedManager.defaultSqliteDatabasePassword; if (defaultSqliteDatabasePassword) { const char *key = defaultSqliteDatabasePassword.UTF8String; - sqlite3_key(_db, key, (int)strlen(key)); } #endif - if(err != SQLITE_OK) { - NSLog(@"error opening!: %d", err); - return NO; + if (err != SQLITE_OK) { + return [self storeErrorForLastTask:@"Open"]; } + return YES; } - + - (BOOL)close { - if (!_db) { + if (!self.db) { return YES; } int rc; - BOOL retry; - BOOL triedFinalizingOpenStatements = NO; + BOOL retry, triedFinalizingOpenStatements = NO; do { - retry = NO; - rc = sqlite3_close(_db); + retry = NO; + rc = sqlite3_close(_db); if (SQLITE_BUSY == rc || SQLITE_LOCKED == rc) { if (!triedFinalizingOpenStatements) { triedFinalizingOpenStatements = YES; @@ -74,130 +83,223 @@ - (BOOL)close { retry = YES; } } + } else if (SQLITE_OK != rc) { + [self storeErrorForLastTask:@"Close"]; + self.db = nil; + return NO; } - else if (SQLITE_OK != rc) { - NSLog(@"error closing!: %d", rc); - } - } - while (retry); + } while (retry); - _db = nil; + self.db = nil; return YES; } +- (NSInteger)lastRowID { + return (NSInteger)sqlite3_last_insert_rowid(self.db); +} -- (NSArray *> *)queryAllTables -{ - return [self executeQuery:QUERY_TABLENAMES_SQL]; +- (NSArray *)queryAllTables { + return [[self executeStatement:QUERY_TABLENAMES].rows flex_mapped:^id(NSArray *table, NSUInteger idx) { + return table.firstObject; + }]; } -- (NSArray *)queryAllColumnsWithTableName:(NSString *)tableName -{ +- (NSArray *)queryAllColumnsOfTable:(NSString *)tableName { NSString *sql = [NSString stringWithFormat:@"PRAGMA table_info('%@')",tableName]; - NSArray *> *resultArray = [self executeQuery:sql]; - NSMutableArray *array = [NSMutableArray array]; - for (NSDictionary *dict in resultArray) { - NSString *columnName = (NSString *)dict[@"name"] ?: @""; - [array addObject:columnName]; - } - return array; + FLEXSQLResult *results = [self executeStatement:sql]; + + return [results.keyedRows flex_mapped:^id(NSDictionary *column, NSUInteger idx) { + return column[@"name"]; + }]; } -- (NSArray *> *)queryAllDataWithTableName:(NSString *)tableName -{ - NSString *sql = [NSString stringWithFormat:@"SELECT * FROM %@",tableName]; - return [self executeQuery:sql]; +- (NSArray *)queryAllDataInTable:(NSString *)tableName { + return [self executeStatement:[@"SELECT * FROM " + stringByAppendingString:tableName + ]].rows; } -#pragma mark - -#pragma mark - Private +- (FLEXSQLResult *)executeStatement:(NSString *)sql { + return [self executeStatement:sql arguments:nil]; +} -- (NSArray *> *)executeQuery:(NSString *)sql -{ +- (FLEXSQLResult *)executeStatement:(NSString *)sql arguments:(NSDictionary *)args { [self open]; - NSMutableArray *> *resultArray = [NSMutableArray array]; + + FLEXSQLResult *result = nil; + sqlite3_stmt *pstmt; - if (sqlite3_prepare_v2(_db, sql.UTF8String, -1, &pstmt, 0) == SQLITE_OK) { - while (sqlite3_step(pstmt) == SQLITE_ROW) { - NSUInteger num_cols = (NSUInteger)sqlite3_data_count(pstmt); - if (num_cols > 0) { - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:num_cols]; - - int columnCount = sqlite3_column_count(pstmt); + int status; + if ((status = sqlite3_prepare_v2(_db, sql.UTF8String, -1, &pstmt, 0)) == SQLITE_OK) { + NSMutableArray *rows = [NSMutableArray new]; + + // Bind parameters, if any + if (![self bindParameters:args toStatement:pstmt]) { + return self.lastResult; + } + + // Grab columns + int columnCount = sqlite3_column_count(pstmt); + NSArray *columns = [NSArray flex_forEachUpTo:columnCount map:^id(NSUInteger i) { + return @(sqlite3_column_name(pstmt, (int)i)); + }]; + + // Execute statement + while ((status = sqlite3_step(pstmt)) == SQLITE_ROW) { + // Grab rows if this is a selection query + int dataCount = sqlite3_data_count(pstmt); + if (dataCount > 0) { + [rows addObject:[NSArray flex_forEachUpTo:columnCount map:^id(NSUInteger i) { + return [self objectForColumnIndex:(int)i stmt:pstmt]; + }]]; + } + } + + if (status == SQLITE_DONE) { + if (rows.count) { + // We selected some rows + result = _lastResult = [FLEXSQLResult columns:columns rows:rows]; + } else { + // We executed a query like INSERT, UDPATE, or DELETE + int rowsAffected = sqlite3_changes(_db); + NSString *message = [NSString stringWithFormat:@"%d row(s) affected", rowsAffected]; + result = _lastResult = [FLEXSQLResult message:message]; + } + } else { + // An error occured executing the query + result = _lastResult = [self errorResult:@"Execution"]; + } + } else { + // An error occurred creating the prepared statement + result = _lastResult = [self errorResult:@"Prepared statement"]; + } + + sqlite3_finalize(pstmt); + return result; +} + + +#pragma mark - Private + +/// @return YES on success, NO if an error was encountered and stored in \c lastResult +- (BOOL)bindParameters:(NSDictionary *)args toStatement:(sqlite3_stmt *)pstmt { + for (NSString *param in args.allKeys) { + int status = SQLITE_OK, idx = sqlite3_bind_parameter_index(pstmt, param.UTF8String); + id value = args[param]; + + if (idx == 0) { + // No parameter matching that arg + @throw NSInternalInconsistencyException; + } + + // Null + if ([value isKindOfClass:[NSNull class]]) { + status = sqlite3_bind_null(pstmt, idx); + } + // String params + else if ([value isKindOfClass:[NSString class]]) { + const char *str = [value UTF8String]; + status = sqlite3_bind_text(pstmt, idx, str, (int)strlen(str), SQLITE_TRANSIENT); + } + // Data params + else if ([value isKindOfClass:[NSData class]]) { + const void *blob = [value bytes]; + status = sqlite3_bind_blob64(pstmt, idx, blob, [value length], SQLITE_TRANSIENT); + } + // Primitive params + else if ([value isKindOfClass:[NSNumber class]]) { + FLEXTypeEncoding type = [value objCType][0]; + switch (type) { + case FLEXTypeEncodingCBool: + case FLEXTypeEncodingChar: + case FLEXTypeEncodingUnsignedChar: + case FLEXTypeEncodingShort: + case FLEXTypeEncodingUnsignedShort: + case FLEXTypeEncodingInt: + case FLEXTypeEncodingUnsignedInt: + case FLEXTypeEncodingLong: + case FLEXTypeEncodingUnsignedLong: + case FLEXTypeEncodingLongLong: + case FLEXTypeEncodingUnsignedLongLong: + status = sqlite3_bind_int64(pstmt, idx, (sqlite3_int64)[value longValue]); + break; - int columnIdx = 0; - for (columnIdx = 0; columnIdx < columnCount; columnIdx++) { + case FLEXTypeEncodingFloat: + case FLEXTypeEncodingDouble: + status = sqlite3_bind_double(pstmt, idx, [value doubleValue]); + break; - NSString *columnName = [NSString stringWithUTF8String:sqlite3_column_name(pstmt, columnIdx)]; - id objectValue = [self objectForColumnIndex:columnIdx stmt:pstmt]; - [dict setObject:objectValue forKey:columnName]; - } - [resultArray addObject:dict]; + default: + @throw NSInternalInconsistencyException; + break; } } + // Unsupported type + else { + @throw NSInternalInconsistencyException; + } + + if (status != SQLITE_OK) { + return [self storeErrorForLastTask: + [NSString stringWithFormat:@"Binding param named '%@'", param] + ]; + } } - [self close]; - return resultArray; + + return YES; } +- (BOOL)storeErrorForLastTask:(NSString *)action { + _lastResult = [self errorResult:action]; + return NO; +} + +- (FLEXSQLResult *)errorResult:(NSString *)description { + const char *error = sqlite3_errmsg(_db); + NSString *message = error ? @(error) : [NSString + stringWithFormat:@"(%@: empty error", description + ]; + + return [FLEXSQLResult error:message]; +} - (id)objectForColumnIndex:(int)columnIdx stmt:(sqlite3_stmt*)stmt { int columnType = sqlite3_column_type(stmt, columnIdx); - id returnValue = nil; - - if (columnType == SQLITE_INTEGER) { - returnValue = [NSNumber numberWithLongLong:sqlite3_column_int64(stmt, columnIdx)]; - } - else if (columnType == SQLITE_FLOAT) { - returnValue = [NSNumber numberWithDouble:sqlite3_column_double(stmt, columnIdx)]; - } - else if (columnType == SQLITE_BLOB) { - returnValue = [self dataForColumnIndex:columnIdx stmt:stmt]; + switch (columnType) { + case SQLITE_INTEGER: + return @(sqlite3_column_int64(stmt, columnIdx)).stringValue; + case SQLITE_FLOAT: + return @(sqlite3_column_double(stmt, columnIdx)).stringValue; + case SQLITE_BLOB: + return [NSString stringWithFormat:@"Data (%@ bytes)", + @([self dataForColumnIndex:columnIdx stmt:stmt].length) + ]; + + default: + // Default to a string for everything else + return [self stringForColumnIndex:columnIdx stmt:stmt] ?: NSNull.null; } - else { - //default to a string for everything else - returnValue = [self stringForColumnIndex:columnIdx stmt:stmt]; - } - - if (returnValue == nil) { - returnValue = [NSNull null]; - } - - return returnValue; } - + - (NSString *)stringForColumnIndex:(int)columnIdx stmt:(sqlite3_stmt *)stmt { - - if (sqlite3_column_type(stmt, columnIdx) == SQLITE_NULL || (columnIdx < 0)) { + if (sqlite3_column_type(stmt, columnIdx) == SQLITE_NULL || columnIdx < 0) { return nil; } - const char *c = (const char *)sqlite3_column_text(stmt, columnIdx); - - if (!c) { - // null row. - return nil; - } - - return [NSString stringWithUTF8String:c]; + const char *text = (const char *)sqlite3_column_text(stmt, columnIdx); + return text ? @(text) : nil; } -- (NSData *)dataForColumnIndex:(int)columnIdx stmt:(sqlite3_stmt *)stmt{ - +- (NSData *)dataForColumnIndex:(int)columnIdx stmt:(sqlite3_stmt *)stmt { if (sqlite3_column_type(stmt, columnIdx) == SQLITE_NULL || (columnIdx < 0)) { return nil; } - const char *dataBuffer = sqlite3_column_blob(stmt, columnIdx); - int dataSize = sqlite3_column_bytes(stmt, columnIdx); + const void *blob = sqlite3_column_blob(stmt, columnIdx); + NSInteger size = (NSInteger)sqlite3_column_bytes(stmt, columnIdx); - if (dataBuffer == NULL) { - return nil; - } - - return [NSData dataWithBytes:(const void *)dataBuffer length:(NSUInteger)dataSize]; + return blob ? [NSData dataWithBytes:blob length:size] : nil; } - @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h index 05c2cf24..474a8702 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h @@ -14,11 +14,25 @@ typedef NS_ENUM(NSUInteger, FLEXTableColumnHeaderSortType) { FLEXTableColumnHeaderSortTypeDesc, }; +NS_INLINE FLEXTableColumnHeaderSortType FLEXNextTableColumnHeaderSortType( + FLEXTableColumnHeaderSortType current) { + switch (current) { + case FLEXTableColumnHeaderSortTypeAsc: + return FLEXTableColumnHeaderSortTypeDesc; + case FLEXTableColumnHeaderSortTypeNone: + case FLEXTableColumnHeaderSortTypeDesc: + return FLEXTableColumnHeaderSortTypeAsc; + } + + return FLEXTableColumnHeaderSortTypeNone; +} + @interface FLEXTableColumnHeader : UIView -@property (nonatomic) UILabel *label; +@property (nonatomic) NSInteger index; +@property (nonatomic, readonly) UILabel *titleLabel; -- (void)changeSortStatusWithType:(FLEXTableColumnHeaderSortType)type; +@property (nonatomic) FLEXTableColumnHeaderSortType sortType; @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m index d8b7d015..c26816e4 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m @@ -7,39 +7,41 @@ // #import "FLEXTableColumnHeader.h" +#import "FLEXColor.h" +#import "UIFont+FLEX.h" +#import "FLEXUtility.h" -@implementation FLEXTableColumnHeader -{ - UILabel *_arrowLabel; -} +@interface FLEXTableColumnHeader () +@property (nonatomic, readonly) UILabel *arrowLabel; +@property (nonatomic, readonly) UIView *lineView; +@end +@implementation FLEXTableColumnHeader -- (instancetype)initWithFrame:(CGRect)frame -{ +- (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { - self.backgroundColor = UIColor.whiteColor; - - UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, frame.size.width - 25, frame.size.height)]; - label.font = [UIFont systemFontOfSize:13.0]; - [self addSubview:label]; - self.label = label; + self.backgroundColor = FLEXColor.secondaryBackgroundColor; + _titleLabel = [UILabel new]; + _titleLabel.font = UIFont.flex_defaultTableCellFont; + [self addSubview:_titleLabel]; - _arrowLabel = [[UILabel alloc] initWithFrame:CGRectMake(frame.size.width - 20, 0, 20, frame.size.height)]; - _arrowLabel.font = [UIFont systemFontOfSize:13.0]; + _arrowLabel = [UILabel new]; + _arrowLabel.font = UIFont.flex_defaultTableCellFont; [self addSubview:_arrowLabel]; - UIView *line = [[UIView alloc] initWithFrame:CGRectMake(frame.size.width - 1, 2, 1, frame.size.height - 4)]; - line.backgroundColor = [UIColor colorWithWhite:0.803 alpha:0.850]; - [self addSubview:line]; + _lineView = [UIView new]; + _lineView.backgroundColor = FLEXColor.hairlineColor; + [self addSubview:_lineView]; } return self; } -- (void)changeSortStatusWithType:(FLEXTableColumnHeaderSortType)type -{ +- (void)setSortType:(FLEXTableColumnHeaderSortType)type { + _sortType = type; + switch (type) { case FLEXTableColumnHeaderSortTypeNone: _arrowLabel.text = @""; @@ -53,8 +55,14 @@ - (void)changeSortStatusWithType:(FLEXTableColumnHeaderSortType)type } } - - - +- (void)layoutSubviews { + [super layoutSubviews]; + + CGSize size = self.frame.size; + + self.titleLabel.frame = CGRectMake(5, 0, size.width - 25, size.height); + self.arrowLabel.frame = CGRectMake(size.width - 20, 0, 20, size.height); + self.lineView.frame = CGRectMake(size.width - 1, 2, FLEXPointsToPixels(1), size.height - 4); +} @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h deleted file mode 100644 index 123f3287..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// FLEXTableContentCell.h -// FLEX -// -// Created by Peng Tao on 15/11/24. -// Copyright © 2015年 f. All rights reserved. -// - -#import - -@class FLEXTableContentCell; -@protocol FLEXTableContentCellDelegate - -@optional -- (void)tableContentCell:(FLEXTableContentCell *)tableView labelDidTapWithText:(NSString *)text; - -@end - -@interface FLEXTableContentCell : UITableViewCell - -@property (nonatomic) NSArray *labels; - -@property (nonatomic, weak) id delegate; - -+ (instancetype)cellWithTableView:(UITableView *)tableView columnNumber:(NSInteger)number; - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m deleted file mode 100644 index fef9b89a..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// FLEXTableContentCell.m -// FLEX -// -// Created by Peng Tao on 15/11/24. -// Copyright © 2015年 f. All rights reserved. -// - -#import "FLEXTableContentCell.h" -#import "FLEXMultiColumnTableView.h" - -@interface FLEXTableContentCell () - -@end - -@implementation FLEXTableContentCell - -+ (instancetype)cellWithTableView:(UITableView *)tableView columnNumber:(NSInteger)number; -{ - static NSString *identifier = @"FLEXTableContentCell"; - FLEXTableContentCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; - if (!cell) { - cell = [[FLEXTableContentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - NSMutableArray *labels = [NSMutableArray array]; - for (int i = 0; i < number ; i++) { - UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; - label.backgroundColor = UIColor.whiteColor; - label.font = [UIFont systemFontOfSize:13.0]; - label.textAlignment = NSTextAlignmentLeft; - label.backgroundColor = UIColor.greenColor; - [labels addObject:label]; - - UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:cell - action:@selector(labelDidTap:)]; - [label addGestureRecognizer:gesture]; - label.userInteractionEnabled = YES; - - [cell.contentView addSubview:label]; - cell.contentView.backgroundColor = UIColor.whiteColor; - } - cell.labels = labels; - } - return cell; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - CGFloat labelWidth = self.contentView.frame.size.width / self.labels.count; - CGFloat labelHeight = self.contentView.frame.size.height; - for (int i = 0; i < self.labels.count; i++) { - UILabel *label = self.labels[i]; - label.frame = CGRectMake(labelWidth * i + 5, 0, (labelWidth - 10), labelHeight); - } -} - - -- (void)labelDidTap:(UIGestureRecognizer *)gesture -{ - UILabel *label = (UILabel *)gesture.view; - if ([self.delegate respondsToSelector:@selector(tableContentCell:labelDidTapWithText:)]) { - [self.delegate tableContentCell:self labelDidTapWithText:label.text]; - } -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h index 368b0108..077e3fc9 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h @@ -10,7 +10,7 @@ @interface FLEXTableContentViewController : UIViewController -@property (nonatomic) NSArray *columnsArray; -@property (nonatomic) NSArray *> *contentsArray; ++ (instancetype)columns:(NSArray *)columnNames + rows:(NSArray *> *)rowData; @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m index 2c954f91..2bf55671 100755 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m @@ -9,153 +9,142 @@ #import "FLEXTableContentViewController.h" #import "FLEXMultiColumnTableView.h" #import "FLEXWebViewController.h" +#import "FLEXUtility.h" - -@interface FLEXTableContentViewController () +@interface FLEXTableContentViewController () < + FLEXMultiColumnTableViewDataSource, FLEXMultiColumnTableViewDelegate +> +@property (nonatomic, readonly) NSArray *columns; +@property (nonatomic, copy) NSArray *rows; @property (nonatomic) FLEXMultiColumnTableView *multiColumnView; - @end @implementation FLEXTableContentViewController -- (void)viewDidLoad { - [super viewDidLoad]; - self.edgesForExtendedLayout = UIRectEdgeNone; ++ (instancetype)columns:(NSArray *)columnNames + rows:(NSArray *> *)rowData { + FLEXTableContentViewController *controller = [self new]; + controller->_columns = columnNames; + controller->_rows = rowData; + return controller; +} + +- (void)loadView { + [super loadView]; + [self.view addSubview:self.multiColumnView]; } -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; +- (void)viewDidLoad { + [super viewDidLoad]; + + self.edgesForExtendedLayout = UIRectEdgeNone; [self.multiColumnView reloadData]; } -#pragma mark - - -#pragma mark init SubView - (FLEXMultiColumnTableView *)multiColumnView { if (!_multiColumnView) { - _multiColumnView = [[FLEXMultiColumnTableView alloc] initWithFrame: - CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; + _multiColumnView = [[FLEXMultiColumnTableView alloc] + initWithFrame:FLEXRectSetSize(CGRectZero, self.view.frame.size) + ]; - _multiColumnView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin; - _multiColumnView.backgroundColor = UIColor.whiteColor; - _multiColumnView.dataSource = self; - _multiColumnView.delegate = self; + _multiColumnView.dataSource = self; + _multiColumnView.delegate = self; } + return _multiColumnView; } + #pragma mark MultiColumnTableView DataSource -- (NSInteger)numberOfColumnsInTableView:(FLEXMultiColumnTableView *)tableView -{ - return self.columnsArray.count; -} -- (NSInteger)numberOfRowsInTableView:(FLEXMultiColumnTableView *)tableView -{ - return self.contentsArray.count; +- (NSInteger)numberOfColumnsInTableView:(FLEXMultiColumnTableView *)tableView { + return self.columns.count; } - -- (NSString *)columnNameInColumn:(NSInteger)column -{ - return self.columnsArray[column]; +- (NSInteger)numberOfRowsInTableView:(FLEXMultiColumnTableView *)tableView { + return self.rows.count; } - -- (NSString *)rowNameInRow:(NSInteger)row -{ - return [NSString stringWithFormat:@"%ld",(long)row]; +- (NSString *)columnTitle:(NSInteger)column { + return self.columns[column]; } -- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row -{ - if (self.contentsArray.count > row) { - NSDictionary *dic = self.contentsArray[row]; - if (self.contentsArray.count > column) { - return [NSString stringWithFormat:@"%@",[dic objectForKey:self.columnsArray[column]]]; - } - } - return @""; +- (NSString *)rowTitle:(NSInteger)row { + return @(row).stringValue; } -- (NSArray *)contentAtRow:(NSInteger)row -{ - NSMutableArray *result = [NSMutableArray array]; - if (self.contentsArray.count > row) { - NSDictionary *dic = self.contentsArray[row]; - for (int i = 0; i < self.columnsArray.count; i ++) { - [result addObject:dic[self.columnsArray[i]]]; - } - return result; - } - return nil; +- (NSArray *)contentForRow:(NSInteger)row { + return self.rows[row]; } - (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView - heightForContentCellInRow:(NSInteger)row -{ + heightForContentCellInRow:(NSInteger)row { return 40; } - (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView - widthForContentCellInColumn:(NSInteger)column -{ + widthForContentCellInColumn:(NSInteger)column { return 120; } -- (CGFloat)heightForTopHeaderInTableView:(FLEXMultiColumnTableView *)tableView -{ +- (CGFloat)heightForTopHeaderInTableView:(FLEXMultiColumnTableView *)tableView { return 40; } -- (CGFloat)widthForLeftHeaderInTableView:(FLEXMultiColumnTableView *)tableView -{ - NSString *str = [NSString stringWithFormat:@"%lu",(unsigned long)self.contentsArray.count]; - NSDictionary *attrs = @{@"NSFontAttributeName":[UIFont systemFontOfSize:17.0]}; - CGSize size = [str boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 14) - options:NSStringDrawingUsesLineFragmentOrigin - attributes:attrs context:nil].size; +- (CGFloat)widthForLeftHeaderInTableView:(FLEXMultiColumnTableView *)tableView { + NSString *str = [NSString stringWithFormat:@"%lu",(unsigned long)self.rows.count]; + NSDictionary *attrs = @{ NSFontAttributeName : [UIFont systemFontOfSize:17.0] }; + CGSize size = [str boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 14) + options:NSStringDrawingUsesLineFragmentOrigin + attributes:attrs context:nil + ].size; + return size.width + 20; } -#pragma mark - -#pragma mark MultiColumnTableView Delegate +#pragma mark MultiColumnTableView Delegate -- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapLabelWithText:(NSString *)text -{ - FLEXWebViewController * detailViewController = [[FLEXWebViewController alloc] initWithText:text]; - [self.navigationController pushViewController:detailViewController animated:YES]; +- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didSelectRow:(NSInteger)row { + NSArray *fields = [self.rows[row] flex_mapped:^id(NSString *field, NSUInteger idx) { + return [NSString stringWithFormat:@"%@:\n%@", self.columns[idx], field]; + }]; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title([@"Row " stringByAppendingString:@(row).stringValue]); + make.message([fields componentsJoinedByString:@"\n\n"]); + make.button(@"Dismiss").cancelStyle(); + } showFrom:self]; } -- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapHeaderWithText:(NSString *)text sortType:(FLEXTableColumnHeaderSortType)sortType -{ +- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView + didSelectHeaderForColumn:(NSInteger)column + sortType:(FLEXTableColumnHeaderSortType)sortType { - NSArray *> *sortContentData = [self.contentsArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary * obj2) { - - if ([obj1 objectForKey:text] == [NSNull null]) { - return NSOrderedAscending; - } - if ([obj2 objectForKey:text] == [NSNull null]) { - return NSOrderedDescending; - } - - if (![[obj1 objectForKey:text] respondsToSelector:@selector(compare:)] && ![[obj2 objectForKey:text] respondsToSelector:@selector(compare:)]) { + NSArray *sortContentData = [self.rows + sortedArrayUsingComparator:^NSComparisonResult(NSArray *obj1, NSArray *obj2) { + id a = obj1[column], b = obj2[column]; + if (a == NSNull.null) { + return NSOrderedAscending; + } + if (b == NSNull.null) { + return NSOrderedDescending; + } + + if ([a respondsToSelector:@selector(compare:)] && [b respondsToSelector:@selector(compare:)]) { + return [a compare:b]; + } + return NSOrderedSame; } - - NSComparisonResult result = [[obj1 objectForKey:text] compare:[obj2 objectForKey:text]]; - - return result; - }]; + ]; + if (sortType == FLEXTableColumnHeaderSortTypeDesc) { - NSEnumerator *contentReverseEnumerator = sortContentData.reverseObjectEnumerator; - sortContentData = [NSArray arrayWithArray:contentReverseEnumerator.allObjects]; + sortContentData = sortContentData.reverseObjectEnumerator.allObjects.copy; } - self.contentsArray = sortContentData; + self.rows = sortContentData; [self.multiColumnView reloadData]; } @@ -163,21 +152,19 @@ - (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapHeaderW #pragma mark About Transition - (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection - withTransitionCoordinator:(id )coordinator -{ - [super willTransitionToTraitCollection:newCollection - withTransitionCoordinator:coordinator]; + withTransitionCoordinator:(id )coordinator { + [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; + [coordinator animateAlongsideTransition:^(id context) { if (newCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) { - - self->_multiColumnView.frame = CGRectMake(0, 32, self.view.frame.size.width, self.view.frame.size.height - 32); + self.multiColumnView.frame = CGRectMake(0, 32, self.view.frame.size.width, self.view.frame.size.height - 32); } else { - self->_multiColumnView.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64); + self.multiColumnView.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64); } + [self.view setNeedsLayout]; } completion:nil]; } - @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m index 33120b55..b99404e1 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m @@ -10,25 +10,23 @@ @implementation FLEXTableLeftCell -+ (instancetype)cellWithTableView:(UITableView *)tableView -{ ++ (instancetype)cellWithTableView:(UITableView *)tableView { static NSString *identifier = @"FLEXTableLeftCell"; FLEXTableLeftCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[FLEXTableLeftCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + UILabel *textLabel = [UILabel new]; textLabel.textAlignment = NSTextAlignmentCenter; textLabel.font = [UIFont systemFontOfSize:13.0]; - textLabel.backgroundColor = UIColor.clearColor; [cell.contentView addSubview:textLabel]; cell.titlelabel = textLabel; } + return cell; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; self.titlelabel.frame = self.contentView.frame; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h index 0a633164..b8662028 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h @@ -6,9 +6,9 @@ // Copyright © 2015年 Peng Tao. All rights reserved. // -#import +#import "FLEXFilteringTableViewController.h" -@interface FLEXTableListViewController : UITableViewController +@interface FLEXTableListViewController : FLEXFilteringTableViewController + (BOOL)supportsExtension:(NSString *)extension; - (instancetype)initWithPath:(NSString *)path; diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m index bef7eb27..11b17db2 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m @@ -7,20 +7,19 @@ // #import "FLEXTableListViewController.h" - #import "FLEXDatabaseManager.h" #import "FLEXSQLiteDatabaseManager.h" #import "FLEXRealmDatabaseManager.h" - #import "FLEXTableContentViewController.h" +#import "FLEXMutableListSection.h" +#import "NSArray+FLEX.h" +#import "FLEXAlert.h" @interface FLEXTableListViewController () -{ - id _dbm; - NSString *_databasePath; -} +@property (nonatomic, readonly) id dbm; +@property (nonatomic, readonly) NSString *path; -@property (nonatomic) NSArray *tables; +@property (nonatomic, readonly) FLEXMutableListSection *tables; + (NSArray *)supportedSQLiteExtensions; + (NSArray *)supportedRealmExtensions; @@ -29,90 +28,116 @@ @interface FLEXTableListViewController () @implementation FLEXTableListViewController -- (instancetype)initWithPath:(NSString *)path -{ +- (instancetype)initWithPath:(NSString *)path { self = [super initWithStyle:UITableViewStyleGrouped]; if (self) { - _databasePath = [path copy]; - _dbm = [self databaseManagerForFileAtPath:_databasePath]; - [_dbm open]; - [self getAllTables]; + _path = path.copy; + _dbm = [self databaseManagerForFileAtPath:path]; } + return self; } -- (id)databaseManagerForFileAtPath:(NSString *)path -{ - NSString *pathExtension = path.pathExtension.lowercaseString; - - NSArray *sqliteExtensions = [FLEXTableListViewController supportedSQLiteExtensions]; - if ([sqliteExtensions indexOfObject:pathExtension] != NSNotFound) { - return [[FLEXSQLiteDatabaseManager alloc] initWithPath:path]; - } +- (void)viewDidLoad { + [super viewDidLoad]; + + self.showsSearchBar = YES; - NSArray *realmExtensions = [FLEXTableListViewController supportedRealmExtensions]; - if (realmExtensions != nil && [realmExtensions indexOfObject:pathExtension] != NSNotFound) { - return [[FLEXRealmDatabaseManager alloc] initWithPath:path]; - } + // Compose query button // + + UIBarButtonItem *composeQuery = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemCompose + target:self + action:@selector(queryButtonPressed) + ]; + // Cannot run custom queries on realm databases + composeQuery.enabled = [self.dbm + respondsToSelector:@selector(executeStatement:) + ]; - return nil; + [self addToolbarItems:@[composeQuery]]; } -- (void)getAllTables -{ - NSArray *> *resultArray = [_dbm queryAllTables]; - NSMutableArray *array = [NSMutableArray array]; - for (NSDictionary *dict in resultArray) { - NSString *columnName = (NSString *)dict[@"name"] ?: @""; - [array addObject:columnName]; - } - self.tables = array; +- (NSArray *)makeSections { + _tables = [FLEXMutableListSection list:[self.dbm queryAllTables] + cellConfiguration:^(__kindof UITableViewCell *cell, NSString *tableName, NSInteger row) { + cell.textLabel.text = tableName; + } filterMatcher:^BOOL(NSString *filterText, NSString *tableName) { + return [tableName localizedCaseInsensitiveContainsString:filterText]; + } + ]; + + self.tables.selectionHandler = ^(FLEXTableListViewController *host, NSString *tableName) { + NSArray *rows = [host.dbm queryAllDataInTable:tableName]; + NSArray *columns = [host.dbm queryAllColumnsOfTable:tableName]; + + UIViewController *resultsScreen = [FLEXTableContentViewController columns:columns rows:rows]; + resultsScreen.title = tableName; + [host.navigationController pushViewController:resultsScreen animated:YES]; + }; + + return @[self.tables]; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.tables.count; +- (void)reloadData { + self.tables.customTitle = [NSString + stringWithFormat:@"Tables (%@)", @(self.tables.filteredList.count) + ]; + + [super reloadData]; } - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FLEXTableListViewControllerCell"]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:@"FLEXTableListViewControllerCell"]; - } - cell.textLabel.text = self.tables[indexPath.row]; - return cell; + +- (void)queryButtonPressed { + FLEXSQLiteDatabaseManager *database = self.dbm; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Execute an SQL query"); + make.textField(nil); + make.button(@"Run").handler(^(NSArray *strings) { + FLEXSQLResult *result = [database executeStatement:strings[0]]; + + if (result.message) { + [FLEXAlert showAlert:@"Message" message:result.message from:self]; + } else { + UIViewController *resultsScreen = [FLEXTableContentViewController + columns:result.columns rows:result.rows + ]; + + [self.navigationController pushViewController:resultsScreen animated:YES]; + } + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self]; } - - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXTableContentViewController *contentViewController = [FLEXTableContentViewController new]; - contentViewController.contentsArray = [_dbm queryAllDataWithTableName:self.tables[indexPath.row]]; - contentViewController.columnsArray = [_dbm queryAllColumnsWithTableName:self.tables[indexPath.row]]; +- (id)databaseManagerForFileAtPath:(NSString *)path { + NSString *pathExtension = path.pathExtension.lowercaseString; - contentViewController.title = self.tables[indexPath.row]; - [self.navigationController pushViewController:contentViewController animated:YES]; + NSArray *sqliteExtensions = FLEXTableListViewController.supportedSQLiteExtensions; + if ([sqliteExtensions indexOfObject:pathExtension] != NSNotFound) { + return [FLEXSQLiteDatabaseManager managerForDatabase:path]; + } + + NSArray *realmExtensions = FLEXTableListViewController.supportedRealmExtensions; + if (realmExtensions != nil && [realmExtensions indexOfObject:pathExtension] != NSNotFound) { + return [FLEXRealmDatabaseManager managerForDatabase:path]; + } + + return nil; } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - return [NSString stringWithFormat:@"%lu tables", (unsigned long)self.tables.count]; -} +#pragma mark - FLEXTableListViewController -+ (BOOL)supportsExtension:(NSString *)extension -{ ++ (BOOL)supportsExtension:(NSString *)extension { extension = extension.lowercaseString; - NSArray *sqliteExtensions = [FLEXTableListViewController supportedSQLiteExtensions]; + NSArray *sqliteExtensions = FLEXTableListViewController.supportedSQLiteExtensions; if (sqliteExtensions.count > 0 && [sqliteExtensions indexOfObject:extension] != NSNotFound) { return YES; } - NSArray *realmExtensions = [FLEXTableListViewController supportedRealmExtensions]; + NSArray *realmExtensions = FLEXTableListViewController.supportedRealmExtensions; if (realmExtensions.count > 0 && [realmExtensions indexOfObject:extension] != NSNotFound) { return YES; } @@ -120,13 +145,11 @@ + (BOOL)supportsExtension:(NSString *)extension return NO; } -+ (NSArray *)supportedSQLiteExtensions -{ ++ (NSArray *)supportedSQLiteExtensions { return @[@"db", @"sqlite", @"sqlite3"]; } -+ (NSArray *)supportedRealmExtensions -{ ++ (NSArray *)supportedRealmExtensions { if (NSClassFromString(@"RLMRealm") == nil) { return nil; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m index 796d09d7..baacf62b 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m @@ -7,13 +7,13 @@ // #import "FLEXAddressExplorerCoordinator.h" -#import "FLEXGlobalsTableViewController.h" +#import "FLEXGlobalsViewController.h" #import "FLEXObjectExplorerFactory.h" #import "FLEXObjectExplorerViewController.h" #import "FLEXRuntimeUtility.h" #import "FLEXUtility.h" -@interface FLEXGlobalsTableViewController (FLEXAddressExploration) +@interface UITableViewController (FLEXAddressExploration) - (void)deselectSelectedRow; - (void)tryExploreAddress:(NSString *)addressString safely:(BOOL)safely; @end @@ -23,11 +23,11 @@ @implementation FLEXAddressExplorerCoordinator #pragma mark - FLEXGlobalsEntry + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return @"🔎 Address Explorer"; + return @"🔎 Address Explorer"; } -+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row { - return ^(FLEXGlobalsTableViewController *host) { ++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row { + return ^(UITableViewController *host) { NSString *title = @"Explore Object at Address"; NSString *message = @"Paste a hexadecimal address below, starting with '0x'. " @@ -59,7 +59,7 @@ + (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow @end -@implementation FLEXGlobalsTableViewController (FLEXAddressExploration) +@implementation UITableViewController (FLEXAddressExploration) - (void)deselectSelectedRow { NSIndexPath *selected = self.tableView.indexPathForSelectedRow; diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.h deleted file mode 100644 index 8d8ce986..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// FLEXClassesTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXGlobalsEntry.h" - -@interface FLEXClassesTableViewController : FLEXTableViewController - -@property (nonatomic, copy) NSString *binaryImageName; - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.m deleted file mode 100644 index 7ed7c9e4..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXClassesTableViewController.m +++ /dev/null @@ -1,138 +0,0 @@ -// -// FLEXClassesTableViewController.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXClassesTableViewController.h" -#import "FLEXObjectExplorerViewController.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXUtility.h" -#import - -@interface FLEXClassesTableViewController () - -@property (nonatomic) NSArray *classNames; -@property (nonatomic) NSArray *filteredClassNames; - -@end - -@implementation FLEXClassesTableViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showsSearchBar = YES; -} - -- (void)setBinaryImageName:(NSString *)binaryImageName -{ - if (![_binaryImageName isEqual:binaryImageName]) { - _binaryImageName = binaryImageName; - [self loadClassNames]; - [self updateTitle]; - } -} - -- (void)setClassNames:(NSArray *)classNames -{ - _classNames = classNames; - self.filteredClassNames = classNames; -} - -- (void)loadClassNames -{ - unsigned int classNamesCount = 0; - const char **classNames = objc_copyClassNamesForImage(self.binaryImageName.UTF8String, &classNamesCount); - if (classNames) { - NSMutableArray *classNameStrings = [NSMutableArray array]; - for (unsigned int i = 0; i < classNamesCount; i++) { - const char *className = classNames[i]; - NSString *classNameString = [NSString stringWithUTF8String:className]; - [classNameStrings addObject:classNameString]; - } - - self.classNames = [classNameStrings sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; - - free(classNames); - } -} - -- (void)updateTitle -{ - NSString *shortImageName = self.binaryImageName.lastPathComponent; - self.title = [NSString stringWithFormat:@"%@ Classes (%lu)", shortImageName, (unsigned long)self.filteredClassNames.count]; -} - - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return [NSString stringWithFormat:@"📕 %@ Classes", [FLEXUtility applicationName]]; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - FLEXClassesTableViewController *classesViewController = [self new]; - classesViewController.binaryImageName = [FLEXUtility applicationImageName]; - - return classesViewController; -} - - -#pragma mark - Search bar - -- (void)updateSearchResults:(NSString *)searchText -{ - if (searchText.length > 0) { - NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText]; - self.filteredClassNames = [self.classNames filteredArrayUsingPredicate:searchPredicate]; - } else { - self.filteredClassNames = self.classNames; - } - [self updateTitle]; - [self.tableView reloadData]; -} - - -#pragma mark - Table View Data Source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.filteredClassNames.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - } - - cell.textLabel.text = self.filteredClassNames[indexPath.row]; - - return cell; -} - - -#pragma mark - Table View Delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSString *className = self.filteredClassNames[indexPath.row]; - Class selectedClass = objc_getClass(className.UTF8String); - FLEXObjectExplorerViewController *objectExplorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:selectedClass]; - [self.navigationController pushViewController:objectExplorer animated:YES]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h deleted file mode 100644 index 0e91234b..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXCookiesTableViewController.h -// FLEX -// -// Created by Rich Robinson on 19/10/2015. -// Copyright © 2015 Flipboard. All rights reserved. -// - -#import "FLEXGlobalsEntry.h" - -@interface FLEXCookiesTableViewController : UITableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m deleted file mode 100644 index 0c66bbc3..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// FLEXCookiesTableViewController.m -// FLEX -// -// Created by Rich Robinson on 19/10/2015. -// Copyright © 2015 Flipboard. All rights reserved. -// - -#import "FLEXCookiesTableViewController.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXUtility.h" - -@interface FLEXCookiesTableViewController () - -@property (nonatomic) NSArray *cookies; - -@end - -@implementation FLEXCookiesTableViewController - -- (id)initWithStyle:(UITableViewStyle)style { - self = [super initWithStyle:style]; - - if (self) { - self.title = @"Cookies"; - - NSSortDescriptor *nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; - _cookies = [NSHTTPCookieStorage.sharedHTTPCookieStorage.cookies sortedArrayUsingDescriptors:@[nameSortDescriptor]]; - } - - return self; -} - -- (NSHTTPCookie *)cookieForRowAtIndexPath:(NSIndexPath *)indexPath { - return self.cookies[indexPath.row]; -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.cookies.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - cell.detailTextLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - cell.detailTextLabel.textColor = UIColor.grayColor; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - } - - NSHTTPCookie *cookie = [self cookieForRowAtIndexPath:indexPath]; - cell.textLabel.text = [NSString stringWithFormat:@"%@ (%@)", cookie.name, cookie.value]; - cell.detailTextLabel.text = cookie.domain; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - NSHTTPCookie *cookie = [self cookieForRowAtIndexPath:indexPath]; - UIViewController *cookieViewController = (UIViewController *)[FLEXObjectExplorerFactory explorerViewControllerForObject:cookie]; - - [self.navigationController pushViewController:cookieViewController animated:YES]; -} - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return @"🍪 Cookies"; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - return [self new]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.h new file mode 100644 index 00000000..f270cf23 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.h @@ -0,0 +1,14 @@ +// +// FLEXCookiesViewController.h +// FLEX +// +// Created by Rich Robinson on 19/10/2015. +// Copyright © 2015 Flipboard. All rights reserved. +// + +#import "FLEXGlobalsEntry.h" +#import "FLEXFilteringTableViewController.h" + +@interface FLEXCookiesViewController : FLEXFilteringTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.m new file mode 100644 index 00000000..d2e82984 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXCookiesViewController.m @@ -0,0 +1,76 @@ +// +// FLEXCookiesViewController.m +// FLEX +// +// Created by Rich Robinson on 19/10/2015. +// Copyright © 2015 Flipboard. All rights reserved. +// + +#import "FLEXCookiesViewController.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXMutableListSection.h" +#import "FLEXUtility.h" + +@interface FLEXCookiesViewController () +@property (nonatomic, readonly) FLEXMutableListSection *cookies; +@property (nonatomic) NSString *headerTitle; +@end + +@implementation FLEXCookiesViewController + +#pragma mark - Overrides + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"Cookies"; +} + +- (NSArray *)makeSections { + NSSortDescriptor *nameSortDescriptor = [[NSSortDescriptor alloc] + initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:) + ]; + NSArray *cookies = [NSHTTPCookieStorage.sharedHTTPCookieStorage.cookies + sortedArrayUsingDescriptors:@[nameSortDescriptor] + ]; + + _cookies = [FLEXMutableListSection list:cookies + cellConfiguration:^(UITableViewCell *cell, NSHTTPCookie *cookie, NSInteger row) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.text = [cookie.name stringByAppendingFormat:@" (%@)", cookie.value]; + cell.detailTextLabel.text = [cookie.domain stringByAppendingFormat:@" — %@", cookie.path]; + } filterMatcher:^BOOL(NSString *filterText, NSHTTPCookie *cookie) { + return [cookie.name localizedCaseInsensitiveContainsString:filterText] || + [cookie.value localizedCaseInsensitiveContainsString:filterText] || + [cookie.domain localizedCaseInsensitiveContainsString:filterText] || + [cookie.path localizedCaseInsensitiveContainsString:filterText]; + } + ]; + + self.cookies.selectionHandler = ^(UIViewController *host, NSHTTPCookie *cookie) { + [host.navigationController pushViewController:[ + FLEXObjectExplorerFactory explorerViewControllerForObject:cookie + ] animated:YES]; + }; + + return @[self.cookies]; +} + +- (void)reloadData { + self.headerTitle = [NSString stringWithFormat: + @"%@ cookies", @(self.cookies.filteredList.count) + ]; + [super reloadData]; +} + +#pragma mark - FLEXGlobalsEntry + ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { + return @"🍪 Cookies"; +} + ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { + return [self new]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h deleted file mode 100644 index b8e6d8f4..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// FLEXInstancesTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import - -@interface FLEXInstancesTableViewController : UITableViewController - -+ (instancetype)instancesTableViewControllerForClassName:(NSString *)className; -+ (instancetype)instancesTableViewControllerForInstancesReferencingObject:(id)object; - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h deleted file mode 100644 index bdd5ec4d..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FLEXLibrariesTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2014-05-02. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXGlobalsEntry.h" - -@interface FLEXLibrariesTableViewController : FLEXTableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m deleted file mode 100644 index 22810612..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m +++ /dev/null @@ -1,181 +0,0 @@ -// -// FLEXLibrariesTableViewController.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-02. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXLibrariesTableViewController.h" -#import "FLEXUtility.h" -#import "FLEXClassesTableViewController.h" -#import "FLEXClassExplorerViewController.h" -#import - -@interface FLEXLibrariesTableViewController () - -@property (nonatomic) NSArray *imageNames; -@property (nonatomic) NSArray *filteredImageNames; - -@property (nonatomic) Class foundClass; - -@end - -@implementation FLEXLibrariesTableViewController - -- (id)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:style]; - if (self) { - [self loadImageNames]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showsSearchBar = YES; -} - - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return @"📚 System Libraries"; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - FLEXLibrariesTableViewController *librariesViewController = [self new]; - librariesViewController.title = [self globalsEntryTitle:row]; - - return librariesViewController; -} - - -#pragma mark - Binary Images - -- (void)loadImageNames -{ - unsigned int imageNamesCount = 0; - const char **imageNames = objc_copyImageNames(&imageNamesCount); - if (imageNames) { - NSMutableArray *imageNameStrings = [NSMutableArray array]; - NSString *appImageName = [FLEXUtility applicationImageName]; - for (unsigned int i = 0; i < imageNamesCount; i++) { - const char *imageName = imageNames[i]; - NSString *imageNameString = [NSString stringWithUTF8String:imageName]; - // Skip the app's image. We're just showing system libraries and frameworks. - if (![imageNameString isEqual:appImageName]) { - [imageNameStrings addObject:imageNameString]; - } - } - - // Sort alphabetically - self.imageNames = [imageNameStrings sortedArrayWithOptions:0 usingComparator:^NSComparisonResult(NSString *name1, NSString *name2) { - NSString *shortName1 = [self shortNameForImageName:name1]; - NSString *shortName2 = [self shortNameForImageName:name2]; - return [shortName1 caseInsensitiveCompare:shortName2]; - }]; - - free(imageNames); - } -} - -- (NSString *)shortNameForImageName:(NSString *)imageName -{ - NSArray *components = [imageName componentsSeparatedByString:@"/"]; - if (components.count >= 2) { - return [NSString stringWithFormat:@"%@/%@", components[components.count - 2], components[components.count - 1]]; - } - return imageName.lastPathComponent; -} - -- (void)setImageNames:(NSArray *)imageNames -{ - if (![_imageNames isEqual:imageNames]) { - _imageNames = imageNames; - self.filteredImageNames = imageNames; - } -} - - -#pragma mark - Filtering - -- (void)updateSearchResults:(NSString *)searchText -{ - if (searchText.length) { - NSPredicate *searchPredicate = [NSPredicate predicateWithBlock:^BOOL(NSString *evaluatedObject, NSDictionary *bindings) { - BOOL matches = NO; - NSString *shortName = [self shortNameForImageName:evaluatedObject]; - if ([shortName rangeOfString:searchText options:NSCaseInsensitiveSearch].length > 0) { - matches = YES; - } - return matches; - }]; - self.filteredImageNames = [self.imageNames filteredArrayUsingPredicate:searchPredicate]; - } else { - self.filteredImageNames = self.imageNames; - } - - self.foundClass = NSClassFromString(searchText); - [self.tableView reloadData]; -} - - -#pragma mark - Table View Data Source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.filteredImageNames.count + (self.foundClass ? 1 : 0); -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *cellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - } - - NSString *executablePath; - if (self.foundClass) { - if (indexPath.row == 0) { - cell.textLabel.text = [NSString stringWithFormat:@"Class \"%@\"", self.searchText]; - return cell; - } else { - executablePath = self.filteredImageNames[indexPath.row-1]; - } - } else { - executablePath = self.filteredImageNames[indexPath.row]; - } - - cell.textLabel.text = [self shortNameForImageName:executablePath]; - return cell; -} - - -#pragma mark - Table View Delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (indexPath.row == 0 && self.foundClass) { - FLEXClassExplorerViewController *objectExplorer = [FLEXClassExplorerViewController new]; - objectExplorer.object = self.foundClass; - [self.navigationController pushViewController:objectExplorer animated:YES]; - } else { - FLEXClassesTableViewController *classesViewController = [FLEXClassesTableViewController new]; - classesViewController.binaryImageName = self.filteredImageNames[self.foundClass ? indexPath.row-1 : indexPath.row]; - [self.navigationController pushViewController:classesViewController animated:YES]; - } -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.h new file mode 100644 index 00000000..aa8f05af --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.h @@ -0,0 +1,14 @@ +// +// FLEXLiveObjectsController.h +// Flipboard +// +// Created by Ryan Olson on 5/28/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" +#import "FLEXGlobalsEntry.h" + +@interface FLEXLiveObjectsController : FLEXTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.m similarity index 72% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.m index 5224ef63..d8b3f500 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsController.m @@ -1,37 +1,38 @@ // -// FLEXLiveObjectsTableViewController.m +// FLEXLiveObjectsController.m // Flipboard // // Created by Ryan Olson on 5/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import "FLEXLiveObjectsTableViewController.h" +#import "FLEXLiveObjectsController.h" #import "FLEXHeapEnumerator.h" -#import "FLEXInstancesTableViewController.h" +#import "FLEXObjectListViewController.h" #import "FLEXUtility.h" #import "FLEXScopeCarousel.h" +#import "FLEXTableView.h" #import static const NSInteger kFLEXLiveObjectsSortAlphabeticallyIndex = 0; static const NSInteger kFLEXLiveObjectsSortByCountIndex = 1; static const NSInteger kFLEXLiveObjectsSortBySizeIndex = 2; -@interface FLEXLiveObjectsTableViewController () +@interface FLEXLiveObjectsController () @property (nonatomic) NSDictionary *instanceCountsForClassNames; @property (nonatomic) NSDictionary *instanceSizesForClassNames; @property (nonatomic, readonly) NSArray *allClassNames; @property (nonatomic) NSArray *filteredClassNames; +@property (nonatomic) NSString *headerTitle; @end -@implementation FLEXLiveObjectsTableViewController +@implementation FLEXLiveObjectsController -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; - + self.showsSearchBar = YES; self.searchBarDebounceInterval = kFLEXDebounceInstant; self.showsCarousel = YES; @@ -43,13 +44,11 @@ - (void)viewDidLoad [self reloadTableData]; } -- (NSArray *)allClassNames -{ +- (NSArray *)allClassNames { return self.instanceCountsForClassNames.allKeys; } -- (void)reloadTableData -{ +- (void)reloadTableData { // Set up a CFMutableDictionary with class pointer keys and NSUInteger values. // We abuse CFMutableDictionary a little to have primitive keys through judicious casting, but it gets the job done. // The dictionary is intialized with a 0 count for each class so that it doesn't have to expand during enumeration. @@ -71,8 +70,8 @@ - (void)reloadTableData }]; // Convert our CF primitive dictionary into a nicer mapping of class name strings to counts that we will use as the table's model. - NSMutableDictionary *mutableCountsForClassNames = [NSMutableDictionary dictionary]; - NSMutableDictionary *mutableSizesForClassNames = [NSMutableDictionary dictionary]; + NSMutableDictionary *mutableCountsForClassNames = [NSMutableDictionary new]; + NSMutableDictionary *mutableSizesForClassNames = [NSMutableDictionary new]; for (unsigned int i = 0; i < classCount; i++) { Class class = classes[i]; NSUInteger instanceCount = (NSUInteger)CFDictionaryGetValue(mutableCountsForClasses, (__bridge const void *)(class)); @@ -90,41 +89,46 @@ - (void)reloadTableData [self updateSearchResults:nil]; } -- (void)refreshControlDidRefresh:(id)sender -{ +- (void)refreshControlDidRefresh:(id)sender { [self reloadTableData]; [self.refreshControl endRefreshing]; } -- (void)updateTitle -{ - NSString *title = @"Live Objects"; - +- (void)updateHeaderTitle { NSUInteger totalCount = 0; NSUInteger totalSize = 0; for (NSString *className in self.allClassNames) { - NSUInteger count = [self.instanceCountsForClassNames[className] unsignedIntegerValue]; + NSUInteger count = self.instanceCountsForClassNames[className].unsignedIntegerValue; totalCount += count; - totalSize += count * [self.instanceSizesForClassNames[className] unsignedIntegerValue]; + totalSize += count * self.instanceSizesForClassNames[className].unsignedIntegerValue; } + NSUInteger filteredCount = 0; NSUInteger filteredSize = 0; for (NSString *className in self.filteredClassNames) { - NSUInteger count = [self.instanceCountsForClassNames[className] unsignedIntegerValue]; + NSUInteger count = self.instanceCountsForClassNames[className].unsignedIntegerValue; filteredCount += count; - filteredSize += count * [self.instanceSizesForClassNames[className] unsignedIntegerValue]; + filteredSize += count * self.instanceSizesForClassNames[className].unsignedIntegerValue; } if (filteredCount == totalCount) { // Unfiltered - title = [title stringByAppendingFormat:@" (%lu, %@)", (unsigned long)totalCount, - [NSByteCountFormatter stringFromByteCount:totalSize countStyle:NSByteCountFormatterCountStyleFile]]; + self.headerTitle = [NSString + stringWithFormat:@"%@ objects, %@", + @(totalCount), [NSByteCountFormatter + stringFromByteCount:totalSize + countStyle:NSByteCountFormatterCountStyleFile + ] + ]; } else { - title = [title stringByAppendingFormat:@" (filtered, %lu, %@)", (unsigned long)filteredCount, - [NSByteCountFormatter stringFromByteCount:filteredSize countStyle:NSByteCountFormatterCountStyleFile]]; + self.headerTitle = [NSString + stringWithFormat:@"%@ of %@ objects, %@", + @(filteredCount), @(totalCount), [NSByteCountFormatter + stringFromByteCount:filteredSize + countStyle:NSByteCountFormatterCountStyleFile + ] + ]; } - - self.title = title; } @@ -135,14 +139,16 @@ + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { } + (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - return [self new]; + FLEXLiveObjectsController *liveObjectsViewController = [self new]; + liveObjectsViewController.title = [self globalsEntryTitle:row]; + + return liveObjectsViewController; } #pragma mark - Search bar -- (void)updateSearchResults:(NSString *)filter -{ +- (void)updateSearchResults:(NSString *)filter { NSInteger selectedScope = self.selectedScope; if (filter.length) { @@ -172,51 +178,54 @@ - (void)updateSearchResults:(NSString *)filter }]; } - [self updateTitle]; + [self updateHeaderTitle]; [self.tableView reloadData]; } #pragma mark - Table view data source -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.filteredClassNames.count; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - } - +- (UITableViewCell *)tableView:(__kindof UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView + dequeueReusableCellWithIdentifier:kFLEXDefaultCell + forIndexPath:indexPath + ]; + NSString *className = self.filteredClassNames[indexPath.row]; NSNumber *count = self.instanceCountsForClassNames[className]; NSNumber *size = self.instanceSizesForClassNames[className]; unsigned long totalSize = count.unsignedIntegerValue * size.unsignedIntegerValue; - cell.textLabel.text = [NSString stringWithFormat:@"%@ (%ld, %@)", className, (long)[count integerValue], - [NSByteCountFormatter stringFromByteCount:totalSize countStyle:NSByteCountFormatterCountStyleFile]]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.text = [NSString stringWithFormat:@"%@ (%ld, %@)", + className, (long)[count integerValue], + [NSByteCountFormatter + stringFromByteCount:totalSize + countStyle:NSByteCountFormatterCountStyleFile + ] + ]; return cell; } +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + return self.headerTitle; +} + #pragma mark - Table view delegate -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *className = self.filteredClassNames[indexPath.row]; - FLEXInstancesTableViewController *instancesViewController = [FLEXInstancesTableViewController instancesTableViewControllerForClassName:className]; - [self.navigationController pushViewController:instancesViewController animated:YES]; + UIViewController *instances = [FLEXObjectListViewController instancesOfClassWithName:className]; + [self.navigationController pushViewController:instances animated:YES]; } @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h deleted file mode 100644 index 30075815..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FLEXLiveObjectsTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXGlobalsEntry.h" - -@interface FLEXLiveObjectsTableViewController : FLEXTableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.h new file mode 100644 index 00000000..70fb7f14 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.h @@ -0,0 +1,19 @@ +// +// FLEXObjectListViewController.h +// Flipboard +// +// Created by Ryan Olson on 5/28/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXFilteringTableViewController.h" + +@interface FLEXObjectListViewController : FLEXFilteringTableViewController + +/// This will either return a list of the instances, or take you straight +/// to the explorer itself if there is only one instance. ++ (UIViewController *)instancesOfClassWithName:(NSString *)className; ++ (instancetype)subclassesOfClassWithName:(NSString *)className; ++ (instancetype)objectsWithReferencesToObject:(id)object; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.m similarity index 52% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.m index ee406b9a..d6927627 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectListViewController.m @@ -1,123 +1,41 @@ // -// FLEXInstancesTableViewController.m +// FLEXObjectListViewController.m // Flipboard // // Created by Ryan Olson on 5/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import "FLEXInstancesTableViewController.h" +#import "FLEXObjectListViewController.h" #import "FLEXObjectExplorerFactory.h" #import "FLEXObjectExplorerViewController.h" +#import "FLEXMutableListSection.h" #import "FLEXRuntimeUtility.h" #import "FLEXUtility.h" #import "FLEXHeapEnumerator.h" #import "FLEXObjectRef.h" +#import "NSString+FLEX.h" +#import "NSObject+FLEX_Reflection.h" +#import "FLEXTableViewCell.h" #import -@interface FLEXInstancesTableViewController () +@interface FLEXObjectListViewController () +@property (nonatomic, copy) NSArray *sections; +@property (nonatomic, copy) NSArray *allSections; -/// Array of [[section], [section], ...] -/// where [section] is [["row title", instance], ["row title", instance], ...] -@property (nonatomic) NSArray *instances; -@property (nonatomic) NSArray*> *sections; -@property (nonatomic) NSArray *sectionTitles; -@property (nonatomic) NSArray *predicates; -@property (nonatomic, readonly) NSInteger maxSections; +@property (nonatomic, readonly) NSArray *references; +@property (nonatomic, readonly) NSArray *predicates; +@property (nonatomic, readonly) NSArray *sectionTitles; @end -@implementation FLEXInstancesTableViewController +@implementation FLEXObjectListViewController +@dynamic sections, allSections; -- (id)initWithReferences:(NSArray *)references { - return [self initWithReferences:references predicates:nil sectionTitles:nil]; -} - -- (id)initWithReferences:(NSArray *)references - predicates:(NSArray *)predicates - sectionTitles:(NSArray *)sectionTitles { - NSParameterAssert(predicates.count == sectionTitles.count); - - self = [super init]; - if (self) { - self.instances = references; - self.predicates = predicates; - self.sectionTitles = sectionTitles; - - if (predicates.count) { - [self buildSections]; - } else { - self.sections = @[references]; - } - } - - return self; -} - -+ (instancetype)instancesTableViewControllerForClassName:(NSString *)className -{ - const char *classNameCString = className.UTF8String; - NSMutableArray *instances = [NSMutableArray array]; - [FLEXHeapEnumerator enumerateLiveObjectsUsingBlock:^(__unsafe_unretained id object, __unsafe_unretained Class actualClass) { - if (strcmp(classNameCString, class_getName(actualClass)) == 0) { - // Note: objects of certain classes crash when retain is called. - // It is up to the user to avoid tapping into instance lists for these classes. - // Ex. OS_dispatch_queue_specific_queue - // In the future, we could provide some kind of warning for classes that are known to be problematic. - if (malloc_size((__bridge const void *)(object)) > 0) { - [instances addObject:object]; - } - } - }]; - NSArray *references = [FLEXObjectRef referencingAll:instances]; - FLEXInstancesTableViewController *viewController = [[self alloc] initWithReferences:references]; - viewController.title = [NSString stringWithFormat:@"%@ (%lu)", className, (unsigned long)instances.count]; - return viewController; -} +#pragma mark - Reference Grouping -+ (instancetype)instancesTableViewControllerForInstancesReferencingObject:(id)object -{ - NSMutableArray *instances = [NSMutableArray array]; - [FLEXHeapEnumerator enumerateLiveObjectsUsingBlock:^(__unsafe_unretained id tryObject, __unsafe_unretained Class actualClass) { - // Skip Swift objects - if ([actualClass isKindOfClass:NSClassFromString(@"SwiftObject")]) { - return; - } - - // Get all the ivars on the object. Start with the class and and travel up the inheritance chain. - // Once we find a match, record it and move on to the next object. There's no reason to find multiple matches within the same object. - Class tryClass = actualClass; - while (tryClass) { - unsigned int ivarCount = 0; - Ivar *ivars = class_copyIvarList(tryClass, &ivarCount); - for (unsigned int ivarIndex = 0; ivarIndex < ivarCount; ivarIndex++) { - Ivar ivar = ivars[ivarIndex]; - const char *typeEncoding = ivar_getTypeEncoding(ivar); - if (typeEncoding[0] == FLEXTypeEncodingObjcObject || typeEncoding[0] == FLEXTypeEncodingObjcClass) { - ptrdiff_t offset = ivar_getOffset(ivar); - uintptr_t *fieldPointer = (__bridge void *)tryObject + offset; - if (*fieldPointer == (uintptr_t)(__bridge void *)object) { - [instances addObject:[FLEXObjectRef referencing:tryObject ivar:@(ivar_getName(ivar))]]; - return; - } - } - } - tryClass = class_getSuperclass(tryClass); - } - }]; - - NSArray *predicates = [self defaultPredicates]; - NSArray *sectionTitles = [self defaultSectionTitles]; - FLEXInstancesTableViewController *viewController = [[self alloc] initWithReferences:instances - predicates:predicates - sectionTitles:sectionTitles]; - viewController.title = [NSString stringWithFormat:@"Referencing %@ %p", NSStringFromClass(object_getClass(object)), object]; - return viewController; -} - -+ (NSPredicate *)defaultPredicateForSection:(NSInteger)section -{ ++ (NSPredicate *)defaultPredicateForSection:(NSInteger)section { // These are the types of references that we typically don't care about. // We want this list of "object-ivar pairs" split into two sections. BOOL(^isObserver)(FLEXObjectRef *, NSDictionary *) = ^BOOL(FLEXObjectRef *ref, NSDictionary *bindings) { @@ -171,76 +89,171 @@ + (NSPredicate *)defaultPredicateForSection:(NSInteger)section return @[@"", @"AutoLayout", @"Trivial"]; } -- (void)buildSections -{ - NSInteger maxSections = self.maxSections; - NSMutableArray *sections = [NSMutableArray array]; - for (NSInteger i = 0; i < maxSections; i++) { - NSPredicate *predicate = self.predicates[i]; - [sections addObject:[self.instances filteredArrayUsingPredicate:predicate]]; + +#pragma mark - Initialization + +- (id)initWithReferences:(NSArray *)references { + return [self initWithReferences:references predicates:nil sectionTitles:nil]; +} + +- (id)initWithReferences:(NSArray *)references + predicates:(NSArray *)predicates + sectionTitles:(NSArray *)sectionTitles { + NSParameterAssert(predicates.count == sectionTitles.count); + + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + _references = references; + _predicates = predicates; + _sectionTitles = sectionTitles; } - self.sections = sections; + return self; } -- (NSInteger)maxSections { - return self.predicates.count ?: 1; ++ (UIViewController *)instancesOfClassWithName:(NSString *)className { + const char *classNameCString = className.UTF8String; + NSMutableArray *instances = [NSMutableArray new]; + [FLEXHeapEnumerator enumerateLiveObjectsUsingBlock:^(__unsafe_unretained id object, __unsafe_unretained Class actualClass) { + if (strcmp(classNameCString, class_getName(actualClass)) == 0) { + // Note: objects of certain classes crash when retain is called. + // It is up to the user to avoid tapping into instance lists for these classes. + // Ex. OS_dispatch_queue_specific_queue + // In the future, we could provide some kind of warning for classes that are known to be problematic. + if (malloc_size((__bridge const void *)(object)) > 0) { + [instances addObject:object]; + } + } + }]; + + NSArray *references = [FLEXObjectRef referencingAll:instances]; + if (references.count == 1) { + return [FLEXObjectExplorerFactory + explorerViewControllerForObject:references.firstObject.object + ]; + } + + FLEXObjectListViewController *controller = [[self alloc] initWithReferences:references]; + controller.title = [NSString stringWithFormat:@"%@ (%lu)", className, (unsigned long)instances.count]; + return controller; } ++ (instancetype)subclassesOfClassWithName:(NSString *)className { + NSArray *classes = FLEXGetAllSubclasses(NSClassFromString(className), NO); + NSArray *references = [FLEXObjectRef referencingClasses:classes]; + FLEXObjectListViewController *controller = [[self alloc] initWithReferences:references]; + controller.title = [NSString stringWithFormat:@"Subclasses of %@ (%lu)", + className, (unsigned long)classes.count + ]; + + return controller; +} -#pragma mark - Table View Data Source ++ (instancetype)objectsWithReferencesToObject:(id)object { + static Class SwiftObjectClass = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + SwiftObjectClass = NSClassFromString(@"SwiftObject"); + if (!SwiftObjectClass) { + SwiftObjectClass = NSClassFromString(@"Swift._SwiftObject"); + } + }); + + NSMutableArray *instances = [NSMutableArray new]; + [FLEXHeapEnumerator enumerateLiveObjectsUsingBlock:^(__unsafe_unretained id tryObject, __unsafe_unretained Class actualClass) { + // Get all the ivars on the object. Start with the class and and travel up the inheritance chain. + // Once we find a match, record it and move on to the next object. There's no reason to find multiple matches within the same object. + Class tryClass = actualClass; + while (tryClass) { + unsigned int ivarCount = 0; + Ivar *ivars = class_copyIvarList(tryClass, &ivarCount); + + for (unsigned int ivarIndex = 0; ivarIndex < ivarCount; ivarIndex++) { + Ivar ivar = ivars[ivarIndex]; + NSString *typeEncoding = @(ivar_getTypeEncoding(ivar) ?: ""); + + if (typeEncoding.flex_typeIsObjectOrClass) { + ptrdiff_t offset = ivar_getOffset(ivar); + uintptr_t *fieldPointer = (__bridge void *)tryObject + offset; + + if (*fieldPointer == (uintptr_t)(__bridge void *)object) { + NSString *ivarName = @(ivar_getName(ivar) ?: "???"); + [instances addObject:[FLEXObjectRef referencing:tryObject ivar:ivarName]]; + return; + } + } + } + + tryClass = class_getSuperclass(tryClass); + } + }]; -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return self.maxSections; + NSArray *predicates = [self defaultPredicates]; + NSArray *sectionTitles = [self defaultSectionTitles]; + FLEXObjectListViewController *viewController = [[self alloc] + initWithReferences:instances + predicates:predicates + sectionTitles:sectionTitles + ]; + viewController.title = [NSString stringWithFormat:@"Referencing %@ %p", + NSStringFromClass(object_getClass(object)), object + ]; + return viewController; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.sections[section].count; -} -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - UIFont *cellFont = [FLEXUtility defaultTableViewCellLabelFont]; - cell.textLabel.font = cellFont; - cell.detailTextLabel.font = cellFont; - cell.detailTextLabel.textColor = UIColor.grayColor; - } +#pragma mark - Overrides - FLEXObjectRef *row = self.sections[indexPath.section][indexPath.row]; - cell.textLabel.text = row.reference; - cell.detailTextLabel.text = [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:row.object]; +- (void)viewDidLoad { + [super viewDidLoad]; - return cell; + self.showsSearchBar = YES; } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - if (self.sectionTitles.count) { - // Return nil instead of empty strings - NSString *title = self.sectionTitles[section]; - if (title.length) { - return title; - } +- (NSArray *)makeSections { + if (self.predicates.count) { + return [self buildSections:self.sectionTitles predicates:self.predicates]; + } else { + return @[[self makeSection:self.references title:nil]]; } - - return nil; } -#pragma mark - Table View Delegate +#pragma mark - Private + +- (NSArray *)buildSections:(NSArray *)titles predicates:(NSArray *)predicates { + NSParameterAssert(titles.count == predicates.count); + NSParameterAssert(titles); NSParameterAssert(predicates); + + return [NSArray flex_forEachUpTo:titles.count map:^id(NSUInteger i) { + NSArray *rows = [self.references filteredArrayUsingPredicate:predicates[i]]; + return [self makeSection:rows title:titles[i]]; + }]; +} + +- (FLEXMutableListSection *)makeSection:(NSArray *)rows title:(NSString *)title { + FLEXMutableListSection *section = [FLEXMutableListSection list:rows + cellConfiguration:^(FLEXTableViewCell *cell, FLEXObjectRef *ref, NSInteger row) { + cell.textLabel.text = ref.reference; + cell.detailTextLabel.text = ref.summary; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } filterMatcher:^BOOL(NSString *filterText, FLEXObjectRef *ref) { + if (ref.summary && [ref.summary localizedCaseInsensitiveContainsString:filterText]) { + return YES; + } + + return [ref.reference localizedCaseInsensitiveContainsString:filterText]; + } + ]; + + section.selectionHandler = ^(__kindof UIViewController *host, FLEXObjectRef *ref) { + [self.navigationController pushViewController:[ + FLEXObjectExplorerFactory explorerViewControllerForObject:ref.object + ] animated:YES]; + }; -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - id instance = self.instances[indexPath.row].object; - FLEXObjectExplorerViewController *drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:instance]; - [self.navigationController pushViewController:drillInViewController animated:YES]; + section.customTitle = title; + return section; } @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.h index a954fb9f..3a9e2258 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.h @@ -3,7 +3,7 @@ // FLEX // // Created by Tanner Bennett on 7/24/18. -// Copyright (c) 2018 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @@ -14,9 +14,14 @@ + (instancetype)referencing:(id)object ivar:(NSString *)ivarName; + (NSArray *)referencingAll:(NSArray *)objects; +/// Classes do not have a summary, and the reference is just the class name. ++ (NSArray *)referencingClasses:(NSArray *)classes; /// For example, "NSString 0x1d4085d0" or "NSLayoutConstraint _object" @property (nonatomic, readonly) NSString *reference; +/// For instances, this is the result of -[FLEXRuntimeUtility summaryForObject:] +/// For classes, there is no summary. +@property (nonatomic, readonly) NSString *summary; @property (nonatomic, readonly) id object; @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.m index 78942bba..15f973a7 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXObjectRef.m @@ -3,45 +3,74 @@ // FLEX // // Created by Tanner Bennett on 7/24/18. -// Copyright (c) 2018 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXObjectRef.h" -#import +#import "FLEXRuntimeUtility.h" +#import "NSArray+FLEX.h" + +@interface FLEXObjectRef () +@property (nonatomic, readonly) BOOL wantsSummary; +@end @implementation FLEXObjectRef +@synthesize summary = _summary; + (instancetype)referencing:(id)object { - return [[self alloc] initWithObject:object ivarName:nil]; + return [self referencing:object showSummary:YES]; +} + ++ (instancetype)referencing:(id)object showSummary:(BOOL)showSummary { + return [[self alloc] initWithObject:object ivarName:nil showSummary:showSummary]; } + (instancetype)referencing:(id)object ivar:(NSString *)ivarName { - return [[self alloc] initWithObject:object ivarName:ivarName]; + return [[self alloc] initWithObject:object ivarName:ivarName showSummary:YES]; } + (NSArray *)referencingAll:(NSArray *)objects { - NSMutableArray *refs = [NSMutableArray array]; - for (id obj in objects) { - [refs addObject:[self referencing:obj]]; - } + return [objects flex_mapped:^id(id obj, NSUInteger idx) { + return [self referencing:obj showSummary:YES]; + }]; +} - return refs; ++ (NSArray *)referencingClasses:(NSArray *)classes { + return [classes flex_mapped:^id(id obj, NSUInteger idx) { + return [self referencing:obj showSummary:NO]; + }]; } -- (id)initWithObject:(id)object ivarName:(NSString *)ivar { +- (id)initWithObject:(id)object ivarName:(NSString *)ivar showSummary:(BOOL)showSummary { self = [super init]; if (self) { _object = object; + _wantsSummary = showSummary; NSString *class = NSStringFromClass(object_getClass(object)); if (ivar) { _reference = [NSString stringWithFormat:@"%@ %@", class, ivar]; - } else { + } else if (showSummary) { _reference = [NSString stringWithFormat:@"%@ %p", class, object]; + } else { + _reference = class; } } return self; } +- (NSString *)summary { + if (self.wantsSummary) { + if (!_summary) { + _summary = [FLEXRuntimeUtility summaryForObject:self.object]; + } + + return _summary; + } + else { + return nil; + } +} + @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.h index 86c73dcb..706cb4c7 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/10/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.m index 7887053e..42817b53 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FLEXWebViewController.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 6/10/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXWebViewController.h" @@ -19,13 +19,14 @@ @interface FLEXWebViewController () @implementation FLEXWebViewController -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { WKWebViewConfiguration *configuration = [WKWebViewConfiguration new]; - configuration.dataDetectorTypes = UIDataDetectorTypeLink; + if (@available(iOS 10.0, *)) { + configuration.dataDetectorTypes = UIDataDetectorTypeLink; + } self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration]; self.webView.navigationDelegate = self; @@ -33,8 +34,7 @@ - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil return self; } -- (id)initWithText:(NSString *)text -{ +- (id)initWithText:(NSString *)text { self = [self initWithNibName:nil bundle:nil]; if (self) { self.originalText = text; @@ -44,8 +44,7 @@ - (id)initWithText:(NSString *)text return self; } -- (id)initWithURL:(NSURL *)url -{ +- (id)initWithURL:(NSURL *)url { self = [self initWithNibName:nil bundle:nil]; if (self) { NSURLRequest *request = [NSURLRequest requestWithURL:url]; @@ -54,16 +53,14 @@ - (id)initWithURL:(NSURL *)url return self; } -- (void)dealloc -{ +- (void)dealloc { // WKWebView's delegate is assigned so we need to clear it manually. if (_webView.navigationDelegate == self) { _webView.navigationDelegate = nil; } } -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.webView]; @@ -75,16 +72,14 @@ - (void)viewDidLoad } } -- (void)copyButtonTapped:(id)sender -{ +- (void)copyButtonTapped:(id)sender { [UIPasteboard.generalPasteboard setString:self.originalText]; } #pragma mark - WKWebView Delegate -- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler -{ +- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { WKNavigationActionPolicy policy = WKNavigationActionPolicyCancel; if (navigationAction.navigationType == WKNavigationTypeOther) { // Allow the initial load @@ -103,8 +98,7 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati #pragma mark - Class Helpers -+ (BOOL)supportsPathExtension:(NSString *)extension -{ ++ (BOOL)supportsPathExtension:(NSString *)extension { BOOL supported = NO; NSSet *supportedExtensions = [self webViewSupportedPathExtensions]; if ([supportedExtensions containsObject:[extension lowercaseString]]) { @@ -113,8 +107,7 @@ + (BOOL)supportsPathExtension:(NSString *)extension return supported; } -+ (NSSet *)webViewSupportedPathExtensions -{ ++ (NSSet *)webViewSupportedPathExtensions { static NSSet *pathExtensions = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.h similarity index 62% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.h rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.h index 438f388c..29dae965 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.h @@ -1,5 +1,5 @@ // -// FLEXFileBrowserTableViewController.h +// FLEXFileBrowserController.h // Flipboard // // Created by Ryan Olson on 6/9/14. @@ -10,8 +10,9 @@ #import "FLEXGlobalsEntry.h" #import "FLEXFileBrowserSearchOperation.h" -@interface FLEXFileBrowserTableViewController : FLEXTableViewController +@interface FLEXFileBrowserController : FLEXTableViewController ++ (instancetype)path:(NSString *)path; - (id)initWithPath:(NSString *)path; @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.m similarity index 84% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.m rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.m index 3cf95aa0..b94f5f85 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.m @@ -1,23 +1,24 @@ // -// FLEXFileBrowserTableViewController.m +// FLEXFileBrowserController.m // Flipboard // // Created by Ryan Olson on 6/9/14. // // -#import "FLEXFileBrowserTableViewController.h" +#import "FLEXFileBrowserController.h" #import "FLEXUtility.h" #import "FLEXWebViewController.h" #import "FLEXImagePreviewViewController.h" #import "FLEXTableListViewController.h" #import "FLEXObjectExplorerFactory.h" #import "FLEXObjectExplorerViewController.h" +#import @interface FLEXFileBrowserTableViewCell : UITableViewCell @end -@interface FLEXFileBrowserTableViewController () +@interface FLEXFileBrowserController () @property (nonatomic, copy) NSString *path; @property (nonatomic, copy) NSArray *childPaths; @@ -29,15 +30,17 @@ @interface FLEXFileBrowserTableViewController () *attributes = [fileManager attributesOfItemAtPath:path error:NULL]; @@ -63,7 +66,7 @@ - (id)initWithPath:(NSString *)path } dispatch_async(dispatch_get_main_queue(), ^{ - FLEXFileBrowserTableViewController *__strong strongSelf = weakSelf; + FLEXFileBrowserController *__strong strongSelf = weakSelf; strongSelf.recursiveSize = @(totalSize); [strongSelf.tableView reloadData]; }); @@ -76,8 +79,7 @@ - (id)initWithPath:(NSString *)path #pragma mark - UIViewController -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; self.showsSearchBar = YES; @@ -104,8 +106,7 @@ + (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { #pragma mark - FLEXFileBrowserSearchOperationDelegate -- (void)fileBrowserSearchOperationResult:(NSArray *)searchResult size:(uint64_t)size -{ +- (void)fileBrowserSearchOperationResult:(NSArray *)searchResult size:(uint64_t)size { self.searchPaths = searchResult; self.searchPathsSize = @(size); [self.tableView reloadData]; @@ -113,15 +114,13 @@ - (void)fileBrowserSearchOperationResult:(NSArray *)searchResult siz #pragma mark - Search bar -- (void)updateSearchResults:(NSString *)newText -{ +- (void)updateSearchResults:(NSString *)newText { [self reloadDisplayedPaths]; } #pragma mark UISearchControllerDelegate -- (void)willDismissSearchController:(UISearchController *)searchController -{ +- (void)willDismissSearchController:(UISearchController *)searchController { [self.operationQueue cancelAllOperations]; [self reloadCurrentPath]; [self.tableView reloadData]; @@ -129,18 +128,15 @@ - (void)willDismissSearchController:(UISearchController *)searchController #pragma mark - Table view data source -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.searchController.isActive ? self.searchPaths.count : self.childPaths.count; } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { BOOL isSearchActive = self.searchController.isActive; NSNumber *currentSize = isSearchActive ? self.searchPathsSize : self.recursiveSize; NSArray *currentPaths = isSearchActive ? self.searchPaths : self.childPaths; @@ -155,8 +151,7 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte return [NSString stringWithFormat:@"%lu files (%@)", (unsigned long)currentPaths.count, sizeString]; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *fullPath = [self filePathAtIndexPath:indexPath]; NSDictionary *attributes = [NSFileManager.defaultManager attributesOfItemAtPath:fullPath error:NULL]; BOOL isDirectory = [attributes.fileType isEqual:NSFileTypeDirectory]; @@ -179,8 +174,8 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (!cell) { cell = [[FLEXFileBrowserTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - cell.detailTextLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; + cell.textLabel.font = UIFont.flex_defaultTableCellFont; + cell.detailTextLabel.font = UIFont.flex_defaultTableCellFont; cell.detailTextLabel.textColor = UIColor.grayColor; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } @@ -196,8 +191,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; NSString *fullPath = [self filePathAtIndexPath:indexPath]; @@ -219,7 +213,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath if (isDirectory) { drillInViewController = [[[self class] alloc] initWithPath:fullPath]; } else if (image) { - drillInViewController = [[FLEXImagePreviewViewController alloc] initWithImage:image]; + drillInViewController = [FLEXImagePreviewViewController forImage:image]; } else { NSData *fileData = [NSData dataWithContentsOfFile:fullPath]; if (!fileData.length) { @@ -241,16 +235,38 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } @catch (NSException *e) { } // Try to decode other things instead - object = object - ?: [NSPropertyListSerialization propertyListWithData:fileData - options:0 - format:NULL - error:NULL] - ?: [NSDictionary dictionaryWithContentsOfFile:fullPath] - ?: [NSArray arrayWithContentsOfFile:fullPath]; + object = object ?: [NSPropertyListSerialization + propertyListWithData:fileData + options:0 + format:NULL + error:NULL + ] ?: [NSDictionary dictionaryWithContentsOfFile:fullPath] + ?: [NSArray arrayWithContentsOfFile:fullPath]; if (object) { drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:object]; + } else { + // Is it possibly a mach-O file? + if (fileData.length > sizeof(struct mach_header_64)) { + struct mach_header_64 header; + [fileData getBytes:&header length:sizeof(struct mach_header_64)]; + + // Does it have the mach header magic number? + if (header.magic == MH_MAGIC_64) { + // See if we can get some classes out of it... + unsigned int count = 0; + const char **classList = objc_copyClassNamesForImage( + fullPath.UTF8String, &count + ); + + if (count > 0) { + NSArray *classNames = [NSArray flex_forEachUpTo:count map:^id(NSUInteger i) { + return objc_getClass(classList[i]); + }]; + drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:classNames]; + } + } + } } } @@ -278,8 +294,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath } } -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { UIMenuItem *rename = [[UIMenuItem alloc] initWithTitle:@"Rename" action:@selector(fileBrowserRename:)]; UIMenuItem *delete = [[UIMenuItem alloc] initWithTitle:@"Delete" action:@selector(fileBrowserDelete:)]; UIMenuItem *copyPath = [[UIMenuItem alloc] initWithTitle:@"Copy Path" action:@selector(fileBrowserCopyPath:)]; @@ -290,16 +305,14 @@ - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIn return YES; } -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ +- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { return action == @selector(fileBrowserDelete:) || action == @selector(fileBrowserRename:) || action == @selector(fileBrowserCopyPath:) || action == @selector(fileBrowserShare:); } -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ +- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { // Empty, but has to exist for the menu to show // The table view only calls this method for actions in the UIResponderStandardEditActions informal protocol. // Since our actions are outside of that protocol, we need to manually handle the action forwarding from the cells. @@ -307,10 +320,9 @@ - (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtInd #if FLEX_AT_LEAST_IOS13_SDK -- (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point __IOS_AVAILABLE(13.0) -{ +- (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point __IOS_AVAILABLE(13.0) { __weak typeof(self) weakSelf = self; - return [UIContextMenuConfiguration configurationWithIdentifier:NSUUID.UUID.UUIDString + return [UIContextMenuConfiguration configurationWithIdentifier:nil previewProvider:nil actionProvider:^UIMenu * _Nullable(NSArray * _Nonnull suggestedActions) { UITableViewCell * const cell = [tableView cellForRowAtIndexPath:indexPath]; @@ -344,8 +356,7 @@ - (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuCo #endif -- (void)openFileController:(NSString *)fullPath -{ +- (void)openFileController:(NSString *)fullPath { UIDocumentInteractionController *controller = [UIDocumentInteractionController new]; controller.URL = [NSURL fileURLWithPath:fullPath]; @@ -353,8 +364,7 @@ - (void)openFileController:(NSString *)fullPath self.documentController = controller; } -- (void)fileBrowserRename:(UITableViewCell *)sender -{ +- (void)fileBrowserRename:(UITableViewCell *)sender { NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; NSString *fullPath = [self filePathAtIndexPath:indexPath]; @@ -379,8 +389,7 @@ - (void)fileBrowserRename:(UITableViewCell *)sender } } -- (void)fileBrowserDelete:(UITableViewCell *)sender -{ +- (void)fileBrowserDelete:(UITableViewCell *)sender { NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; NSString *fullPath = [self filePathAtIndexPath:indexPath]; @@ -404,15 +413,13 @@ - (void)fileBrowserDelete:(UITableViewCell *)sender } } -- (void)fileBrowserCopyPath:(UITableViewCell *)sender -{ +- (void)fileBrowserCopyPath:(UITableViewCell *)sender { NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; NSString *fullPath = [self filePathAtIndexPath:indexPath]; UIPasteboard.generalPasteboard.string = fullPath; } -- (void)fileBrowserShare:(UITableViewCell *)sender -{ +- (void)fileBrowserShare:(UITableViewCell *)sender { NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; NSString *pathString = [self filePathAtIndexPath:indexPath]; NSURL *filePath = [NSURL fileURLWithPath:pathString]; @@ -430,8 +437,7 @@ - (void)fileBrowserShare:(UITableViewCell *)sender } } -- (void)reloadDisplayedPaths -{ +- (void)reloadDisplayedPaths { if (self.searchController.isActive) { [self updateSearchPaths]; } else { @@ -440,9 +446,8 @@ - (void)reloadDisplayedPaths } } -- (void)reloadCurrentPath -{ - NSMutableArray *childPaths = [NSMutableArray array]; +- (void)reloadCurrentPath { + NSMutableArray *childPaths = [NSMutableArray new]; NSArray *subpaths = [NSFileManager.defaultManager contentsOfDirectoryAtPath:self.path error:NULL]; for (NSString *subpath in subpaths) { [childPaths addObject:[self.path stringByAppendingPathComponent:subpath]]; @@ -450,8 +455,7 @@ - (void)reloadCurrentPath self.childPaths = childPaths; } -- (void)updateSearchPaths -{ +- (void)updateSearchPaths { self.searchPaths = nil; self.searchPathsSize = nil; @@ -462,8 +466,7 @@ - (void)updateSearchPaths [self.operationQueue addOperation:newOperation]; } -- (NSString *)filePathAtIndexPath:(NSIndexPath *)indexPath -{ +- (NSString *)filePathAtIndexPath:(NSIndexPath *)indexPath { return self.searchController.isActive ? self.searchPaths[indexPath.row] : self.childPaths[indexPath.row]; } @@ -472,29 +475,24 @@ - (NSString *)filePathAtIndexPath:(NSIndexPath *)indexPath @implementation FLEXFileBrowserTableViewCell -- (void)forwardAction:(SEL)action withSender:(id)sender -{ +- (void)forwardAction:(SEL)action withSender:(id)sender { id target = [self.nextResponder targetForAction:action withSender:sender]; [UIApplication.sharedApplication sendAction:action to:target from:self forEvent:nil]; } -- (void)fileBrowserRename:(UIMenuController *)sender -{ +- (void)fileBrowserRename:(UIMenuController *)sender { [self forwardAction:_cmd withSender:sender]; } -- (void)fileBrowserDelete:(UIMenuController *)sender -{ +- (void)fileBrowserDelete:(UIMenuController *)sender { [self forwardAction:_cmd withSender:sender]; } -- (void)fileBrowserCopyPath:(UIMenuController *)sender -{ +- (void)fileBrowserCopyPath:(UIMenuController *)sender { [self forwardAction:_cmd withSender:sender]; } -- (void)fileBrowserShare:(UIMenuController *)sender -{ +- (void)fileBrowserShare:(UIMenuController *)sender { [self forwardAction:_cmd withSender:sender]; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m index 8666ba3d..a61c5409 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m @@ -10,13 +10,11 @@ @implementation NSMutableArray (FLEXStack) -- (void)flex_push:(id)anObject -{ +- (void)flex_push:(id)anObject { [self addObject:anObject]; } -- (id)flex_pop -{ +- (id)flex_pop { id anObject = self.lastObject; [self removeLastObject]; return anObject; @@ -35,8 +33,7 @@ @implementation FLEXFileBrowserSearchOperation #pragma mark - private -- (uint64_t)totalSizeAtPath:(NSString *)path -{ +- (uint64_t)totalSizeAtPath:(NSString *)path { NSFileManager *fileManager = NSFileManager.defaultManager; NSDictionary *attributes = [fileManager attributesOfItemAtPath:path error:NULL]; uint64_t totalSize = [attributes fileSize]; @@ -50,8 +47,7 @@ - (uint64_t)totalSizeAtPath:(NSString *)path #pragma mark - instance method -- (id)initWithPath:(NSString *)currentPath searchString:(NSString *)searchString -{ +- (id)initWithPath:(NSString *)currentPath searchString:(NSString *)searchString { self = [super init]; if (self) { self.path = currentPath; @@ -62,13 +58,12 @@ - (id)initWithPath:(NSString *)currentPath searchString:(NSString *)searchString #pragma mark - methods to override -- (void)main -{ +- (void)main { NSFileManager *fileManager = NSFileManager.defaultManager; - NSMutableArray *searchPaths = [NSMutableArray array]; - NSMutableDictionary *sizeMapping = [NSMutableDictionary dictionary]; + NSMutableArray *searchPaths = [NSMutableArray new]; + NSMutableDictionary *sizeMapping = [NSMutableDictionary new]; uint64_t totalSize = 0; - NSMutableArray *stack = [NSMutableArray array]; + NSMutableArray *stack = [NSMutableArray new]; [stack flex_push:self.path]; //recursive found all match searchString paths, and precomputing there size diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h index 10f4900e..59eae7e2 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h @@ -3,12 +3,12 @@ // FLEX // // Created by Javier Soto on 7/26/14. -// Copyright (c) 2014 f. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import -#import "FLEXTableViewSection.h" -@class FLEXGlobalsTableViewController; + +NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) { FLEXGlobalsRowProcessInfo, @@ -17,8 +17,7 @@ typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) { FLEXGlobalsRowLiveObjects, FLEXGlobalsRowAddressInspector, FLEXGlobalsRowCookies, - FLEXGlobalsRowSystemLibraries, - FLEXGlobalsRowAppClasses, + FLEXGlobalsRowBrowseRuntime, FLEXGlobalsRowAppKeychainItems, FLEXGlobalsRowAppDelegate, FLEXGlobalsRowRootViewController, @@ -31,15 +30,26 @@ typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) { FLEXGlobalsRowMainScreen, FLEXGlobalsRowCurrentDevice, FLEXGlobalsRowPasteboard, + FLEXGlobalsRowURLSession, + FLEXGlobalsRowURLCache, + FLEXGlobalsRowNotificationCenter, + FLEXGlobalsRowMenuController, + FLEXGlobalsRowFileManager, + FLEXGlobalsRowTimeZone, + FLEXGlobalsRowLocale, + FLEXGlobalsRowCalendar, + FLEXGlobalsRowMainRunLoop, + FLEXGlobalsRowMainThread, + FLEXGlobalsRowOperationQueue, FLEXGlobalsRowCount }; -typedef NSString *(^FLEXGlobalsEntryNameFuture)(void); +typedef NSString * _Nonnull (^FLEXGlobalsEntryNameFuture)(void); /// Simply return a view controller to be pushed on the navigation stack -typedef UIViewController *(^FLEXGlobalsTableViewControllerViewControllerFuture)(void); +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 (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewController *host); +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. @@ -47,27 +57,39 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewCont /// 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 + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row; -// Must respond to at least one of the below +// Must respond to at least one of the below. +// globalsEntryRowAction: takes precedence if both are implemented. @optional -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row; -+ (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row; ++ (nullable UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row; ++ (nullable FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row; @end -@interface FLEXGlobalsEntry : NSObject +@interface FLEXGlobalsEntry : NSObject -@property (nonatomic, readonly) FLEXGlobalsEntryNameFuture entryNameFuture; -@property (nonatomic, readonly) FLEXGlobalsTableViewControllerViewControllerFuture viewControllerFuture; -@property (nonatomic, readonly) FLEXGlobalsTableViewControllerRowAction rowAction; +@property (nonatomic, readonly, nonnull) FLEXGlobalsEntryNameFuture entryNameFuture; +@property (nonatomic, readonly, nullable) FLEXGlobalsEntryViewControllerFuture viewControllerFuture; +@property (nonatomic, readonly, nullable) FLEXGlobalsEntryRowAction rowAction; + (instancetype)entryWithEntry:(Class)entry row:(FLEXGlobalsRow)row; -+ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture; -+ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction; + ++ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture + viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture; + ++ (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture + action:(FLEXGlobalsEntryRowAction)rowSelectedAction; @end @@ -76,6 +98,8 @@ typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewCont /// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:] /// if the class conforms to FLEXGlobalsEntry, else, nil. -+ (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row; ++ (nullable FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row; @end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m index 7b4611a8..be1b7861 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m @@ -3,26 +3,29 @@ // FLEX // // Created by Javier Soto on 7/26/14. -// Copyright (c) 2014 f. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXGlobalsEntry.h" @implementation FLEXGlobalsEntry -+ (instancetype)entryWithEntry:(Class)cls row:(FLEXGlobalsRow)row -{ ++ (instancetype)entryWithEntry:(Class)cls row:(FLEXGlobalsRow)row { + BOOL providesVCs = [cls respondsToSelector:@selector(globalsEntryViewController:)]; + BOOL providesActions = [cls respondsToSelector:@selector(globalsEntryRowAction:)]; NSParameterAssert(cls); - NSParameterAssert( - [cls respondsToSelector:@selector(globalsEntryViewController:)] || - [cls respondsToSelector:@selector(globalsEntryRowAction:)] - ); + NSParameterAssert(providesVCs || providesActions); FLEXGlobalsEntry *entry = [self new]; entry->_entryNameFuture = ^{ return [cls globalsEntryTitle:row]; }; - if ([cls respondsToSelector:@selector(globalsEntryViewController:)]) { - entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController:row]; }; + if (providesVCs) { + id action = providesActions ? [cls globalsEntryRowAction:row] : nil; + if (action) { + entry->_rowAction = action; + } else { + entry->_viewControllerFuture = ^{ return [cls globalsEntryViewController:row]; }; + } } else { entry->_rowAction = [cls globalsEntryRowAction:row]; } @@ -31,8 +34,7 @@ + (instancetype)entryWithEntry:(Class)cls row:(FLEXGlobalsRow) } + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture - viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture -{ + viewControllerFuture:(FLEXGlobalsEntryViewControllerFuture)viewControllerFuture { NSParameterAssert(nameFuture); NSParameterAssert(viewControllerFuture); @@ -44,8 +46,7 @@ + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture } + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture - action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction -{ + action:(FLEXGlobalsEntryRowAction)rowSelectedAction { NSParameterAssert(nameFuture); NSParameterAssert(rowSelectedAction); @@ -56,11 +57,16 @@ + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture return entry; } -#pragma mark FLEXPatternMatching +@end + +@interface FLEXGlobalsEntry (Debugging) +@property (nonatomic, readonly) NSString *name; +@end + +@implementation FLEXGlobalsEntry (Debugging) -- (BOOL)matches:(NSString *)query -{ - return [self.entryNameFuture() localizedCaseInsensitiveContainsString:query]; +- (NSString *)name { + return self.entryNameFuture(); } @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.h new file mode 100644 index 00000000..8794eb98 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.h @@ -0,0 +1,20 @@ +// +// FLEXGlobalsSection.h +// FLEX +// +// Created by Tanner Bennett on 7/11/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableViewSection.h" +#import "FLEXGlobalsEntry.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FLEXGlobalsSection : FLEXTableViewSection + ++ (instancetype)title:(NSString *)title rows:(NSArray *)rows; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.m new file mode 100644 index 00000000..3a23da6e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.m @@ -0,0 +1,86 @@ +// +// FLEXGlobalsSection.m +// FLEX +// +// Created by Tanner Bennett on 7/11/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXGlobalsSection.h" +#import "NSArray+FLEX.h" +#import "UIFont+FLEX.h" + +@interface FLEXGlobalsSection () +/// Filtered rows +@property (nonatomic) NSArray *rows; +/// Unfiltered rows +@property (nonatomic) NSArray *allRows; +@end +@implementation FLEXGlobalsSection + +#pragma mark - Initialization + ++ (instancetype)title:(NSString *)title rows:(NSArray *)rows { + FLEXGlobalsSection *s = [self new]; + s->_title = title; + s.allRows = rows; + + return s; +} + +- (void)setAllRows:(NSArray *)allRows { + _allRows = allRows.copy; + [self reloadData]; +} + +#pragma mark - Overrides + +- (NSInteger)numberOfRows { + return self.rows.count; +} + +- (void)setFilterText:(NSString *)filterText { + super.filterText = filterText; + [self reloadData]; +} + +- (void)reloadData { + NSString *filterText = self.filterText; + + if (filterText.length) { + self.rows = [self.allRows flex_filtered:^BOOL(FLEXGlobalsEntry *entry, NSUInteger idx) { + return [entry.entryNameFuture() localizedCaseInsensitiveContainsString:filterText]; + }]; + } else { + self.rows = self.allRows; + } +} + +- (BOOL)canSelectRow:(NSInteger)row { + return YES; +} + +- (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { + return (id)self.rows[row].rowAction; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return self.rows[row].viewControllerFuture ? self.rows[row].viewControllerFuture() : nil; +} + +- (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.font = UIFont.flex_defaultTableCellFont; + cell.textLabel.text = self.rows[row].entryNameFuture(); +} + +@end + + +@implementation FLEXGlobalsSection (Subscripting) + +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + return self.rows[idx]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.h deleted file mode 100644 index 97982a57..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FLEXGlobalsTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -@protocol FLEXGlobalsTableViewControllerDelegate; - -typedef NS_ENUM(NSUInteger, FLEXGlobalsSection) { - /// NSProcessInfo, Network history, system log, - /// heap, address explorer, libraries, app classes - FLEXGlobalsSectionProcessAndEvents, - /// Browse container, browse bundle, NSBundle.main, - /// NSUserDefaults.standard, UIApplication, - /// app delegate, key window, root VC, cookies - FLEXGlobalsSectionAppShortcuts, - /// UIPasteBoard.general, UIScreen, UIDevice - FLEXGlobalsSectionMisc, - FLEXGlobalsSectionCustom, - FLEXGlobalsSectionCount -}; - -@interface FLEXGlobalsTableViewController : FLEXTableViewController - -@property (nonatomic, weak) id delegate; - -/// We pretend that one of the app's windows is still the key window, even though the explorer window may have become key. -/// We want to display debug state about the application, not about this tool. -+ (void)setApplicationWindow:(UIWindow *)applicationWindow; - -@end - -@protocol FLEXGlobalsTableViewControllerDelegate - -- (void)globalsViewControllerDidFinish:(FLEXGlobalsTableViewController *)globalsViewController; - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.m deleted file mode 100644 index 3d52b38e..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.m +++ /dev/null @@ -1,289 +0,0 @@ -// -// FLEXGlobalsTableViewController.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXGlobalsTableViewController.h" -#import "FLEXUtility.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXLibrariesTableViewController.h" -#import "FLEXClassesTableViewController.h" -#import "FLEXKeychainTableViewController.h" -#import "FLEXObjectExplorerViewController.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXLiveObjectsTableViewController.h" -#import "FLEXFileBrowserTableViewController.h" -#import "FLEXCookiesTableViewController.h" -#import "FLEXGlobalsEntry.h" -#import "FLEXManager+Private.h" -#import "FLEXSystemLogTableViewController.h" -#import "FLEXNetworkHistoryTableViewController.h" -#import "FLEXAddressExplorerCoordinator.h" -#import "FLEXTableViewSection.h" - -static __weak UIWindow *s_applicationWindow = nil; - -@interface FLEXGlobalsTableViewController () - -@property (nonatomic, readonly) NSArray *> *sections; -@property (nonatomic, copy) NSArray *> *filteredSections; - -@end - -@implementation FLEXGlobalsTableViewController - -+ (NSString *)globalsTitleForSection:(FLEXGlobalsSection)section -{ - switch (section) { - case FLEXGlobalsSectionProcessAndEvents: - return @"Process and Events"; - case FLEXGlobalsSectionAppShortcuts: - return @"App Shortcuts"; - case FLEXGlobalsSectionMisc: - return @"Miscellaneous"; - case FLEXGlobalsSectionCustom: - return @"Custom Additions"; - - default: - @throw NSInternalInconsistencyException; - } -} - -+ (FLEXGlobalsEntry *)globalsEntryForRow:(FLEXGlobalsRow)row -{ - switch (row) { - case FLEXGlobalsRowAppClasses: - return [FLEXClassesTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowAppKeychainItems: - return [FLEXKeychainTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowAddressInspector: - return [FLEXAddressExplorerCoordinator flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowSystemLibraries: - return [FLEXLibrariesTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowLiveObjects: - return [FLEXLiveObjectsTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowCookies: - return [FLEXCookiesTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowBrowseBundle: - case FLEXGlobalsRowBrowseContainer: - return [FLEXFileBrowserTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowSystemLog: - return [FLEXSystemLogTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowNetworkHistory: - return [FLEXNetworkHistoryTableViewController flex_concreteGlobalsEntry:row]; - case FLEXGlobalsRowKeyWindow: - return [FLEXGlobalsEntry - entryWithNameFuture:^NSString *{ - return @"🔑 -[UIApplication keyWindow]"; - } viewControllerFuture:^UIViewController *{ - return [FLEXObjectExplorerFactory explorerViewControllerForObject:s_applicationWindow]; - } - ]; - case FLEXGlobalsRowRootViewController: - case FLEXGlobalsRowProcessInfo: - case FLEXGlobalsRowAppDelegate: - case FLEXGlobalsRowUserDefaults: - case FLEXGlobalsRowMainBundle: - case FLEXGlobalsRowApplication: - case FLEXGlobalsRowMainScreen: - case FLEXGlobalsRowCurrentDevice: - case FLEXGlobalsRowPasteboard: - return [FLEXObjectExplorerFactory flex_concreteGlobalsEntry:row]; - - default: - @throw [NSException - exceptionWithName:NSInternalInconsistencyException - reason:@"Missing globals case in switch" userInfo:nil - ]; - } -} - -+ (NSArray *> *)defaultGlobalSections -{ - static NSArray *> *sections = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSArray *rows = @[ - @[ - [self globalsEntryForRow:FLEXGlobalsRowNetworkHistory], - [self globalsEntryForRow:FLEXGlobalsRowSystemLog], - [self globalsEntryForRow:FLEXGlobalsRowProcessInfo], - [self globalsEntryForRow:FLEXGlobalsRowLiveObjects], - [self globalsEntryForRow:FLEXGlobalsRowAddressInspector], - [self globalsEntryForRow:FLEXGlobalsRowSystemLibraries], - [self globalsEntryForRow:FLEXGlobalsRowAppClasses], - ], - @[ // FLEXGlobalsSectionAppShortcuts - [self globalsEntryForRow:FLEXGlobalsRowBrowseBundle], - [self globalsEntryForRow:FLEXGlobalsRowBrowseContainer], - [self globalsEntryForRow:FLEXGlobalsRowMainBundle], - [self globalsEntryForRow:FLEXGlobalsRowUserDefaults], - [self globalsEntryForRow:FLEXGlobalsRowAppKeychainItems], - [self globalsEntryForRow:FLEXGlobalsRowApplication], - [self globalsEntryForRow:FLEXGlobalsRowAppDelegate], - [self globalsEntryForRow:FLEXGlobalsRowKeyWindow], - [self globalsEntryForRow:FLEXGlobalsRowRootViewController], - [self globalsEntryForRow:FLEXGlobalsRowCookies], - ], - @[ // FLEXGlobalsSectionMisc - [self globalsEntryForRow:FLEXGlobalsRowPasteboard], - [self globalsEntryForRow:FLEXGlobalsRowMainScreen], - [self globalsEntryForRow:FLEXGlobalsRowCurrentDevice], - ] - ]; - - NSMutableArray *tmp = [NSMutableArray array]; - for (NSInteger i = 0; i < FLEXGlobalsSectionCount - 1; i++) { // Skip custom - NSString *title = [self globalsTitleForSection:i]; - [tmp addObject:[FLEXTableViewSection section:i title:title rows:rows[i]]]; - } - - sections = tmp.copy; - }); - - return sections; -} - -#pragma mark - Public - -+ (void)setApplicationWindow:(UIWindow *)applicationWindow -{ - s_applicationWindow = applicationWindow; -} - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"💪 FLEX"; - self.showsSearchBar = YES; - self.hideSearchBarInitially = YES; - self.searchBarDebounceInterval = kFLEXDebounceInstant; - - // Table view data - _sections = [[self class] defaultGlobalSections]; - if ([FLEXManager sharedManager].userGlobalEntries.count) { - // Make custom section - NSString *title = [[self class] globalsTitleForSection:FLEXGlobalsSectionCustom]; - FLEXTableViewSection *custom = [FLEXTableViewSection - section:FLEXGlobalsSectionCustom - title:title - rows:[FLEXManager sharedManager].userGlobalEntries - ]; - _sections = [_sections arrayByAddingObject:custom]; - } - - // Done button - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]; -} - -#pragma mark - Search Bar - -- (void)updateSearchResults:(NSString *)newText { - if (!newText.length) { - self.filteredSections = nil; - [self.tableView reloadData]; - return; - } - - // Sections are a map of index to rows, since empty sections are omitted - NSMutableArray *filteredSections = [NSMutableArray array]; - - [self.sections enumerateObjectsUsingBlock:^(FLEXTableViewSection *section, NSUInteger idx, BOOL *stop) { - section = [section newSectionWithRowsMatchingQuery:newText]; - if (section) { - [filteredSections addObject:section]; - } - }]; - - self.filteredSections = filteredSections.copy; - [self.tableView reloadData]; -} - -#pragma mark - Misc - -- (void)donePressed:(id)sender -{ - [self.delegate globalsViewControllerDidFinish:self]; -} - -#pragma mark - Table Data Helpers - -- (FLEXGlobalsEntry *)globalEntryAtIndexPath:(NSIndexPath *)indexPath -{ - if (self.filteredSections) { - return self.filteredSections[indexPath.section][indexPath.row]; - } else { - return self.sections[indexPath.section][indexPath.row]; - } -} - -- (NSString *)titleForSection:(NSInteger)section -{ - if (self.filteredSections) { - return self.filteredSections[section].title; - } else { - return self.sections[section].title; - } -} - -- (NSString *)titleForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXGlobalsEntry *entry = [self globalEntryAtIndexPath:indexPath]; - return entry.entryNameFuture(); -} - -#pragma mark - Table View Data Source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return self.filteredSections ? self.filteredSections.count : self.sections.count; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - if (self.filteredSections) { - return self.filteredSections[section].count; - } else { - return self.sections[section].count; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.textLabel.font = [FLEXUtility defaultFontOfSize:14.0]; - } - - cell.textLabel.text = [self titleForRowAtIndexPath:indexPath]; - - return cell; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - return [self titleForSection:section]; -} - -#pragma mark - Table View Delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXGlobalsEntry *entry = [self globalEntryAtIndexPath:indexPath]; - if (entry.viewControllerFuture) { - [self.navigationController pushViewController:entry.viewControllerFuture() animated:YES]; - } else { - entry.rowAction(self); - } -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.h new file mode 100644 index 00000000..6f08eb1f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.h @@ -0,0 +1,28 @@ +// +// FLEXGlobalsViewController.h +// Flipboard +// +// Created by Ryan Olson on 2014-05-03. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXFilteringTableViewController.h" +@protocol FLEXGlobalsTableViewControllerDelegate; + +typedef NS_ENUM(NSUInteger, FLEXGlobalsSectionKind) { + /// NSProcessInfo, Network history, system log, + /// heap, address explorer, libraries, app classes + FLEXGlobalsSectionProcessAndEvents, + /// Browse container, browse bundle, NSBundle.main, + /// NSUserDefaults.standard, UIApplication, + /// app delegate, key window, root VC, cookies + FLEXGlobalsSectionAppShortcuts, + /// UIPasteBoard.general, UIScreen, UIDevice + FLEXGlobalsSectionMisc, + FLEXGlobalsSectionCustom, + FLEXGlobalsSectionCount +}; + +@interface FLEXGlobalsViewController : FLEXFilteringTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.m new file mode 100644 index 00000000..cc022b53 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.m @@ -0,0 +1,198 @@ +// +// FLEXGlobalsViewController.m +// Flipboard +// +// Created by Ryan Olson on 2014-05-03. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXGlobalsViewController.h" +#import "FLEXUtility.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXObjcRuntimeViewController.h" +#import "FLEXKeychainViewController.h" +#import "FLEXObjectExplorerViewController.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXLiveObjectsController.h" +#import "FLEXFileBrowserController.h" +#import "FLEXCookiesViewController.h" +#import "FLEXGlobalsEntry.h" +#import "FLEXManager+Private.h" +#import "FLEXSystemLogViewController.h" +#import "FLEXNetworkMITMViewController.h" +#import "FLEXAddressExplorerCoordinator.h" +#import "FLEXGlobalsSection.h" +#import "UIBarButtonItem+FLEX.h" + +@interface FLEXGlobalsViewController () +/// Only displayed sections of the table view; empty sections are purged from this array. +@property (nonatomic) NSArray *sections; +/// Every section in the table view, regardless of whether or not a section is empty. +@property (nonatomic, readonly) NSArray *allSections; +@property (nonatomic, readonly) BOOL manuallyDeselectOnAppear; +@end + +@implementation FLEXGlobalsViewController +@dynamic sections, allSections; + +#pragma mark - Initialization + ++ (NSString *)globalsTitleForSection:(FLEXGlobalsSectionKind)section { + switch (section) { + case FLEXGlobalsSectionProcessAndEvents: + return @"Process and Events"; + case FLEXGlobalsSectionAppShortcuts: + return @"App Shortcuts"; + case FLEXGlobalsSectionMisc: + return @"Miscellaneous"; + case FLEXGlobalsSectionCustom: + return @"Custom Additions"; + + default: + @throw NSInternalInconsistencyException; + } +} + ++ (FLEXGlobalsEntry *)globalsEntryForRow:(FLEXGlobalsRow)row { + switch (row) { + case FLEXGlobalsRowAppKeychainItems: + return [FLEXKeychainViewController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowAddressInspector: + return [FLEXAddressExplorerCoordinator flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowBrowseRuntime: + return [FLEXObjcRuntimeViewController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowLiveObjects: + return [FLEXLiveObjectsController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowCookies: + return [FLEXCookiesViewController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowBrowseBundle: + case FLEXGlobalsRowBrowseContainer: + return [FLEXFileBrowserController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowSystemLog: + return [FLEXSystemLogViewController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowNetworkHistory: + return [FLEXNetworkMITMViewController flex_concreteGlobalsEntry:row]; + case FLEXGlobalsRowKeyWindow: + case FLEXGlobalsRowRootViewController: + case FLEXGlobalsRowProcessInfo: + case FLEXGlobalsRowAppDelegate: + case FLEXGlobalsRowUserDefaults: + case FLEXGlobalsRowMainBundle: + case FLEXGlobalsRowApplication: + case FLEXGlobalsRowMainScreen: + case FLEXGlobalsRowCurrentDevice: + case FLEXGlobalsRowPasteboard: + case FLEXGlobalsRowURLSession: + case FLEXGlobalsRowURLCache: + case FLEXGlobalsRowNotificationCenter: + case FLEXGlobalsRowMenuController: + case FLEXGlobalsRowFileManager: + case FLEXGlobalsRowTimeZone: + case FLEXGlobalsRowLocale: + case FLEXGlobalsRowCalendar: + case FLEXGlobalsRowMainRunLoop: + case FLEXGlobalsRowMainThread: + case FLEXGlobalsRowOperationQueue: + return [FLEXObjectExplorerFactory flex_concreteGlobalsEntry:row]; + + default: + @throw [NSException + exceptionWithName:NSInternalInconsistencyException + reason:@"Missing globals case in switch" userInfo:nil + ]; + } +} + ++ (NSArray *)defaultGlobalSections { + static NSArray *sections = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSArray *rowsBySection = @[ + @[ + [self globalsEntryForRow:FLEXGlobalsRowNetworkHistory], + [self globalsEntryForRow:FLEXGlobalsRowSystemLog], + [self globalsEntryForRow:FLEXGlobalsRowProcessInfo], + [self globalsEntryForRow:FLEXGlobalsRowLiveObjects], + [self globalsEntryForRow:FLEXGlobalsRowAddressInspector], + [self globalsEntryForRow:FLEXGlobalsRowBrowseRuntime], + ], + @[ // FLEXGlobalsSectionAppShortcuts + [self globalsEntryForRow:FLEXGlobalsRowBrowseBundle], + [self globalsEntryForRow:FLEXGlobalsRowBrowseContainer], + [self globalsEntryForRow:FLEXGlobalsRowMainBundle], + [self globalsEntryForRow:FLEXGlobalsRowUserDefaults], + [self globalsEntryForRow:FLEXGlobalsRowAppKeychainItems], + [self globalsEntryForRow:FLEXGlobalsRowApplication], + [self globalsEntryForRow:FLEXGlobalsRowAppDelegate], + [self globalsEntryForRow:FLEXGlobalsRowKeyWindow], + [self globalsEntryForRow:FLEXGlobalsRowRootViewController], + [self globalsEntryForRow:FLEXGlobalsRowCookies], + ], + @[ // FLEXGlobalsSectionMisc + [self globalsEntryForRow:FLEXGlobalsRowPasteboard], + [self globalsEntryForRow:FLEXGlobalsRowMainScreen], + [self globalsEntryForRow:FLEXGlobalsRowCurrentDevice], + [self globalsEntryForRow:FLEXGlobalsRowURLSession], + [self globalsEntryForRow:FLEXGlobalsRowURLCache], + [self globalsEntryForRow:FLEXGlobalsRowNotificationCenter], + [self globalsEntryForRow:FLEXGlobalsRowMenuController], + [self globalsEntryForRow:FLEXGlobalsRowFileManager], + [self globalsEntryForRow:FLEXGlobalsRowTimeZone], + [self globalsEntryForRow:FLEXGlobalsRowLocale], + [self globalsEntryForRow:FLEXGlobalsRowCalendar], + [self globalsEntryForRow:FLEXGlobalsRowMainRunLoop], + [self globalsEntryForRow:FLEXGlobalsRowMainThread], + [self globalsEntryForRow:FLEXGlobalsRowOperationQueue], + ] + ]; + + sections = [NSArray flex_forEachUpTo:rowsBySection.count map:^FLEXGlobalsSection *(NSUInteger i) { + NSString *title = [self globalsTitleForSection:i]; + return [FLEXGlobalsSection title:title rows:rowsBySection[i]]; + }]; + }); + + return sections; +} + + +#pragma mark - Overrides + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"💪 FLEX"; + self.showsSearchBar = YES; + self.searchBarDebounceInterval = kFLEXDebounceInstant; + self.navigationItem.backBarButtonItem = [UIBarButtonItem backItemWithTitle:@"Back"]; + + _manuallyDeselectOnAppear = NSProcessInfo.processInfo.operatingSystemVersion.majorVersion < 10; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self disableToolbar]; + + if (self.manuallyDeselectOnAppear) { + [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; + } +} + +- (NSArray *)makeSections { + NSArray *sections = [self.class defaultGlobalSections]; + + // Do we have custom sections to add? + if (FLEXManager.sharedManager.userGlobalEntries.count) { + NSString *title = [[self class] globalsTitleForSection:FLEXGlobalsSectionCustom]; + FLEXGlobalsSection *custom = [FLEXGlobalsSection + title:title + rows:FLEXManager.sharedManager.userGlobalEntries + ]; + sections = [sections arrayByAddingObject:custom]; + } + + return sections; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m index 37e17947..0735fc8d 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m @@ -86,7 +86,7 @@ + (BOOL)setPasswordData:(NSData *)password forService:(NSString *)serviceName ac } + (NSArray *)allAccounts { - return [self allAccounts:nil]; + return [self allAccounts:nil] ?: @[]; } + (NSArray *)allAccounts:(NSError *__autoreleasing *)error { diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m index 6d88b45b..8ad3bc93 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m @@ -29,7 +29,7 @@ - (BOOL)save:(NSError *__autoreleasing *)error { query = [[NSMutableDictionary alloc]init]; query[(__bridge id)kSecValueData] = self.passwordData; #if __IPHONE_4_0 && TARGET_OS_IPHONE - CFTypeRef accessibilityType = [FLEXKeychain accessibilityType]; + CFTypeRef accessibilityType = FLEXKeychain.accessibilityType; if (accessibilityType) { query[(__bridge id)kSecAttrAccessible] = (__bridge id)accessibilityType; } @@ -42,7 +42,7 @@ - (BOOL)save:(NSError *__autoreleasing *)error { } query[(__bridge id)kSecValueData] = self.passwordData; #if __IPHONE_4_0 && TARGET_OS_IPHONE - CFTypeRef accessibilityType = [FLEXKeychain accessibilityType]; + CFTypeRef accessibilityType = FLEXKeychain.accessibilityType; if (accessibilityType) { query[(__bridge id)kSecAttrAccessible] = (__bridge id)accessibilityType; } @@ -103,7 +103,7 @@ - (NSArray *)fetchAll:(NSError *__autoreleasing *)error { query[(__bridge id)kSecReturnAttributes] = @YES; query[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitAll; #if __IPHONE_4_0 && TARGET_OS_IPHONE - CFTypeRef accessibilityType = [FLEXKeychain accessibilityType]; + CFTypeRef accessibilityType = FLEXKeychain.accessibilityType; if (accessibilityType) { query[(__bridge id)kSecAttrAccessible] = (__bridge id)accessibilityType; } @@ -116,7 +116,7 @@ - (NSArray *)fetchAll:(NSError *__autoreleasing *)error { return nil; } - return (__bridge_transfer NSArray *)result; + return (__bridge_transfer NSArray *)result ?: @[]; } @@ -182,7 +182,7 @@ - (NSString *)password { #ifdef FLEXKEYCHAIN_SYNCHRONIZATION_AVAILABLE + (BOOL)isSynchronizationAvailable { #if TARGET_OS_IPHONE - return @available(iOS 7.0, *); + return YES; #else return floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4; #endif @@ -193,7 +193,7 @@ + (BOOL)isSynchronizationAvailable { #pragma mark - Private - (NSMutableDictionary *)query { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + NSMutableDictionary *dictionary = [NSMutableDictionary new]; dictionary[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword; if (self.service) { diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.h deleted file mode 100644 index c8705bb6..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FLEXKeychainTableViewController.h -// FLEX -// -// Created by ray on 2019/8/17. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXGlobalsEntry.h" -#import "FLEXTableViewController.h" - -@interface FLEXKeychainTableViewController : FLEXTableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.m deleted file mode 100644 index a6d49c18..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.m +++ /dev/null @@ -1,165 +0,0 @@ -// -// FLEXKeychainTableViewController.m -// FLEX -// -// Created by ray on 2019/8/17. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXKeychain.h" -#import "FLEXKeychainQuery.h" -#import "FLEXKeychainTableViewController.h" -#import "FLEXUtility.h" - -@interface FLEXKeychainTableViewController () - -@property (nonatomic) NSArray *keyChainItems; - -@end - -@implementation FLEXKeychainTableViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.navigationItem.rightBarButtonItems = @[ - [[UIBarButtonItem alloc] - initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(trashPressed) - ], - [[UIBarButtonItem alloc] - initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed) - ], - ]; - - [self refreshKeychainItems]; -} - -- (void)refreshKeychainItems -{ - self.keyChainItems = [FLEXKeychain allAccounts]; - self.title = [NSString stringWithFormat:@"🔑 Keychain Items (%lu)", (unsigned long)self.keyChainItems.count]; -} - -#pragma mark Buttons - -- (void)trashPressed -{ - [FLEXAlert makeSheet:^(FLEXAlert *make) { - make.title(@"Clear Keychain"); - make.message(@"This will remove all keychain items for this app.\n"); - make.message(@"This action cannot be undone. Are you sure?"); - make.button(@"Yes, clear the keychain").destructiveStyle().handler(^(NSArray *strings) { - for (id account in self.keyChainItems) { - FLEXKeychainQuery *query = [FLEXKeychainQuery new]; - query.service = account[kFLEXKeychainWhereKey]; - query.account = account[kFLEXKeychainAccountKey]; - - // Delete item or display error - NSError *error = nil; - if (![query deleteItem:&error]) { - [FLEXAlert makeAlert:^(FLEXAlert *make) { - make.title(@"Error Deleting Item"); - make.message(error.localizedDescription); - } showFrom:self]; - } - } - - [self refreshKeychainItems]; - [self.tableView reloadData]; - }); - make.button(@"Cancel").cancelStyle(); - } showFrom:self]; -} - -- (void)addPressed -{ - [FLEXAlert makeAlert:^(FLEXAlert *make) { - make.title(@"Add Keychain Item"); - make.textField(@"Service name, i.e. Instagram"); - make.textField(@"Account, i.e. username@example.com"); - make.textField(@"Password"); - make.button(@"Cancel").cancelStyle(); - make.button(@"Save").handler(^(NSArray *strings) { - // Display errors - NSError *error = nil; - if (![FLEXKeychain setPassword:strings[2] forService:strings[0] account:strings[1] error:&error]) { - [FLEXAlert showAlert:@"Error" message:error.localizedDescription from:self]; - } - - [self refreshKeychainItems]; - [self.tableView reloadData]; - }); - } showFrom:self]; -} - - - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row -{ - return @"🔑 Keychain"; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row -{ - return [self new]; -} - - -#pragma mark - Table View Data Source - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.keyChainItems.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - } - - NSDictionary *item = self.keyChainItems[indexPath.row]; - cell.textLabel.text = item[kFLEXKeychainAccountKey]; - - return cell; -} - - -#pragma mark - Table View Delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSDictionary *item = self.keyChainItems[indexPath.row]; - - FLEXKeychainQuery *query = [FLEXKeychainQuery new]; - query.service = item[kFLEXKeychainWhereKey]; - query.account = item[kFLEXKeychainAccountKey]; - [query fetch:nil]; - - [FLEXAlert makeAlert:^(FLEXAlert *make) { - make.title(query.service); - make.message(@"Service: ").message(query.service); - make.message(@"\nAccount: ").message(query.account); - make.message(@"\nPassword: ").message(query.password); - - make.button(@"Copy Service").handler(^(NSArray *strings) { - UIPasteboard.generalPasteboard.string = query.service; - }); - make.button(@"Copy Account").handler(^(NSArray *strings) { - UIPasteboard.generalPasteboard.string = query.account; - }); - make.button(@"Copy Password").handler(^(NSArray *strings) { - UIPasteboard.generalPasteboard.string = query.password; - }); - make.button(@"Dismiss").cancelStyle(); - } showFrom:self]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.h new file mode 100644 index 00000000..570dcdb9 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.h @@ -0,0 +1,14 @@ +// +// FLEXKeychainViewController.h +// FLEX +// +// Created by ray on 2019/8/17. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXGlobalsEntry.h" +#import "FLEXFilteringTableViewController.h" + +@interface FLEXKeychainViewController : FLEXFilteringTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.m new file mode 100644 index 00000000..e10d68a6 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.m @@ -0,0 +1,235 @@ +// +// FLEXKeychainViewController.m +// FLEX +// +// Created by ray on 2019/8/17. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXKeychain.h" +#import "FLEXKeychainQuery.h" +#import "FLEXKeychainViewController.h" +#import "FLEXTableViewCell.h" +#import "FLEXMutableListSection.h" +#import "FLEXUtility.h" +#import "UIPasteboard+FLEX.h" +#import "UIBarButtonItem+FLEX.h" + +@interface FLEXKeychainViewController () +@property (nonatomic, readonly) FLEXMutableListSection *section; +@end + +@implementation FLEXKeychainViewController + +- (id)init { + return [self initWithStyle:UITableViewStyleGrouped]; +} + +#pragma mark - Overrides + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.navigationItem.rightBarButtonItems = @[ + [UIBarButtonItem systemItem:UIBarButtonSystemItemTrash target:self action:@selector(trashPressed:)], + [UIBarButtonItem systemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPressed)], + ]; + + [self reloadData]; +} + +- (NSArray *)makeSections { + _section = [FLEXMutableListSection list:FLEXKeychain.allAccounts.mutableCopy + cellConfiguration:^(__kindof FLEXTableViewCell *cell, NSDictionary *item, NSInteger row) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + id account = item[kFLEXKeychainAccountKey]; + if ([account isKindOfClass:[NSString class]]) { + cell.textLabel.text = account; + } else { + cell.textLabel.text = [NSString stringWithFormat: + @"[%@]\n\n%@", + NSStringFromClass([account class]), + [account description] + ]; + } + } filterMatcher:^BOOL(NSString *filterText, NSDictionary *item) { + // Loop over contents of the keychain item looking for a match + for (NSString *field in item.allValues) { + if ([field isKindOfClass:[NSString class]]) { + if ([field localizedCaseInsensitiveContainsString:filterText]) { + return YES; + } + } + } + + return NO; + } + ]; + + return @[self.section]; +} + +/// We always want to show this section +- (NSArray *)nonemptySections { + return @[self.section]; +} + +- (void)reloadSections { + self.section.list = FLEXKeychain.allAccounts.mutableCopy; +} + +- (void)refreshSectionTitle { + self.section.customTitle = FLEXPluralString( + self.section.filteredList.count, @"items", @"item" + ); +} + +- (void)reloadData { + [self reloadSections]; + [self refreshSectionTitle]; + [super reloadData]; +} + + +#pragma mark - Private + +- (FLEXKeychainQuery *)queryForItemAtIndex:(NSInteger)idx { + NSDictionary *item = self.section.filteredList[idx]; + + FLEXKeychainQuery *query = [FLEXKeychainQuery new]; + query.service = item[kFLEXKeychainWhereKey]; + query.account = item[kFLEXKeychainAccountKey]; + [query fetch:nil]; + + return query; +} + +- (void)deleteItem:(NSDictionary *)item { + NSError *error = nil; + BOOL success = [FLEXKeychain + deletePasswordForService:item[kFLEXKeychainWhereKey] + account:item[kFLEXKeychainAccountKey] + error:&error + ]; + + if (!success) { + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Error Deleting Item"); + make.message(error.localizedDescription); + } showFrom:self]; + } +} + + +#pragma mark Buttons + +- (void)trashPressed:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + make.title(@"Clear Keychain"); + make.message(@"This will remove all keychain items for this app.\n"); + make.message(@"This action cannot be undone. Are you sure?"); + make.button(@"Yes, clear the keychain").destructiveStyle().handler(^(NSArray *strings) { + for (id account in self.section.list) { + [self deleteItem:account]; + } + + [self reloadData]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + +- (void)addPressed { + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Add Keychain Item"); + make.textField(@"Service name, i.e. Instagram"); + make.textField(@"Account"); + make.textField(@"Password"); + make.button(@"Cancel").cancelStyle(); + make.button(@"Save").handler(^(NSArray *strings) { + // Display errors + NSError *error = nil; + if (![FLEXKeychain setPassword:strings[2] forService:strings[0] account:strings[1] error:&error]) { + [FLEXAlert showAlert:@"Error" message:error.localizedDescription from:self]; + } + + [self reloadData]; + }); + } showFrom:self]; +} + + +#pragma mark - FLEXGlobalsEntry + ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { + return @"🔑 Keychain"; +} + ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { + FLEXKeychainViewController *viewController = [self new]; + viewController.title = [self globalsEntryTitle:row]; + + return viewController; +} + + +#pragma mark - Table View Data Source + +- (void)tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)style forRowAtIndexPath:(NSIndexPath *)ip { + if (style == UITableViewCellEditingStyleDelete) { + // Update the model + NSDictionary *toRemove = self.section.filteredList[ip.row]; + [self deleteItem:toRemove]; + [self.section mutate:^(NSMutableArray *list) { + [list removeObject:toRemove]; + }]; + + // Delete the row + [tv deleteRowsAtIndexPaths:@[ip] withRowAnimation:UITableViewRowAnimationAutomatic]; + + // Update the title by refreshing the section without disturbing the delete animation + // + // This is an ugly hack, but literally nothing else works, save for manually getting + // the header and setting its title, which I personally think is worse since it + // would need to make assumptions about the default style of the header (CAPS) + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self refreshSectionTitle]; + [tv reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone]; + }); + } +} + + +#pragma mark - Table View Delegate + +- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXKeychainQuery *query = [self queryForItemAtIndex:indexPath.row]; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(query.service); + make.message(@"Service: ").message(query.service); + make.message(@"\nAccount: ").message(query.account); + make.message(@"\nPassword: ").message(query.password); + + make.button(@"Copy Service").handler(^(NSArray *strings) { + [UIPasteboard.generalPasteboard flex_copy:query.service]; + }); + make.button(@"Copy Account").handler(^(NSArray *strings) { + [UIPasteboard.generalPasteboard flex_copy:query.account]; + }); + make.button(@"Copy Password").handler(^(NSArray *strings) { + [UIPasteboard.generalPasteboard flex_copy:query.password]; + }); + make.button(@"Dismiss").cancelStyle(); + + } showFrom:self]; + + [tableView deselectRowAtIndexPath:indexPath animated:YES]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.h new file mode 100644 index 00000000..03f263d7 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.h @@ -0,0 +1,54 @@ +// +// FLEXRuntimeClient.h +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXSearchToken.h" +@class FLEXMethod; + +/// Accepts runtime queries given a token. +@interface FLEXRuntimeClient : NSObject + +@property (nonatomic, readonly, class) FLEXRuntimeClient *runtime; + +/// Called automatically when \c FLEXRuntime is first used. +/// You may call it again when you think a library has +/// been loaded since this method was first called. +- (void)reloadLibrariesList; + +/// You must call this method on the main thread +/// before you attempt to call \c copySafeClassList. ++ (void)initializeWebKitLegacy; + +/// Do not call unless you absolutely need all classes. This will cause +/// every class in the runtime to initialize itself, which is not common. +/// Before you call this method, call \c initializeWebKitLegacy on the main thread. +- (NSArray *)copySafeClassList; + +- (NSArray *)copyProtocolList; + +/// An array of strings representing the currently loaded libraries. +@property (nonatomic, readonly) NSArray *imageDisplayNames; + +/// "Image name" is the path of the bundle +- (NSString *)shortNameForImageName:(NSString *)imageName; +/// "Image name" is the path of the bundle +- (NSString *)imageNameForShortName:(NSString *)imageName; + +/// @return Bundle names for the UI +- (NSMutableArray *)bundleNamesForToken:(FLEXSearchToken *)token; +/// @return Bundle paths for more queries +- (NSMutableArray *)bundlePathsForToken:(FLEXSearchToken *)token; +/// @return Class names +- (NSMutableArray *)classesForToken:(FLEXSearchToken *)token + inBundles:(NSMutableArray *)bundlePaths; +/// @return A list of lists of \c FLEXMethods where +/// each list corresponds to one of the given classes +- (NSArray *> *)methodsForToken:(FLEXSearchToken *)token + instance:(NSNumber *)onlyInstanceMethods + inClasses:(NSArray *)classes; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.m new file mode 100644 index 00000000..af6918e3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.m @@ -0,0 +1,416 @@ +// +// FLEXRuntimeClient.m +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeClient.h" +#import "NSObject+FLEX_Reflection.h" +#import "FLEXMethod.h" +#import "NSArray+FLEX.h" +#import "FLEXRuntimeSafety.h" +#include + +#define Equals(a, b) ([a compare:b options:NSCaseInsensitiveSearch] == NSOrderedSame) +#define Contains(a, b) ([a rangeOfString:b options:NSCaseInsensitiveSearch].location != NSNotFound) +#define HasPrefix(a, b) ([a rangeOfString:b options:NSCaseInsensitiveSearch].location == 0) +#define HasSuffix(a, b) ([a rangeOfString:b options:NSCaseInsensitiveSearch].location == (a.length - b.length)) + + +@interface FLEXRuntimeClient () { + NSMutableArray *_imageDisplayNames; +} + +@property (nonatomic) NSMutableDictionary *bundles_pathToShort; +@property (nonatomic) NSMutableDictionary *bundles_shortToPath; +@property (nonatomic) NSCache *bundles_pathToClassNames; +@property (nonatomic) NSMutableArray *imagePaths; + +@end + +/// @return success if the map passes. +static inline NSString * TBWildcardMap_(NSString *token, NSString *candidate, NSString *success, TBWildcardOptions options) { + switch (options) { + case TBWildcardOptionsNone: + // Only "if equals" + if (Equals(candidate, token)) { + return success; + } + default: { + // Only "if contains" + if (options & TBWildcardOptionsPrefix && + options & TBWildcardOptionsSuffix) { + if (Contains(candidate, token)) { + return success; + } + } + // Only "if candidate ends with with token" + else if (options & TBWildcardOptionsPrefix) { + if (HasSuffix(candidate, token)) { + return success; + } + } + // Only "if candidate starts with with token" + else if (options & TBWildcardOptionsSuffix) { + // Case like "Bundle." where we want "" to match anything + if (!token.length) { + return success; + } + if (HasPrefix(candidate, token)) { + return success; + } + } + } + } + + return nil; +} + +/// @return candidate if the map passes. +static inline NSString * TBWildcardMap(NSString *token, NSString *candidate, TBWildcardOptions options) { + return TBWildcardMap_(token, candidate, candidate, options); +} + +@implementation FLEXRuntimeClient + +#pragma mark - Initialization + ++ (instancetype)runtime { + static FLEXRuntimeClient *runtime; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + runtime = [self new]; + [runtime reloadLibrariesList]; + }); + + return runtime; +} + +- (id)init { + self = [super init]; + if (self) { + _imagePaths = [NSMutableArray new]; + _bundles_pathToShort = [NSMutableDictionary new]; + _bundles_shortToPath = [NSMutableDictionary new]; + _bundles_pathToClassNames = [NSCache new]; + } + + return self; +} + +#pragma mark - Private + +- (void)reloadLibrariesList { + unsigned int imageCount = 0; + const char **imageNames = objc_copyImageNames(&imageCount); + + if (imageNames) { + NSMutableArray *imageNameStrings = [NSMutableArray flex_forEachUpTo:imageCount map:^NSString *(NSUInteger i) { + return @(imageNames[i]); + }]; + + self.imagePaths = imageNameStrings; + free(imageNames); + + // Sort alphabetically + [imageNameStrings sortUsingComparator:^NSComparisonResult(NSString *name1, NSString *name2) { + NSString *shortName1 = [self shortNameForImageName:name1]; + NSString *shortName2 = [self shortNameForImageName:name2]; + return [shortName1 caseInsensitiveCompare:shortName2]; + }]; + + // Cache image display names + _imageDisplayNames = [imageNameStrings flex_mapped:^id(NSString *path, NSUInteger idx) { + return [self shortNameForImageName:path]; + }]; + } +} + +- (NSString *)shortNameForImageName:(NSString *)imageName { + // Cache + NSString *shortName = _bundles_pathToShort[imageName]; + if (shortName) { + return shortName; + } + + NSArray *components = [imageName componentsSeparatedByString:@"/"]; + if (components.count >= 2) { + NSString *parentDir = components[components.count - 2]; + if ([parentDir hasSuffix:@".framework"] || [parentDir hasSuffix:@".axbundle"]) { + if ([imageName hasSuffix:@".dylib"]) { + shortName = imageName.lastPathComponent; + } else { + shortName = parentDir; + } + } + } + + if (!shortName) { + shortName = imageName.lastPathComponent; + } + + _bundles_pathToShort[imageName] = shortName; + _bundles_shortToPath[shortName] = imageName; + return shortName; +} + +- (NSString *)imageNameForShortName:(NSString *)imageName { + return _bundles_shortToPath[imageName]; +} + +- (NSMutableArray *)classNamesInImageAtPath:(NSString *)path { + // Check cache + NSMutableArray *classNameStrings = [_bundles_pathToClassNames objectForKey:path]; + if (classNameStrings) { + return classNameStrings.mutableCopy; + } + + unsigned int classCount = 0; + const char **classNames = objc_copyClassNamesForImage(path.UTF8String, &classCount); + + if (classNames) { + classNameStrings = [NSMutableArray flex_forEachUpTo:classCount map:^id(NSUInteger i) { + return @(classNames[i]); + }]; + + free(classNames); + + [classNameStrings sortUsingSelector:@selector(caseInsensitiveCompare:)]; + [_bundles_pathToClassNames setObject:classNameStrings forKey:path]; + + return classNameStrings.mutableCopy; + } + + return [NSMutableArray new]; +} + +#pragma mark - Public + ++ (void)initializeWebKitLegacy { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + void *handle = dlopen( + "/System/Library/PrivateFrameworks/WebKitLegacy.framework/WebKitLegacy", + RTLD_LAZY + ); + void (*WebKitInitialize)() = dlsym(handle, "WebKitInitialize"); + if (WebKitInitialize) { + NSAssert(NSThread.isMainThread, + @"WebKitInitialize can only be called on the main thread" + ); + WebKitInitialize(); + } + }); +} + +- (NSArray *)copySafeClassList { + unsigned int count = 0; + Class *classes = objc_copyClassList(&count); + return [NSArray flex_forEachUpTo:count map:^id(NSUInteger i) { + Class cls = classes[i]; + return FLEXClassIsSafe(cls) ? cls : nil; + }]; +} + +- (NSArray *)copyProtocolList { + unsigned int count = 0; + Protocol *__unsafe_unretained *protocols = objc_copyProtocolList(&count); + return [NSArray arrayWithObjects:protocols count:count]; +} + +- (NSMutableArray *)bundleNamesForToken:(FLEXSearchToken *)token { + if (self.imagePaths.count) { + TBWildcardOptions options = token.options; + NSString *query = token.string; + + // Optimization, avoid a loop + if (options == TBWildcardOptionsAny) { + return _imageDisplayNames; + } + + // No dot syntax because imageDisplayNames is only mutable internally + return [_imageDisplayNames flex_mapped:^id(NSString *binary, NSUInteger idx) { +// NSString *UIName = [self shortNameForImageName:binary]; + return TBWildcardMap(query, binary, options); + }]; + } + + return [NSMutableArray new]; +} + +- (NSMutableArray *)bundlePathsForToken:(FLEXSearchToken *)token { + if (self.imagePaths.count) { + TBWildcardOptions options = token.options; + NSString *query = token.string; + + // Optimization, avoid a loop + if (options == TBWildcardOptionsAny) { + return self.imagePaths; + } + + return [self.imagePaths flex_mapped:^id(NSString *binary, NSUInteger idx) { + NSString *UIName = [self shortNameForImageName:binary]; + // If query == UIName, -> binary + return TBWildcardMap_(query, UIName, binary, options); + }]; + } + + return [NSMutableArray new]; +} + +- (NSMutableArray *)classesForToken:(FLEXSearchToken *)token inBundles:(NSMutableArray *)bundles { + // Edge case where token is the class we want already; return superclasses + if (token.isAbsolute) { + if (FLEXClassIsSafe(NSClassFromString(token.string))) { + return [NSMutableArray arrayWithObject:token.string]; + } + + return [NSMutableArray new]; + } + + if (bundles.count) { + // Get class names, remove unsafe classes + NSMutableArray *names = [self _classesForToken:token inBundles:bundles]; + return [names flex_mapped:^NSString *(NSString *name, NSUInteger idx) { + Class cls = NSClassFromString(name); + BOOL safe = FLEXClassIsSafe(cls); + return safe ? name : nil; + }]; + } + + return [NSMutableArray new]; +} + +- (NSMutableArray *)_classesForToken:(FLEXSearchToken *)token inBundles:(NSMutableArray *)bundles { + TBWildcardOptions options = token.options; + NSString *query = token.string; + + // Optimization, avoid unnecessary sorting + if (bundles.count == 1) { + // Optimization, avoid a loop + if (options == TBWildcardOptionsAny) { + return [self classNamesInImageAtPath:bundles.firstObject]; + } + + return [[self classNamesInImageAtPath:bundles.firstObject] flex_mapped:^id(NSString *className, NSUInteger idx) { + return TBWildcardMap(query, className, options); + }]; + } + else { + // Optimization, avoid a loop + if (options == TBWildcardOptionsAny) { + return [[bundles flex_flatmapped:^NSArray *(NSString *bundlePath, NSUInteger idx) { + return [self classNamesInImageAtPath:bundlePath]; + }] sortedUsingSelector:@selector(caseInsensitiveCompare:)]; + } + + return [[bundles flex_flatmapped:^NSArray *(NSString *bundlePath, NSUInteger idx) { + return [[self classNamesInImageAtPath:bundlePath] flex_mapped:^id(NSString *className, NSUInteger idx) { + return TBWildcardMap(query, className, options); + }]; + }] sortedUsingSelector:@selector(caseInsensitiveCompare:)]; + } +} + +- (NSArray *> *)methodsForToken:(FLEXSearchToken *)token + instance:(NSNumber *)checkInstance + inClasses:(NSArray *)classes { + if (classes.count) { + TBWildcardOptions options = token.options; + BOOL instance = checkInstance.boolValue; + NSString *selector = token.string; + + switch (options) { + // In practice I don't think this case is ever used with methods, + // since they will always have a suffix wildcard at the end + case TBWildcardOptionsNone: { + SEL sel = (SEL)selector.UTF8String; + return @[[classes flex_mapped:^id(NSString *name, NSUInteger idx) { + Class cls = NSClassFromString(name); + // Use metaclass if not instance + if (!instance) { + cls = object_getClass(cls); + } + + // Method is absolute + return [FLEXMethod selector:sel class:cls]; + }]]; + } + case TBWildcardOptionsAny: { + return [classes flex_mapped:^NSArray *(NSString *name, NSUInteger idx) { + // Any means `instance` was not specified + Class cls = NSClassFromString(name); + return [cls flex_allMethods]; + }]; + } + default: { + // Only "if contains" + if (options & TBWildcardOptionsPrefix && + options & TBWildcardOptionsSuffix) { + return [classes flex_mapped:^NSArray *(NSString *name, NSUInteger idx) { + Class cls = NSClassFromString(name); + return [[cls flex_allMethods] flex_mapped:^id(FLEXMethod *method, NSUInteger idx) { + + // Method is a prefix-suffix wildcard + if (Contains(method.selectorString, selector)) { + return method; + } + return nil; + }]; + }]; + } + // Only "if method ends with with selector" + else if (options & TBWildcardOptionsPrefix) { + return [classes flex_mapped:^NSArray *(NSString *name, NSUInteger idx) { + Class cls = NSClassFromString(name); + + return [[cls flex_allMethods] flex_mapped:^id(FLEXMethod *method, NSUInteger idx) { + // Method is a prefix wildcard + if (HasSuffix(method.selectorString, selector)) { + return method; + } + return nil; + }]; + }]; + } + // Only "if method starts with with selector" + else if (options & TBWildcardOptionsSuffix) { + assert(checkInstance); + + return [classes flex_mapped:^NSArray *(NSString *name, NSUInteger idx) { + Class cls = NSClassFromString(name); + + // Case like "Bundle.class.-" where we want "-" to match anything + if (!selector.length) { + if (instance) { + return [cls flex_allInstanceMethods]; + } else { + return [cls flex_allClassMethods]; + } + } + + id mapping = ^id(FLEXMethod *method) { + // Method is a suffix wildcard + if (HasPrefix(method.selectorString, selector)) { + return method; + } + return nil; + }; + + if (instance) { + return [[cls flex_allInstanceMethods] flex_mapped:mapping]; + } else { + return [[cls flex_allClassMethods] flex_mapped:mapping]; + } + }]; + } + } + } + } + + return [NSMutableArray new]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.h new file mode 100644 index 00000000..968c975d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.h @@ -0,0 +1,36 @@ +// +// FLEXRuntimeController.h +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeKeyPath.h" + +/// Wraps FLEXRuntimeClient and provides extra caching mechanisms +@interface FLEXRuntimeController : NSObject + +/// @return An array of strings if the key path only evaluates +/// to a class or bundle; otherwise, a list of lists of FLEXMethods. ++ (NSArray *)dataForKeyPath:(FLEXRuntimeKeyPath *)keyPath; + +/// Useful when you need to specify which classes to search in. +/// \c dataForKeyPath: will only search classes matching the class key. +/// We use this elsewhere when we need to search a class hierarchy. ++ (NSArray *> *)methodsForToken:(FLEXSearchToken *)token + instance:(NSNumber *)onlyInstanceMethods + inClasses:(NSArray *)classes; + +/// Useful when you need the classes that are associated with the +/// double list of methods returned from \c dataForKeyPath ++ (NSMutableArray *)classesForKeyPath:(FLEXRuntimeKeyPath *)keyPath; + ++ (NSString *)shortBundleNameForClass:(NSString *)name; + ++ (NSString *)imagePathWithShortName:(NSString *)suffix; + +/// Gives back short names. For example, "Foundation.framework" ++ (NSArray *)allBundleNames; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.m new file mode 100644 index 00000000..64dda728 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.m @@ -0,0 +1,192 @@ +// +// FLEXRuntimeController.m +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeController.h" +#import "FLEXRuntimeClient.h" +#import "FLEXMethod.h" + +@interface FLEXRuntimeController () +@property (nonatomic, readonly) NSCache *bundlePathsCache; +@property (nonatomic, readonly) NSCache *bundleNamesCache; +@property (nonatomic, readonly) NSCache *classNamesCache; +@property (nonatomic, readonly) NSCache *methodsCache; +@end + +@implementation FLEXRuntimeController + +#pragma mark Initialization + +static FLEXRuntimeController *controller = nil; ++ (instancetype)shared { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + controller = [self new]; + }); + + return controller; +} + +- (id)init { + self = [super init]; + if (self) { + _bundlePathsCache = [NSCache new]; + _bundleNamesCache = [NSCache new]; + _classNamesCache = [NSCache new]; + _methodsCache = [NSCache new]; + } + + return self; +} + +#pragma mark Public + ++ (NSArray *)dataForKeyPath:(FLEXRuntimeKeyPath *)keyPath { + if (keyPath.bundleKey) { + if (keyPath.classKey) { + if (keyPath.methodKey) { + return [[self shared] methodsForKeyPath:keyPath]; + } else { + return [[self shared] classesForKeyPath:keyPath]; + } + } else { + return [[self shared] bundleNamesForToken:keyPath.bundleKey]; + } + } else { + return @[]; + } +} + ++ (NSArray *> *)methodsForToken:(FLEXSearchToken *)token + instance:(NSNumber *)inst + inClasses:(NSArray *)classes { + return [FLEXRuntimeClient.runtime + methodsForToken:token + instance:inst + inClasses:classes + ]; +} + ++ (NSMutableArray *)classesForKeyPath:(FLEXRuntimeKeyPath *)keyPath { + return [[self shared] classesForKeyPath:keyPath]; +} + ++ (NSString *)shortBundleNameForClass:(NSString *)name { + const char *imageName = class_getImageName(NSClassFromString(name)); + if (!imageName) { + return @"(unspecified)"; + } + + return [FLEXRuntimeClient.runtime shortNameForImageName:@(imageName)]; +} + ++ (NSString *)imagePathWithShortName:(NSString *)suffix { + return [FLEXRuntimeClient.runtime imageNameForShortName:suffix]; +} + ++ (NSArray *)allBundleNames { + return FLEXRuntimeClient.runtime.imageDisplayNames; +} + +#pragma mark Private + +- (NSMutableArray *)bundlePathsForToken:(FLEXSearchToken *)token { + // Only cache if no wildcard + BOOL shouldCache = token == TBWildcardOptionsNone; + + if (shouldCache) { + NSMutableArray *cached = [self.bundlePathsCache objectForKey:token]; + if (cached) { + return cached; + } + + NSMutableArray *bundles = [FLEXRuntimeClient.runtime bundlePathsForToken:token]; + [self.bundlePathsCache setObject:bundles forKey:token]; + return bundles; + } + else { + return [FLEXRuntimeClient.runtime bundlePathsForToken:token]; + } +} + +- (NSMutableArray *)bundleNamesForToken:(FLEXSearchToken *)token { + // Only cache if no wildcard + BOOL shouldCache = token == TBWildcardOptionsNone; + + if (shouldCache) { + NSMutableArray *cached = [self.bundleNamesCache objectForKey:token]; + if (cached) { + return cached; + } + + NSMutableArray *bundles = [FLEXRuntimeClient.runtime bundleNamesForToken:token]; + [self.bundleNamesCache setObject:bundles forKey:token]; + return bundles; + } + else { + return [FLEXRuntimeClient.runtime bundleNamesForToken:token]; + } +} + +- (NSMutableArray *)classesForKeyPath:(FLEXRuntimeKeyPath *)keyPath { + FLEXSearchToken *classToken = keyPath.classKey; + FLEXSearchToken *bundleToken = keyPath.bundleKey; + + // Only cache if no wildcard + BOOL shouldCache = bundleToken.options == 0 && classToken.options == 0; + NSString *key = nil; + + if (shouldCache) { + key = [@[bundleToken.description, classToken.description] componentsJoinedByString:@"+"]; + NSMutableArray *cached = [self.classNamesCache objectForKey:key]; + if (cached) { + return cached; + } + } + + NSMutableArray *bundles = [self bundlePathsForToken:bundleToken]; + NSMutableArray *classes = [FLEXRuntimeClient.runtime + classesForToken:classToken inBundles:bundles + ]; + + if (shouldCache) { + [self.classNamesCache setObject:classes forKey:key]; + } + + return classes; +} + +- (NSArray *> *)methodsForKeyPath:(FLEXRuntimeKeyPath *)keyPath { + // Only cache if no wildcard, but check cache anyway bc I'm lazy + NSArray *cached = [self.methodsCache objectForKey:keyPath]; + if (cached) { + return cached; + } + + NSArray *classes = [self classesForKeyPath:keyPath]; + NSArray *> *methodLists = [FLEXRuntimeClient.runtime + methodsForToken:keyPath.methodKey + instance:keyPath.instanceMethods + inClasses:classes + ]; + + for (NSMutableArray *methods in methodLists) { + [methods sortUsingComparator:^NSComparisonResult(FLEXMethod *m1, FLEXMethod *m2) { + return [m1.description caseInsensitiveCompare:m2.description]; + }]; + } + + // Only cache if no wildcard, otherwise the cache could grow very large + if (keyPath.bundleKey.isAbsolute && + keyPath.classKey.isAbsolute) { + [self.methodsCache setObject:methodLists forKey:keyPath]; + } + + return methodLists; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.h new file mode 100644 index 00000000..391fcd65 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.h @@ -0,0 +1,29 @@ +// +// FLEXRuntimeExporter.h +// FLEX +// +// Created by Tanner Bennett on 3/26/20. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// A class for exporting all runtime metadata to an SQLite database. +//API_AVAILABLE(ios(10.0)) +@interface FLEXRuntimeExporter : NSObject + ++ (void)createRuntimeDatabaseAtPath:(NSString *)path + progressHandler:(void(^)(NSString *status))progress + completion:(void(^)(NSString *_Nullable error))completion; + ++ (void)createRuntimeDatabaseAtPath:(NSString *)path + forImages:(nullable NSArray *)images + progressHandler:(void(^)(NSString *status))progress + completion:(void(^)(NSString *_Nullable error))completion; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.m new file mode 100644 index 00000000..cefa6223 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.m @@ -0,0 +1,875 @@ +// +// FLEXRuntimeExporter.m +// FLEX +// +// Created by Tanner Bennett on 3/26/20. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXRuntimeExporter.h" +#import "FLEXSQLiteDatabaseManager.h" +#import "NSObject+FLEX_Reflection.h" +#import "FLEXRuntimeController.h" +#import "FLEXRuntimeClient.h" +#import "NSArray+FLEX.h" +#import "FLEXTypeEncodingParser.h" +#import + +#import "FLEXProtocol.h" +#import "FLEXProperty.h" +#import "FLEXIvar.h" +#import "FLEXMethodBase.h" +#import "FLEXMethod.h" +#import "FLEXPropertyAttributes.h" + +NSString * const kFREEnableForeignKeys = @"PRAGMA foreign_keys = ON;"; + +/// Loaded images +NSString * const kFRECreateTableMachOCommand = @"CREATE TABLE MachO( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "shortName TEXT, " + "imagePath TEXT, " + "bundleID TEXT " +");"; + +NSString * const kFREInsertImage = @"INSERT INTO MachO ( " + "shortName, imagePath, bundleID " +") VALUES ( " + "$shortName, $imagePath, $bundleID " +");"; + +/// Objc classes +NSString * const kFRECreateTableClassCommand = @"CREATE TABLE Class( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "className TEXT, " + "superclass INTEGER, " + "instanceSize INTEGER, " + "version INTEGER, " + "image INTEGER, " + + "FOREIGN KEY(superclass) REFERENCES Class(id), " + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertClass = @"INSERT INTO Class ( " + "className, instanceSize, version, image " +") VALUES ( " + "$className, $instanceSize, $version, $image " +");"; + +NSString * const kFREUpdateClassSetSuper = @"UPDATE Class SET superclass = $super WHERE id = $id;"; + +/// Unique objc selectors +NSString * const kFRECreateTableSelectorCommand = @"CREATE TABLE Selector( " + "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + "name text NOT NULL UNIQUE " +");"; + +NSString * const kFREInsertSelector = @"INSERT OR IGNORE INTO Selector (name) VALUES ($name);"; + +/// Unique objc type encodings +NSString * const kFRECreateTableTypeEncodingCommand = @"CREATE TABLE TypeEncoding( " + "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + "string text NOT NULL UNIQUE, " + "size integer " +");"; + +NSString * const kFREInsertTypeEncoding = @"INSERT OR IGNORE INTO TypeEncoding " + "(string, size) VALUES ($type, $size);"; + +/// Unique objc type signatures +NSString * const kFRECreateTableTypeSignatureCommand = @"CREATE TABLE TypeSignature( " + "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + "string text NOT NULL UNIQUE " +");"; + +NSString * const kFREInsertTypeSignature = @"INSERT OR IGNORE INTO TypeSignature " + "(string) VALUES ($type);"; + +NSString * const kFRECreateTableMethodSignatureCommand = @"CREATE TABLE MethodSignature( " + "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + "typeEncoding TEXT, " + "argc INTEGER, " + "returnType INTEGER, " + "frameLength INTEGER, " + + "FOREIGN KEY(returnType) REFERENCES TypeEncoding(id) " +");"; + +NSString * const kFREInsertMethodSignature = @"INSERT INTO MethodSignature ( " + "typeEncoding, argc, returnType, frameLength " +") VALUES ( " + "$typeEncoding, $argc, $returnType, $frameLength " +");"; + +NSString * const kFRECreateTableMethodCommand = @"CREATE TABLE Method( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "sel INTEGER, " + "class INTEGER, " + "instance INTEGER, " // 0 if class method, 1 if instance method + "signature INTEGER, " + "image INTEGER, " + + "FOREIGN KEY(sel) REFERENCES Selector(id), " + "FOREIGN KEY(class) REFERENCES Class(id), " + "FOREIGN KEY(signature) REFERENCES MethodSignature(id), " + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertMethod = @"INSERT INTO Method ( " + "sel, class, instance, signature, image " +") VALUES ( " + "$sel, $class, $instance, $signature, $image " +");"; + +NSString * const kFRECreateTablePropertyCommand = @"CREATE TABLE Property( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT, " + "class INTEGER, " + "instance INTEGER, " // 0 if class prop, 1 if instance prop + "image INTEGER, " + "attributes TEXT, " + + "customGetter INTEGER, " + "customSetter INTEGER, " + + "type INTEGER, " + "ivar TEXT, " + "readonly INTEGER, " + "copy INTEGER, " + "retained INTEGER, " + "nonatomic INTEGER, " + "dynamic INTEGER, " + "weak INTEGER, " + "canGC INTEGER, " + + "FOREIGN KEY(class) REFERENCES Class(id), " + "FOREIGN KEY(customGetter) REFERENCES Selector(id), " + "FOREIGN KEY(customSetter) REFERENCES Selector(id), " + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertProperty = @"INSERT INTO Property ( " + "name, class, instance, attributes, image, " + "customGetter, customSetter, type, ivar, readonly, " + "copy, retained, nonatomic, dynamic, weak, canGC " +") VALUES ( " + "$name, $class, $instance, $attributes, $image, " + "$customGetter, $customSetter, $type, $ivar, $readonly, " + "$copy, $retained, $nonatomic, $dynamic, $weak, $canGC " +");"; + +NSString * const kFRECreateTableIvarCommand = @"CREATE TABLE Ivar( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT, " + "offset INTEGER, " + "type INTEGER, " + "class INTEGER, " + "image INTEGER, " + + "FOREIGN KEY(type) REFERENCES TypeEncoding(id), " + "FOREIGN KEY(class) REFERENCES Class(id), " + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertIvar = @"INSERT INTO Ivar ( " + "name, offset, type, class, image " +") VALUES ( " + "$name, $offset, $type, $class, $image " +");"; + +NSString * const kFRECreateTableProtocolCommand = @"CREATE TABLE Protocol( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT, " + "image INTEGER, " + + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertProtocol = @"INSERT INTO Protocol " + "(name, image) VALUES ($name, $image);"; + +NSString * const kFRECreateTableProtocolPropertyCommand = @"CREATE TABLE ProtocolMember( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "protocol INTEGER, " + "required INTEGER, " + "instance INTEGER, " // 0 if class member, 1 if instance member + + // Only of the two below is used + "property TEXT, " + "method TEXT, " + + "image INTEGER, " + + "FOREIGN KEY(protocol) REFERENCES Protocol(id), " + "FOREIGN KEY(image) REFERENCES MachO(id) " +");"; + +NSString * const kFREInsertProtocolMember = @"INSERT INTO ProtocolMember ( " + "protocol, required, instance, property, method, image " +") VALUES ( " + "$protocol, $required, $instance, $property, $method, $image " +");"; + +/// For protocols conforming to other protocols +NSString * const kFRECreateTableProtocolConformanceCommand = @"CREATE TABLE ProtocolConformance( " + "protocol INTEGER, " + "conformance INTEGER, " + + "FOREIGN KEY(protocol) REFERENCES Protocol(id), " + "FOREIGN KEY(conformance) REFERENCES Protocol(id) " +");"; + +NSString * const kFREInsertProtocolConformance = @"INSERT INTO ProtocolConformance " +"(protocol, conformance) VALUES ($protocol, $conformance);"; + +/// For classes conforming to protocols +NSString * const kFRECreateTableClassConformanceCommand = @"CREATE TABLE ClassConformance( " + "class INTEGER, " + "conformance INTEGER, " + + "FOREIGN KEY(class) REFERENCES Class(id), " + "FOREIGN KEY(conformance) REFERENCES Protocol(id) " +");"; + +NSString * const kFREInsertClassConformance = @"INSERT INTO ClassConformance " +"(class, conformance) VALUES ($class, $conformance);"; + +@interface FLEXRuntimeExporter () +@property (nonatomic, readonly) FLEXSQLiteDatabaseManager *db; +@property (nonatomic, copy) NSArray *loadedShortBundleNames; +@property (nonatomic, copy) NSArray *loadedBundlePaths; +@property (nonatomic, copy) NSArray *protocols; +@property (nonatomic, copy) NSArray *classes; + +@property (nonatomic) NSMutableDictionary *bundlePathsToIDs; +@property (nonatomic) NSMutableDictionary *protocolsToIDs; +@property (nonatomic) NSMutableDictionary *classesToIDs; +@property (nonatomic) NSMutableDictionary *typeEncodingsToIDs; +@property (nonatomic) NSMutableDictionary *methodSignaturesToIDs; +@property (nonatomic) NSMutableDictionary *selectorsToIDs; +@end + +@implementation FLEXRuntimeExporter + ++ (NSString *)tempFilename { + NSString *temp = NSTemporaryDirectory(); + NSString *uuid = [NSUUID.UUID.UUIDString substringToIndex:8]; + NSString *filename = [NSString stringWithFormat:@"FLEXRuntimeDatabase-%@.db", uuid]; + return [temp stringByAppendingPathComponent:filename]; +} + ++ (void)createRuntimeDatabaseAtPath:(NSString *)path + progressHandler:(void(^)(NSString *status))progress + completion:(void (^)(NSString *))completion { + [self createRuntimeDatabaseAtPath:path forImages:nil progressHandler:progress completion:completion]; +} + ++ (void)createRuntimeDatabaseAtPath:(NSString *)path + forImages:(NSArray *)images + progressHandler:(void(^)(NSString *status))progress + completion:(void(^)(NSString *_Nullable error))completion { + __typeof(completion) callback = ^(NSString *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + completion(error); + }); + }; + + // This must be called on the main thread first + if (NSThread.isMainThread) { + [FLEXRuntimeClient initializeWebKitLegacy]; + } else { + dispatch_sync(dispatch_get_main_queue(), ^{ + [FLEXRuntimeClient initializeWebKitLegacy]; + }); + } + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + NSError *error = nil; + NSString *errorMessage = nil; + + // Get unused temp filename, remove existing database if any + NSString *tempPath = [self tempFilename]; + if ([NSFileManager.defaultManager fileExistsAtPath:tempPath]) { + [NSFileManager.defaultManager removeItemAtPath:tempPath error:&error]; + if (error) { + callback(error.localizedDescription); + return; + } + } + + // Attempt to create and populate the database, abort if we fail + FLEXRuntimeExporter *exporter = [self new]; + exporter.loadedBundlePaths = images; + if (![exporter createAndPopulateDatabaseAtPath:tempPath + progressHandler:progress + error:&errorMessage]) { + // Remove temp database if it was not moved + if ([NSFileManager.defaultManager fileExistsAtPath:tempPath]) { + [NSFileManager.defaultManager removeItemAtPath:tempPath error:nil]; + } + + callback(errorMessage); + return; + } + + // Remove old database at given path + if ([NSFileManager.defaultManager fileExistsAtPath:path]) { + [NSFileManager.defaultManager removeItemAtPath:path error:&error]; + if (error) { + callback(error.localizedDescription); + return; + } + } + + // Move new database to desired path + [NSFileManager.defaultManager moveItemAtPath:tempPath toPath:path error:&error]; + if (error) { + callback(error.localizedDescription); + } + + // Remove temp database if it was not moved + if ([NSFileManager.defaultManager fileExistsAtPath:tempPath]) { + [NSFileManager.defaultManager removeItemAtPath:tempPath error:nil]; + } + + callback(nil); + }); +} + +- (id)init { + self = [super init]; + if (self) { + _bundlePathsToIDs = [NSMutableDictionary new]; + _protocolsToIDs = [NSMutableDictionary new]; + _classesToIDs = [NSMutableDictionary new]; + _typeEncodingsToIDs = [NSMutableDictionary new]; + _methodSignaturesToIDs = [NSMutableDictionary new]; + _selectorsToIDs = [NSMutableDictionary new]; + + _bundlePathsToIDs[NSNull.null] = (id)NSNull.null; + } + + return self; +} + +- (BOOL)createAndPopulateDatabaseAtPath:(NSString *)path + progressHandler:(void(^)(NSString *status))step + error:(NSString **)error { + _db = [FLEXSQLiteDatabaseManager managerForDatabase:path]; + + [self loadMetadata:step]; + + if ([self createTables] && [self addImages:step] && [self addProtocols:step] && + [self addClasses:step] && [self setSuperclasses:step] && + [self addProtocolConformances:step] && [self addClassConformances:step] && + [self addIvars:step] && [self addMethods:step] && [self addProperties:step]) { + _db = nil; // Close the database + return YES; + } + + *error = self.db.lastResult.message; + return NO; +} + +- (void)loadMetadata:(void(^)(NSString *status))progress { + progress(@"Loading metadata…"); + + FLEXRuntimeClient *runtime = FLEXRuntimeClient.runtime; + + // Only load metadata for the existing paths if any + if (self.loadedBundlePaths) { + // Images + self.loadedShortBundleNames = [self.loadedBundlePaths flex_mapped:^id(NSString *path, NSUInteger idx) { + return [runtime shortNameForImageName:path]; + }]; + + // Classes + self.classes = [[runtime classesForToken:FLEXSearchToken.any + inBundles:self.loadedBundlePaths.mutableCopy + ] flex_mapped:^id(NSString *cls, NSUInteger idx) { + return NSClassFromString(cls); + }]; + } else { + // Images + self.loadedShortBundleNames = runtime.imageDisplayNames; + self.loadedBundlePaths = [self.loadedShortBundleNames flex_mapped:^id(NSString *name, NSUInteger idx) { + return [runtime imageNameForShortName:name]; + }]; + + // Classes + self.classes = [runtime copySafeClassList]; + } + + // ...except protocols, because there's not a lot of them + // and there's no way load the protocols for a given image + self.protocols = [[runtime copyProtocolList] flex_mapped:^id(Protocol *proto, NSUInteger idx) { + return [FLEXProtocol protocol:proto]; + }]; +} + +- (BOOL)createTables { + NSArray *commands = @[ + kFREEnableForeignKeys, + kFRECreateTableMachOCommand, + kFRECreateTableClassCommand, + kFRECreateTableSelectorCommand, + kFRECreateTableTypeEncodingCommand, + kFRECreateTableTypeSignatureCommand, + kFRECreateTableMethodSignatureCommand, + kFRECreateTableMethodCommand, + kFRECreateTablePropertyCommand, + kFRECreateTableIvarCommand, + kFRECreateTableProtocolCommand, + kFRECreateTableProtocolPropertyCommand, + kFRECreateTableProtocolConformanceCommand, + kFRECreateTableClassConformanceCommand + ]; + + for (NSString *command in commands) { + if (![self.db executeStatement:command]) { + return NO; + } + } + + return YES; +} + +- (BOOL)addImages:(void(^)(NSString *status))progress { + progress(@"Adding loaded images…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSArray *shortNames = self.loadedShortBundleNames; + NSArray *fullPaths = self.loadedBundlePaths; + NSParameterAssert(shortNames.count == fullPaths.count); + + NSInteger count = shortNames.count; + for (NSInteger i = 0; i < count; i++) { + // Grab bundle ID + NSString *bundleID = [NSBundle + bundleWithPath:fullPaths[i] + ].bundleIdentifier; + + [database executeStatement:kFREInsertImage arguments:@{ + @"$shortName": shortNames[i], + @"$imagePath": fullPaths[i], + @"$bundleID": bundleID ?: NSNull.null + }]; + + if (database.lastResult.isError) { + return NO; + } else { + self.bundlePathsToIDs[fullPaths[i]] = @(database.lastRowID); + } + } + + return YES; +} + +NS_INLINE BOOL FREInsertProtocolMember(FLEXSQLiteDatabaseManager *db, + id proto, id required, id instance, + id prop, id methSel, id image) { + return ![db executeStatement:kFREInsertProtocolMember arguments:@{ + @"$protocol": proto, + @"$required": required, + @"$instance": instance ?: NSNull.null, + @"$property": prop ?: NSNull.null, + @"$method": methSel ?: NSNull.null, + @"$image": image + }].isError; +} + +- (BOOL)addProtocols:(void(^)(NSString *status))progress { + progress([NSString stringWithFormat:@"Adding %@ protocols…", @(self.protocols.count)]); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *imageIDs = self.bundlePathsToIDs; + + for (FLEXProtocol *proto in self.protocols) { + id imagePath = proto.imagePath ?: NSNull.null; + NSNumber *image = imageIDs[imagePath] ?: NSNull.null; + NSNumber *pid = nil; + + // Insert protocol + BOOL failed = [database executeStatement:kFREInsertProtocol arguments:@{ + @"$name": proto.name, @"$image": image + }].isError; + + // Cache rowid + if (failed) { + return NO; + } else { + self.protocolsToIDs[proto.name] = pid = @(database.lastRowID); + } + + // Insert its members // + + // Required methods + for (FLEXMethodDescription *method in proto.requiredMethods) { + NSString *selector = NSStringFromSelector(method.selector); + if (!FREInsertProtocolMember(database, pid, @YES, method.instance, nil, selector, image)) { + return NO; + } + } + // Optional methods + for (FLEXMethodDescription *method in proto.optionalMethods) { + NSString *selector = NSStringFromSelector(method.selector); + if (!FREInsertProtocolMember(database, pid, @NO, method.instance, nil, selector, image)) { + return NO; + } + } + + if (@available(iOS 10, *)) { + // Required properties + for (FLEXProperty *property in proto.requiredProperties) { + BOOL success = FREInsertProtocolMember( + database, pid, @YES, @(property.isClassProperty), property.name, NSNull.null, image + ); + + if (!success) return NO; + } + // Optional properties + for (FLEXProperty *property in proto.optionalProperties) { + BOOL success = FREInsertProtocolMember( + database, pid, @NO, @(property.isClassProperty), property.name, NSNull.null, image + ); + + if (!success) return NO; + } + } else { + // Just... properties. + for (FLEXProperty *property in proto.properties) { + BOOL success = FREInsertProtocolMember( + database, pid, nil, @(property.isClassProperty), property.name, NSNull.null, image + ); + + if (!success) return NO; + } + } + } + + return YES; +} + +- (BOOL)addProtocolConformances:(void(^)(NSString *status))progress { + progress(@"Adding protocol-to-protocol conformances…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *protocolIDs = self.protocolsToIDs; + + for (FLEXProtocol *proto in self.protocols) { + id protoID = protocolIDs[proto.name]; + + for (FLEXProtocol *conform in proto.protocols) { + BOOL failed = [database executeStatement:kFREInsertProtocolConformance arguments:@{ + @"$protocol": protoID, + @"$conformance": protocolIDs[conform.name] + }].isError; + + if (failed) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addClasses:(void(^)(NSString *status))progress { + progress([NSString stringWithFormat:@"Adding %@ classes…", @(self.classes.count)]); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *imageIDs = self.bundlePathsToIDs; + + for (Class cls in self.classes) { + const char *imageName = class_getImageName(cls); + id image = imageName ? imageIDs[@(imageName)] : NSNull.null; + image = image ?: NSNull.null; + + BOOL failed = [database executeStatement:kFREInsertClass arguments:@{ + @"$className": NSStringFromClass(cls), + @"$instanceSize": @(class_getInstanceSize(cls)), + @"$version": @(class_getVersion(cls)), + @"$image": image + }].isError; + + if (failed) { + return NO; + } else { + self.classesToIDs[(id)cls] = @(database.lastRowID); + } + } + + return YES; +} + +- (BOOL)setSuperclasses:(void(^)(NSString *status))progress { + progress(@"Setting superclasses…"); + + FLEXSQLiteDatabaseManager *database = self.db; + + for (Class cls in self.classes) { + // Grab superclass ID + Class superclass = class_getSuperclass(cls); + NSNumber *superclassID = _classesToIDs[class_getSuperclass(cls)]; + + // ... or add the superclass and cache its ID if the + // superclass does not reside in the target image(s) + if (!superclassID) { + NSDictionary *args = @{ @"$className": NSStringFromClass(superclass) }; + BOOL failed = [database executeStatement:kFREInsertClass arguments:args].isError; + if (failed) { return NO; } + + _classesToIDs[(id)superclass] = superclassID = @(database.lastRowID); + } + + if (superclass) { + BOOL failed = [database executeStatement:kFREUpdateClassSetSuper arguments:@{ + @"$super": superclassID, @"$id": _classesToIDs[cls] + }].isError; + + if (failed) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addClassConformances:(void(^)(NSString *status))progress { + progress(@"Adding class-to-protocol conformances…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *protocolIDs = self.protocolsToIDs; + NSDictionary *classIDs = self.classesToIDs; + + for (Class cls in self.classes) { + id classID = classIDs[(id)cls]; + + for (FLEXProtocol *conform in FLEXGetConformedProtocols(cls)) { + BOOL failed = [database executeStatement:kFREInsertClassConformance arguments:@{ + @"$class": classID, + @"$conformance": protocolIDs[conform.name] + }].isError; + + if (failed) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addIvars:(void(^)(NSString *status))progress { + progress(@"Adding ivars…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *imageIDs = self.bundlePathsToIDs; + + for (Class cls in self.classes) { + for (FLEXIvar *ivar in FLEXGetAllIvars(cls)) { + // Insert type first + if (![self addTypeEncoding:ivar.typeEncoding size:ivar.size]) { + return NO; + } + + id imagePath = ivar.imagePath ?: NSNull.null; + NSNumber *image = imageIDs[imagePath] ?: NSNull.null; + + BOOL failed = [database executeStatement:kFREInsertIvar arguments:@{ + @"$name": ivar.name, + @"$offset": @(ivar.offset), + @"$type": _typeEncodingsToIDs[ivar.typeEncoding], + @"$class": _classesToIDs[cls], + @"$image": image + }].isError; + + if (failed) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addMethods:(void(^)(NSString *status))progress { + progress(@"Adding methods…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *imageIDs = self.bundlePathsToIDs; + + // Loop over all classes + for (Class cls in self.classes) { + NSNumber *classID = _classesToIDs[(id)cls]; + const char *imageName = class_getImageName(cls); + id image = imageName ? imageIDs[@(imageName)] : NSNull.null; + image = image ?: NSNull.null; + + // Block used to process each message + BOOL (^insert)(FLEXMethod *, NSNumber *) = ^BOOL(FLEXMethod *method, NSNumber *instance) { + // Insert selector and signature first + if (![self addSelector:method.selectorString]) { + return NO; + } + if (![self addMethodSignature:method]) { + return NO; + } + + return ![database executeStatement:kFREInsertMethod arguments:@{ + @"$sel": self->_selectorsToIDs[method.selectorString], + @"$class": classID, + @"$instance": instance, + @"$signature": self->_methodSignaturesToIDs[method.signatureString], + @"$image": image + }].isError; + }; + + // Loop over all instance and class methods of that class // + + for (FLEXMethod *method in FLEXGetAllMethods(cls, YES)) { + if (!insert(method, @YES)) { + return NO; + } + } + for (FLEXMethod *method in FLEXGetAllMethods(object_getClass(cls), NO)) { + if (!insert(method, @NO)) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addProperties:(void(^)(NSString *status))progress { + progress(@"Adding properties…"); + + FLEXSQLiteDatabaseManager *database = self.db; + NSDictionary *imageIDs = self.bundlePathsToIDs; + + // Loop over all classes + for (Class cls in self.classes) { + NSNumber *classID = _classesToIDs[(id)cls]; + + // Block used to process each message + BOOL (^insert)(FLEXProperty *, NSNumber *) = ^BOOL(FLEXProperty *property, NSNumber *instance) { + FLEXPropertyAttributes *attrs = property.attributes; + NSString *customGetter = attrs.customGetterString; + NSString *customSetter = attrs.customSetterString; + + // Insert selectors first + if (customGetter) { + if (![self addSelector:customGetter]) { + return NO; + } + } + if (customSetter) { + if (![self addSelector:customSetter]) { + return NO; + } + } + + // Insert type encoding first + NSInteger size = [FLEXTypeEncodingParser + sizeForTypeEncoding:attrs.typeEncoding alignment:nil + ]; + if (![self addTypeEncoding:attrs.typeEncoding size:size]) { + return NO; + } + + id imagePath = property.imagePath ?: NSNull.null; + id image = imageIDs[imagePath] ?: NSNull.null; + return ![database executeStatement:kFREInsertProperty arguments:@{ + @"$name": property.name, + @"$class": classID, + @"$instance": instance, + @"$image": image, + @"$attributes": attrs.string, + + @"$customGetter": self->_selectorsToIDs[customGetter] ?: NSNull.null, + @"$customSetter": self->_selectorsToIDs[customSetter] ?: NSNull.null, + + @"$type": self->_typeEncodingsToIDs[attrs.typeEncoding] ?: NSNull.null, + @"$ivar": attrs.backingIvar ?: NSNull.null, + @"$readonly": @(attrs.isReadOnly), + @"$copy": @(attrs.isCopy), + @"$retained": @(attrs.isRetained), + @"$nonatomic": @(attrs.isNonatomic), + @"$dynamic": @(attrs.isDynamic), + @"$weak": @(attrs.isWeak), + @"$canGC": @(attrs.isGarbageCollectable), + }].isError; + }; + + // Loop over all instance and class methods of that class // + + for (FLEXProperty *property in FLEXGetAllProperties(cls)) { + if (!insert(property, @YES)) { + return NO; + } + } + for (FLEXProperty *property in FLEXGetAllProperties(object_getClass(cls))) { + if (!insert(property, @NO)) { + return NO; + } + } + } + + return YES; +} + +- (BOOL)addSelector:(NSString *)sel { + return [self executeInsert:kFREInsertSelector args:@{ + @"$name": sel + } key:sel cacheResult:_selectorsToIDs]; +} + +- (BOOL)addTypeEncoding:(NSString *)type size:(NSInteger)size { + return [self executeInsert:kFREInsertTypeEncoding args:@{ + @"$type": type, @"$size": @(size) + } key:type cacheResult:_typeEncodingsToIDs]; +} + +- (BOOL)addMethodSignature:(FLEXMethod *)method { + NSString *signature = method.signatureString; + NSString *returnType = @((char *)method.returnType); + + // Insert return type first + if (![self addTypeEncoding:returnType size:method.returnSize]) { + return NO; + } + + return [self executeInsert:kFREInsertMethodSignature args:@{ + @"$typeEncoding": signature, + @"$returnType": _typeEncodingsToIDs[returnType], + @"$argc": @(method.numberOfArguments), + @"$frameLength": @(method.signature.frameLength) + } key:signature cacheResult:_methodSignaturesToIDs]; +} + +- (BOOL)executeInsert:(NSString *)statement + args:(NSDictionary *)args + key:(NSString *)cacheKey + cacheResult:(NSMutableDictionary *)rowids { + // Check if already inserted + if (rowids[cacheKey]) { + return YES; + } + + // Insert + FLEXSQLiteDatabaseManager *database = _db; + [database executeStatement:statement arguments:args]; + + if (database.lastResult.isError) { + return NO; + } + + // Cache rowid + rowids[cacheKey] = @(database.lastRowID); + return YES; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.h new file mode 100644 index 00000000..f2ab468d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.h @@ -0,0 +1,31 @@ +// +// FLEXKBToolbarButton.h +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import + +typedef void (^FLEXKBToolbarAction)(NSString *buttonTitle, BOOL isSuggestion); + + +@interface FLEXKBToolbarButton : UIButton + +/// Set to `default` to use the system appearance on iOS 13+ +@property (nonatomic) UIKeyboardAppearance appearance; + ++ (instancetype)buttonWithTitle:(NSString *)title; ++ (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)eventHandler; ++ (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)action forControlEvents:(UIControlEvents)controlEvents; + +/// Adds the event handler for the button. +/// +/// @param eventHandler The event handler block. +/// @param controlEvents The type of event. +- (void)addEventHandler:(FLEXKBToolbarAction)eventHandler forControlEvents:(UIControlEvents)controlEvents; + +@end + +@interface FLEXKBToolbarSuggestedButton : FLEXKBToolbarButton @end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.m new file mode 100644 index 00000000..0439760d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.m @@ -0,0 +1,162 @@ +// +// FLEXKBToolbarButton.m +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXKBToolbarButton.h" +#import "UIFont+FLEX.h" +#import "FLEXUtility.h" +#import "CALayer+FLEX.h" + +@interface FLEXKBToolbarButton () +@property (nonatomic ) NSString *title; +@property (nonatomic, copy) FLEXKBToolbarAction buttonPressBlock; +/// YES if appearance is set to `default` +@property (nonatomic, readonly) BOOL useSystemAppearance; +/// YES if the current trait collection is set to dark mode and \c useSystemAppearance is YES +@property (nonatomic, readonly) BOOL usingDarkMode; +@end + +@implementation FLEXKBToolbarButton + ++ (instancetype)buttonWithTitle:(NSString *)title { + return [[self alloc] initWithTitle:title]; +} + ++ (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)eventHandler forControlEvents:(UIControlEvents)controlEvent { + FLEXKBToolbarButton *newButton = [self buttonWithTitle:title]; + [newButton addEventHandler:eventHandler forControlEvents:controlEvent]; + return newButton; +} + ++ (instancetype)buttonWithTitle:(NSString *)title action:(FLEXKBToolbarAction)eventHandler { + return [self buttonWithTitle:title action:eventHandler forControlEvents:UIControlEventTouchUpInside]; +} + +- (id)initWithTitle:(NSString *)title { + self = [super init]; + if (self) { + _title = title; + self.layer.shadowOffset = CGSizeMake(0, 1); + self.layer.shadowOpacity = 0.35; + self.layer.shadowRadius = 0; + self.layer.cornerRadius = 5; + self.clipsToBounds = NO; + self.titleLabel.font = [UIFont systemFontOfSize:18.0]; + self.layer.flex_continuousCorners = YES; + [self setTitle:self.title forState:UIControlStateNormal]; + [self sizeToFit]; + + if (@available(iOS 13, *)) { + self.appearance = UIKeyboardTypeDefault; + } else { + self.appearance = UIKeyboardAppearanceLight; + } + + CGRect frame = self.frame; + frame.size.width += title.length < 3 ? 30 : 15; + frame.size.height += 10; + self.frame = frame; + } + + return self; +} + +- (void)addEventHandler:(FLEXKBToolbarAction)eventHandler forControlEvents:(UIControlEvents)controlEvent { + self.buttonPressBlock = eventHandler; + [self addTarget:self action:@selector(buttonPressed) forControlEvents:controlEvent]; +} + +- (void)buttonPressed { + self.buttonPressBlock(self.title, NO); +} + +- (void)setAppearance:(UIKeyboardAppearance)appearance { + _appearance = appearance; + + UIColor *titleColor = nil, *backgroundColor = nil; + UIColor *lightColor = [UIColor colorWithRed:253.0/255.0 green:253.0/255.0 blue:254.0/255.0 alpha:1]; + UIColor *darkColor = [UIColor colorWithRed:101.0/255.0 green:102.0/255.0 blue:104.0/255.0 alpha:1]; + + switch (_appearance) { + default: + case UIKeyboardAppearanceDefault: + #if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13, *)) { + titleColor = UIColor.labelColor; + + if (self.usingDarkMode) { + // style = UIBlurEffectStyleSystemUltraThinMaterialLight; + backgroundColor = darkColor; + } else { + // style = UIBlurEffectStyleSystemMaterialLight; + backgroundColor = lightColor; + } + break; + } + #endif + case UIKeyboardAppearanceLight: + titleColor = UIColor.blackColor; + backgroundColor = lightColor; + // style = UIBlurEffectStyleExtraLight; + break; + case UIKeyboardAppearanceDark: + titleColor = UIColor.whiteColor; + backgroundColor = darkColor; + // style = UIBlurEffectStyleDark; + break; + } + + self.backgroundColor = backgroundColor; + [self setTitleColor:titleColor forState:UIControlStateNormal]; +} + +- (BOOL)isEqual:(id)object { + if ([object isKindOfClass:[FLEXKBToolbarButton class]]) { + return [self.title isEqualToString:[object title]]; + } + + return NO; +} + +- (NSUInteger)hash { + return self.title.hash; +} + +- (BOOL)useSystemAppearance { + return self.appearance == UIKeyboardAppearanceDefault; +} + +- (BOOL)usingDarkMode { + if (@available(iOS 12, *)) { + return self.useSystemAppearance && self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark; + } + + return self.appearance == UIKeyboardAppearanceDark; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previous { + if (@available(iOS 12, *)) { + // Was darkmode toggled? + if (previous.userInterfaceStyle != self.traitCollection.userInterfaceStyle) { + if (self.useSystemAppearance) { + // Recreate the background view with the proper colors + self.appearance = self.appearance; + } + } + } +} + +@end + + +@implementation FLEXKBToolbarSuggestedButton + +- (void)buttonPressed { + self.buttonPressBlock(self.title, YES); +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.h new file mode 100644 index 00000000..98c2960b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.h @@ -0,0 +1,38 @@ +// +// FLEXKeyPathSearchController.h +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import +#import "FLEXRuntimeBrowserToolbar.h" +#import "FLEXMethod.h" + +@protocol FLEXKeyPathSearchControllerDelegate + +@property (nonatomic, readonly) UITableView *tableView; +@property (nonatomic, readonly) UISearchController *searchController; + +/// For loaded images which don't have an NSBundle +- (void)didSelectImagePath:(NSString *)message shortName:(NSString *)shortName; +- (void)didSelectBundle:(NSBundle *)bundle; +- (void)didSelectClass:(Class)cls; + +@end + + +@interface FLEXKeyPathSearchController : NSObject + ++ (instancetype)delegate:(id)delegate; + +@property (nonatomic) FLEXRuntimeBrowserToolbar *toolbar; + +/// Suggestions for the toolbar +@property (nonatomic, readonly) NSArray *suggestions; + +- (void)didSelectKeyPathOption:(NSString *)text; +- (void)didPressButton:(NSString *)text insertInto:(UISearchBar *)searchBar; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.m new file mode 100644 index 00000000..4eb84154 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.m @@ -0,0 +1,416 @@ +// +// FLEXKeyPathSearchController.m +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXKeyPathSearchController.h" +#import "FLEXRuntimeKeyPathTokenizer.h" +#import "FLEXRuntimeController.h" +#import "NSString+FLEX.h" +#import "NSArray+FLEX.h" +#import "UITextField+Range.h" +#import "NSTimer+FLEX.h" +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "FLEXObjectExplorerFactory.h" + +@interface FLEXKeyPathSearchController () +@property (nonatomic, readonly, weak) id delegate; +@property (nonatomic) NSTimer *timer; +/// If \c keyPath is \c nil or if it only has a \c bundleKey, this is +/// a list of bundle key path components like \c UICatalog or \c UIKit\.framework +/// If \c keyPath has more than a \c bundleKey then it is a list of class names. +@property (nonatomic) NSArray *bundlesOrClasses; +/// nil when search bar is empty +@property (nonatomic) FLEXRuntimeKeyPath *keyPath; + +@property (nonatomic, readonly) NSString *emptySuggestion; + +/// Used to track which methods go with which classes. This is used in +/// two scenarios: (1) when the target class is absolute and has classes, +/// (this list will include the "leaf" class as well as parent classes in this case) +/// or (2) when the class key is a wildcard and we're searching methods in many +/// classes at once. Each list in \c classesToMethods correspnds to a class here. +@property (nonatomic) NSArray *classes; +/// A filtered version of \c classes used when searching for a specific attribute. +/// Classes with no matching ivars/properties/methods are not shown. +@property (nonatomic) NSArray *filteredClasses; +// We use this regardless of whether the target class is absolute, just as above +@property (nonatomic) NSArray *> *classesToMethods; +@end + +@implementation FLEXKeyPathSearchController + ++ (instancetype)delegate:(id)delegate { + FLEXKeyPathSearchController *controller = [self new]; + controller->_bundlesOrClasses = [FLEXRuntimeController allBundleNames]; + controller->_delegate = delegate; + controller->_emptySuggestion = NSBundle.mainBundle.executablePath.lastPathComponent; + + NSParameterAssert(delegate.tableView); + NSParameterAssert(delegate.searchController); + + delegate.tableView.delegate = controller; + delegate.tableView.dataSource = controller; + + UISearchBar *searchBar = delegate.searchController.searchBar; + searchBar.delegate = controller; + searchBar.keyboardType = UIKeyboardTypeWebSearch; + searchBar.autocorrectionType = UITextAutocorrectionTypeNo; + if (@available(iOS 11, *)) { + searchBar.smartInsertDeleteType = UITextSmartInsertDeleteTypeNo; + } + + return controller; +} + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if (scrollView.isTracking || scrollView.isDragging || scrollView.isDecelerating) { + [self.delegate.searchController.searchBar resignFirstResponder]; + } +} + +- (void)setToolbar:(FLEXRuntimeBrowserToolbar *)toolbar { + _toolbar = toolbar; + self.delegate.searchController.searchBar.inputAccessoryView = toolbar; +} + +- (NSArray *)classesOf:(NSString *)className { + Class baseClass = NSClassFromString(className); + if (!baseClass) { + return @[]; + } + + // Find classes + NSMutableArray *classes = [NSMutableArray arrayWithObject:className]; + while ([baseClass superclass]) { + [classes addObject:NSStringFromClass([baseClass superclass])]; + baseClass = [baseClass superclass]; + } + + return classes; +} + +#pragma mark Key path stuff + +- (void)didSelectKeyPathOption:(NSString *)text { + [_timer invalidate]; // Still might be waiting to refresh when method is selected + + // Change "Bundle.fooba" to "Bundle.foobar." + NSString *orig = self.delegate.searchController.searchBar.text; + NSString *keyPath = [orig stringByReplacingLastKeyPathComponent:text]; + self.delegate.searchController.searchBar.text = keyPath; + + self.keyPath = [FLEXRuntimeKeyPathTokenizer tokenizeString:keyPath]; + + // Get classes if class was selected + if (self.keyPath.classKey.isAbsolute && self.keyPath.methodKey.isAny) { + [self didSelectAbsoluteClass:text]; + } else { + self.classes = nil; + self.filteredClasses = nil; + } + + [self updateTable]; +} + +- (void)didSelectAbsoluteClass:(NSString *)name { + self.classes = [self classesOf:name]; + self.filteredClasses = self.classes; + self.bundlesOrClasses = nil; + self.classesToMethods = nil; +} + +- (void)didPressButton:(NSString *)text insertInto:(UISearchBar *)searchBar { + [self.toolbar setKeyPath:self.keyPath suggestions:nil]; + + // Available since at least iOS 9, still present in iOS 13 + UITextField *field = [searchBar valueForKey:@"_searchBarTextField"]; + + if ([self searchBar:searchBar shouldChangeTextInRange:field.selectedRange replacementText:text]) { + [field replaceRange:field.selectedTextRange withText:text]; + } +} + +- (NSArray *)suggestions { + if (self.bundlesOrClasses) { + if (self.classes) { + if (self.classesToMethods) { + // We have selected a class and are searching metadata + return nil; + } + + // We are currently searching classes + return [self.filteredClasses flex_subArrayUpto:10]; + } + + if (!self.keyPath) { + // Search bar is empty + return @[self.emptySuggestion]; + } + + // We are currently searching bundles + return [self.bundlesOrClasses flex_subArrayUpto:10]; + } + + // We have nothing at all to even search + return nil; +} + +#pragma mark - Filtering + UISearchBarDelegate + +- (void)updateTable { + // Compute the method, class, or bundle lists on a background thread + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + if (self.classes) { + // Here, our class key is 'absolute'; .classes is a list of superclasses + // and we want to show the methods for those classes specifically + // TODO: add caching to this somehow + NSMutableArray *methods = [FLEXRuntimeController + methodsForToken:self.keyPath.methodKey + instance:self.keyPath.instanceMethods + inClasses:self.classes + ].mutableCopy; + + // Remove classes without results if we're searching for a method + // + // Note: this will remove classes without any methods or overrides + // even if the query doesn't specify a method, like `*.*.` + if (self.keyPath.methodKey) { + [self setNonEmptyMethodLists:methods withClasses:self.classes.mutableCopy]; + } else { + self.filteredClasses = self.classes; + } + } + else { + FLEXRuntimeKeyPath *keyPath = self.keyPath; + NSArray *models = [FLEXRuntimeController dataForKeyPath:keyPath]; + if (keyPath.methodKey) { // We're looking at methods + self.bundlesOrClasses = nil; + + NSMutableArray *methods = models.mutableCopy; + NSMutableArray *classes = [ + FLEXRuntimeController classesForKeyPath:keyPath + ]; + self.classes = classes; + [self setNonEmptyMethodLists:methods withClasses:classes]; + } else { // We're looking at bundles or classes + self.bundlesOrClasses = models; + self.classesToMethods = nil; + } + } + + // Finally, reload the table on the main thread + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateToolbarButtons]; + [self.delegate.tableView reloadData]; + }); + }); +} + +- (void)updateToolbarButtons { + // Update toolbar buttons + [self.toolbar setKeyPath:self.keyPath suggestions:self.suggestions]; +} + +/// Assign assign .filteredClasses and .classesToMethods after removing empty sections +- (void)setNonEmptyMethodLists:(NSMutableArray *> *)methods + withClasses:(NSMutableArray *)classes { + // Remove sections with no methods + NSIndexSet *allEmpty = [methods indexesOfObjectsPassingTest:^BOOL(NSArray *list, NSUInteger idx, BOOL *stop) { + return list.count == 0; + }]; + [methods removeObjectsAtIndexes:allEmpty]; + [classes removeObjectsAtIndexes:allEmpty]; + + self.filteredClasses = classes; + self.classesToMethods = methods; +} + +- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + // Check if character is even legal + if (![FLEXRuntimeKeyPathTokenizer allowedInKeyPath:text]) { + return NO; + } + + BOOL terminatedToken = NO; + BOOL isAppending = range.length == 0 && range.location == searchBar.text.length; + if (isAppending && [text isEqualToString:@"."]) { + terminatedToken = YES; + } + + // Actually parse input + @try { + text = [searchBar.text stringByReplacingCharactersInRange:range withString:text] ?: text; + self.keyPath = [FLEXRuntimeKeyPathTokenizer tokenizeString:text]; + if (self.keyPath.classKey.isAbsolute && terminatedToken) { + [self didSelectAbsoluteClass:self.keyPath.classKey.string]; + } + } @catch (id e) { + return NO; + } + + return YES; +} + +- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { + [_timer invalidate]; + + // Schedule update timer + if (searchText.length) { + if (!self.keyPath.methodKey) { + self.classes = nil; + self.filteredClasses = nil; + } + + self.timer = [NSTimer fireSecondsFromNow:0.15 block:^{ + [self updateTable]; + }]; + } + // ... or remove all rows + else { + _bundlesOrClasses = [FLEXRuntimeController allBundleNames]; + _classesToMethods = nil; + _classes = nil; + _keyPath = nil; + [self updateToolbarButtons]; + [self.delegate.tableView reloadData]; + } +} + +- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { + self.keyPath = FLEXRuntimeKeyPath.empty; + [self updateTable]; +} + +/// Restore key path when going "back" and activating search bar again +- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { + searchBar.text = self.keyPath.description; +} + +- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + [_timer invalidate]; + [searchBar resignFirstResponder]; + [self updateTable]; +} + +#pragma mark UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.filteredClasses.count ?: self.bundlesOrClasses.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView + dequeueReusableCellWithIdentifier:kFLEXMultilineDetailCell + forIndexPath:indexPath + ]; + + if (self.bundlesOrClasses.count) { + cell.accessoryType = UITableViewCellAccessoryDetailButton; + cell.textLabel.text = self.bundlesOrClasses[indexPath.row]; + cell.detailTextLabel.text = nil; + if (self.keyPath.classKey) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + } + // One row per section + else if (self.filteredClasses.count) { + NSArray *methods = self.classesToMethods[indexPath.row]; + NSMutableString *summary = [NSMutableString new]; + [methods enumerateObjectsUsingBlock:^(FLEXMethod *method, NSUInteger idx, BOOL *stop) { + NSString *format = nil; + if (idx == methods.count-1) { + format = @"%@%@"; + *stop = YES; + } else if (idx < 3) { + format = @"%@%@\n"; + } else { + format = @"%@%@\n…"; + *stop = YES; + } + + [summary appendFormat:format, method.isInstanceMethod ? @"-" : @"+", method.selectorString]; + }]; + + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.text = self.filteredClasses[indexPath.row]; + if (@available(iOS 10, *)) { + cell.detailTextLabel.text = summary.length ? summary : nil; + } + + } + else { + @throw NSInternalInconsistencyException; + } + + return cell; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if (self.filteredClasses || self.keyPath.methodKey) { + return @" "; + } else if (self.bundlesOrClasses) { + NSInteger count = self.bundlesOrClasses.count; + if (self.keyPath.classKey) { + return FLEXPluralString(count, @"classes", @"class"); + } else { + return FLEXPluralString(count, @"bundles", @"bundle"); + } + } + + return [self.delegate tableView:tableView titleForHeaderInSection:section]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + if (self.filteredClasses || self.keyPath.methodKey) { + if (section == 0) { + return 55; + } + + return 0; + } + + return 55; +} + +#pragma mark UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.bundlesOrClasses) { + NSString *bundleSuffixOrClass = self.bundlesOrClasses[indexPath.row]; + if (self.keyPath.classKey) { + NSParameterAssert(NSClassFromString(bundleSuffixOrClass)); + [self.delegate didSelectClass:NSClassFromString(bundleSuffixOrClass)]; + } else { + // Selected a bundle + [self didSelectKeyPathOption:bundleSuffixOrClass]; + } + } else { + if (self.filteredClasses.count) { + Class cls = NSClassFromString(self.filteredClasses[indexPath.row]); + NSParameterAssert(cls); + [self.delegate didSelectClass:cls]; + } else { + @throw NSInternalInconsistencyException; + } + } +} + +- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { + NSString *bundleSuffixOrClass = self.bundlesOrClasses[indexPath.row]; + NSString *imagePath = [FLEXRuntimeController imagePathWithShortName:bundleSuffixOrClass]; + NSBundle *bundle = [NSBundle bundleWithPath:imagePath.stringByDeletingLastPathComponent]; + + if (bundle) { + [self.delegate didSelectBundle:bundle]; + } else { + [self.delegate didSelectImagePath:imagePath shortName:bundleSuffixOrClass]; + } +} + +@end + diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.h new file mode 100644 index 00000000..e44fdb6b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.h @@ -0,0 +1,18 @@ +// +// FLEXKeyboardToolbar.h +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXKBToolbarButton.h" + +@interface FLEXKeyboardToolbar : UIView + ++ (instancetype)toolbarWithButtons:(NSArray *)buttons; + +@property (nonatomic) NSArray *buttons; +@property (nonatomic) UIKeyboardAppearance appearance; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.m new file mode 100644 index 00000000..24b54b6f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.m @@ -0,0 +1,227 @@ +// +// FLEXKeyboardToolbar.m +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXKeyboardToolbar.h" +#import "FLEXUtility.h" + +#define kToolbarHeight 44 +#define kButtonSpacing 6 +#define kScrollViewHorizontalMargins 3 + +@interface FLEXKeyboardToolbar () + +/// The fake top border to replicate the toolbar. +@property (nonatomic) CALayer *topBorder; +@property (nonatomic) UIView *toolbarView; +@property (nonatomic) UIScrollView *scrollView; +@property (nonatomic) UIVisualEffectView *blurView; +/// YES if appearance is set to `default` +@property (nonatomic, readonly) BOOL useSystemAppearance; +/// YES if the current trait collection is set to dark mode and \c useSystemAppearance is YES +@property (nonatomic, readonly) BOOL usingDarkMode; +@end + +@implementation FLEXKeyboardToolbar + ++ (instancetype)toolbarWithButtons:(NSArray *)buttons { + return [[self alloc] initWithButtons:buttons]; +} + +- (id)initWithButtons:(NSArray *)buttons { + self = [super initWithFrame:CGRectMake(0, 0, self.window.rootViewController.view.bounds.size.width, kToolbarHeight)]; + if (self) { + _buttons = [buttons copy]; + + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + if (@available(iOS 13, *)) { + self.appearance = UIKeyboardTypeDefault; + } else { + self.appearance = UIKeyboardAppearanceLight; + } + } + + return self; +} + +- (void)setAppearance:(UIKeyboardAppearance)appearance { + _appearance = appearance; + + // Remove toolbar if it exits because it will be recreated below + if (self.toolbarView) { + [self.toolbarView removeFromSuperview]; + } + + [self addSubview:self.inputAccessoryView]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + // Layout top border + CGRect frame = _toolbarView.bounds; + frame.size.height = 0.5; + _topBorder.frame = frame; + + // Scroll view // + + frame = CGRectMake(0, 0, self.bounds.size.width, kToolbarHeight); + CGSize contentSize = self.scrollView.contentSize; + CGFloat scrollViewWidth = frame.size.width; + + // If our content size is smaller than the scroll view, + // we want to right-align all the content + if (contentSize.width < scrollViewWidth) { + // Compute the content size to scroll view size difference + UIEdgeInsets insets = self.scrollView.contentInset; + CGFloat margin = insets.left + insets.right; + CGFloat difference = scrollViewWidth - contentSize.width - margin; + // Update the content size to be the full width of the scroll view + contentSize.width += difference; + self.scrollView.contentSize = contentSize; + + // Offset every button by the difference above + // so that every button appears right-aligned + for (UIView *button in self.scrollView.subviews) { + CGRect f = button.frame; + f.origin.x += difference; + button.frame = f; + } + } +} + +- (UIView *)inputAccessoryView { + _topBorder = [CALayer new]; + _topBorder.frame = CGRectMake(0.0, 0.0, self.bounds.size.width, 0.5); + [self makeScrollView]; + + UIColor *borderColor = nil, *backgroundColor = nil; + UIColor *lightColor = [UIColor colorWithHue:216.0/360.0 saturation:0.05 brightness:0.85 alpha:1]; + UIColor *darkColor = [UIColor colorWithHue:220.0/360.0 saturation:0.07 brightness:0.16 alpha:1]; + + switch (_appearance) { + case UIKeyboardAppearanceDefault: + #if FLEX_AT_LEAST_IOS13_SDK + if (@available(iOS 13, *)) { + borderColor = UIColor.systemBackgroundColor; + + if (self.usingDarkMode) { + // style = UIBlurEffectStyleSystemThickMaterial; + backgroundColor = darkColor; + } else { + // style = UIBlurEffectStyleSystemUltraThinMaterialLight; + backgroundColor = lightColor; + } + break; + } + #endif + case UIKeyboardAppearanceLight: { + borderColor = UIColor.clearColor; + backgroundColor = lightColor; + break; + } + case UIKeyboardAppearanceDark: { + borderColor = [UIColor colorWithWhite:0.100 alpha:1.000]; + backgroundColor = darkColor; + break; + } + } + + self.toolbarView = [UIView new]; + [self.toolbarView addSubview:self.scrollView]; + [self.toolbarView.layer addSublayer:self.topBorder]; + self.toolbarView.frame = CGRectMake(0, 0, self.bounds.size.width, kToolbarHeight); + self.toolbarView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + self.backgroundColor = backgroundColor; + self.topBorder.backgroundColor = borderColor.CGColor; + + return self.toolbarView; +} + +- (UIScrollView *)makeScrollView { + UIScrollView *scrollView = [UIScrollView new]; + scrollView.backgroundColor = UIColor.clearColor; + scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + scrollView.contentInset = UIEdgeInsetsMake( + 8.f, kScrollViewHorizontalMargins, 4.f, kScrollViewHorizontalMargins + ); + scrollView.showsHorizontalScrollIndicator = NO; + + self.scrollView = scrollView; + [self addButtons]; + + return scrollView; +} + +- (void)addButtons { + NSUInteger originX = 0.f; + + CGRect originFrame; + CGFloat top = self.scrollView.contentInset.top; + CGFloat bottom = self.scrollView.contentInset.bottom; + + for (FLEXKBToolbarButton *button in self.buttons) { + button.appearance = self.appearance; + + originFrame = button.frame; + originFrame.origin.x = originX; + originFrame.origin.y = 0.f; + originFrame.size.height = kToolbarHeight - (top + bottom); + button.frame = originFrame; + + [self.scrollView addSubview:button]; + + // originX tracks the origin of the next button to be added, + // so at the end of each iteration of this loop we increment + // it by the size of the last button with some padding + originX += button.bounds.size.width + kButtonSpacing; + } + + // Update contentSize, + // set to the max x value of the last button added + CGSize contentSize = self.scrollView.contentSize; + contentSize.width = originX - kButtonSpacing; + self.scrollView.contentSize = contentSize; + + // Needed to potentially right-align buttons + [self setNeedsLayout]; +} + +- (void)setButtons:(NSArray *)buttons { + [_buttons makeObjectsPerformSelector:@selector(removeFromSuperview)]; + _buttons = buttons.copy; + + [self addButtons]; +} + +- (BOOL)useSystemAppearance { + return self.appearance == UIKeyboardAppearanceDefault; +} + +- (BOOL)usingDarkMode { + if (@available(iOS 12, *)) { + return self.useSystemAppearance && self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark; + } + + return self.appearance == UIKeyboardAppearanceDark; +} + +- (void)traitCollectionDidChange:(UITraitCollection *)previous { + if (@available(iOS 12, *)) { + // Was darkmode toggled? + if (previous.userInterfaceStyle != self.traitCollection.userInterfaceStyle) { + if (self.useSystemAppearance) { + // Recreate the background view with the proper colors + self.appearance = self.appearance; + } + } + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.h new file mode 100644 index 00000000..93ac54a5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.h @@ -0,0 +1,14 @@ +// +// FLEXObjcRuntimeViewController.h +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXTableViewController.h" +#import "FLEXGlobalsEntry.h" + +@interface FLEXObjcRuntimeViewController : FLEXTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.m new file mode 100644 index 00000000..b99374f2 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.m @@ -0,0 +1,110 @@ +// +// FLEXObjcRuntimeViewController.m +// FLEX +// +// Created by Tanner on 3/23/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXObjcRuntimeViewController.h" +#import "FLEXKeyPathSearchController.h" +#import "FLEXRuntimeBrowserToolbar.h" +#import "UIGestureRecognizer+Blocks.h" +#import "FLEXTableView.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXAlert.h" + +@interface FLEXObjcRuntimeViewController () + +@property (nonatomic, readonly ) FLEXKeyPathSearchController *keyPathController; +@property (nonatomic, readonly ) UIView *promptView; + +@end + +@implementation FLEXObjcRuntimeViewController + +#pragma mark - Setup, view events + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Search bar stuff, must be first because this creates self.searchController + self.showsSearchBar = YES; + self.showSearchBarInitially = YES; + // Using pinSearchBar on this screen causes a weird visual + // thing on the next view controller that gets pushed. + // + // self.pinSearchBar = YES; + self.searchController.searchBar.placeholder = @"UIKit*.UIView.-setFrame:"; + + // Search controller stuff + // key path controller automatically assigns itself as the delegate of the search bar + // To avoid a retain cycle below, use local variables + UISearchBar *searchBar = self.searchController.searchBar; + FLEXKeyPathSearchController *keyPathController = [FLEXKeyPathSearchController delegate:self]; + _keyPathController = keyPathController; + _keyPathController.toolbar = [FLEXRuntimeBrowserToolbar toolbarWithHandler:^(NSString *text, BOOL suggestion) { + if (suggestion) { + [keyPathController didSelectKeyPathOption:text]; + } else { + [keyPathController didPressButton:text insertInto:searchBar]; + } + } suggestions:keyPathController.suggestions]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + dispatch_async(dispatch_get_main_queue(), ^{ + // This doesn't work unless it's wrapped in this dispatch_async call + [self.searchController.searchBar becomeFirstResponder]; + }); +} + + +#pragma mark Delegate stuff + +- (void)didSelectImagePath:(NSString *)path shortName:(NSString *)shortName { + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(shortName); + make.message(@"No NSBundle associated with this path:\n\n"); + make.message(path); + + make.button(@"Copy Path").handler(^(NSArray *strings) { + UIPasteboard.generalPasteboard.string = path; + }); + make.button(@"Dismiss").cancelStyle(); + } showFrom:self]; +} + +- (void)didSelectBundle:(NSBundle *)bundle { + NSParameterAssert(bundle); + FLEXObjectExplorerViewController *explorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:bundle]; + [self.navigationController pushViewController:explorer animated:YES]; +} + +- (void)didSelectClass:(Class)cls { + NSParameterAssert(cls); + FLEXObjectExplorerViewController *explorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:cls]; + [self.navigationController pushViewController:explorer animated:YES]; +} + + +#pragma mark - FLEXGlobalsEntry + ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { + return @"📚 Runtime Browser"; +} + ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { + UIViewController *controller = [self new]; + controller.title = [self globalsEntryTitle:row]; + return controller; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.h new file mode 100644 index 00000000..ca917e85 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.h @@ -0,0 +1,18 @@ +// +// FLEXRuntimeBrowserToolbar.h +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXKeyboardToolbar.h" +#import "FLEXRuntimeKeyPath.h" + +@interface FLEXRuntimeBrowserToolbar : FLEXKeyboardToolbar + ++ (instancetype)toolbarWithHandler:(FLEXKBToolbarAction)tapHandler suggestions:(NSArray *)suggestions; + +- (void)setKeyPath:(FLEXRuntimeKeyPath *)keyPath suggestions:(NSArray *)suggestions; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.m new file mode 100644 index 00000000..c34cc020 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.m @@ -0,0 +1,92 @@ +// +// FLEXRuntimeBrowserToolbar.m +// FLEX +// +// Created by Tanner on 6/11/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeBrowserToolbar.h" +#import "FLEXRuntimeKeyPathTokenizer.h" + +@interface FLEXRuntimeBrowserToolbar () +@property (nonatomic, copy) FLEXKBToolbarAction tapHandler; +@end + +@implementation FLEXRuntimeBrowserToolbar + ++ (instancetype)toolbarWithHandler:(FLEXKBToolbarAction)tapHandler suggestions:(NSArray *)suggestions { + NSArray *buttons = [self + buttonsForKeyPath:FLEXRuntimeKeyPath.empty suggestions:suggestions handler:tapHandler + ]; + + FLEXRuntimeBrowserToolbar *me = [self toolbarWithButtons:buttons]; + me.tapHandler = tapHandler; + return me; +} + ++ (NSArray *)buttonsForKeyPath:(FLEXRuntimeKeyPath *)keyPath + suggestions:(NSArray *)suggestions + handler:(FLEXKBToolbarAction)handler { + NSMutableArray *buttons = [NSMutableArray new]; + FLEXSearchToken *lastKey = nil; + BOOL lastKeyIsMethod = NO; + + if (keyPath.methodKey) { + lastKey = keyPath.methodKey; + lastKeyIsMethod = YES; + } else { + lastKey = keyPath.classKey ?: keyPath.bundleKey; + } + + switch (lastKey.options) { + case TBWildcardOptionsNone: + case TBWildcardOptionsAny: + if (lastKeyIsMethod) { + if (!keyPath.instanceMethods) { + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"-" action:handler]]; + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"+" action:handler]]; + } + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*" action:handler]]; + } else { + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*" action:handler]]; + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*." action:handler]]; + } + break; + + default: { + if (lastKey.options & TBWildcardOptionsPrefix) { + if (lastKeyIsMethod) { + if (lastKey.string.length) { + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*" action:handler]]; + } + } else { + if (lastKey.string.length) { + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*." action:handler]]; + } + } + } + + else if (lastKey.options & TBWildcardOptionsSuffix) { + if (!lastKeyIsMethod) { + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*" action:handler]]; + [buttons addObject:[FLEXKBToolbarButton buttonWithTitle:@"*." action:handler]]; + } + } + } + } + + for (NSString *suggestion in suggestions) { + [buttons addObject:[FLEXKBToolbarSuggestedButton buttonWithTitle:suggestion action:handler]]; + } + + return buttons; +} + +- (void)setKeyPath:(FLEXRuntimeKeyPath *)keyPath suggestions:(NSArray *)suggestions { + self.buttons = [self.class + buttonsForKeyPath:keyPath suggestions:suggestions handler:self.tapHandler + ]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.h new file mode 100644 index 00000000..7babe801 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.h @@ -0,0 +1,43 @@ +// +// FLEXRuntimeKeyPath.h +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXSearchToken.h" +@class FLEXMethod; + +NS_ASSUME_NONNULL_BEGIN + +/// A key path represents a query into a set of bundles or classes +/// for a set of one or more methods. It is composed of three tokens: +/// bundle, class, and method. A key path may be incomplete if it +/// is missing any of the tokens. A key path is considered "absolute" +/// if all tokens have no options and if methodKey.string begins +/// with a + or a -. +/// +/// The @code TBKeyPathTokenizer @endcode class is used to create +/// a key path from a string. +@interface FLEXRuntimeKeyPath : NSObject + ++ (instancetype)empty; + +/// @param method must start with either a wildcard or a + or -. ++ (instancetype)bundle:(FLEXSearchToken *)bundle + class:(FLEXSearchToken *)cls + method:(FLEXSearchToken *)method + isInstance:(NSNumber *)instance + string:(NSString *)keyPathString; + +@property (nonatomic, nullable, readonly) FLEXSearchToken *bundleKey; +@property (nonatomic, nullable, readonly) FLEXSearchToken *classKey; +@property (nonatomic, nullable, readonly) FLEXSearchToken *methodKey; + +/// Indicates whether the method token specifies instance methods. +/// Nil if not specified. +@property (nonatomic, nullable, readonly) NSNumber *instanceMethods; + +@end +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.m new file mode 100644 index 00000000..09d2099e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.m @@ -0,0 +1,75 @@ +// +// FLEXRuntimeKeyPath.m +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeKeyPath.h" +#import "FLEXRuntimeClient.h" + +@interface FLEXRuntimeKeyPath () { + NSString *flex_description; +} +@end + +@implementation FLEXRuntimeKeyPath + ++ (instancetype)empty { + static FLEXRuntimeKeyPath *empty = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + FLEXSearchToken *any = FLEXSearchToken.any; + + empty = [self new]; + empty->_bundleKey = any; + empty->flex_description = @""; + }); + + return empty; +} + ++ (instancetype)bundle:(FLEXSearchToken *)bundle + class:(FLEXSearchToken *)cls + method:(FLEXSearchToken *)method + isInstance:(NSNumber *)instance + string:(NSString *)keyPathString { + FLEXRuntimeKeyPath *keyPath = [self new]; + keyPath->_bundleKey = bundle; + keyPath->_classKey = cls; + keyPath->_methodKey = method; + + keyPath->_instanceMethods = instance; + + // Remove irrelevant trailing '*' for equality purposes + if ([keyPathString hasSuffix:@"*"]) { + keyPathString = [keyPathString substringToIndex:keyPathString.length]; + } + keyPath->flex_description = keyPathString; + + if (bundle.isAny && cls.isAny && method.isAny) { + [FLEXRuntimeClient initializeWebKitLegacy]; + } + + return keyPath; +} + +- (NSString *)description { + return flex_description; +} + +- (NSUInteger)hash { + return flex_description.hash; +} + +- (BOOL)isEqual:(id)object { + if ([object isKindOfClass:[FLEXRuntimeKeyPath class]]) { + FLEXRuntimeKeyPath *kp = object; + return [flex_description isEqualToString:kp->flex_description]; + } + + return NO; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.h new file mode 100644 index 00000000..1e8f6872 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.h @@ -0,0 +1,18 @@ +// +// FLEXRuntimeKeyPathTokenizer.h +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeKeyPath.h" + +@interface FLEXRuntimeKeyPathTokenizer : NSObject + ++ (NSUInteger)tokenCountOfString:(NSString *)userInput; ++ (FLEXRuntimeKeyPath *)tokenizeString:(NSString *)userInput; + ++ (BOOL)allowedInKeyPath:(NSString *)text; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.m new file mode 100644 index 00000000..e2cd6ff1 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.m @@ -0,0 +1,218 @@ +// +// FLEXRuntimeKeyPathTokenizer.m +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeKeyPathTokenizer.h" + +#define TBCountOfStringOccurence(target, str) ([target componentsSeparatedByString:str].count - 1) + +@implementation FLEXRuntimeKeyPathTokenizer + +#pragma mark Initialization + +static NSCharacterSet *firstAllowed = nil; +static NSCharacterSet *identifierAllowed = nil; +static NSCharacterSet *filenameAllowed = nil; +static NSCharacterSet *keyPathDisallowed = nil; +static NSCharacterSet *methodAllowed = nil; ++ (void)initialize { + if (self == [self class]) { + NSString *_methodFirstAllowed = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$"; + NSString *_identifierAllowed = [_methodFirstAllowed stringByAppendingString:@"1234567890"]; + NSString *_methodAllowedSansType = [_identifierAllowed stringByAppendingString:@":"]; + NSString *_filenameNameAllowed = [_identifierAllowed stringByAppendingString:@"-+?!"]; + firstAllowed = [NSCharacterSet characterSetWithCharactersInString:_methodFirstAllowed]; + identifierAllowed = [NSCharacterSet characterSetWithCharactersInString:_identifierAllowed]; + filenameAllowed = [NSCharacterSet characterSetWithCharactersInString:_filenameNameAllowed]; + methodAllowed = [NSCharacterSet characterSetWithCharactersInString:_methodAllowedSansType]; + + NSString *_kpDisallowed = [_identifierAllowed stringByAppendingString:@"-+:\\.*"]; + keyPathDisallowed = [NSCharacterSet characterSetWithCharactersInString:_kpDisallowed].invertedSet; + } +} + +#pragma mark Public + ++ (FLEXRuntimeKeyPath *)tokenizeString:(NSString *)userInput { + if (!userInput.length) { + return nil; + } + + NSUInteger tokens = [self tokenCountOfString:userInput]; + if (tokens == 0) { + return nil; + } + + if ([userInput containsString:@"**"]) { + @throw NSInternalInconsistencyException; + } + + NSNumber *instance = nil; + NSScanner *scanner = [NSScanner scannerWithString:userInput]; + FLEXSearchToken *bundle = [self scanToken:scanner allowed:filenameAllowed first:filenameAllowed]; + FLEXSearchToken *cls = [self scanToken:scanner allowed:identifierAllowed first:firstAllowed]; + FLEXSearchToken *method = tokens > 2 ? [self scanMethodToken:scanner instance:&instance] : nil; + + return [FLEXRuntimeKeyPath bundle:bundle + class:cls + method:method + isInstance:instance + string:userInput]; +} + ++ (BOOL)allowedInKeyPath:(NSString *)text { + if (!text.length) { + return YES; + } + + return [text rangeOfCharacterFromSet:keyPathDisallowed].location == NSNotFound; +} + +#pragma mark Private + ++ (NSUInteger)tokenCountOfString:(NSString *)userInput { + NSUInteger escapedCount = TBCountOfStringOccurence(userInput, @"\\."); + NSUInteger tokenCount = TBCountOfStringOccurence(userInput, @".") - escapedCount + 1; + + return tokenCount; +} + ++ (FLEXSearchToken *)scanToken:(NSScanner *)scanner allowed:(NSCharacterSet *)allowedChars first:(NSCharacterSet *)first { + if (scanner.isAtEnd) { + if ([scanner.string hasSuffix:@"."] && ![scanner.string hasSuffix:@"\\."]) { + return [FLEXSearchToken string:nil options:TBWildcardOptionsAny]; + } + return nil; + } + + TBWildcardOptions options = TBWildcardOptionsNone; + NSMutableString *token = [NSMutableString new]; + + // Token cannot start with '.' + if ([scanner scanString:@"." intoString:nil]) { + @throw NSInternalInconsistencyException; + } + + if ([scanner scanString:@"*." intoString:nil]) { + return [FLEXSearchToken string:nil options:TBWildcardOptionsAny]; + } else if ([scanner scanString:@"*" intoString:nil]) { + if (scanner.isAtEnd) { + return FLEXSearchToken.any; + } + + options |= TBWildcardOptionsPrefix; + } + + NSString *tmp = nil; + BOOL stop = NO, didScanDelimiter = NO, didScanFirstAllowed = NO; + NSCharacterSet *disallowed = allowedChars.invertedSet; + while (!stop && ![scanner scanString:@"." intoString:&tmp] && !scanner.isAtEnd) { + // Scan word chars + // In this block, we have not scanned anything yet, except maybe leading '\' or '\.' + if (!didScanFirstAllowed) { + if ([scanner scanCharactersFromSet:first intoString:&tmp]) { + [token appendString:tmp]; + didScanFirstAllowed = YES; + } else if ([scanner scanString:@"\\" intoString:nil]) { + if (options == TBWildcardOptionsPrefix && [scanner scanString:@"." intoString:nil]) { + [token appendString:@"."]; + } else if (scanner.isAtEnd && options == TBWildcardOptionsPrefix) { + // Only allow standalone '\' if prefixed by '*' + return FLEXSearchToken.any; + } else { + // Token starts with a number, period, or something else not allowed, + // or token is a standalone '\' with no '*' prefix + @throw NSInternalInconsistencyException; + } + } else { + // Token starts with a number, period, or something else not allowed + @throw NSInternalInconsistencyException; + } + } else if ([scanner scanCharactersFromSet:allowedChars intoString:&tmp]) { + [token appendString:tmp]; + } + // Scan '\.' or trailing '\' + else if ([scanner scanString:@"\\" intoString:nil]) { + if ([scanner scanString:@"." intoString:nil]) { + [token appendString:@"."]; + } else if (scanner.isAtEnd) { + // Ignore forward slash not followed by period if at end + return [FLEXSearchToken string:token options:options | TBWildcardOptionsSuffix]; + } else { + // Only periods can follow a forward slash + @throw NSInternalInconsistencyException; + } + } + // Scan '*.' + else if ([scanner scanString:@"*." intoString:nil]) { + options |= TBWildcardOptionsSuffix; + stop = YES; + didScanDelimiter = YES; + } + // Scan '*' not followed by . + else if ([scanner scanString:@"*" intoString:nil]) { + if (!scanner.isAtEnd) { + // Invalid token, wildcard in middle of token + @throw NSInternalInconsistencyException; + } + } else if ([scanner scanCharactersFromSet:disallowed intoString:nil]) { + // Invalid token, invalid characters + @throw NSInternalInconsistencyException; + } + } + + // Did we scan a trailing, un-escsaped '.'? + if ([tmp isEqualToString:@"."]) { + didScanDelimiter = YES; + } + + if (!didScanDelimiter) { + options |= TBWildcardOptionsSuffix; + } + + return [FLEXSearchToken string:token options:options]; +} + ++ (FLEXSearchToken *)scanMethodToken:(NSScanner *)scanner instance:(NSNumber **)instance { + if (scanner.isAtEnd) { + if ([scanner.string hasSuffix:@"."]) { + return [FLEXSearchToken string:nil options:TBWildcardOptionsAny]; + } + return nil; + } + + if ([scanner.string hasSuffix:@"."] && ![scanner.string hasSuffix:@"\\."]) { + // Methods cannot end with '.' except for '\.' + @throw NSInternalInconsistencyException; + } + + if ([scanner scanString:@"-" intoString:nil]) { + *instance = @YES; + } else if ([scanner scanString:@"+" intoString:nil]) { + *instance = @NO; + } else { + if ([scanner scanString:@"*" intoString:nil]) { + // Just checking... It has to start with one of these three! + scanner.scanLocation--; + } else { + @throw NSInternalInconsistencyException; + } + } + + // -*foo not allowed + if (*instance && [scanner scanString:@"*" intoString:nil]) { + @throw NSInternalInconsistencyException; + } + + if (scanner.isAtEnd) { + return [FLEXSearchToken string:@"" options:TBWildcardOptionsSuffix]; + } + + return [self scanToken:scanner allowed:methodAllowed first:firstAllowed]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.h new file mode 100644 index 00000000..07c627d5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.h @@ -0,0 +1,35 @@ +// +// FLEXSearchToken.h +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import + +typedef NS_OPTIONS(NSUInteger, TBWildcardOptions) { + TBWildcardOptionsNone = 0, + TBWildcardOptionsAny = 1, + TBWildcardOptionsPrefix = 1 << 1, + TBWildcardOptionsSuffix = 1 << 2, +}; + +/// A token may contain wildcards at one or either end, +/// but not in the middle of the token (as of now). +@interface FLEXSearchToken : NSObject + ++ (instancetype)any; ++ (instancetype)string:(NSString *)string options:(TBWildcardOptions)options; + +/// Will not contain the wildcard (*) symbol +@property (nonatomic, readonly) NSString *string; +@property (nonatomic, readonly) TBWildcardOptions options; + +/// Opposite of "is ambiguous" +@property (nonatomic, readonly) BOOL isAbsolute; +@property (nonatomic, readonly) BOOL isAny; +/// Still \c isAny, but checks that the string is empty +@property (nonatomic, readonly) BOOL isEmpty; + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.m new file mode 100644 index 00000000..975becf2 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.m @@ -0,0 +1,88 @@ +// +// FLEXSearchToken.m +// FLEX +// +// Created by Tanner on 3/22/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "FLEXSearchToken.h" + +@interface FLEXSearchToken () { + NSString *flex_description; +} +@end + +@implementation FLEXSearchToken + ++ (instancetype)any { + static FLEXSearchToken *any = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + any = [self string:nil options:TBWildcardOptionsAny]; + }); + + return any; +} + ++ (instancetype)string:(NSString *)string options:(TBWildcardOptions)options { + FLEXSearchToken *token = [self new]; + token->_string = string; + token->_options = options; + return token; +} + +- (BOOL)isAbsolute { + return _options == TBWildcardOptionsNone; +} + +- (BOOL)isAny { + return _options == TBWildcardOptionsAny; +} + +- (BOOL)isEmpty { + return self.isAny && self.string.length == 0; +} + +- (NSString *)description { + if (flex_description) { + return flex_description; + } + + switch (_options) { + case TBWildcardOptionsNone: + flex_description = _string; + break; + case TBWildcardOptionsAny: + flex_description = @"*"; + break; + default: { + NSMutableString *desc = [NSMutableString new]; + if (_options & TBWildcardOptionsPrefix) { + [desc appendString:@"*"]; + } + [desc appendString:_string]; + if (_options & TBWildcardOptionsSuffix) { + [desc appendString:@"*"]; + } + flex_description = desc; + } + } + + return flex_description; +} + +- (NSUInteger)hash { + return self.description.hash; +} + +- (BOOL)isEqual:(id)object { + if ([object isKindOfClass:[FLEXSearchToken class]]) { + FLEXSearchToken *token = object; + return [_string isEqualToString:token->_string] && _options == token->_options; + } + + return NO; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m index ff9f1bdf..8d680fc0 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m @@ -13,7 +13,7 @@ #if TARGET_IPHONE_SIMULATOR #define updateInterval 5.0 #else - #define updateInterval 1.0 + #define updateInterval 0.5 #endif @interface FLEXASLLogController () @@ -36,19 +36,17 @@ @interface FLEXASLLogController () @implementation FLEXASLLogController -+ (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler -{ ++ (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler { return [[self alloc] initWithUpdateHandler:newMessagesHandler]; } -- (id)initWithUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler -{ +- (id)initWithUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler { NSParameterAssert(newMessagesHandler); self = [super init]; if (self) { _updateHandler = newMessagesHandler; - _logMessageIdentifiers = [NSMutableIndexSet indexSet]; + _logMessageIdentifiers = [NSMutableIndexSet new]; self.logUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:updateInterval target:self selector:@selector(updateLogMessages) @@ -59,8 +57,7 @@ - (id)initWithUpdateHandler:(void(^)(NSArray *newMessage return self; } -- (void)dealloc -{ +- (void)dealloc { [self.logUpdateTimer invalidate]; } @@ -69,8 +66,7 @@ - (BOOL)startMonitoring { return YES; } -- (void)updateLogMessages -{ +- (void)updateLogMessages { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSArray *newMessages; @synchronized (self) { @@ -94,8 +90,7 @@ - (void)updateLogMessages #pragma mark - Log Message Fetching -- (NSArray *)newLogMessagesForCurrentProcess -{ +- (NSArray *)newLogMessagesForCurrentProcess { if (!self.logMessageIdentifiers.count) { return [self allLogMessagesForCurrentProcess]; } @@ -103,7 +98,7 @@ - (void)updateLogMessages aslresponse response = [self ASLMessageListForCurrentProcess]; aslmsg aslMessage = NULL; - NSMutableArray *newMessages = [NSMutableArray array]; + NSMutableArray *newMessages = [NSMutableArray new]; while ((aslMessage = asl_next(response))) { NSUInteger messageID = (NSUInteger)atoll(asl_get(aslMessage, ASL_KEY_MSG_ID)); @@ -116,8 +111,7 @@ - (void)updateLogMessages return newMessages; } -- (aslresponse)ASLMessageListForCurrentProcess -{ +- (aslresponse)ASLMessageListForCurrentProcess { static NSString *pidString = nil; if (!pidString) { pidString = @([NSProcessInfo.processInfo processIdentifier]).stringValue; @@ -137,12 +131,11 @@ - (aslresponse)ASLMessageListForCurrentProcess return asl_search(NULL, query); } -- (NSArray *)allLogMessagesForCurrentProcess -{ +- (NSArray *)allLogMessagesForCurrentProcess { aslresponse response = [self ASLMessageListForCurrentProcess]; aslmsg aslMessage = NULL; - NSMutableArray *logMessages = [NSMutableArray array]; + NSMutableArray *logMessages = [NSMutableArray new]; while ((aslMessage = asl_next(response))) { [logMessages addObject:[FLEXSystemLogMessage logMessageFromASLMessage:aslMessage]]; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h index 61311aca..bc1456dd 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h @@ -10,8 +10,6 @@ #define FLEXOSLogAvailable() (NSProcessInfo.processInfo.operatingSystemVersion.majorVersion >= 10) -extern NSString * const kFLEXiOSPersistentOSLogKey; - /// The log controller used for iOS 10 and up. @interface FLEXOSLogController : NSObject diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m index 95489575..cae7ce46 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m @@ -7,11 +7,10 @@ // #import "FLEXOSLogController.h" +#import "NSUserDefaults+FLEX.h" #include #include "ActivityStreamAPI.h" -NSString * const kFLEXiOSPersistentOSLogKey = @"com.flex.enablePersistentOSLogLogging"; - static os_activity_stream_for_pid_t OSActivityStreamForPID; static os_activity_stream_resume_t OSActivityStreamResume; static os_activity_stream_cancel_t OSActivityStreamCancel; @@ -38,12 +37,10 @@ + (FLEXOSLogController *)sharedLogController; @implementation FLEXOSLogController -+ (void)load -{ ++ (void)load { // Persist logs when the app launches on iOS 10 if we have persistent logs turned on if (FLEXOSLogAvailable()) { - BOOL persistent = [[NSUserDefaults standardUserDefaults] boolForKey:kFLEXiOSPersistentOSLogKey]; - if (persistent) { + if (NSUserDefaults.standardUserDefaults.flex_cacheOSLogMessages) { [self sharedLogController].persistent = YES; [[self sharedLogController] startMonitoring]; } @@ -60,15 +57,13 @@ + (instancetype)sharedLogController { return shared; } -+ (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler -{ ++ (instancetype)withUpdateHandler:(void(^)(NSArray *newMessages))newMessagesHandler { FLEXOSLogController *shared = [self sharedLogController]; shared.updateHandler = newMessagesHandler; return shared; } -- (id)init -{ +- (id)init { NSAssert(FLEXOSLogAvailable(), @"os_log is only available on iOS 10 and up"); self = [super init]; @@ -90,7 +85,7 @@ - (void)setPersistent:(BOOL)persistent { if (_persistent == persistent) return; _persistent = persistent; - self.messages = persistent ? [NSMutableArray array] : nil; + self.messages = persistent ? [NSMutableArray new] : nil; } - (BOOL)startMonitoring { @@ -178,9 +173,11 @@ - (BOOL)handleStreamEntry:(os_activity_stream_entry_t)entry error:(int)error { if (entry->log_message.format && !(strcmp(entry->log_message.format, messageText))) { messageText = (char *)entry->log_message.format; } + // move messageText from stack to heap + NSString *msg = [NSString stringWithUTF8String:messageText]; dispatch_async(dispatch_get_main_queue(), ^{ - FLEXSystemLogMessage *message = [FLEXSystemLogMessage logMessageFromDate:date text:@(messageText)]; + FLEXSystemLogMessage *message = [FLEXSystemLogMessage logMessageFromDate:date text:msg]; if (self.persistent) { [self.messages addObject:message]; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.h similarity index 71% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.h index c1da32e6..90f88879 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.h @@ -1,18 +1,18 @@ // -// FLEXSystemLogTableViewCell.h +// FLEXSystemLogCell.h // FLEX // // Created by Ryan Olson on 1/25/15. // Copyright (c) 2015 f. All rights reserved. // -#import +#import "FLEXTableViewCell.h" @class FLEXSystemLogMessage; -extern NSString *const kFLEXSystemLogTableViewCellIdentifier; +extern NSString *const kFLEXSystemLogCellIdentifier; -@interface FLEXSystemLogTableViewCell : UITableViewCell +@interface FLEXSystemLogCell : FLEXTableViewCell @property (nonatomic) FLEXSystemLogMessage *logMessage; @property (nonatomic, copy) NSString *highlightedText; diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m similarity index 71% rename from xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m rename to xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m index b17af68b..5c7a3809 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m @@ -1,40 +1,37 @@ // -// FLEXSystemLogTableViewCell.m +// FLEXSystemLogCell.m // FLEX // // Created by Ryan Olson on 1/25/15. // Copyright (c) 2015 f. All rights reserved. // -#import "FLEXSystemLogTableViewCell.h" +#import "FLEXSystemLogCell.h" #import "FLEXSystemLogMessage.h" +#import "UIFont+FLEX.h" -NSString *const kFLEXSystemLogTableViewCellIdentifier = @"FLEXSystemLogTableViewCellIdentifier"; +NSString *const kFLEXSystemLogCellIdentifier = @"FLEXSystemLogCellIdentifier"; -@interface FLEXSystemLogTableViewCell () +@interface FLEXSystemLogCell () @property (nonatomic) UILabel *logMessageLabel; @property (nonatomic) NSAttributedString *logMessageAttributedText; @end -@implementation FLEXSystemLogTableViewCell - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - self.logMessageLabel = [UILabel new]; - self.logMessageLabel.numberOfLines = 0; - self.separatorInset = UIEdgeInsetsZero; - self.selectionStyle = UITableViewCellSelectionStyleNone; - [self.contentView addSubview:self.logMessageLabel]; - } - return self; +@implementation FLEXSystemLogCell + +- (void)postInit { + [super postInit]; + + self.logMessageLabel = [UILabel new]; + self.logMessageLabel.numberOfLines = 0; + self.separatorInset = UIEdgeInsetsZero; + self.selectionStyle = UITableViewCellSelectionStyleNone; + [self.contentView addSubview:self.logMessageLabel]; } -- (void)setLogMessage:(FLEXSystemLogMessage *)logMessage -{ +- (void)setLogMessage:(FLEXSystemLogMessage *)logMessage { if (![_logMessage isEqual:logMessage]) { _logMessage = logMessage; self.logMessageAttributedText = nil; @@ -42,8 +39,7 @@ - (void)setLogMessage:(FLEXSystemLogMessage *)logMessage } } -- (void)setHighlightedText:(NSString *)highlightedText -{ +- (void)setHighlightedText:(NSString *)highlightedText { if (![_highlightedText isEqual:highlightedText]) { _highlightedText = highlightedText; self.logMessageAttributedText = nil; @@ -51,8 +47,7 @@ - (void)setHighlightedText:(NSString *)highlightedText } } -- (NSAttributedString *)logMessageAttributedText -{ +- (NSAttributedString *)logMessageAttributedText { if (!_logMessageAttributedText) { _logMessageAttributedText = [[self class] attributedTextForLogMessage:self.logMessage highlightedText:self.highlightedText]; } @@ -61,26 +56,25 @@ - (NSAttributedString *)logMessageAttributedText static const UIEdgeInsets kFLEXLogMessageCellInsets = {10.0, 10.0, 10.0, 10.0}; -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; self.logMessageLabel.attributedText = self.logMessageAttributedText; self.logMessageLabel.frame = UIEdgeInsetsInsetRect(self.contentView.bounds, kFLEXLogMessageCellInsets); } + #pragma mark - Stateless helpers -+ (NSAttributedString *)attributedTextForLogMessage:(FLEXSystemLogMessage *)logMessage highlightedText:(NSString *)highlightedText -{ ++ (NSAttributedString *)attributedTextForLogMessage:(FLEXSystemLogMessage *)logMessage highlightedText:(NSString *)highlightedText { NSString *text = [self displayedTextForLogMessage:logMessage]; - NSDictionary *attributes = @{ NSFontAttributeName : [UIFont fontWithName:@"CourierNewPSMT" size:12.0] }; + NSDictionary *attributes = @{ NSFontAttributeName : UIFont.flex_codeFont }; NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; if (highlightedText.length > 0) { - NSMutableAttributedString *mutableAttributedText = [attributedText mutableCopy]; - NSMutableDictionary *highlightAttributes = [@{ NSBackgroundColorAttributeName : UIColor.yellowColor } mutableCopy]; - [highlightAttributes addEntriesFromDictionary:attributes]; + NSMutableAttributedString *mutableAttributedText = attributedText.mutableCopy; + NSMutableDictionary *highlightAttributes = attributes.mutableCopy; + highlightAttributes[NSBackgroundColorAttributeName] = UIColor.yellowColor; NSRange remainingSearchRange = NSMakeRange(0, text.length); while (remainingSearchRange.location < text.length) { @@ -99,13 +93,11 @@ + (NSAttributedString *)attributedTextForLogMessage:(FLEXSystemLogMessage *)logM return attributedText; } -+ (NSString *)displayedTextForLogMessage:(FLEXSystemLogMessage *)logMessage -{ ++ (NSString *)displayedTextForLogMessage:(FLEXSystemLogMessage *)logMessage { return [NSString stringWithFormat:@"%@: %@", [self logTimeStringFromDate:logMessage.date], logMessage.messageText]; } -+ (CGFloat)preferredHeightForLogMessage:(FLEXSystemLogMessage *)logMessage inWidth:(CGFloat)width -{ ++ (CGFloat)preferredHeightForLogMessage:(FLEXSystemLogMessage *)logMessage inWidth:(CGFloat)width { UIEdgeInsets insets = kFLEXLogMessageCellInsets; CGFloat availableWidth = width - insets.left - insets.right; NSAttributedString *attributedLogText = [self attributedTextForLogMessage:logMessage highlightedText:nil]; @@ -113,8 +105,7 @@ + (CGFloat)preferredHeightForLogMessage:(FLEXSystemLogMessage *)logMessage inWid return labelSize.height + insets.top + insets.bottom; } -+ (NSString *)logTimeStringFromDate:(NSDate *)date -{ ++ (NSString *)logTimeStringFromDate:(NSDate *)date { static NSDateFormatter *formatter = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m index 9a17cc3d..fa6b47b3 100644 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m @@ -10,8 +10,7 @@ @implementation FLEXSystemLogMessage -+ (instancetype)logMessageFromASLMessage:(aslmsg)aslMessage -{ ++ (instancetype)logMessageFromASLMessage:(aslmsg)aslMessage { NSDate *date = nil; NSString *sender = nil, *text = nil; long long identifier = 0; @@ -46,13 +45,11 @@ + (instancetype)logMessageFromASLMessage:(aslmsg)aslMessage return message; } -+ (instancetype)logMessageFromDate:(NSDate *)date text:(NSString *)text -{ ++ (instancetype)logMessageFromDate:(NSDate *)date text:(NSString *)text { return [[self alloc] initWithDate:date sender:nil text:text messageID:0]; } -- (id)initWithDate:(NSDate *)date sender:(NSString *)sender text:(NSString *)text messageID:(long long)identifier -{ +- (id)initWithDate:(NSDate *)date sender:(NSString *)sender text:(NSString *)text messageID:(long long)identifier { self = [super init]; if (self) { _date = date; @@ -64,8 +61,7 @@ - (id)initWithDate:(NSDate *)date sender:(NSString *)sender text:(NSString *)tex return self; } -- (BOOL)isEqual:(id)object -{ +- (BOOL)isEqual:(id)object { if ([object isKindOfClass:[self class]]) { if (self.messageID) { // Only ASL uses messageID, otherwise it is 0 @@ -80,13 +76,11 @@ - (BOOL)isEqual:(id)object return NO; } -- (NSUInteger)hash -{ +- (NSUInteger)hash { return (NSUInteger)self.messageID; } -- (NSString *)description -{ +- (NSString *)description { NSString *escaped = [self.messageText stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; return [NSString stringWithFormat:@"(%@) %@", @(self.messageText.length), escaped]; } diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h deleted file mode 100644 index 2fde6651..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FLEXSystemLogTableViewController.h -// FLEX -// -// Created by Ryan Olson on 1/19/15. -// Copyright (c) 2015 f. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXGlobalsEntry.h" - -@interface FLEXSystemLogTableViewController : FLEXTableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m deleted file mode 100644 index 3f4a6918..00000000 --- a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m +++ /dev/null @@ -1,203 +0,0 @@ -// -// FLEXSystemLogTableViewController.m -// FLEX -// -// Created by Ryan Olson on 1/19/15. -// Copyright (c) 2015 f. All rights reserved. -// - -#import "FLEXSystemLogTableViewController.h" -#import "FLEXUtility.h" -#import "FLEXColor.h" -#import "FLEXASLLogController.h" -#import "FLEXOSLogController.h" -#import "FLEXSystemLogTableViewCell.h" - -@interface FLEXSystemLogTableViewController () - -@property (nonatomic, readonly) id logController; -@property (nonatomic, readonly) NSMutableArray *logMessages; -@property (nonatomic, copy) NSArray *filteredLogMessages; - -@end - -@implementation FLEXSystemLogTableViewController - -- (id)init { - return [super initWithStyle:UITableViewStylePlain]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showsSearchBar = YES; - - __weak __typeof(self) weakSelf = self; - id logHandler = ^(NSArray *newMessages) { - __strong __typeof(weakSelf) self = weakSelf; - [self handleUpdateWithNewMessages:newMessages]; - }; - - _logMessages = [NSMutableArray array]; - if (FLEXOSLogAvailable()) { - _logController = [FLEXOSLogController withUpdateHandler:logHandler]; - } else { - _logController = [FLEXASLLogController withUpdateHandler:logHandler]; - } - - [self.tableView registerClass:[FLEXSystemLogTableViewCell class] forCellReuseIdentifier:kFLEXSystemLogTableViewCellIdentifier]; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - self.title = @"Loading..."; - - UIBarButtonItem *scrollDown = [[UIBarButtonItem alloc] initWithTitle:@" ⬇︎ " - style:UIBarButtonItemStylePlain - target:self - action:@selector(scrollToLastRow)]; - UIBarButtonItem *settings = [[UIBarButtonItem alloc] initWithTitle:@"Settings" - style:UIBarButtonItemStylePlain - target:self - action:@selector(showLogSettings)]; - if (FLEXOSLogAvailable()) { - self.navigationItem.rightBarButtonItems = @[scrollDown, settings]; - } else { - self.navigationItem.rightBarButtonItem = scrollDown; - } -} - -- (void)handleUpdateWithNewMessages:(NSArray *)newMessages -{ - self.title = @"System Log"; - - [self.logMessages addObjectsFromArray:newMessages]; - - // "Follow" the log as new messages stream in if we were previously near the bottom. - BOOL wasNearBottom = self.tableView.contentOffset.y >= self.tableView.contentSize.height - self.tableView.frame.size.height - 100.0; - [self.tableView reloadData]; - if (wasNearBottom) { - [self scrollToLastRow]; - } -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - [self.logController startMonitoring]; -} - -- (void)scrollToLastRow -{ - NSInteger numberOfRows = [self.tableView numberOfRowsInSection:0]; - if (numberOfRows > 0) { - NSIndexPath *lastIndexPath = [NSIndexPath indexPathForRow:numberOfRows - 1 inSection:0]; - [self.tableView scrollToRowAtIndexPath:lastIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; - } -} - -- (void)showLogSettings -{ - FLEXOSLogController *logController = (FLEXOSLogController *)self.logController; - BOOL persistent = [[NSUserDefaults standardUserDefaults] boolForKey:kFLEXiOSPersistentOSLogKey]; - NSString *toggle = persistent ? @"Disable" : @"Enable"; - NSString *title = [@"Persistent logging: " stringByAppendingString:persistent ? @"ON" : @"OFF"]; - NSString *body = @"In iOS 10 and up, ASL is gone. The OS Log API is much more limited. " - "To get as close to the old behavior as possible, logs must be collected manually at launch and stored.\n\n" - "Turn this feature on only when you need it."; - - [FLEXAlert makeAlert:^(FLEXAlert *make) { - make.title(title).message(body).button(toggle).handler(^(NSArray *strings) { - [[NSUserDefaults standardUserDefaults] setBool:!persistent forKey:kFLEXiOSPersistentOSLogKey]; - logController.persistent = !persistent; - [logController.messages addObjectsFromArray:self.logMessages]; - }); - make.button(@"Dismiss").cancelStyle(); - } showFrom:self]; -} - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return @"⚠️ System Log"; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - return [self new]; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.searchController.isActive ? self.filteredLogMessages.count : self.logMessages.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXSystemLogTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXSystemLogTableViewCellIdentifier forIndexPath:indexPath]; - cell.logMessage = [self logMessageAtIndexPath:indexPath]; - cell.highlightedText = self.searchText; - - if (indexPath.row % 2 == 0) { - cell.backgroundColor = [FLEXColor primaryBackgroundColor]; - } else { - cell.backgroundColor = [FLEXColor secondaryBackgroundColor]; - } - - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXSystemLogMessage *logMessage = [self logMessageAtIndexPath:indexPath]; - return [FLEXSystemLogTableViewCell preferredHeightForLogMessage:logMessage inWidth:self.tableView.bounds.size.width]; -} - -#pragma mark - Copy on long press - -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return YES; -} - -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - return action == @selector(copy:); -} - -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if (action == @selector(copy:)) { - // We usually only want to copy the log message itself, not any metadata associated with it. - UIPasteboard.generalPasteboard.string = [self logMessageAtIndexPath:indexPath].messageText; - } -} - -- (FLEXSystemLogMessage *)logMessageAtIndexPath:(NSIndexPath *)indexPath -{ - return self.searchController.isActive ? self.filteredLogMessages[indexPath.row] : self.logMessages[indexPath.row]; -} - -#pragma mark - Search bar - -- (void)updateSearchResults:(NSString *)searchString -{ - [self onBackgroundQueue:^NSArray *{ - return [self.logMessages filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(FLEXSystemLogMessage *logMessage, NSDictionary *bindings) { - NSString *displayedText = [FLEXSystemLogTableViewCell displayedTextForLogMessage:logMessage]; - return [displayedText rangeOfString:searchString options:NSCaseInsensitiveSearch].length > 0; - }]]; - } thenOnMainQueue:^(NSArray *filteredLogMessages) { - if ([self.searchText isEqual:searchString]) { - self.filteredLogMessages = filteredLogMessages; - [self.tableView reloadData]; - } - }]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.h b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.h new file mode 100644 index 00000000..1bb4e50a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.h @@ -0,0 +1,14 @@ +// +// FLEXSystemLogViewController.h +// FLEX +// +// Created by Ryan Olson on 1/19/15. +// Copyright (c) 2015 f. All rights reserved. +// + +#import "FLEXFilteringTableViewController.h" +#import "FLEXGlobalsEntry.h" + +@interface FLEXSystemLogViewController : FLEXFilteringTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.m b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.m new file mode 100644 index 00000000..db01377d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.m @@ -0,0 +1,268 @@ +// +// FLEXSystemLogViewController.m +// FLEX +// +// Created by Ryan Olson on 1/19/15. +// Copyright (c) 2015 f. All rights reserved. +// + +#import "FLEXSystemLogViewController.h" +#import "FLEXASLLogController.h" +#import "FLEXOSLogController.h" +#import "FLEXSystemLogCell.h" +#import "FLEXMutableListSection.h" +#import "FLEXUtility.h" +#import "FLEXColor.h" +#import "FLEXResources.h" +#import "UIBarButtonItem+FLEX.h" +#import "NSUserDefaults+FLEX.h" +#import "flex_fishhook.h" +#import + +@interface FLEXSystemLogViewController () + +@property (nonatomic, readonly) FLEXMutableListSection *logMessages; +@property (nonatomic, readonly) id logController; + +@end + +static void (*MSHookFunction)(void *symbol, void *replace, void **result); + +static BOOL FLEXDidHookNSLog = NO; +static BOOL FLEXNSLogHookWorks = NO; + +BOOL (*os_log_shim_enabled)(void *addr) = nil; +BOOL (*orig_os_log_shim_enabled)(void *addr) = nil; +static BOOL my_os_log_shim_enabled(void *addr) { + return NO; +} + +@implementation FLEXSystemLogViewController + +#pragma mark - Initialization + ++ (void)load { + // User must opt-into disabling os_log + if (!NSUserDefaults.standardUserDefaults.flex_disableOSLog) { + return; + } + + // Thanks to @Ram4096 on GitHub for telling me that + // os_log is conditionally enabled by the SDK version + void *addr = __builtin_return_address(0); + void *libsystem_trace = dlopen("/usr/lib/system/libsystem_trace.dylib", RTLD_LAZY); + os_log_shim_enabled = dlsym(libsystem_trace, "os_log_shim_enabled"); + if (!os_log_shim_enabled) { + return; + } + + FLEXDidHookNSLog = flex_rebind_symbols((struct rebinding[1]) {{ + "os_log_shim_enabled", + (void *)my_os_log_shim_enabled, + (void **)&orig_os_log_shim_enabled + }}, 1) == 0; + + if (FLEXDidHookNSLog && orig_os_log_shim_enabled != nil) { + // Check if our rebinding worked + FLEXNSLogHookWorks = my_os_log_shim_enabled(addr) == NO; + } + + // So, just because we rebind the lazily loaded symbol for + // this function doesn't mean it's even going to be used. + // While it seems to be sufficient for the simulator, for + // whatever reason it is not sufficient on-device. We need + // to actually hook the function with something like Substrate. + + // Check if we have substrate, and if so use that instead + void *handle = dlopen("/usr/lib/libsubstrate.dylib", RTLD_LAZY); + if (handle) { + MSHookFunction = dlsym(handle, "MSHookFunction"); + + if (MSHookFunction) { + // Set the hook and check if it worked + void *unused; + MSHookFunction(os_log_shim_enabled, my_os_log_shim_enabled, &unused); + FLEXNSLogHookWorks = os_log_shim_enabled(addr) == NO; + } + } +} + +- (id)init { + return [super initWithStyle:UITableViewStylePlain]; +} + + +#pragma mark - Overrides + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.showsSearchBar = YES; + self.showSearchBarInitially = NO; + + __weak __typeof(self) weakSelf = self; + id logHandler = ^(NSArray *newMessages) { + __strong __typeof(weakSelf) self = weakSelf; + [self handleUpdateWithNewMessages:newMessages]; + }; + + if (FLEXOSLogAvailable() && !FLEXNSLogHookWorks) { + _logController = [FLEXOSLogController withUpdateHandler:logHandler]; + } else { + _logController = [FLEXASLLogController withUpdateHandler:logHandler]; + } + + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.title = @"Waiting for Logs..."; + + // Toolbar buttons // + + UIBarButtonItem *scrollDown = [UIBarButtonItem + itemWithImage:FLEXResources.scrollToBottomIcon + target:self + action:@selector(scrollToLastRow) + ]; + UIBarButtonItem *settings = [UIBarButtonItem + itemWithImage:FLEXResources.gearIcon + target:self + action:@selector(showLogSettings) + ]; + + [self addToolbarItems:@[scrollDown, settings]]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self.logController startMonitoring]; +} + +- (NSArray *)makeSections { + _logMessages = [FLEXMutableListSection list:@[] + cellConfiguration:^(FLEXSystemLogCell *cell, FLEXSystemLogMessage *message, NSInteger row) { + cell.logMessage = message; + cell.highlightedText = self.filterText; + + if (row % 2 == 0) { + cell.backgroundColor = FLEXColor.primaryBackgroundColor; + } else { + cell.backgroundColor = FLEXColor.secondaryBackgroundColor; + } + } filterMatcher:^BOOL(NSString *filterText, FLEXSystemLogMessage *message) { + NSString *displayedText = [FLEXSystemLogCell displayedTextForLogMessage:message]; + return [displayedText localizedCaseInsensitiveContainsString:filterText]; + } + ]; + + self.logMessages.cellRegistrationMapping = @{ + kFLEXSystemLogCellIdentifier : [FLEXSystemLogCell class] + }; + + return @[self.logMessages]; +} + +- (NSArray *)nonemptySections { + return @[self.logMessages]; +} + + +#pragma mark - Private + +- (void)handleUpdateWithNewMessages:(NSArray *)newMessages { + self.title = [self.class globalsEntryTitle:FLEXGlobalsRowSystemLog]; + + [self.logMessages mutate:^(NSMutableArray *list) { + [list addObjectsFromArray:newMessages]; + }]; + + // "Follow" the log as new messages stream in if we were previously near the bottom. + BOOL wasNearBottom = self.tableView.contentOffset.y >= self.tableView.contentSize.height - self.tableView.frame.size.height - 100.0; + [self reloadData]; + if (wasNearBottom) { + [self scrollToLastRow]; + } +} + +- (void)scrollToLastRow { + NSInteger numberOfRows = [self.tableView numberOfRowsInSection:0]; + if (numberOfRows > 0) { + NSIndexPath *lastIndexPath = [NSIndexPath indexPathForRow:numberOfRows - 1 inSection:0]; + [self.tableView scrollToRowAtIndexPath:lastIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; + } +} + +- (void)showLogSettings { + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + BOOL disableOSLog = defaults.flex_disableOSLog; + BOOL persistent = defaults.flex_cacheOSLogMessages; + + NSString *aslToggle = disableOSLog ? @"Enable os_log (default)" : @"Disable os_log"; + NSString *persistence = persistent ? @"Disable persistent logging" : @"Enable persistent logging"; + + NSString *title = @"System Log Settings"; + NSString *body = @"In iOS 10 and up, ASL has been replaced by os_log. " + "The os_log API is much more limited. Below, you can opt-into the old behavior " + "if you want cleaner, more reliable logs within FLEX, but this will break " + "anything that expects os_log to be working, such as Console.app. " + "This setting requires the app to restart to take effect. \n\n" + + "To get as close to the old behavior as possible with os_log enabled, logs must " + "be collected manually at launch and stored. This setting has no effect " + "on iOS 9 and below, or if os_log is disabled. " + "You should only enable persistent logging when you need it."; + + FLEXOSLogController *logController = (FLEXOSLogController *)self.logController; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(title).message(body); + make.button(aslToggle).destructiveStyle().handler(^(NSArray *strings) { + [defaults toggleBoolForKey:kFLEXDefaultsDisableOSLogForceASLKey]; + }); + + make.button(persistence).handler(^(NSArray *strings) { + [defaults toggleBoolForKey:kFLEXDefaultsiOSPersistentOSLogKey]; + logController.persistent = !persistent; + [logController.messages addObjectsFromArray:self.logMessages.list]; + }); + make.button(@"Dismiss").cancelStyle(); + } showFrom:self]; +} + + +#pragma mark - FLEXGlobalsEntry + ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { + return @"⚠️ System Log"; +} + ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { + return [self new]; +} + + +#pragma mark - Table view data source + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXSystemLogMessage *logMessage = self.logMessages.filteredList[indexPath.row]; + return [FLEXSystemLogCell preferredHeightForLogMessage:logMessage inWidth:self.tableView.bounds.size.width]; +} + + +#pragma mark - Copy on long press + +- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + return action == @selector(copy:); +} + +- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + if (action == @selector(copy:)) { + // We usually only want to copy the log message itself, not any metadata associated with it. + UIPasteboard.generalPasteboard.string = self.logMessages.filteredList[indexPath.row].messageText; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.h b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.h new file mode 100644 index 00000000..80d975fc --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.h @@ -0,0 +1,64 @@ +// +// FLEXManager+Extensibility.h +// FLEX +// +// Created by Tanner on 2/2/20. +// Copyright © 2020 Flipboard. 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; + +#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 diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.m b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.m new file mode 100644 index 00000000..6b533526 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Extensibility.m @@ -0,0 +1,257 @@ +// +// FLEXManager+Extensibility.m +// FLEX +// +// Created by Tanner on 2/2/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXManager+Extensibility.h" +#import "FLEXManager+Private.h" +#import "FLEXNavigationController.h" +#import "FLEXGlobalsEntry.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXKeyboardShortcutManager.h" +#import "FLEXExplorerViewController.h" +#import "FLEXNetworkMITMViewController.h" +#import "FLEXKeyboardHelpViewController.h" +#import "FLEXFileBrowserController.h" +#import "FLEXUtility.h" + +@interface FLEXManager (ExtensibilityPrivate) +@property (nonatomic, readonly) UIViewController *topViewController; +@end + +@implementation FLEXManager (Extensibility) + +#pragma mark - Globals Screen Entries + +- (void)registerGlobalEntryWithName:(NSString *)entryName objectFutureBlock:(id (^)(void))objectFutureBlock { + NSParameterAssert(entryName); + NSParameterAssert(objectFutureBlock); + NSAssert(NSThread.isMainThread, @"This method must be called from the main thread."); + + entryName = entryName.copy; + FLEXGlobalsEntry *entry = [FLEXGlobalsEntry entryWithNameFuture:^NSString *{ + return entryName; + } viewControllerFuture:^UIViewController *{ + return [FLEXObjectExplorerFactory explorerViewControllerForObject:objectFutureBlock()]; + }]; + + [self.userGlobalEntries addObject:entry]; +} + +- (void)registerGlobalEntryWithName:(NSString *)entryName viewControllerFutureBlock:(UIViewController * (^)(void))viewControllerFutureBlock { + NSParameterAssert(entryName); + NSParameterAssert(viewControllerFutureBlock); + NSAssert(NSThread.isMainThread, @"This method must be called from the main thread."); + + entryName = entryName.copy; + FLEXGlobalsEntry *entry = [FLEXGlobalsEntry entryWithNameFuture:^NSString *{ + return entryName; + } viewControllerFuture:^UIViewController *{ + UIViewController *viewController = viewControllerFutureBlock(); + NSCAssert(viewController, @"'%@' entry returned nil viewController. viewControllerFutureBlock should never return nil.", entryName); + return viewController; + }]; + + [self.userGlobalEntries addObject:entry]; +} + + +#pragma mark - Simulator Shortcuts + +- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description { +#if TARGET_OS_SIMULATOR + [FLEXKeyboardShortcutManager.sharedManager registerSimulatorShortcutWithKey:key modifiers:modifiers action:action description:description]; +#endif +} + +- (void)setSimulatorShortcutsEnabled:(BOOL)simulatorShortcutsEnabled { +#if TARGET_OS_SIMULATOR + [FLEXKeyboardShortcutManager.sharedManager setEnabled:simulatorShortcutsEnabled]; +#endif +} + +- (BOOL)simulatorShortcutsEnabled { +#if TARGET_OS_SIMULATOR + return FLEXKeyboardShortcutManager.sharedManager.isEnabled; +#else + return NO; +#endif +} + +- (void)registerDefaultSimulatorShortcuts { + [self registerSimulatorShortcutWithKey:@"f" modifiers:0 action:^{ + [self toggleExplorer]; + } description:@"Toggle FLEX toolbar"]; + + [self registerSimulatorShortcutWithKey:@"g" modifiers:0 action:^{ + [self showExplorerIfNeeded]; + [self.explorerViewController toggleMenuTool]; + } description:@"Toggle FLEX globals menu"]; + + [self registerSimulatorShortcutWithKey:@"v" modifiers:0 action:^{ + [self showExplorerIfNeeded]; + [self.explorerViewController toggleViewsTool]; + } description:@"Toggle view hierarchy menu"]; + + [self registerSimulatorShortcutWithKey:@"s" modifiers:0 action:^{ + [self showExplorerIfNeeded]; + [self.explorerViewController toggleSelectTool]; + } description:@"Toggle select tool"]; + + [self registerSimulatorShortcutWithKey:@"m" modifiers:0 action:^{ + [self showExplorerIfNeeded]; + [self.explorerViewController toggleMoveTool]; + } description:@"Toggle move tool"]; + + [self registerSimulatorShortcutWithKey:@"n" modifiers:0 action:^{ + [self toggleTopViewControllerOfClass:[FLEXNetworkMITMViewController class]]; + } description:@"Toggle network history view"]; + + // 't' is for testing: quickly present an object explorer for debugging + [self registerSimulatorShortcutWithKey:@"t" modifiers:0 action:^{ + [self showExplorerIfNeeded]; + + [self.explorerViewController toggleToolWithViewControllerProvider:^UINavigationController *{ + return [FLEXNavigationController withRootViewController:[FLEXObjectExplorerFactory + explorerViewControllerForObject:NSBundle.mainBundle + ]]; + } completion:nil]; + } description:@"Present an object explorer for debugging"]; + + [self registerSimulatorShortcutWithKey:UIKeyInputDownArrow modifiers:0 action:^{ + if (self.isHidden || ![self.explorerViewController handleDownArrowKeyPressed]) { + [self tryScrollDown]; + } + } description:@"Cycle view selection\n\t\tMove view down\n\t\tScroll down"]; + + [self registerSimulatorShortcutWithKey:UIKeyInputUpArrow modifiers:0 action:^{ + if (self.isHidden || ![self.explorerViewController handleUpArrowKeyPressed]) { + [self tryScrollUp]; + } + } description:@"Cycle view selection\n\t\tMove view up\n\t\tScroll up"]; + + [self registerSimulatorShortcutWithKey:UIKeyInputRightArrow modifiers:0 action:^{ + if (!self.isHidden) { + [self.explorerViewController handleRightArrowKeyPressed]; + } + } description:@"Move selected view right"]; + + [self registerSimulatorShortcutWithKey:UIKeyInputLeftArrow modifiers:0 action:^{ + if (self.isHidden) { + [self tryGoBack]; + } else { + [self.explorerViewController handleLeftArrowKeyPressed]; + } + } description:@"Move selected view left"]; + + [self registerSimulatorShortcutWithKey:@"?" modifiers:0 action:^{ + [self toggleTopViewControllerOfClass:[FLEXKeyboardHelpViewController class]]; + } description:@"Toggle (this) help menu"]; + + [self registerSimulatorShortcutWithKey:UIKeyInputEscape modifiers:0 action:^{ + [[self.topViewController presentingViewController] dismissViewControllerAnimated:YES completion:nil]; + } description:@"End editing text\n\t\tDismiss top view controller"]; + + [self registerSimulatorShortcutWithKey:@"o" modifiers:UIKeyModifierCommand|UIKeyModifierShift action:^{ + [self toggleTopViewControllerOfClass:[FLEXFileBrowserController class]]; + } description:@"Toggle file browser menu"]; +} + ++ (void)load { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.sharedManager registerDefaultSimulatorShortcuts]; + }); +} + + +#pragma mark - Private + +- (UIEdgeInsets)contentInsetsOfScrollView:(UIScrollView *)scrollView { + if (@available(iOS 11, *)) { + return scrollView.adjustedContentInset; + } + + return scrollView.contentInset; +} + +- (void)tryScrollDown { + UIScrollView *scrollview = [self firstScrollView]; + UIEdgeInsets insets = [self contentInsetsOfScrollView:scrollview]; + CGPoint contentOffset = scrollview.contentOffset; + CGFloat maxYOffset = scrollview.contentSize.height - scrollview.bounds.size.height + insets.bottom; + contentOffset.y = MIN(contentOffset.y + 200, maxYOffset); + [scrollview setContentOffset:contentOffset animated:YES]; +} + +- (void)tryScrollUp { + UIScrollView *scrollview = [self firstScrollView]; + UIEdgeInsets insets = [self contentInsetsOfScrollView:scrollview]; + CGPoint contentOffset = scrollview.contentOffset; + contentOffset.y = MAX(contentOffset.y - 200, -insets.top); + [scrollview setContentOffset:contentOffset animated:YES]; +} + +- (UIScrollView *)firstScrollView { + NSMutableArray *views = FLEXUtility.appKeyWindow.subviews.mutableCopy; + UIScrollView *scrollView = nil; + while (views.count > 0) { + UIView *view = views.firstObject; + [views removeObjectAtIndex:0]; + if ([view isKindOfClass:[UIScrollView class]]) { + scrollView = (UIScrollView *)view; + break; + } else { + [views addObjectsFromArray:view.subviews]; + } + } + return scrollView; +} + +- (void)tryGoBack { + UINavigationController *navigationController = nil; + UIViewController *topViewController = self.topViewController; + if ([topViewController isKindOfClass:[UINavigationController class]]) { + navigationController = (UINavigationController *)topViewController; + } else { + navigationController = topViewController.navigationController; + } + [navigationController popViewControllerAnimated:YES]; +} + +- (UIViewController *)topViewController { + return [FLEXUtility topViewControllerInWindow:UIApplication.sharedApplication.keyWindow]; +} + +- (void)toggleTopViewControllerOfClass:(Class)class { + UINavigationController *topViewController = (id)self.topViewController; + if ([topViewController isKindOfClass:[FLEXNavigationController class]]) { + if ([topViewController.topViewController isKindOfClass:[class class]]) { + if (topViewController.viewControllers.count == 1) { + // Dismiss since we are already presenting it + [topViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; + } else { + // Pop since we are viewing it but it's not the only thing on the stack + [topViewController popViewControllerAnimated:YES]; + } + } else { + // Push it on the existing navigation stack + [topViewController pushViewController:[class new] animated:YES]; + } + } else { + // Present it in an entirely new navigation controller + [self.explorerViewController presentViewController: + [FLEXNavigationController withRootViewController:[class new]] + animated:YES completion:nil]; + } +} + +- (void)showExplorerIfNeeded { + if (self.isHidden) { + [self showExplorer]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.h b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.h new file mode 100644 index 00000000..a91bf24b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.h @@ -0,0 +1,40 @@ +// +// FLEXManager+Networking.h +// FLEX +// +// Created by Tanner on 2/1/20. +// Copyright © 2020 Flipboard. 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 *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 diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.m b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.m new file mode 100644 index 00000000..765137e1 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Networking.m @@ -0,0 +1,68 @@ +// +// FLEXManager+Networking.m +// FLEX +// +// Created by Tanner on 2/1/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXManager+Networking.h" +#import "FLEXManager+Private.h" +#import "FLEXNetworkObserver.h" +#import "FLEXNetworkRecorder.h" +#import "FLEXObjectExplorerFactory.h" +#import "NSUserDefaults+FLEX.h" + +@implementation FLEXManager (Networking) + ++ (void)load { + if (NSUserDefaults.standardUserDefaults.flex_registerDictionaryJSONViewerOnLaunch) { + dispatch_async(dispatch_get_main_queue(), ^{ + // Register array/dictionary viewer for JSON responses + [self.sharedManager setCustomViewerForContentType:@"application/json" + viewControllerFutureBlock:^UIViewController *(NSData *data) { + id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (jsonObject) { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:jsonObject]; + } + return nil; + } + ]; + }); + } +} + +- (BOOL)isNetworkDebuggingEnabled { + return FLEXNetworkObserver.isEnabled; +} + +- (void)setNetworkDebuggingEnabled:(BOOL)networkDebuggingEnabled { + FLEXNetworkObserver.enabled = networkDebuggingEnabled; +} + +- (NSUInteger)networkResponseCacheByteLimit { + return FLEXNetworkRecorder.defaultRecorder.responseCacheByteLimit; +} + +- (void)setNetworkResponseCacheByteLimit:(NSUInteger)networkResponseCacheByteLimit { + FLEXNetworkRecorder.defaultRecorder.responseCacheByteLimit = networkResponseCacheByteLimit; +} + +- (NSMutableArray *)networkRequestHostBlacklist { + return FLEXNetworkRecorder.defaultRecorder.hostBlacklist; +} + +- (void)setNetworkRequestHostBlacklist:(NSMutableArray *)networkRequestHostBlacklist { + FLEXNetworkRecorder.defaultRecorder.hostBlacklist = networkRequestHostBlacklist; +} + +- (void)setCustomViewerForContentType:(NSString *)contentType + viewControllerFutureBlock:(FLEXCustomContentViewerFuture)viewControllerFutureBlock { + NSParameterAssert(contentType.length); + NSParameterAssert(viewControllerFutureBlock); + NSAssert(NSThread.isMainThread, @"This method must be called from the main thread."); + + self.customContentTypeViewers[contentType.lowercaseString] = viewControllerFutureBlock; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Private.h b/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Private.h deleted file mode 100644 index 5f79deec..00000000 --- a/xcode/Pods/FLEX/Classes/Manager/FLEXManager+Private.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// FLEXManager+Private.h -// PebbleApp -// -// Created by Javier Soto on 7/26/14. -// Copyright (c) 2014 Pebble Technology. All rights reserved. -// - -#import "FLEXManager.h" - -@class FLEXGlobalsEntry; - -@interface FLEXManager () - -/// An array of FLEXGlobalsEntry objects that have been registered by the user. -@property (nonatomic, readonly) NSArray *userGlobalEntries; - -@property (nonatomic, readonly) NSDictionary *customContentTypeViewers; - -@end diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager.h b/xcode/Pods/FLEX/Classes/Manager/FLEXManager.h new file mode 100644 index 00000000..4cae6ca3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager.h @@ -0,0 +1,43 @@ +// +// FLEXManager.h +// Flipboard +// +// Created by Ryan Olson on 4/4/14. +// Copyright (c) 2020 Flipboard. 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 diff --git a/xcode/Pods/FLEX/Classes/Manager/FLEXManager.m b/xcode/Pods/FLEX/Classes/Manager/FLEXManager.m index 5ca03e05..904b5b7d 100644 --- a/xcode/Pods/FLEX/Classes/Manager/FLEXManager.m +++ b/xcode/Pods/FLEX/Classes/Manager/FLEXManager.m @@ -3,25 +3,20 @@ // Flipboard // // Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXManager.h" #import "FLEXUtility.h" #import "FLEXExplorerViewController.h" #import "FLEXWindow.h" -#import "FLEXGlobalsEntry.h" -#import "FLEXObjectExplorerFactory.h" #import "FLEXObjectExplorerViewController.h" -#import "FLEXNetworkObserver.h" -#import "FLEXNetworkRecorder.h" -#import "FLEXKeyboardShortcutManager.h" -#import "FLEXFileBrowserTableViewController.h" -#import "FLEXNetworkHistoryTableViewController.h" -#import "FLEXKeyboardHelpViewController.h" +#import "FLEXFileBrowserController.h" @interface FLEXManager () +@property (nonatomic, readonly, getter=isHidden) BOOL hidden; + @property (nonatomic) FLEXWindow *explorerWindow; @property (nonatomic) FLEXExplorerViewController *explorerViewController; @@ -32,8 +27,7 @@ @interface FLEXManager () *)networkRequestHostBlacklist -{ - [FLEXNetworkRecorder defaultRecorder].hostBlacklist = networkRequestHostBlacklist; +- (FLEXExplorerToolbar *)toolbar { + return self.explorerViewController.explorerToolbar; } -- (NSArray *)hostBlacklist -{ - return [FLEXNetworkRecorder defaultRecorder].hostBlacklist; -} #pragma mark - FLEXWindowEventDelegate -- (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow -{ +- (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow { // Ask the explorer view controller return [self.explorerViewController shouldReceiveTouchAtWindowPoint:pointInWindow]; } -- (BOOL)canBecomeKeyWindow -{ - // Only when the explorer view controller wants it because it needs to accept key input & affect the status bar. - return [self.explorerViewController wantsWindowToBecomeKey]; +- (BOOL)canBecomeKeyWindow { + // Only when the explorer view controller wants it because + // it needs to accept key input & affect the status bar. + return self.explorerViewController.wantsWindowToBecomeKey; } #pragma mark - FLEXExplorerViewControllerDelegate -- (void)explorerViewControllerDidFinish:(FLEXExplorerViewController *)explorerViewController -{ +- (void)explorerViewControllerDidFinish:(FLEXExplorerViewController *)explorerViewController { [self hideExplorer]; } -#pragma mark - Simulator Shortcuts - -- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description -{ -# if TARGET_OS_SIMULATOR - [[FLEXKeyboardShortcutManager sharedManager] registerSimulatorShortcutWithKey:key modifiers:modifiers action:action description:description]; -#endif -} - -- (void)setSimulatorShortcutsEnabled:(BOOL)simulatorShortcutsEnabled -{ -# if TARGET_OS_SIMULATOR - [[FLEXKeyboardShortcutManager sharedManager] setEnabled:simulatorShortcutsEnabled]; -#endif -} - -- (BOOL)simulatorShortcutsEnabled -{ -# if TARGET_OS_SIMULATOR - return [[FLEXKeyboardShortcutManager sharedManager] isEnabled]; -#else - return NO; -#endif -} - -- (void)registerDefaultSimulatorShortcuts -{ - [self registerSimulatorShortcutWithKey:@"f" modifiers:0 action:^{ - [self toggleExplorer]; - } description:@"Toggle FLEX toolbar"]; - - [self registerSimulatorShortcutWithKey:@"g" modifiers:0 action:^{ - [self showExplorerIfNeeded]; - [self.explorerViewController toggleMenuTool]; - } description:@"Toggle FLEX globals menu"]; - - [self registerSimulatorShortcutWithKey:@"v" modifiers:0 action:^{ - [self showExplorerIfNeeded]; - [self.explorerViewController toggleViewsTool]; - } description:@"Toggle view hierarchy menu"]; - - [self registerSimulatorShortcutWithKey:@"s" modifiers:0 action:^{ - [self showExplorerIfNeeded]; - [self.explorerViewController toggleSelectTool]; - } description:@"Toggle select tool"]; - - [self registerSimulatorShortcutWithKey:@"m" modifiers:0 action:^{ - [self showExplorerIfNeeded]; - [self.explorerViewController toggleMoveTool]; - } description:@"Toggle move tool"]; - - [self registerSimulatorShortcutWithKey:@"n" modifiers:0 action:^{ - [self toggleTopViewControllerOfClass:[FLEXNetworkHistoryTableViewController class]]; - } description:@"Toggle network history view"]; - - [self registerSimulatorShortcutWithKey:UIKeyInputDownArrow modifiers:0 action:^{ - if ([self isHidden]) { - [self tryScrollDown]; - } else { - [self.explorerViewController handleDownArrowKeyPressed]; - } - } description:@"Cycle view selection\n\t\tMove view down\n\t\tScroll down"]; - - [self registerSimulatorShortcutWithKey:UIKeyInputUpArrow modifiers:0 action:^{ - if ([self isHidden]) { - [self tryScrollUp]; - } else { - [self.explorerViewController handleUpArrowKeyPressed]; - } - } description:@"Cycle view selection\n\t\tMove view up\n\t\tScroll up"]; - - [self registerSimulatorShortcutWithKey:UIKeyInputRightArrow modifiers:0 action:^{ - if (![self isHidden]) { - [self.explorerViewController handleRightArrowKeyPressed]; - } - } description:@"Move selected view right"]; - - [self registerSimulatorShortcutWithKey:UIKeyInputLeftArrow modifiers:0 action:^{ - if ([self isHidden]) { - [self tryGoBack]; - } else { - [self.explorerViewController handleLeftArrowKeyPressed]; - } - } description:@"Move selected view left"]; - - [self registerSimulatorShortcutWithKey:@"?" modifiers:0 action:^{ - [self toggleTopViewControllerOfClass:[FLEXKeyboardHelpViewController class]]; - } description:@"Toggle (this) help menu"]; - - [self registerSimulatorShortcutWithKey:UIKeyInputEscape modifiers:0 action:^{ - [[[self topViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil]; - } description:@"End editing text\n\t\tDismiss top view controller"]; - - [self registerSimulatorShortcutWithKey:@"o" modifiers:UIKeyModifierCommand|UIKeyModifierShift action:^{ - [self toggleTopViewControllerOfClass:[FLEXFileBrowserTableViewController class]]; - } description:@"Toggle file browser menu"]; -} - -+ (void)load -{ - dispatch_async(dispatch_get_main_queue(), ^{ - [[[self class] sharedManager] registerDefaultSimulatorShortcuts]; - }); -} - -#pragma mark - Extensions - -- (void)registerGlobalEntryWithName:(NSString *)entryName objectFutureBlock:(id (^)(void))objectFutureBlock -{ - NSParameterAssert(entryName); - NSParameterAssert(objectFutureBlock); - NSAssert([NSThread isMainThread], @"This method must be called from the main thread."); - - entryName = entryName.copy; - FLEXGlobalsEntry *entry = [FLEXGlobalsEntry entryWithNameFuture:^NSString *{ - return entryName; - } viewControllerFuture:^UIViewController *{ - return [FLEXObjectExplorerFactory explorerViewControllerForObject:objectFutureBlock()]; - }]; - - [self.userGlobalEntries addObject:entry]; -} - -- (void)registerGlobalEntryWithName:(NSString *)entryName viewControllerFutureBlock:(UIViewController * (^)(void))viewControllerFutureBlock -{ - NSParameterAssert(entryName); - NSParameterAssert(viewControllerFutureBlock); - NSAssert([NSThread isMainThread], @"This method must be called from the main thread."); - - entryName = entryName.copy; - FLEXGlobalsEntry *entry = [FLEXGlobalsEntry entryWithNameFuture:^NSString *{ - return entryName; - } viewControllerFuture:^UIViewController *{ - UIViewController *viewController = viewControllerFutureBlock(); - NSCAssert(viewController, @"'%@' entry returned nil viewController. viewControllerFutureBlock should never return nil.", entryName); - return viewController; - }]; - - [self.userGlobalEntries addObject:entry]; -} - -- (void)setCustomViewerForContentType:(NSString *)contentType viewControllerFutureBlock:(FLEXCustomContentViewerFuture)viewControllerFutureBlock -{ - NSParameterAssert(contentType.length); - NSParameterAssert(viewControllerFutureBlock); - NSAssert([NSThread isMainThread], @"This method must be called from the main thread."); - - self.customContentTypeViewers[contentType.lowercaseString] = viewControllerFutureBlock; -} - -- (void)tryScrollDown -{ - UIScrollView *firstScrollView = [self firstScrollView]; - CGPoint contentOffset = firstScrollView.contentOffset; - CGFloat distance = floor(firstScrollView.frame.size.height / 2.0); - CGFloat maxContentOffsetY = firstScrollView.contentSize.height + firstScrollView.contentInset.bottom - firstScrollView.frame.size.height; - distance = MIN(maxContentOffsetY - firstScrollView.contentOffset.y, distance); - contentOffset.y += distance; - [firstScrollView setContentOffset:contentOffset animated:YES]; -} - -- (void)tryScrollUp -{ - UIScrollView *firstScrollView = [self firstScrollView]; - CGPoint contentOffset = firstScrollView.contentOffset; - CGFloat distance = floor(firstScrollView.frame.size.height / 2.0); - CGFloat minContentOffsetY = -firstScrollView.contentInset.top; - distance = MIN(firstScrollView.contentOffset.y - minContentOffsetY, distance); - contentOffset.y -= distance; - [firstScrollView setContentOffset:contentOffset animated:YES]; -} - -- (UIScrollView *)firstScrollView -{ - NSMutableArray *views = [UIApplication.sharedApplication.keyWindow.subviews mutableCopy]; - UIScrollView *scrollView = nil; - while (views.count > 0) { - UIView *view = views.firstObject; - [views removeObjectAtIndex:0]; - if ([view isKindOfClass:[UIScrollView class]]) { - scrollView = (UIScrollView *)view; - break; - } else { - [views addObjectsFromArray:view.subviews]; - } - } - return scrollView; -} - -- (void)tryGoBack -{ - UINavigationController *navigationController = nil; - UIViewController *topViewController = [self topViewController]; - if ([topViewController isKindOfClass:[UINavigationController class]]) { - navigationController = (UINavigationController *)topViewController; - } else { - navigationController = topViewController.navigationController; - } - [navigationController popViewControllerAnimated:YES]; -} - -- (UIViewController *)topViewController -{ - UIViewController *topViewController = [[UIApplication.sharedApplication keyWindow] rootViewController]; - while ([topViewController presentedViewController]) { - topViewController = [topViewController presentedViewController]; - } - return topViewController; -} - -- (void)toggleTopViewControllerOfClass:(Class)class -{ - UIViewController *topViewController = [self topViewController]; - if ([topViewController isKindOfClass:[UINavigationController class]] && - [[(UINavigationController *)topViewController viewControllers].firstObject isKindOfClass:[class class]]) - { - [[topViewController presentingViewController] dismissViewControllerAnimated:YES completion:nil]; - } else { - id viewController = [class new]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; - [topViewController presentViewController:navigationController animated:YES completion:nil]; - } -} - -- (void)showExplorerIfNeeded -{ - if ([self isHidden]) { - [self showExplorer]; - } -} - @end diff --git a/xcode/Pods/FLEX/Classes/Manager/Private/FLEXManager+Private.h b/xcode/Pods/FLEX/Classes/Manager/Private/FLEXManager+Private.h new file mode 100644 index 00000000..89c05583 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Manager/Private/FLEXManager+Private.h @@ -0,0 +1,23 @@ +// +// FLEXManager+Private.h +// PebbleApp +// +// Created by Javier Soto on 7/26/14. +// Copyright (c) 2014 Pebble Technology. All rights reserved. +// + +#import "FLEXManager.h" +#import "FLEXWindow.h" + +@class FLEXGlobalsEntry, FLEXExplorerViewController; + +@interface FLEXManager (Private) + +@property (nonatomic, readonly) FLEXWindow *explorerWindow; +@property (nonatomic, readonly) FLEXExplorerViewController *explorerViewController; + +/// An array of FLEXGlobalsEntry objects that have been registered by the user. +@property (nonatomic, readonly) NSMutableArray *userGlobalEntries; +@property (nonatomic, readonly) NSMutableDictionary *customContentTypeViewers; + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.h deleted file mode 100644 index 5e6343a5..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// FLEXNetworkHistoryTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" -#import "FLEXGlobalsEntry.h" - -@interface FLEXNetworkHistoryTableViewController : FLEXTableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.m deleted file mode 100644 index 9607f737..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkHistoryTableViewController.m +++ /dev/null @@ -1,360 +0,0 @@ -// -// FLEXNetworkHistoryTableViewController.m -// Flipboard -// -// Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. -// - -#import "FLEXColor.h" -#import "FLEXNetworkHistoryTableViewController.h" -#import "FLEXNetworkTransaction.h" -#import "FLEXNetworkTransactionTableViewCell.h" -#import "FLEXNetworkRecorder.h" -#import "FLEXNetworkTransactionDetailTableViewController.h" -#import "FLEXNetworkObserver.h" -#import "FLEXNetworkSettingsTableViewController.h" - -@interface FLEXNetworkHistoryTableViewController () - -/// Backing model -@property (nonatomic, copy) NSArray *networkTransactions; -@property (nonatomic) long long bytesReceived; -@property (nonatomic, copy) NSArray *filteredNetworkTransactions; -@property (nonatomic) long long filteredBytesReceived; - -@property (nonatomic) BOOL rowInsertInProgress; -@property (nonatomic) BOOL isPresentingSearch; - -@end - -@implementation FLEXNetworkHistoryTableViewController - -- (id)init -{ - self = [super initWithStyle:UITableViewStylePlain]; - if (self) { - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(handleNewTransactionRecordedNotification:) name:kFLEXNetworkRecorderNewTransactionNotification object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(handleTransactionUpdatedNotification:) name:kFLEXNetworkRecorderTransactionUpdatedNotification object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(handleTransactionsClearedNotification:) name:kFLEXNetworkRecorderTransactionsClearedNotification object:nil]; - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(handleNetworkObserverEnabledStateChangedNotification:) name:kFLEXNetworkObserverEnabledStateChangedNotification object:nil]; - self.title = @"📡 Network"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStylePlain target:self action:@selector(settingsButtonTapped:)]; - - // Needed to avoid search bar showing over detail pages pushed on the nav stack - // see https://asciiwwdc.com/2014/sessions/228 - self.definesPresentationContext = YES; - } - return self; -} - -- (void)dealloc -{ - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showsSearchBar = YES; - - [self.tableView registerClass:[FLEXNetworkTransactionTableViewCell class] forCellReuseIdentifier:kFLEXNetworkTransactionCellIdentifier]; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - self.tableView.rowHeight = [FLEXNetworkTransactionTableViewCell preferredCellHeight]; - - [self updateTransactions]; -} - -- (void)settingsButtonTapped:(id)sender -{ - FLEXNetworkSettingsTableViewController *settingsViewController = [FLEXNetworkSettingsTableViewController new]; - settingsViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(settingsViewControllerDoneTapped:)]; - settingsViewController.title = @"Network Debugging Settings"; - UINavigationController *wrapperNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; - [self presentViewController:wrapperNavigationController animated:YES completion:nil]; -} - -- (void)settingsViewControllerDoneTapped:(id)sender -{ - [self dismissViewControllerAnimated:YES completion:nil]; -} - -- (void)updateTransactions -{ - self.networkTransactions = [[FLEXNetworkRecorder defaultRecorder] networkTransactions]; -} - -- (void)setNetworkTransactions:(NSArray *)networkTransactions -{ - if (![_networkTransactions isEqual:networkTransactions]) { - _networkTransactions = networkTransactions; - [self updateBytesReceived]; - [self updateFilteredBytesReceived]; - } -} - -- (void)updateBytesReceived -{ - long long bytesReceived = 0; - for (FLEXNetworkTransaction *transaction in self.networkTransactions) { - bytesReceived += transaction.receivedDataLength; - } - self.bytesReceived = bytesReceived; - [self updateFirstSectionHeader]; -} - -- (void)setFilteredNetworkTransactions:(NSArray *)filteredNetworkTransactions -{ - if (![_filteredNetworkTransactions isEqual:filteredNetworkTransactions]) { - _filteredNetworkTransactions = filteredNetworkTransactions; - [self updateFilteredBytesReceived]; - } -} - -- (void)updateFilteredBytesReceived -{ - long long filteredBytesReceived = 0; - for (FLEXNetworkTransaction *transaction in self.filteredNetworkTransactions) { - filteredBytesReceived += transaction.receivedDataLength; - } - self.filteredBytesReceived = filteredBytesReceived; - [self updateFirstSectionHeader]; -} - -- (void)updateFirstSectionHeader -{ - UIView *view = [self.tableView headerViewForSection:0]; - if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { - UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; - headerView.textLabel.text = [self headerText]; - [headerView setNeedsLayout]; - } -} - -- (NSString *)headerText -{ - NSString *headerText = nil; - if ([FLEXNetworkObserver isEnabled]) { - long long bytesReceived = 0; - NSInteger totalRequests = 0; - if (self.searchController.isActive) { - bytesReceived = self.filteredBytesReceived; - totalRequests = self.filteredNetworkTransactions.count; - } else { - bytesReceived = self.bytesReceived; - totalRequests = self.networkTransactions.count; - } - NSString *byteCountText = [NSByteCountFormatter stringFromByteCount:bytesReceived countStyle:NSByteCountFormatterCountStyleBinary]; - NSString *requestsText = totalRequests == 1 ? @"Request" : @"Requests"; - headerText = [NSString stringWithFormat:@"%ld %@ (%@ received)", (long)totalRequests, requestsText, byteCountText]; - } else { - headerText = @"⚠️ Debugging Disabled (Enable in Settings)"; - } - return headerText; -} - -#pragma mark - FLEXGlobalsEntry - -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { - return @"📡 Network History"; -} - -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { - return [self new]; -} - -#pragma mark - Notification Handlers - -- (void)handleNewTransactionRecordedNotification:(NSNotification *)notification -{ - [self tryUpdateTransactions]; -} - -- (void)tryUpdateTransactions -{ - // Let the previous row insert animation finish before starting a new one to avoid stomping. - // We'll try calling the method again when the insertion completes, and we properly no-op if there haven't been changes. - if (self.rowInsertInProgress) { - return; - } - - if (self.searchController.isActive) { - [self updateTransactions]; - [self updateSearchResults:nil]; - return; - } - - NSInteger existingRowCount = self.networkTransactions.count; - [self updateTransactions]; - NSInteger newRowCount = self.networkTransactions.count; - NSInteger addedRowCount = newRowCount - existingRowCount; - - if (addedRowCount != 0 && !self.isPresentingSearch) { - // Insert animation if we're at the top. - if (self.tableView.contentOffset.y <= 0.0 && addedRowCount > 0) { - [CATransaction begin]; - - self.rowInsertInProgress = YES; - [CATransaction setCompletionBlock:^{ - self.rowInsertInProgress = NO; - [self tryUpdateTransactions]; - }]; - - NSMutableArray *indexPathsToReload = [NSMutableArray array]; - for (NSInteger row = 0; row < addedRowCount; row++) { - [indexPathsToReload addObject:[NSIndexPath indexPathForRow:row inSection:0]]; - } - [self.tableView insertRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationAutomatic]; - - [CATransaction commit]; - } else { - // Maintain the user's position if they've scrolled down. - CGSize existingContentSize = self.tableView.contentSize; - [self.tableView reloadData]; - CGFloat contentHeightChange = self.tableView.contentSize.height - existingContentSize.height; - self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y + contentHeightChange); - } - } -} - -- (void)handleTransactionUpdatedNotification:(NSNotification *)notification -{ - [self updateBytesReceived]; - [self updateFilteredBytesReceived]; - - FLEXNetworkTransaction *transaction = notification.userInfo[kFLEXNetworkRecorderUserInfoTransactionKey]; - - // Update both the main table view and search table view if needed. - for (FLEXNetworkTransactionTableViewCell *cell in [self.tableView visibleCells]) { - if ([cell.transaction isEqual:transaction]) { - // Using -[UITableView reloadRowsAtIndexPaths:withRowAnimation:] is overkill here and kicks off a lot of - // work that can make the table view somewhat unresponsive when lots of updates are streaming in. - // We just need to tell the cell that it needs to re-layout. - [cell setNeedsLayout]; - break; - } - } - [self updateFirstSectionHeader]; -} - -- (void)handleTransactionsClearedNotification:(NSNotification *)notification -{ - [self updateTransactions]; - [self.tableView reloadData]; -} - -- (void)handleNetworkObserverEnabledStateChangedNotification:(NSNotification *)notification -{ - // Update the header, which displays a warning when network debugging is disabled - [self updateFirstSectionHeader]; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.searchController.isActive ? self.filteredNetworkTransactions.count : self.networkTransactions.count; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - return [self headerText]; -} - -- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section -{ - if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { - UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; - headerView.textLabel.font = [UIFont systemFontOfSize:14.0 weight:UIFontWeightSemibold]; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXNetworkTransactionTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXNetworkTransactionCellIdentifier forIndexPath:indexPath]; - cell.transaction = [self transactionAtIndexPath:indexPath inTableView:tableView]; - - // Since we insert from the top, assign background colors bottom up to keep them consistent for each transaction. - NSInteger totalRows = [tableView numberOfRowsInSection:indexPath.section]; - if ((totalRows - indexPath.row) % 2 == 0) { - cell.backgroundColor = [FLEXColor secondaryBackgroundColor]; - } else { - cell.backgroundColor = [FLEXColor primaryBackgroundColor]; - } - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXNetworkTransactionDetailTableViewController *detailViewController = [FLEXNetworkTransactionDetailTableViewController new]; - detailViewController.transaction = [self transactionAtIndexPath:indexPath inTableView:tableView]; - [self.navigationController pushViewController:detailViewController animated:YES]; -} - -#pragma mark - Menu Actions - -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return YES; -} - -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - return action == @selector(copy:); -} - -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if (action == @selector(copy:)) { - FLEXNetworkTransaction *transaction = [self transactionAtIndexPath:indexPath inTableView:tableView]; - NSString *requestURLString = transaction.request.URL.absoluteString ?: @""; - [UIPasteboard.generalPasteboard setString:requestURLString]; - } -} - -- (FLEXNetworkTransaction *)transactionAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView -{ - return self.searchController.isActive ? self.filteredNetworkTransactions[indexPath.row] : self.networkTransactions[indexPath.row]; -} - -#pragma mark - Search Bar - -- (void)updateSearchResults:(NSString *)searchString -{ - [self onBackgroundQueue:^NSArray *{ - return [self.networkTransactions filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(FLEXNetworkTransaction *transaction, NSDictionary *bindings) { - return [[transaction.request.URL absoluteString] rangeOfString:searchString options:NSCaseInsensitiveSearch].length > 0; - }]]; - } thenOnMainQueue:^(NSArray *filteredNetworkTransactions) { - if ([self.searchText isEqual:searchString]) { - self.filteredNetworkTransactions = filteredNetworkTransactions; - [self.tableView reloadData]; - } - }]; -} - -#pragma mark UISearchControllerDelegate - -- (void)willPresentSearchController:(UISearchController *)searchController -{ - self.isPresentingSearch = YES; -} - -- (void)didPresentSearchController:(UISearchController *)searchController -{ - self.isPresentingSearch = NO; -} - -- (void)willDismissSearchController:(UISearchController *)searchController -{ - [self.tableView reloadData]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.h new file mode 100644 index 00000000..54e35bef --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.h @@ -0,0 +1,14 @@ +// +// FLEXNetworkMITMViewController.h +// Flipboard +// +// Created by Ryan Olson on 2/8/15. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" +#import "FLEXGlobalsEntry.h" + +@interface FLEXNetworkMITMViewController : FLEXTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.m new file mode 100644 index 00000000..2b83dccd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkMITMViewController.m @@ -0,0 +1,472 @@ +// +// FLEXNetworkMITMViewController.m +// Flipboard +// +// Created by Ryan Olson on 2/8/15. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXColor.h" +#import "FLEXUtility.h" +#import "FLEXNetworkMITMViewController.h" +#import "FLEXNetworkTransaction.h" +#import "FLEXNetworkRecorder.h" +#import "FLEXNetworkObserver.h" +#import "FLEXNetworkTransactionCell.h" +#import "FLEXNetworkTransactionDetailController.h" +#import "FLEXNetworkSettingsController.h" +#import "FLEXGlobalsViewController.h" +#import "UIBarButtonItem+FLEX.h" +#import "FLEXResources.h" + +@interface FLEXNetworkMITMViewController () + +/// Backing model +@property (nonatomic, copy) NSArray *networkTransactions; +@property (nonatomic) long long bytesReceived; +@property (nonatomic, copy) NSArray *filteredNetworkTransactions; +@property (nonatomic) long long filteredBytesReceived; + +@property (nonatomic) BOOL rowInsertInProgress; +@property (nonatomic) BOOL isPresentingSearch; +@property (nonatomic) BOOL pendingReload; + +@end + +@implementation FLEXNetworkMITMViewController + +#pragma mark - Lifecycle + +- (id)init { + return [self initWithStyle:UITableViewStylePlain]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.showsSearchBar = YES; + self.showSearchBarInitially = NO; + + [self addToolbarItems:@[ + [UIBarButtonItem + itemWithImage:FLEXResources.gearIcon + target:self + action:@selector(settingsButtonTapped:) + ], + [[UIBarButtonItem + systemItem:UIBarButtonSystemItemTrash + target:self + action:@selector(trashButtonTapped:) + ] withTintColor:UIColor.redColor] + ]]; + + [self.tableView + registerClass:[FLEXNetworkTransactionCell class] + forCellReuseIdentifier:kFLEXNetworkTransactionCellIdentifier + ]; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.rowHeight = FLEXNetworkTransactionCell.preferredCellHeight; + + [self registerForNotifications]; + [self updateTransactions]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // Reload the table if we received updates while not on-screen + if (self.pendingReload) { + [self.tableView reloadData]; + self.pendingReload = NO; + } +} + +- (void)dealloc { + [NSNotificationCenter.defaultCenter removeObserver:self]; +} + +- (void)registerForNotifications { + NSDictionary *notifications = @{ + kFLEXNetworkRecorderNewTransactionNotification: + NSStringFromSelector(@selector(handleNewTransactionRecordedNotification:)), + kFLEXNetworkRecorderTransactionUpdatedNotification: + NSStringFromSelector(@selector(handleTransactionUpdatedNotification:)), + kFLEXNetworkRecorderTransactionsClearedNotification: + NSStringFromSelector(@selector(handleTransactionsClearedNotification:)), + kFLEXNetworkObserverEnabledStateChangedNotification: + NSStringFromSelector(@selector(handleNetworkObserverEnabledStateChangedNotification:)), + }; + + for (NSString *name in notifications.allKeys) { + [NSNotificationCenter.defaultCenter addObserver:self + selector:NSSelectorFromString(notifications[name]) name:name object:nil + ]; + } +} + + +#pragma mark - Private + +#pragma mark Button Actions + +- (void)settingsButtonTapped:(UIBarButtonItem *)sender { + UIViewController *settings = [FLEXNetworkSettingsController new]; + settings.navigationItem.rightBarButtonItem = FLEXBarButtonItemSystem( + Done, self, @selector(settingsViewControllerDoneTapped:) + ); + settings.title = @"Network Debugging Settings"; + + // This is not a FLEXNavigationController because it is not intended as a new tab + UIViewController *nav = [[UINavigationController alloc] initWithRootViewController:settings]; + [self presentViewController:nav animated:YES completion:nil]; +} + +- (void)trashButtonTapped:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + make.title(@"Clear All Recorded Requests?"); + make.message(@"This cannot be undone."); + + make.button(@"Cancel").cancelStyle(); + make.button(@"Clear All").destructiveStyle().handler(^(NSArray *strings) { + [FLEXNetworkRecorder.defaultRecorder clearRecordedActivity]; + }); + } showFrom:self source:sender]; +} + +- (void)settingsViewControllerDoneTapped:(id)sender { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +#pragma mark Transactions + +- (void)updateTransactions { + self.networkTransactions = [FLEXNetworkRecorder.defaultRecorder networkTransactions]; +} + +- (void)setNetworkTransactions:(NSArray *)networkTransactions { + if (![_networkTransactions isEqual:networkTransactions]) { + _networkTransactions = networkTransactions; + [self updateBytesReceived]; + [self updateFilteredBytesReceived]; + } +} + +- (void)updateBytesReceived { + long long bytesReceived = 0; + for (FLEXNetworkTransaction *transaction in self.networkTransactions) { + bytesReceived += transaction.receivedDataLength; + } + self.bytesReceived = bytesReceived; + [self updateFirstSectionHeader]; +} + +- (void)setFilteredNetworkTransactions:(NSArray *)networkTransactions { + if (![_filteredNetworkTransactions isEqual:networkTransactions]) { + _filteredNetworkTransactions = networkTransactions; + [self updateFilteredBytesReceived]; + } +} + +- (void)updateFilteredBytesReceived { + long long filteredBytesReceived = 0; + for (FLEXNetworkTransaction *transaction in self.filteredNetworkTransactions) { + filteredBytesReceived += transaction.receivedDataLength; + } + self.filteredBytesReceived = filteredBytesReceived; + [self updateFirstSectionHeader]; +} + +#pragma mark Header + +- (void)updateFirstSectionHeader { + UIView *view = [self.tableView headerViewForSection:0]; + if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { + UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; + headerView.textLabel.text = [self headerText]; + [headerView setNeedsLayout]; + } +} + +- (NSString *)headerText { + long long bytesReceived = 0; + NSInteger totalRequests = 0; + if (self.searchController.isActive) { + bytesReceived = self.filteredBytesReceived; + totalRequests = self.filteredNetworkTransactions.count; + } else { + bytesReceived = self.bytesReceived; + totalRequests = self.networkTransactions.count; + } + + NSString *byteCountText = [NSByteCountFormatter + stringFromByteCount:bytesReceived countStyle:NSByteCountFormatterCountStyleBinary + ]; + NSString *requestsText = totalRequests == 1 ? @"Request" : @"Requests"; + return [NSString stringWithFormat:@"%@ %@ (%@ received)", + @(totalRequests), requestsText, byteCountText + ]; +} + + +#pragma mark - FLEXGlobalsEntry + ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { + return @"📡 Network History"; +} + ++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row { + return ^(UITableViewController *host) { + if (FLEXNetworkObserver.isEnabled) { + [host.navigationController pushViewController:[ + self globalsEntryViewController:row + ] animated:YES]; + } else { + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Network Monitor Disabled"); + make.message(@"You must enable network monitoring to proceed."); + + make.button(@"Turn On").handler(^(NSArray *strings) { + FLEXNetworkObserver.enabled = YES; + [host.navigationController pushViewController:[ + self globalsEntryViewController:row + ] animated:YES]; + }).cancelStyle(); + make.button(@"Dismiss"); + } showFrom:host]; + } + }; +} + ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { + UIViewController *controller = [self new]; + controller.title = [self globalsEntryTitle:row]; + return controller; +} + + +#pragma mark - Notification Handlers + +- (void)handleNewTransactionRecordedNotification:(NSNotification *)notification { + [self tryUpdateTransactions]; +} + +- (void)tryUpdateTransactions { + // Don't do any view updating if we aren't in the view hierarchy + if (!self.viewIfLoaded.window) { + [self updateTransactions]; + self.pendingReload = YES; + return; + } + + // Let the previous row insert animation finish before starting a new one to avoid stomping. + // We'll try calling the method again when the insertion completes, + // and we properly no-op if there haven't been changes. + if (self.rowInsertInProgress) { + return; + } + + if (self.searchController.isActive) { + [self updateTransactions]; + [self updateSearchResults:self.searchText]; + return; + } + + NSInteger existingRowCount = self.networkTransactions.count; + [self updateTransactions]; + NSInteger newRowCount = self.networkTransactions.count; + NSInteger addedRowCount = newRowCount - existingRowCount; + + if (addedRowCount != 0 && !self.isPresentingSearch) { + // Insert animation if we're at the top. + if (self.tableView.contentOffset.y <= 0.0 && addedRowCount > 0) { + [CATransaction begin]; + + self.rowInsertInProgress = YES; + [CATransaction setCompletionBlock:^{ + self.rowInsertInProgress = NO; + [self tryUpdateTransactions]; + }]; + + NSMutableArray *indexPathsToReload = [NSMutableArray new]; + for (NSInteger row = 0; row < addedRowCount; row++) { + [indexPathsToReload addObject:[NSIndexPath indexPathForRow:row inSection:0]]; + } + [self.tableView insertRowsAtIndexPaths:indexPathsToReload withRowAnimation:UITableViewRowAnimationAutomatic]; + + [CATransaction commit]; + } else { + // Maintain the user's position if they've scrolled down. + CGSize existingContentSize = self.tableView.contentSize; + [self.tableView reloadData]; + CGFloat contentHeightChange = self.tableView.contentSize.height - existingContentSize.height; + self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x, self.tableView.contentOffset.y + contentHeightChange); + } + } +} + +- (void)handleTransactionUpdatedNotification:(NSNotification *)notification { + [self updateBytesReceived]; + [self updateFilteredBytesReceived]; + + FLEXNetworkTransaction *transaction = notification.userInfo[kFLEXNetworkRecorderUserInfoTransactionKey]; + + // Update both the main table view and search table view if needed. + for (FLEXNetworkTransactionCell *cell in [self.tableView visibleCells]) { + if ([cell.transaction isEqual:transaction]) { + // Using -[UITableView reloadRowsAtIndexPaths:withRowAnimation:] is overkill here and kicks off a lot of + // work that can make the table view somewhat unresponsive when lots of updates are streaming in. + // We just need to tell the cell that it needs to re-layout. + [cell setNeedsLayout]; + break; + } + } + [self updateFirstSectionHeader]; +} + +- (void)handleTransactionsClearedNotification:(NSNotification *)notification { + [self updateTransactions]; + [self.tableView reloadData]; +} + +- (void)handleNetworkObserverEnabledStateChangedNotification:(NSNotification *)notification { + // Update the header, which displays a warning when network debugging is disabled + [self updateFirstSectionHeader]; +} + + +#pragma mark - Table view data source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.searchController.isActive ? self.filteredNetworkTransactions.count : self.networkTransactions.count; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + return [self headerText]; +} + +- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { + if ([view isKindOfClass:[UITableViewHeaderFooterView class]]) { + UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; + headerView.textLabel.font = [UIFont systemFontOfSize:14.0 weight:UIFontWeightSemibold]; + } +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXNetworkTransactionCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXNetworkTransactionCellIdentifier forIndexPath:indexPath]; + cell.transaction = [self transactionAtIndexPath:indexPath]; + + // Since we insert from the top, assign background colors bottom up to keep them consistent for each transaction. + NSInteger totalRows = [tableView numberOfRowsInSection:indexPath.section]; + if ((totalRows - indexPath.row) % 2 == 0) { + cell.backgroundColor = FLEXColor.secondaryBackgroundColor; + } else { + cell.backgroundColor = FLEXColor.primaryBackgroundColor; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXNetworkTransactionDetailController *detailViewController = [FLEXNetworkTransactionDetailController new]; + detailViewController.transaction = [self transactionAtIndexPath:indexPath]; + [self.navigationController pushViewController:detailViewController animated:YES]; +} + + +#pragma mark - Menu Actions + +- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + +- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + return action == @selector(copy:); +} + +- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + if (action == @selector(copy:)) { + NSURLRequest *request = [self transactionAtIndexPath:indexPath].request; + UIPasteboard.generalPasteboard.string = request.URL.absoluteString ?: @""; + } +} + +#if FLEX_AT_LEAST_IOS13_SDK + +- (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point __IOS_AVAILABLE(13.0) { + NSURLRequest *request = [self transactionAtIndexPath:indexPath].request; + return [UIContextMenuConfiguration + configurationWithIdentifier:nil + previewProvider:nil + actionProvider:^UIMenu *(NSArray *suggestedActions) { + UIAction *copy = [UIAction + actionWithTitle:@"Copy" + image:nil + identifier:nil + handler:^(__kindof UIAction *action) { + UIPasteboard.generalPasteboard.string = request.URL.absoluteString ?: @""; + } + ]; + UIAction *blacklist = [UIAction + actionWithTitle:[NSString stringWithFormat:@"Blacklist '%@'", request.URL.host] + image:nil + identifier:nil + handler:^(__kindof UIAction *action) { + NSMutableArray *blacklist = FLEXNetworkRecorder.defaultRecorder.hostBlacklist; + [blacklist addObject:request.URL.host]; + [FLEXNetworkRecorder.defaultRecorder clearBlacklistedTransactions]; + [FLEXNetworkRecorder.defaultRecorder synchronizeBlacklist]; + [self tryUpdateTransactions]; + } + ]; + return [UIMenu + menuWithTitle:@"" image:nil identifier:nil + options:UIMenuOptionsDisplayInline + children:@[copy, blacklist] + ]; + } + ]; +} + +#endif + +- (FLEXNetworkTransaction *)transactionAtIndexPath:(NSIndexPath *)indexPath { + return self.searchController.isActive ? self.filteredNetworkTransactions[indexPath.row] : self.networkTransactions[indexPath.row]; +} + + +#pragma mark - Search Bar + +- (void)updateSearchResults:(NSString *)searchString { + if (!searchString.length) { + self.filteredNetworkTransactions = self.networkTransactions; + [self.tableView reloadData]; + } else { + [self onBackgroundQueue:^NSArray *{ + return [self.networkTransactions flex_filtered:^BOOL(FLEXNetworkTransaction *entry, NSUInteger idx) { + return [entry.request.URL.absoluteString localizedCaseInsensitiveContainsString:searchString]; + }]; + } thenOnMainQueue:^(NSArray *filteredNetworkTransactions) { + if ([self.searchText isEqual:searchString]) { + self.filteredNetworkTransactions = filteredNetworkTransactions; + [self.tableView reloadData]; + } + }]; + } +} + + +#pragma mark UISearchControllerDelegate + +- (void)willPresentSearchController:(UISearchController *)searchController { + self.isPresentingSearch = YES; +} + +- (void)didPresentSearchController:(UISearchController *)searchController { + self.isPresentingSearch = NO; +} + +- (void)willDismissSearchController:(UISearchController *)searchController { + [self.tableView reloadData]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.h index 803384f4..ea8757ce 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.h +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 2/4/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @@ -19,15 +19,22 @@ extern NSString *const kFLEXNetworkRecorderTransactionsClearedNotification; @interface FLEXNetworkRecorder : NSObject /// In general, it only makes sense to have one recorder for the entire application. -+ (instancetype)defaultRecorder; +@property (nonatomic, readonly, class) FLEXNetworkRecorder *defaultRecorder; /// Defaults to 25 MB if never set. Values set here are persisted across launches of the app. @property (nonatomic) NSUInteger responseCacheByteLimit; -/// If NO, the recorder not cache will not cache response for content types with an "image", "video", or "audio" prefix. +/// If NO, the recorder not cache will not cache response for content types +/// with an "image", "video", or "audio" prefix. @property (nonatomic) BOOL shouldCacheMediaResponses; -@property (nonatomic, copy) NSArray *hostBlacklist; +@property (nonatomic) NSMutableArray *hostBlacklist; + +/// Call this after adding to or setting the \c hostBlacklist to remove blacklisted transactions +- (void)clearBlacklistedTransactions; + +/// Call this to save the blacklist to the disk to be loaded next time +- (void)synchronizeBlacklist; // Accessing recorded network activity @@ -45,7 +52,9 @@ extern NSString *const kFLEXNetworkRecorderTransactionsClearedNotification; // Recording network activity /// Call when app is about to send HTTP request. -- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse; +- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID + request:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)redirectResponse; /// Call when HTTP response is available. - (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response; diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.m index 52335849..db52bf48 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.m +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkRecorder.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 2/4/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXNetworkRecorder.h" @@ -11,6 +11,7 @@ #import "FLEXNetworkTransaction.h" #import "FLEXUtility.h" #import "FLEXResources.h" +#import "NSUserDefaults+FLEX.h" NSString *const kFLEXNetworkRecorderNewTransactionNotification = @"kFLEXNetworkRecorderNewTransactionNotification"; NSString *const kFLEXNetworkRecorderTransactionUpdatedNotification = @"kFLEXNetworkRecorderTransactionUpdatedNotification"; @@ -23,93 +24,115 @@ @interface FLEXNetworkRecorder () @property (nonatomic) NSCache *responseCache; @property (nonatomic) NSMutableArray *orderedTransactions; -@property (nonatomic) NSMutableDictionary *networkTransactionsForRequestIdentifiers; +@property (nonatomic) NSMutableDictionary *requestIDsToTransactions; @property (nonatomic) dispatch_queue_t queue; @end @implementation FLEXNetworkRecorder -- (instancetype)init -{ +- (instancetype)init { self = [super init]; if (self) { self.responseCache = [NSCache new]; - NSUInteger responseCacheLimit = [[[NSUserDefaults standardUserDefaults] objectForKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey] unsignedIntegerValue]; - if (responseCacheLimit) { - [self.responseCache setTotalCostLimit:responseCacheLimit]; - } else { - // Default to 25 MB max. The cache will purge earlier if there is memory pressure. - [self.responseCache setTotalCostLimit:25 * 1024 * 1024]; - } - self.orderedTransactions = [NSMutableArray array]; - self.networkTransactionsForRequestIdentifiers = [NSMutableDictionary dictionary]; + NSUInteger responseCacheLimit = [[NSUserDefaults.standardUserDefaults + objectForKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey] unsignedIntegerValue + ]; + + // Default to 25 MB max. The cache will purge earlier if there is memory pressure. + self.responseCache.totalCostLimit = responseCacheLimit ?: 25 * 1024 * 1024; + [self.responseCache setTotalCostLimit:responseCacheLimit]; + + self.orderedTransactions = [NSMutableArray new]; + self.requestIDsToTransactions = [NSMutableDictionary new]; + self.hostBlacklist = NSUserDefaults.standardUserDefaults.flex_networkHostBlacklist.mutableCopy; // Serial queue used because we use mutable objects that are not thread safe self.queue = dispatch_queue_create("com.flex.FLEXNetworkRecorder", DISPATCH_QUEUE_SERIAL); } + return self; } -+ (instancetype)defaultRecorder -{ ++ (instancetype)defaultRecorder { static FLEXNetworkRecorder *defaultRecorder = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ defaultRecorder = [self new]; }); + return defaultRecorder; } #pragma mark - Public Data Access -- (NSUInteger)responseCacheByteLimit -{ - return [self.responseCache totalCostLimit]; +- (NSUInteger)responseCacheByteLimit { + return self.responseCache.totalCostLimit; } -- (void)setResponseCacheByteLimit:(NSUInteger)responseCacheByteLimit -{ - [self.responseCache setTotalCostLimit:responseCacheByteLimit]; - [[NSUserDefaults standardUserDefaults] setObject:@(responseCacheByteLimit) forKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey]; +- (void)setResponseCacheByteLimit:(NSUInteger)responseCacheByteLimit { + self.responseCache.totalCostLimit = responseCacheByteLimit; + [NSUserDefaults.standardUserDefaults + setObject:@(responseCacheByteLimit) + forKey:kFLEXNetworkRecorderResponseCacheLimitDefaultsKey + ]; } -- (NSArray *)networkTransactions -{ +- (NSArray *)networkTransactions { __block NSArray *transactions = nil; dispatch_sync(self.queue, ^{ - transactions = [self.orderedTransactions copy]; + transactions = self.orderedTransactions.copy; }); return transactions; } -- (NSData *)cachedResponseBodyForTransaction:(FLEXNetworkTransaction *)transaction -{ +- (NSData *)cachedResponseBodyForTransaction:(FLEXNetworkTransaction *)transaction { return [self.responseCache objectForKey:transaction.requestID]; } -- (void)clearRecordedActivity -{ +- (void)clearRecordedActivity { dispatch_async(self.queue, ^{ [self.responseCache removeAllObjects]; [self.orderedTransactions removeAllObjects]; - [self.networkTransactionsForRequestIdentifiers removeAllObjects]; - dispatch_async(dispatch_get_main_queue(), ^{ - [NSNotificationCenter.defaultCenter postNotificationName:kFLEXNetworkRecorderTransactionsClearedNotification object:self]; + [self.requestIDsToTransactions removeAllObjects]; + + [self notify:kFLEXNetworkRecorderTransactionsClearedNotification transaction:nil]; + }); +} + +- (void)clearBlacklistedTransactions { + dispatch_sync(self.queue, ^{ + self.orderedTransactions = ({ + [self.orderedTransactions flex_filtered:^BOOL(FLEXNetworkTransaction *ta, NSUInteger idx) { + NSString *host = ta.request.URL.host; + for (NSString *blacklisted in self.hostBlacklist) { + if ([host hasSuffix:blacklisted]) { + return NO; + } + } + + return YES; + }]; }); }); } +- (void)synchronizeBlacklist { + NSUserDefaults.standardUserDefaults.flex_networkHostBlacklist = self.hostBlacklist; +} + #pragma mark - Network Events -- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID request:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse -{ +- (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID + request:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)redirectResponse { for (NSString *host in self.hostBlacklist) { if ([request.URL.host hasSuffix:host]) { return; } } + // Before async block to stay accurate NSDate *startDate = [NSDate date]; if (redirectResponse) { @@ -124,22 +147,23 @@ - (void)recordRequestWillBeSentWithRequestID:(NSString *)requestID request:(NSUR transaction.startTime = startDate; [self.orderedTransactions insertObject:transaction atIndex:0]; - [self.networkTransactionsForRequestIdentifiers setObject:transaction forKey:requestID]; + [self.requestIDsToTransactions setObject:transaction forKey:requestID]; transaction.transactionState = FLEXNetworkTransactionStateAwaitingResponse; [self postNewTransactionNotificationWithTransaction:transaction]; }); } -- (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response -{ +- (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSURLResponse *)response { + // Before async block to stay accurate NSDate *responseDate = [NSDate date]; dispatch_async(self.queue, ^{ - FLEXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID]; + FLEXNetworkTransaction *transaction = self.requestIDsToTransactions[requestID]; if (!transaction) { return; } + transaction.response = response; transaction.transactionState = FLEXNetworkTransactionStateReceivingData; transaction.latency = -[transaction.startTime timeIntervalSinceDate:responseDate]; @@ -148,28 +172,27 @@ - (void)recordResponseReceivedWithRequestID:(NSString *)requestID response:(NSUR }); } -- (void)recordDataReceivedWithRequestID:(NSString *)requestID dataLength:(int64_t)dataLength -{ +- (void)recordDataReceivedWithRequestID:(NSString *)requestID dataLength:(int64_t)dataLength { dispatch_async(self.queue, ^{ - FLEXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID]; + FLEXNetworkTransaction *transaction = self.requestIDsToTransactions[requestID]; if (!transaction) { return; } + transaction.receivedDataLength += dataLength; - [self postUpdateNotificationForTransaction:transaction]; }); } -- (void)recordLoadingFinishedWithRequestID:(NSString *)requestID responseBody:(NSData *)responseBody -{ +- (void)recordLoadingFinishedWithRequestID:(NSString *)requestID responseBody:(NSData *)responseBody { NSDate *finishedDate = [NSDate date]; dispatch_async(self.queue, ^{ - FLEXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID]; + FLEXNetworkTransaction *transaction = self.requestIDsToTransactions[requestID]; if (!transaction) { return; } + transaction.transactionState = FLEXNetworkTransactionStateFinished; transaction.duration = -[transaction.startTime timeIntervalSinceDate:finishedDate]; @@ -190,42 +213,45 @@ - (void)recordLoadingFinishedWithRequestID:(NSString *)requestID responseBody:(N // Thumbnail image previews on a separate background queue dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSInteger maxPixelDimension = UIScreen.mainScreen.scale * 32.0; - transaction.responseThumbnail = [FLEXUtility thumbnailedImageWithMaxPixelDimension:maxPixelDimension fromImageData:responseBody]; + transaction.responseThumbnail = [FLEXUtility + thumbnailedImageWithMaxPixelDimension:maxPixelDimension + fromImageData:responseBody + ]; [self postUpdateNotificationForTransaction:transaction]; }); } else if ([mimeType isEqual:@"application/json"]) { - transaction.responseThumbnail = [FLEXResources jsonIcon]; + transaction.responseThumbnail = FLEXResources.jsonIcon; } else if ([mimeType isEqual:@"text/plain"]){ - transaction.responseThumbnail = [FLEXResources textPlainIcon]; + transaction.responseThumbnail = FLEXResources.textPlainIcon; } else if ([mimeType isEqual:@"text/html"]) { - transaction.responseThumbnail = [FLEXResources htmlIcon]; + transaction.responseThumbnail = FLEXResources.htmlIcon; } else if ([mimeType isEqual:@"application/x-plist"]) { - transaction.responseThumbnail = [FLEXResources plistIcon]; + transaction.responseThumbnail = FLEXResources.plistIcon; } else if ([mimeType isEqual:@"application/octet-stream"] || [mimeType isEqual:@"application/binary"]) { - transaction.responseThumbnail = [FLEXResources binaryIcon]; - } else if ([mimeType rangeOfString:@"javascript"].length > 0) { - transaction.responseThumbnail = [FLEXResources jsIcon]; - } else if ([mimeType rangeOfString:@"xml"].length > 0) { - transaction.responseThumbnail = [FLEXResources xmlIcon]; + transaction.responseThumbnail = FLEXResources.binaryIcon; + } else if ([mimeType containsString:@"javascript"]) { + transaction.responseThumbnail = FLEXResources.jsIcon; + } else if ([mimeType containsString:@"xml"]) { + transaction.responseThumbnail = FLEXResources.xmlIcon; } else if ([mimeType hasPrefix:@"audio"]) { - transaction.responseThumbnail = [FLEXResources audioIcon]; + transaction.responseThumbnail = FLEXResources.audioIcon; } else if ([mimeType hasPrefix:@"video"]) { - transaction.responseThumbnail = [FLEXResources videoIcon]; + transaction.responseThumbnail = FLEXResources.videoIcon; } else if ([mimeType hasPrefix:@"text"]) { - transaction.responseThumbnail = [FLEXResources textIcon]; + transaction.responseThumbnail = FLEXResources.textIcon; } [self postUpdateNotificationForTransaction:transaction]; }); } -- (void)recordLoadingFailedWithRequestID:(NSString *)requestID error:(NSError *)error -{ +- (void)recordLoadingFailedWithRequestID:(NSString *)requestID error:(NSError *)error { dispatch_async(self.queue, ^{ - FLEXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID]; + FLEXNetworkTransaction *transaction = self.requestIDsToTransactions[requestID]; if (!transaction) { return; } + transaction.transactionState = FLEXNetworkTransactionStateFailed; transaction.duration = -[transaction.startTime timeIntervalSinceNow]; transaction.error = error; @@ -234,34 +260,36 @@ - (void)recordLoadingFailedWithRequestID:(NSString *)requestID error:(NSError *) }); } -- (void)recordMechanism:(NSString *)mechanism forRequestID:(NSString *)requestID -{ +- (void)recordMechanism:(NSString *)mechanism forRequestID:(NSString *)requestID { dispatch_async(self.queue, ^{ - FLEXNetworkTransaction *transaction = self.networkTransactionsForRequestIdentifiers[requestID]; + FLEXNetworkTransaction *transaction = self.requestIDsToTransactions[requestID]; if (!transaction) { return; } + transaction.requestMechanism = mechanism; - [self postUpdateNotificationForTransaction:transaction]; }); } #pragma mark Notification Posting -- (void)postNewTransactionNotificationWithTransaction:(FLEXNetworkTransaction *)transaction -{ - dispatch_async(dispatch_get_main_queue(), ^{ - NSDictionary *userInfo = @{ kFLEXNetworkRecorderUserInfoTransactionKey : transaction }; - [NSNotificationCenter.defaultCenter postNotificationName:kFLEXNetworkRecorderNewTransactionNotification object:self userInfo:userInfo]; - }); +- (void)postNewTransactionNotificationWithTransaction:(FLEXNetworkTransaction *)transaction { + [self notify:kFLEXNetworkRecorderNewTransactionNotification transaction:transaction]; +} + +- (void)postUpdateNotificationForTransaction:(FLEXNetworkTransaction *)transaction { + [self notify:kFLEXNetworkRecorderTransactionUpdatedNotification transaction:transaction]; } -- (void)postUpdateNotificationForTransaction:(FLEXNetworkTransaction *)transaction -{ +- (void)notify:(NSString *)name transaction:(FLEXNetworkTransaction *)transaction { + NSDictionary *userInfo = nil; + if (transaction) { + userInfo = @{ kFLEXNetworkRecorderUserInfoTransactionKey : transaction }; + } + dispatch_async(dispatch_get_main_queue(), ^{ - NSDictionary *userInfo = @{ kFLEXNetworkRecorderUserInfoTransactionKey : transaction }; - [NSNotificationCenter.defaultCenter postNotificationName:kFLEXNetworkRecorderTransactionUpdatedNotification object:self userInfo:userInfo]; + [NSNotificationCenter.defaultCenter postNotificationName:name object:self userInfo:userInfo]; }); } diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.h new file mode 100644 index 00000000..1094fb50 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.h @@ -0,0 +1,12 @@ +// +// FLEXNetworkSettingsController.h +// FLEXInjected +// +// Created by Ryan Olson on 2/20/15. +// + +#import "FLEXTableViewController.h" + +@interface FLEXNetworkSettingsController : FLEXTableViewController + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.m new file mode 100644 index 00000000..da49c323 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsController.m @@ -0,0 +1,253 @@ +// +// FLEXNetworkSettingsController.m +// FLEXInjected +// +// Created by Ryan Olson on 2/20/15. +// + +#import "FLEXNetworkSettingsController.h" +#import "FLEXNetworkObserver.h" +#import "FLEXNetworkRecorder.h" +#import "FLEXUtility.h" +#import "FLEXTableView.h" +#import "FLEXColor.h" +#import "NSUserDefaults+FLEX.h" + +@interface FLEXNetworkSettingsController () +@property (nonatomic) float cacheLimitValue; +@property (nonatomic, readonly) NSString *cacheLimitCellTitle; + +@property (nonatomic, readonly) UISwitch *observerSwitch; +@property (nonatomic, readonly) UISwitch *cacheMediaSwitch; +@property (nonatomic, readonly) UISwitch *jsonViewerSwitch; +@property (nonatomic, readonly) UISlider *cacheLimitSlider; +@property (nonatomic) UILabel *cacheLimitLabel; + +@property (nonatomic) NSMutableArray *hostBlacklist; +@end + +@implementation FLEXNetworkSettingsController + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self disableToolbar]; + self.hostBlacklist = FLEXNetworkRecorder.defaultRecorder.hostBlacklist.mutableCopy; + + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + + _observerSwitch = [UISwitch new]; + _cacheMediaSwitch = [UISwitch new]; + _jsonViewerSwitch = [UISwitch new]; + _cacheLimitSlider = [UISlider new]; + + self.observerSwitch.on = FLEXNetworkObserver.enabled; + [self.observerSwitch addTarget:self + action:@selector(networkDebuggingToggled:) + forControlEvents:UIControlEventValueChanged + ]; + + self.cacheMediaSwitch.on = FLEXNetworkRecorder.defaultRecorder.shouldCacheMediaResponses; + [self.cacheMediaSwitch addTarget:self + action:@selector(cacheMediaResponsesToggled:) + forControlEvents:UIControlEventValueChanged + ]; + + self.jsonViewerSwitch.on = defaults.flex_registerDictionaryJSONViewerOnLaunch; + [self.jsonViewerSwitch addTarget:self + action:@selector(jsonViewerSettingToggled:) + forControlEvents:UIControlEventValueChanged + ]; + + [self.cacheLimitSlider addTarget:self + action:@selector(cacheLimitAdjusted:) + forControlEvents:UIControlEventValueChanged + ]; + + UISlider *slider = self.cacheLimitSlider; + self.cacheLimitValue = FLEXNetworkRecorder.defaultRecorder.responseCacheByteLimit; + const NSUInteger fiftyMega = 50 * 1024 * 1024; + slider.minimumValue = 0; + slider.maximumValue = fiftyMega; + slider.value = self.cacheLimitValue; +} + +- (void)setCacheLimitValue:(float)cacheLimitValue { + _cacheLimitValue = cacheLimitValue; + self.cacheLimitLabel.text = self.cacheLimitCellTitle; + [FLEXNetworkRecorder.defaultRecorder setResponseCacheByteLimit:cacheLimitValue]; +} + +- (NSString *)cacheLimitCellTitle { + NSInteger cacheLimit = self.cacheLimitValue; + NSInteger limitInMB = round(cacheLimit / (1024 * 1024)); + return [NSString stringWithFormat:@"Cache Limit (%@ MB)", @(limitInMB)]; +} + + +#pragma mark - Settings Actions + +- (void)networkDebuggingToggled:(UISwitch *)sender { + FLEXNetworkObserver.enabled = sender.isOn; +} + +- (void)cacheMediaResponsesToggled:(UISwitch *)sender { + FLEXNetworkRecorder.defaultRecorder.shouldCacheMediaResponses = sender.isOn; +} + +- (void)jsonViewerSettingToggled:(UISwitch *)sender { + [NSUserDefaults.standardUserDefaults toggleBoolForKey:kFLEXDefaultsRegisterJSONExplorerKey]; +} + +- (void)cacheLimitAdjusted:(UISlider *)sender { + self.cacheLimitValue = sender.value; +} + + +#pragma mark - Table View Data Source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.hostBlacklist.count ? 2 : 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + switch (section) { + case 0: return 5; + case 1: return self.hostBlacklist.count; + default: return 0; + } +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + switch (section) { + case 0: return @"General"; + case 1: return @"Host Blacklist"; + default: return nil; + } +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { + if (section == 0) { + return @"By default, JSON is rendered in a webview. Turn on " + "\"View JSON as a dictionary/array\" to convert JSON payloads " + "to objects and view them in an object explorer. " + "This setting requires a restart of the app."; + } + + return nil; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [self.tableView + dequeueReusableCellWithIdentifier:kFLEXDefaultCell forIndexPath:indexPath + ]; + + cell.accessoryView = nil; + cell.textLabel.textColor = FLEXColor.primaryTextColor; + + switch (indexPath.section) { + // Settings + case 0: { + switch (indexPath.row) { + case 0: + cell.textLabel.text = @"Network Debugging"; + cell.accessoryView = self.observerSwitch; + break; + case 1: + cell.textLabel.text = @"Cache Media Responses"; + cell.accessoryView = self.cacheMediaSwitch; + break; + case 2: + cell.textLabel.text = @"View JSON as a dictionary/array"; + cell.accessoryView = self.jsonViewerSwitch; + break; + case 3: + cell.textLabel.text = @"Reset Host Blacklist"; + cell.textLabel.textColor = tableView.tintColor; + break; + case 4: + cell.textLabel.text = self.cacheLimitCellTitle; + self.cacheLimitLabel = cell.textLabel; + [self.cacheLimitSlider removeFromSuperview]; + [cell.contentView addSubview:self.cacheLimitSlider]; + + CGRect container = cell.contentView.frame; + UISlider *slider = self.cacheLimitSlider; + [slider sizeToFit]; + + CGFloat sliderWidth = 150.f; + CGFloat sliderOriginY = FLEXFloor((container.size.height - slider.frame.size.height) / 2.0); + CGFloat sliderOriginX = CGRectGetMaxX(container) - sliderWidth - tableView.separatorInset.left; + self.cacheLimitSlider.frame = CGRectMake( + sliderOriginX, sliderOriginY, sliderWidth, slider.frame.size.height + ); + + // Make wider, keep in middle of cell, keep to trailing edge of cell + self.cacheLimitSlider.autoresizingMask = ({ + UIViewAutoresizingFlexibleWidth | + UIViewAutoresizingFlexibleLeftMargin | + UIViewAutoresizingFlexibleTopMargin | + UIViewAutoresizingFlexibleBottomMargin; + }); + break; + } + + break; + } + + // Blacklist entries + case 1: { + cell.textLabel.text = self.hostBlacklist[indexPath.row]; + break; + } + + default: + @throw NSInternalInconsistencyException; + break; + } + + return cell; +} + +#pragma mark - Table View Delegate + +- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)ip { + // Can only select the "Reset Host Blacklist" row + return ip.section == 0 && ip.row == 2; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Reset Host Blacklist"); + make.message(@"You cannot undo this action. Are you sure?"); + make.button(@"Reset").destructiveStyle().handler(^(NSArray *strings) { + self.hostBlacklist = nil; + [FLEXNetworkRecorder.defaultRecorder.hostBlacklist removeAllObjects]; + [FLEXNetworkRecorder.defaultRecorder synchronizeBlacklist]; + [self.tableView deleteSections: + [NSIndexSet indexSetWithIndex:1] + withRowAnimation:UITableViewRowAnimationAutomatic]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self]; +} + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + return indexPath.section == 1; +} + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)style +forRowAtIndexPath:(NSIndexPath *)indexPath { + NSParameterAssert(style == UITableViewCellEditingStyleDelete); + + NSString *host = self.hostBlacklist[indexPath.row]; + [self.hostBlacklist removeObjectAtIndex:indexPath.row]; + [FLEXNetworkRecorder.defaultRecorder.hostBlacklist removeObject:host]; + [FLEXNetworkRecorder.defaultRecorder synchronizeBlacklist]; + + [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.h deleted file mode 100644 index 331a2d8d..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXNetworkSettingsTableViewController.h -// FLEXInjected -// -// Created by Ryan Olson on 2/20/15. -// -// - -#import - -@interface FLEXNetworkSettingsTableViewController : UITableViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.m deleted file mode 100644 index 89ec710e..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkSettingsTableViewController.m +++ /dev/null @@ -1,184 +0,0 @@ -// -// FLEXNetworkSettingsTableViewController.m -// FLEXInjected -// -// Created by Ryan Olson on 2/20/15. -// -// - -#import "FLEXNetworkSettingsTableViewController.h" -#import "FLEXNetworkObserver.h" -#import "FLEXNetworkRecorder.h" -#import "FLEXUtility.h" - -@interface FLEXNetworkSettingsTableViewController () - -@property (nonatomic, copy) NSArray *cells; - -@property (nonatomic) UITableViewCell *cacheLimitCell; - -@end - -@implementation FLEXNetworkSettingsTableViewController - -- (instancetype)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:UITableViewStyleGrouped]; - if (self) { - - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - NSMutableArray *mutableCells = [NSMutableArray array]; - - UITableViewCell *networkDebuggingCell = [self switchCellWithTitle:@"Network Debugging" toggleAction:@selector(networkDebuggingToggled:) isOn:[FLEXNetworkObserver isEnabled]]; - [mutableCells addObject:networkDebuggingCell]; - - UITableViewCell *cacheMediaResponsesCell = [self switchCellWithTitle:@"Cache Media Responses" toggleAction:@selector(cacheMediaResponsesToggled:) isOn:NO]; - [mutableCells addObject:cacheMediaResponsesCell]; - - NSUInteger currentCacheLimit = [[FLEXNetworkRecorder defaultRecorder] responseCacheByteLimit]; - const NSUInteger fiftyMega = 50 * 1024 * 1024; - NSString *cacheLimitTitle = [self titleForCacheLimitCellWithValue:currentCacheLimit]; - self.cacheLimitCell = [self sliderCellWithTitle:cacheLimitTitle changedAction:@selector(cacheLimitAdjusted:) minimum:0.0 maximum:fiftyMega initialValue:currentCacheLimit]; - [mutableCells addObject:self.cacheLimitCell]; - - UITableViewCell *clearRecordedRequestsCell = [self buttonCellWithTitle:@"❌ Clear Recorded Requests" touchUpAction:@selector(clearRequestsTapped:) isDestructive:YES]; - [mutableCells addObject:clearRecordedRequestsCell]; - - self.cells = mutableCells; -} - -#pragma mark - Settings Actions - -- (void)networkDebuggingToggled:(UISwitch *)sender -{ - [FLEXNetworkObserver setEnabled:sender.isOn]; -} - -- (void)cacheMediaResponsesToggled:(UISwitch *)sender -{ - [[FLEXNetworkRecorder defaultRecorder] setShouldCacheMediaResponses:sender.isOn]; -} - -- (void)cacheLimitAdjusted:(UISlider *)sender -{ - [[FLEXNetworkRecorder defaultRecorder] setResponseCacheByteLimit:sender.value]; - self.cacheLimitCell.textLabel.text = [self titleForCacheLimitCellWithValue:sender.value]; -} - -- (void)clearRequestsTapped:(UIButton *)sender -{ - [FLEXAlert makeSheet:^(FLEXAlert *make) { - make.button(@"Cancel").cancelStyle(); - make.button(@"Clear Recorded Requests").destructiveStyle().handler(^(NSArray *strings) { - [[FLEXNetworkRecorder defaultRecorder] clearRecordedActivity]; - }); - } showFrom:self]; - - self.popoverPresentationController.sourceView = sender; - self.popoverPresentationController.sourceRect = sender.bounds; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.cells.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return self.cells[indexPath.row]; -} - -#pragma mark - Helpers - -- (UITableViewCell *)switchCellWithTitle:(NSString *)title toggleAction:(SEL)toggleAction isOn:(BOOL)isOn -{ - UITableViewCell *cell = [UITableViewCell new]; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - cell.textLabel.text = title; - cell.textLabel.font = [[self class] cellTitleFont]; - - UISwitch *theSwitch = [UISwitch new]; - theSwitch.on = isOn; - [theSwitch addTarget:self action:toggleAction forControlEvents:UIControlEventValueChanged]; - - CGFloat switchOriginY = round((cell.contentView.frame.size.height - theSwitch.frame.size.height) / 2.0); - CGFloat switchOriginX = CGRectGetMaxX(cell.contentView.frame) - theSwitch.frame.size.width - self.tableView.separatorInset.left; - theSwitch.frame = CGRectMake(switchOriginX, switchOriginY, theSwitch.frame.size.width, theSwitch.frame.size.height); - theSwitch.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; - [cell.contentView addSubview:theSwitch]; - - return cell; -} - -- (UITableViewCell *)buttonCellWithTitle:(NSString *)title touchUpAction:(SEL)action isDestructive:(BOOL)isDestructive -{ - UITableViewCell *buttonCell = [UITableViewCell new]; - buttonCell.selectionStyle = UITableViewCellSelectionStyleNone; - - UIButton *actionButton = [UIButton buttonWithType:UIButtonTypeSystem]; - [actionButton setTitle:title forState:UIControlStateNormal]; - if (isDestructive) { - actionButton.tintColor = UIColor.redColor; - } - actionButton.titleLabel.font = [[self class] cellTitleFont]; - [actionButton addTarget:self action:@selector(clearRequestsTapped:) forControlEvents:UIControlEventTouchUpInside]; - - [buttonCell.contentView addSubview:actionButton]; - actionButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - actionButton.frame = buttonCell.contentView.frame; - actionButton.contentEdgeInsets = UIEdgeInsetsMake(0.0, self.tableView.separatorInset.left, 0.0, self.tableView.separatorInset.left); - actionButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; - - return buttonCell; -} - -- (NSString *)titleForCacheLimitCellWithValue:(long long)cacheLimit -{ - NSInteger limitInMB = round(cacheLimit / (1024 * 1024)); - return [NSString stringWithFormat:@"Cache Limit (%ld MB)", (long)limitInMB]; -} - -- (UITableViewCell *)sliderCellWithTitle:(NSString *)title changedAction:(SEL)changedAction minimum:(CGFloat)minimum maximum:(CGFloat)maximum initialValue:(CGFloat)initialValue -{ - UITableViewCell *sliderCell = [UITableViewCell new]; - sliderCell.selectionStyle = UITableViewCellSelectionStyleNone; - sliderCell.textLabel.text = title; - sliderCell.textLabel.font = [[self class] cellTitleFont]; - - UISlider *slider = [UISlider new]; - slider.minimumValue = minimum; - slider.maximumValue = maximum; - slider.value = initialValue; - [slider addTarget:self action:changedAction forControlEvents:UIControlEventValueChanged]; - [slider sizeToFit]; - - CGFloat sliderWidth = round(sliderCell.contentView.frame.size.width * 2.0 / 5.0); - CGFloat sliderOriginY = round((sliderCell.contentView.frame.size.height - slider.frame.size.height) / 2.0); - CGFloat sliderOriginX = CGRectGetMaxX(sliderCell.contentView.frame) - sliderWidth - self.tableView.separatorInset.left; - slider.frame = CGRectMake(sliderOriginX, sliderOriginY, sliderWidth, slider.frame.size.height); - slider.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; - [sliderCell.contentView addSubview:slider]; - - return sliderCell; -} - -+ (UIFont *)cellTitleFont -{ - return [FLEXUtility defaultFontOfSize:14.0]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.h index f6124387..6889cfae 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.h +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.m index 5ada330c..d1426550 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.m +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransaction.m @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXNetworkTransaction.h" @@ -16,8 +16,7 @@ @interface FLEXNetworkTransaction () @implementation FLEXNetworkTransaction -- (NSString *)description -{ +- (NSString *)description { NSString *description = [super description]; description = [description stringByAppendingFormat:@" id = %@;", self.requestID]; @@ -36,7 +35,7 @@ - (NSData *)cachedRequestBody { NSInputStream *bodyStream = [self.request.HTTPBodyStream copy]; const NSUInteger bufferSize = 1024; uint8_t buffer[bufferSize]; - NSMutableData *data = [NSMutableData data]; + NSMutableData *data = [NSMutableData new]; [bodyStream open]; NSInteger readBytes = 0; do { @@ -50,8 +49,7 @@ - (NSData *)cachedRequestBody { return _cachedRequestBody; } -+ (NSString *)readableStringFromTransactionState:(FLEXNetworkTransactionState)state -{ ++ (NSString *)readableStringFromTransactionState:(FLEXNetworkTransactionState)state { NSString *readableString = nil; switch (state) { case FLEXNetworkTransactionStateUnstarted: diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.h new file mode 100644 index 00000000..7b047ac0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.h @@ -0,0 +1,21 @@ +// +// FLEXNetworkTransactionCell.h +// Flipboard +// +// Created by Ryan Olson on 2/8/15. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import + +extern NSString * const kFLEXNetworkTransactionCellIdentifier; + +@class FLEXNetworkTransaction; + +@interface FLEXNetworkTransactionCell : UITableViewCell + +@property (nonatomic) FLEXNetworkTransaction *transaction; + ++ (CGFloat)preferredCellHeight; + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.m similarity index 86% rename from xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.m rename to xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.m index e89a1fe8..0cbc0c36 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.m +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionCell.m @@ -1,20 +1,20 @@ // -// FLEXNetworkTransactionTableViewCell.m +// FLEXNetworkTransactionCell.m // Flipboard // // Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXColor.h" -#import "FLEXNetworkTransactionTableViewCell.h" +#import "FLEXNetworkTransactionCell.h" #import "FLEXNetworkTransaction.h" #import "FLEXUtility.h" #import "FLEXResources.h" NSString *const kFLEXNetworkTransactionCellIdentifier = @"kFLEXNetworkTransactionCellIdentifier"; -@interface FLEXNetworkTransactionTableViewCell () +@interface FLEXNetworkTransactionCell () @property (nonatomic) UIImageView *thumbnailImageView; @property (nonatomic) UILabel *nameLabel; @@ -23,20 +23,19 @@ @interface FLEXNetworkTransactionTableViewCell () @end -@implementation FLEXNetworkTransactionTableViewCell +@implementation FLEXNetworkTransactionCell -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; self.nameLabel = [UILabel new]; - self.nameLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; + self.nameLabel.font = UIFont.flex_defaultTableCellFont; [self.contentView addSubview:self.nameLabel]; self.pathLabel = [UILabel new]; - self.pathLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; + self.pathLabel.font = UIFont.flex_defaultTableCellFont; self.pathLabel.textColor = [UIColor colorWithWhite:0.4 alpha:1.0]; [self.contentView addSubview:self.pathLabel]; @@ -47,23 +46,21 @@ - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSStr [self.contentView addSubview:self.thumbnailImageView]; self.transactionDetailsLabel = [UILabel new]; - self.transactionDetailsLabel.font = [FLEXUtility defaultFontOfSize:10.0]; + self.transactionDetailsLabel.font = [UIFont systemFontOfSize:10.0]; self.transactionDetailsLabel.textColor = [UIColor colorWithWhite:0.65 alpha:1.0]; [self.contentView addSubview:self.transactionDetailsLabel]; } return self; } -- (void)setTransaction:(FLEXNetworkTransaction *)transaction -{ +- (void)setTransaction:(FLEXNetworkTransaction *)transaction { if (_transaction != transaction) { _transaction = transaction; [self setNeedsLayout]; } } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; const CGFloat kVerticalPadding = 8.0; @@ -80,7 +77,7 @@ - (void)layoutSubviews self.nameLabel.text = [self nameLabelText]; CGSize nameLabelPreferredSize = [self.nameLabel sizeThatFits:CGSizeMake(availableTextWidth, CGFLOAT_MAX)]; self.nameLabel.frame = CGRectMake(textOriginX, kVerticalPadding, availableTextWidth, nameLabelPreferredSize.height); - self.nameLabel.textColor = (self.transaction.error || [FLEXUtility isErrorStatusCodeFromURLResponse:self.transaction.response]) ? UIColor.redColor : [FLEXColor primaryTextColor]; + self.nameLabel.textColor = (self.transaction.error || [FLEXUtility isErrorStatusCodeFromURLResponse:self.transaction.response]) ? UIColor.redColor : FLEXColor.primaryTextColor; self.pathLabel.text = [self pathLabelText]; CGSize pathLabelPreferredSize = [self.pathLabel sizeThatFits:CGSizeMake(availableTextWidth, CGFLOAT_MAX)]; @@ -95,8 +92,7 @@ - (void)layoutSubviews self.transactionDetailsLabel.frame = CGRectMake(transactionDetailsOriginX, transactionDetailsLabelOriginY, transactionDetailsLabelWidth, transactionLabelPreferredSize.height); } -- (NSString *)nameLabelText -{ +- (NSString *)nameLabelText { NSURL *url = self.transaction.request.URL; NSString *name = [url lastPathComponent]; if (name.length == 0) { @@ -109,10 +105,9 @@ - (NSString *)nameLabelText return name; } -- (NSString *)pathLabelText -{ +- (NSString *)pathLabelText { NSURL *url = self.transaction.request.URL; - NSMutableArray *mutablePathComponents = [[url pathComponents] mutableCopy]; + NSMutableArray *mutablePathComponents = url.pathComponents.mutableCopy; if (mutablePathComponents.count > 0) { [mutablePathComponents removeLastObject]; } @@ -123,9 +118,8 @@ - (NSString *)pathLabelText return path; } -- (NSString *)transactionDetailsLabelText -{ - NSMutableArray *detailComponents = [NSMutableArray array]; +- (NSString *)transactionDetailsLabelText { + NSMutableArray *detailComponents = [NSMutableArray new]; NSString *timestamp = [[self class] timestampStringFromRequestDate:self.transaction.startTime]; if (timestamp.length > 0) { @@ -162,8 +156,7 @@ - (NSString *)transactionDetailsLabelText return [detailComponents componentsJoinedByString:@" ・ "]; } -+ (NSString *)timestampStringFromRequestDate:(NSDate *)date -{ ++ (NSString *)timestampStringFromRequestDate:(NSDate *)date { static NSDateFormatter *dateFormatter = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -173,8 +166,7 @@ + (NSString *)timestampStringFromRequestDate:(NSDate *)date return [dateFormatter stringFromDate:date]; } -+ (CGFloat)preferredCellHeight -{ ++ (CGFloat)preferredCellHeight { return 65.0; } diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.h new file mode 100644 index 00000000..b1d272a6 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.h @@ -0,0 +1,17 @@ +// +// FLEXNetworkTransactionDetailController.h +// Flipboard +// +// Created by Ryan Olson on 2/10/15. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import + +@class FLEXNetworkTransaction; + +@interface FLEXNetworkTransactionDetailController : UITableViewController + +@property (nonatomic) FLEXNetworkTransaction *transaction; + +@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.m b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.m similarity index 84% rename from xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.m rename to xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.m index c8503f6a..68cae407 100644 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.m +++ b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailController.m @@ -1,13 +1,13 @@ // -// FLEXNetworkTransactionDetailTableViewController.m +// FLEXNetworkTransactionDetailController.m // Flipboard // // Created by Ryan Olson on 2/10/15. -// Copyright (c) 2015 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXColor.h" -#import "FLEXNetworkTransactionDetailTableViewController.h" +#import "FLEXNetworkTransactionDetailController.h" #import "FLEXNetworkCurlLogger.h" #import "FLEXNetworkRecorder.h" #import "FLEXNetworkTransaction.h" @@ -16,6 +16,8 @@ #import "FLEXMultilineTableViewCell.h" #import "FLEXUtility.h" #import "FLEXManager+Private.h" +#import "FLEXTableView.h" +#import "UIBarButtonItem+FLEX.h" typedef UIViewController *(^FLEXNetworkDetailRowSelectionFuture)(void); @@ -42,34 +44,40 @@ @implementation FLEXNetworkDetailSection @end -@interface FLEXNetworkTransactionDetailTableViewController () +@interface FLEXNetworkTransactionDetailController () @property (nonatomic, copy) NSArray *sections; @end -@implementation FLEXNetworkTransactionDetailTableViewController +@implementation FLEXNetworkTransactionDetailController -- (instancetype)initWithStyle:(UITableViewStyle)style -{ +- (instancetype)initWithStyle:(UITableViewStyle)style { // Force grouped style self = [super initWithStyle:UITableViewStyleGrouped]; if (self) { - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(handleTransactionUpdatedNotification:) name:kFLEXNetworkRecorderTransactionUpdatedNotification object:nil]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Copy curl" style:UIBarButtonItemStylePlain target:self action:@selector(copyButtonPressed:)]; + [NSNotificationCenter.defaultCenter addObserver:self + selector:@selector(handleTransactionUpdatedNotification:) + name:kFLEXNetworkRecorderTransactionUpdatedNotification + object:nil + ]; + self.toolbarItems = @[ + UIBarButtonItem.flex_flexibleSpace, + [UIBarButtonItem + itemWithTitle:@"Copy curl" target:self action:@selector(copyButtonPressed:) + ] + ]; } return self; } -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; - [self.tableView registerClass:[FLEXMultilineTableViewCell class] forCellReuseIdentifier:kFLEXMultilineTableViewCellIdentifier]; + [self.tableView registerClass:[FLEXMultilineTableViewCell class] forCellReuseIdentifier:kFLEXMultilineCell]; } -- (void)setTransaction:(FLEXNetworkTransaction *)transaction -{ +- (void)setTransaction:(FLEXNetworkTransaction *)transaction { if (![_transaction isEqual:transaction]) { _transaction = transaction; self.title = [transaction.request.URL lastPathComponent]; @@ -77,17 +85,15 @@ - (void)setTransaction:(FLEXNetworkTransaction *)transaction } } -- (void)setSections:(NSArray *)sections -{ +- (void)setSections:(NSArray *)sections { if (![_sections isEqual:sections]) { _sections = [sections copy]; [self.tableView reloadData]; } } -- (void)rebuildTableSections -{ - NSMutableArray *sections = [NSMutableArray array]; +- (void)rebuildTableSections { + NSMutableArray *sections = [NSMutableArray new]; FLEXNetworkDetailSection *generalSection = [[self class] generalSectionForTransaction:self.transaction]; if (generalSection.rows.count > 0) { @@ -113,41 +119,35 @@ - (void)rebuildTableSections self.sections = sections; } -- (void)handleTransactionUpdatedNotification:(NSNotification *)notification -{ +- (void)handleTransactionUpdatedNotification:(NSNotification *)notification { FLEXNetworkTransaction *transaction = [[notification userInfo] objectForKey:kFLEXNetworkRecorderUserInfoTransactionKey]; if (transaction == self.transaction) { [self rebuildTableSections]; } } -- (void)copyButtonPressed:(id)sender -{ +- (void)copyButtonPressed:(id)sender { [UIPasteboard.generalPasteboard setString:[FLEXNetworkCurlLogger curlCommandString:_transaction.request]]; } #pragma mark - Table view data source -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.sections.count; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { FLEXNetworkDetailSection *sectionModel = self.sections[section]; return sectionModel.rows.count; } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { FLEXNetworkDetailSection *sectionModel = self.sections[section]; return sectionModel.title; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXMultilineTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXMultilineTableViewCellIdentifier forIndexPath:indexPath]; +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + FLEXMultilineTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXMultilineCell forIndexPath:indexPath]; FLEXNetworkDetailRow *rowModel = [self rowModelAtIndexPath:indexPath]; @@ -158,8 +158,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { FLEXNetworkDetailRow *rowModel = [self rowModelAtIndexPath:indexPath]; UIViewController *viewController = nil; @@ -176,48 +175,74 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath [tableView deselectRowAtIndexPath:indexPath animated:YES]; } -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { FLEXNetworkDetailRow *row = [self rowModelAtIndexPath:indexPath]; NSAttributedString *attributedText = [[self class] attributedTextForRow:row]; BOOL showsAccessory = row.selectionFuture != nil; - return [FLEXMultilineTableViewCell preferredHeightWithAttributedText:attributedText inTableViewWidth:self.tableView.bounds.size.width style:UITableViewStyleGrouped showsAccessory:showsAccessory]; + return [FLEXMultilineTableViewCell + preferredHeightWithAttributedText:attributedText + maxWidth:tableView.bounds.size.width + style:tableView.style + showsAccessory:showsAccessory + ]; } -- (FLEXNetworkDetailRow *)rowModelAtIndexPath:(NSIndexPath *)indexPath -{ +- (FLEXNetworkDetailRow *)rowModelAtIndexPath:(NSIndexPath *)indexPath { FLEXNetworkDetailSection *sectionModel = self.sections[indexPath.section]; return sectionModel.rows[indexPath.row]; } #pragma mark - Cell Copying -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ +- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ +- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { return action == @selector(copy:); } -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ +- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { if (action == @selector(copy:)) { FLEXNetworkDetailRow *row = [self rowModelAtIndexPath:indexPath]; - [UIPasteboard.generalPasteboard setString:row.detailText]; + UIPasteboard.generalPasteboard.string = row.detailText; } } +#if FLEX_AT_LEAST_IOS13_SDK + +- (UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point __IOS_AVAILABLE(13.0) { + return [UIContextMenuConfiguration + configurationWithIdentifier:nil + previewProvider:nil + actionProvider:^UIMenu *(NSArray *suggestedActions) { + UIAction *copy = [UIAction + actionWithTitle:@"Copy" + image:nil + identifier:nil + handler:^(__kindof UIAction *action) { + FLEXNetworkDetailRow *row = [self rowModelAtIndexPath:indexPath]; + UIPasteboard.generalPasteboard.string = row.detailText; + } + ]; + return [UIMenu + menuWithTitle:@"" image:nil identifier:nil + options:UIMenuOptionsDisplayInline + children:@[copy] + ]; + } + ]; +} + +#endif + #pragma mark - View Configuration -+ (NSAttributedString *)attributedTextForRow:(FLEXNetworkDetailRow *)row -{ ++ (NSAttributedString *)attributedTextForRow:(FLEXNetworkDetailRow *)row { NSDictionary *titleAttributes = @{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Medium" size:12.0], NSForegroundColorAttributeName : [UIColor colorWithWhite:0.5 alpha:1.0] }; - NSDictionary *detailAttributes = @{ NSFontAttributeName : [FLEXUtility defaultTableViewCellLabelFont], - NSForegroundColorAttributeName : [FLEXColor primaryTextColor] }; + NSDictionary *detailAttributes = @{ NSFontAttributeName : UIFont.flex_defaultTableCellFont, + NSForegroundColorAttributeName : FLEXColor.primaryTextColor }; NSString *title = [NSString stringWithFormat:@"%@: ", row.title]; NSString *detailText = row.detailText ?: @""; @@ -230,9 +255,8 @@ + (NSAttributedString *)attributedTextForRow:(FLEXNetworkDetailRow *)row #pragma mark - Table Data Generation -+ (FLEXNetworkDetailSection *)generalSectionForTransaction:(FLEXNetworkTransaction *)transaction -{ - NSMutableArray *rows = [NSMutableArray array]; ++ (FLEXNetworkDetailSection *)generalSectionForTransaction:(FLEXNetworkTransaction *)transaction { + NSMutableArray *rows = [NSMutableArray new]; FLEXNetworkDetailRow *requestURLRow = [FLEXNetworkDetailRow new]; requestURLRow.title = @"Request URL"; @@ -297,7 +321,7 @@ + (FLEXNetworkDetailSection *)generalSectionForTransaction:(FLEXNetworkTransacti FLEXNetworkDetailRow *responseBodyRow = [FLEXNetworkDetailRow new]; responseBodyRow.title = @"Response Body"; - NSData *responseData = [[FLEXNetworkRecorder defaultRecorder] cachedResponseBodyForTransaction:transaction]; + NSData *responseData = [FLEXNetworkRecorder.defaultRecorder cachedResponseBodyForTransaction:transaction]; if (responseData.length > 0) { responseBodyRow.detailText = @"tap to view"; @@ -353,7 +377,7 @@ + (FLEXNetworkDetailSection *)generalSectionForTransaction:(FLEXNetworkTransacti startTimeFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS"; FLEXNetworkDetailRow *localStartTimeRow = [FLEXNetworkDetailRow new]; - localStartTimeRow.title = [NSString stringWithFormat:@"Start Time (%@)", [[NSTimeZone localTimeZone] abbreviationForDate:transaction.startTime]]; + localStartTimeRow.title = [NSString stringWithFormat:@"Start Time (%@)", [NSTimeZone.localTimeZone abbreviationForDate:transaction.startTime]]; localStartTimeRow.detailText = [startTimeFormatter stringFromDate:transaction.startTime]; [rows addObject:localStartTimeRow]; @@ -386,8 +410,7 @@ + (FLEXNetworkDetailSection *)generalSectionForTransaction:(FLEXNetworkTransacti return generalSection; } -+ (FLEXNetworkDetailSection *)requestHeadersSectionForTransaction:(FLEXNetworkTransaction *)transaction -{ ++ (FLEXNetworkDetailSection *)requestHeadersSectionForTransaction:(FLEXNetworkTransaction *)transaction { FLEXNetworkDetailSection *requestHeadersSection = [FLEXNetworkDetailSection new]; requestHeadersSection.title = @"Request Headers"; requestHeadersSection.rows = [self networkDetailRowsFromDictionary:transaction.request.allHTTPHeaderFields]; @@ -395,8 +418,7 @@ + (FLEXNetworkDetailSection *)requestHeadersSectionForTransaction:(FLEXNetworkTr return requestHeadersSection; } -+ (FLEXNetworkDetailSection *)postBodySectionForTransaction:(FLEXNetworkTransaction *)transaction -{ ++ (FLEXNetworkDetailSection *)postBodySectionForTransaction:(FLEXNetworkTransaction *)transaction { FLEXNetworkDetailSection *postBodySection = [FLEXNetworkDetailSection new]; postBodySection.title = @"Request Body Parameters"; if (transaction.cachedRequestBody.length > 0) { @@ -409,8 +431,7 @@ + (FLEXNetworkDetailSection *)postBodySectionForTransaction:(FLEXNetworkTransact return postBodySection; } -+ (FLEXNetworkDetailSection *)queryParametersSectionForTransaction:(FLEXNetworkTransaction *)transaction -{ ++ (FLEXNetworkDetailSection *)queryParametersSectionForTransaction:(FLEXNetworkTransaction *)transaction { NSArray *queries = [FLEXUtility itemsFromQueryString:transaction.request.URL.query]; FLEXNetworkDetailSection *querySection = [FLEXNetworkDetailSection new]; querySection.title = @"Query Parameters"; @@ -419,8 +440,7 @@ + (FLEXNetworkDetailSection *)queryParametersSectionForTransaction:(FLEXNetworkT return querySection; } -+ (FLEXNetworkDetailSection *)responseHeadersSectionForTransaction:(FLEXNetworkTransaction *)transaction -{ ++ (FLEXNetworkDetailSection *)responseHeadersSectionForTransaction:(FLEXNetworkTransaction *)transaction { FLEXNetworkDetailSection *responseHeadersSection = [FLEXNetworkDetailSection new]; responseHeadersSection.title = @"Response Headers"; if ([transaction.response isKindOfClass:[NSHTTPURLResponse class]]) { @@ -430,8 +450,7 @@ + (FLEXNetworkDetailSection *)responseHeadersSectionForTransaction:(FLEXNetworkT return responseHeadersSection; } -+ (NSArray *)networkDetailRowsFromDictionary:(NSDictionary *)dictionary -{ ++ (NSArray *)networkDetailRowsFromDictionary:(NSDictionary *)dictionary { NSMutableArray *rows = [NSMutableArray new]; NSArray *sortedKeys = [dictionary.allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; @@ -446,8 +465,7 @@ + (FLEXNetworkDetailSection *)responseHeadersSectionForTransaction:(FLEXNetworkT return rows.copy; } -+ (NSArray *)networkDetailRowsFromQueryItems:(NSArray *)items -{ ++ (NSArray *)networkDetailRowsFromQueryItems:(NSArray *)items { // Sort the items by name items = [items sortedArrayUsingComparator:^NSComparisonResult(NSURLQueryItem *item1, NSURLQueryItem *item2) { return [item1.name caseInsensitiveCompare:item2.name]; @@ -464,9 +482,8 @@ + (FLEXNetworkDetailSection *)responseHeadersSectionForTransaction:(FLEXNetworkT return [rows copy]; } -+ (UIViewController *)detailViewControllerForMIMEType:(NSString *)mimeType data:(NSData *)data -{ - FLEXCustomContentViewerFuture makeCustomViewer = [FLEXManager sharedManager].customContentTypeViewers[mimeType.lowercaseString]; ++ (UIViewController *)detailViewControllerForMIMEType:(NSString *)mimeType data:(NSData *)data { + FLEXCustomContentViewerFuture makeCustomViewer = FLEXManager.sharedManager.customContentTypeViewers[mimeType.lowercaseString]; if (makeCustomViewer) { UIViewController *viewer = makeCustomViewer(data); @@ -485,7 +502,7 @@ + (UIViewController *)detailViewControllerForMIMEType:(NSString *)mimeType data: } } else if ([mimeType hasPrefix:@"image/"]) { UIImage *image = [UIImage imageWithData:data]; - detailViewController = [[FLEXImagePreviewViewController alloc] initWithImage:image]; + detailViewController = [FLEXImagePreviewViewController forImage:image]; } else if ([mimeType isEqual:@"application/x-plist"]) { id propertyList = [NSPropertyListSerialization propertyListWithData:data options:0 format:NULL error:NULL]; detailViewController = [[FLEXWebViewController alloc] initWithText:[propertyList description]]; @@ -501,8 +518,7 @@ + (UIViewController *)detailViewControllerForMIMEType:(NSString *)mimeType data: return detailViewController; } -+ (NSData *)postBodyDataForTransaction:(FLEXNetworkTransaction *)transaction -{ ++ (NSData *)postBodyDataForTransaction:(FLEXNetworkTransaction *)transaction { NSData *bodyData = transaction.cachedRequestBody; if (bodyData.length > 0) { NSString *contentEncoding = [transaction.request valueForHTTPHeaderField:@"Content-Encoding"]; diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.h deleted file mode 100644 index a8df555c..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionDetailTableViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FLEXNetworkTransactionDetailTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2/10/15. -// Copyright (c) 2015 Flipboard. All rights reserved. -// - -#import - -@class FLEXNetworkTransaction; - -@interface FLEXNetworkTransactionDetailTableViewController : UITableViewController - -@property (nonatomic) FLEXNetworkTransaction *transaction; - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.h b/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.h deleted file mode 100644 index 6501c3c9..00000000 --- a/xcode/Pods/FLEX/Classes/Network/FLEXNetworkTransactionTableViewCell.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// FLEXNetworkTransactionTableViewCell.h -// Flipboard -// -// Created by Ryan Olson on 2/8/15. -// Copyright (c) 2015 Flipboard. All rights reserved. -// - -#import - -extern NSString *const kFLEXNetworkTransactionCellIdentifier; - -@class FLEXNetworkTransaction; - -@interface FLEXNetworkTransactionTableViewCell : UITableViewCell - -@property (nonatomic) FLEXNetworkTransaction *transaction; - -+ (CGFloat)preferredCellHeight; - -@end diff --git a/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.h b/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.h index 5aad811c..6169bd27 100644 --- a/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.h +++ b/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.h @@ -23,7 +23,6 @@ FOUNDATION_EXTERN NSString *const kFLEXNetworkObserverEnabledStateChangedNotific /// Swizzling occurs when the observer is enabled for the first time. /// This reduces the impact of FLEX if network debugging is not desired. /// NOTE: this setting persists between launches of the app. -+ (void)setEnabled:(BOOL)enabled; -+ (BOOL)isEnabled; +@property (nonatomic, class, getter=isEnabled) BOOL enabled; @end diff --git a/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.m b/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.m index e842a432..7bf3a5fe 100644 --- a/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.m +++ b/xcode/Pods/FLEX/Classes/Network/PonyDebugger/FLEXNetworkObserver.m @@ -15,15 +15,19 @@ #import "FLEXNetworkObserver.h" #import "FLEXNetworkRecorder.h" #import "FLEXUtility.h" +#import "NSObject+FLEX_Reflection.h" +#import "FLEXMethod.h" #import #import #import +#include NSString *const kFLEXNetworkObserverEnabledStateChangedNotification = @"kFLEXNetworkObserverEnabledStateChangedNotification"; static NSString *const kFLEXNetworkObserverEnabledDefaultsKey = @"com.flex.FLEXNetworkObserver.enableOnLaunch"; typedef void (^NSURLSessionAsyncCompletion)(id fileURLOrData, NSURLResponse *response, NSError *error); +typedef NSURLSessionTask * (^NSURLSessionNewTaskMethod)(NSURLSession *, id, NSURLSessionAsyncCompletion); @interface FLEXInternalRequestState : NSObject @@ -38,13 +42,13 @@ @implementation FLEXInternalRequestState @interface FLEXNetworkObserver (NSURLConnectionHelpers) -- (void)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response delegate:(id )delegate; -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response delegate:(id )delegate; +- (void)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response delegate:(id)delegate; +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response delegate:(id)delegate; -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data delegate:(id )delegate; +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data delegate:(id)delegate; -- (void)connectionDidFinishLoading:(NSURLConnection *)connection delegate:(id )delegate; -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error delegate:(id )delegate; +- (void)connectionDidFinishLoading:(NSURLConnection *)connection delegate:(id)delegate; +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error delegate:(id)delegate; - (void)connectionWillCancel:(NSURLConnection *)connection; @@ -53,14 +57,14 @@ - (void)connectionWillCancel:(NSURLConnection *)connection; @interface FLEXNetworkObserver (NSURLSessionTaskHelpers) -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler delegate:(id )delegate; -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler delegate:(id )delegate; -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data delegate:(id )delegate; +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler delegate:(id)delegate; +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler delegate:(id)delegate; +- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data delegate:(id)delegate; - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask -didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id )delegate; -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error delegate:(id )delegate; -- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite delegate:(id )delegate; -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location data:(NSData *)data delegate:(id )delegate; +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id)delegate; +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error delegate:(id)delegate; +- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite delegate:(id)delegate; +- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location data:(NSData *)data delegate:(id)delegate; - (void)URLSessionTaskWillResume:(NSURLSessionTask *)task; @@ -77,11 +81,10 @@ @implementation FLEXNetworkObserver #pragma mark - Public Methods -+ (void)setEnabled:(BOOL)enabled -{ ++ (void)setEnabled:(BOOL)enabled { BOOL previouslyEnabled = [self isEnabled]; - [[NSUserDefaults standardUserDefaults] setBool:enabled forKey:kFLEXNetworkObserverEnabledDefaultsKey]; + [NSUserDefaults.standardUserDefaults setBool:enabled forKey:kFLEXNetworkObserverEnabledDefaultsKey]; if (enabled) { // Inject if needed. This injection is protected with a dispatch_once, so we're ok calling it multiple times. @@ -94,13 +97,11 @@ + (void)setEnabled:(BOOL)enabled } } -+ (BOOL)isEnabled -{ - return [[[NSUserDefaults standardUserDefaults] objectForKey:kFLEXNetworkObserverEnabledDefaultsKey] boolValue]; ++ (BOOL)isEnabled { + return [[NSUserDefaults.standardUserDefaults objectForKey:kFLEXNetworkObserverEnabledDefaultsKey] boolValue]; } -+ (void)load -{ ++ (void)load { // We don't want to do the swizzling from +load because not all the classes may be loaded at this point. dispatch_async(dispatch_get_main_queue(), ^{ if ([self isEnabled]) { @@ -111,8 +112,7 @@ + (void)load #pragma mark - Statics -+ (instancetype)sharedObserver -{ ++ (instancetype)sharedObserver { static FLEXNetworkObserver *sharedObserver = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -121,9 +121,8 @@ + (instancetype)sharedObserver return sharedObserver; } -+ (NSString *)nextRequestID -{ - return [[NSUUID UUID] UUIDString]; ++ (NSString *)nextRequestID { + return NSUUID.UUID.UUIDString; } #pragma mark Delegate Injection Convenience Methods @@ -131,8 +130,7 @@ + (NSString *)nextRequestID /// All swizzled delegate methods should make use of this guard. /// This will prevent duplicated sniffing when the original implementation calls up to a superclass implementation which we've also swizzled. /// The superclass implementation (and implementations in classes above that) will be executed without interference if called from the original implementation. -+ (void)sniffWithoutDuplicationForObject:(NSObject *)object selector:(SEL)selector sniffingBlock:(void (^)(void))sniffingBlock originalImplementationBlock:(void (^)(void))originalImplementationBlock -{ ++ (void)sniffWithoutDuplicationForObject:(NSObject *)object selector:(SEL)selector sniffingBlock:(void (^)(void))sniffingBlock originalImplementationBlock:(void (^)(void))originalImplementationBlock { // If we don't have an object to detect nested calls on, just run the original implementation and bail. // This case can happen if someone besides the URL loading system calls the delegate methods directly. // See https://github.com/Flipboard/FLEX/issues/61 for an example. @@ -156,8 +154,7 @@ + (void)sniffWithoutDuplicationForObject:(NSObject *)object selector:(SEL)select #pragma mark - Delegate Injection -+ (void)injectIntoAllNSURLConnectionDelegateClasses -{ ++ (void)injectIntoAllNSURLConnectionDelegateClasses { // Only allow swizzling once. static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -192,9 +189,11 @@ + (void)injectIntoAllNSURLConnectionDelegateClasses continue; } - // Use the runtime API rather than the methods on NSObject to avoid sending messages to - // classes we're not interested in swizzling. Otherwise we hit +initialize on all classes. - // NOTE: calling class_getInstanceMethod() DOES send +initialize to the class. That's why we iterate through the method list. + // Use the C API rather than NSObject methods to avoid sending messages + // to classes we're not interested in swizzling, which could result + // in us calling +initialize on potentially uninitialized classes. + // NOTE: calling class_getInstanceMethod() DOES send +initialize + // to the class. That's why we iterate through the method list. unsigned int methodCount = 0; Method *methods = class_copyMethodList(class, &methodCount); BOOL matchingSelectorFound = NO; @@ -210,6 +209,7 @@ + (void)injectIntoAllNSURLConnectionDelegateClasses break; } } + free(methods); } @@ -227,8 +227,7 @@ + (void)injectIntoAllNSURLConnectionDelegateClasses }); } -+ (void)injectIntoDelegateClass:(Class)cls -{ ++ (void)injectIntoDelegateClass:(Class)cls { // Connections [self injectWillSendRequestIntoDelegateClass:cls]; [self injectDidReceiveDataIntoDelegateClass:cls]; @@ -251,8 +250,7 @@ + (void)injectIntoDelegateClass:(Class)cls [self injectDownloadTaskDidFinishDownloadingIntoDelegateClass:cls]; } -+ (void)injectIntoNSURLConnectionCancel -{ ++ (void)injectIntoNSURLConnectionCancel { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = [NSURLConnection class]; @@ -261,8 +259,10 @@ + (void)injectIntoNSURLConnectionCancel Method originalCancel = class_getInstanceMethod(class, selector); void (^swizzleBlock)(NSURLConnection *) = ^(NSURLConnection *slf) { - [[FLEXNetworkObserver sharedObserver] connectionWillCancel:slf]; - ((void(*)(id, SEL))objc_msgSend)(slf, swizzledSelector); + [FLEXNetworkObserver.sharedObserver connectionWillCancel:slf]; + ((void(*)(id, SEL))objc_msgSend)( + slf, swizzledSelector + ); }; IMP implementation = imp_implementationWithBlock(swizzleBlock); @@ -272,111 +272,210 @@ + (void)injectIntoNSURLConnectionCancel }); } -+ (void)injectIntoNSURLSessionTaskResume -{ ++ (void)injectIntoNSURLSessionTaskResume { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // In iOS 7 resume lives in __NSCFLocalSessionTask // In iOS 8 resume lives in NSURLSessionTask // In iOS 9 resume lives in __NSCFURLSessionTask - Class class = Nil; + Class baseResumeClass = Nil; if (![NSProcessInfo.processInfo respondsToSelector:@selector(operatingSystemVersion)]) { - class = NSClassFromString([@[@"__", @"NSC", @"FLocalS", @"ession", @"Task"] componentsJoinedByString:@""]); - } else if ([NSProcessInfo.processInfo operatingSystemVersion].majorVersion < 9) { - class = [NSURLSessionTask class]; + // iOS ... 7 + baseResumeClass = NSClassFromString(@"__NSCFLocalSessionTask"); } else { - class = NSClassFromString([@[@"__", @"NSC", @"FURLS", @"ession", @"Task"] componentsJoinedByString:@""]); + NSInteger majorVersion = NSProcessInfo.processInfo.operatingSystemVersion.majorVersion; + if (majorVersion < 9) { + // iOS 8 + baseResumeClass = [NSURLSessionTask class]; + } else { + // iOS 9+ + baseResumeClass = NSClassFromString(@"__NSCFURLSessionTask"); + } } - SEL selector = @selector(resume); - SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - - Method originalResume = class_getInstanceMethod(class, selector); - - void (^swizzleBlock)(NSURLSessionTask *) = ^(NSURLSessionTask *slf) { + + // Hook the base implementation of -resume + IMP originalResume = [baseResumeClass instanceMethodForSelector:@selector(resume)]; + [self swizzleResumeSelector:@selector(resume) forClass:baseResumeClass]; + + // *Sigh* + // + // So, multiple versions of AFNetworking 2.5.X swizzle -resume in various and + // short-sighted ways. If you look through the version history from 2.5.0 upwards, + // you'll see a variety of techniques were tried, including taking a private + // subclass of NSURLSessionTask and calling class_addMethod with `originalResume` + // below, so that a duplicate implementation of -resume exists in that class. + // + // This technique in particular is troublesome, because the implementation in + // `baseResumeClass` is never called at all, which means our swizzle is never invoked. + // + // The only solution is a brute-force one: we must loop over the class tree + // below `baseResumeClass` and check for all classes that implement `af_resume`. + // if the IMP corresponding to that method is equal to `originalResume` then we + // swizzle that in addition to swizzling `resume` on `baseResumeClass` above. + // + // However, we only go to the trouble at all if NSSelectorFromString + // can even find an `"af_resume"` selector in the first place. + SEL sel_af_resume = NSSelectorFromString(@"af_resume"); + if (sel_af_resume) { + NSMutableArray *classTree = FLEXGetAllSubclasses(baseResumeClass, NO).mutableCopy; + for (NSInteger i = 0; i < classTree.count; i++) { + [classTree addObjectsFromArray:FLEXGetAllSubclasses(classTree[i], NO)]; + } - // iOS's internal HTTP parser finalization code is mysteriously not thread safe, - // invoke it asynchronously has a chance to cause a `double free` crash. - // This line below will ask for HTTPBody synchronously, make the HTTPParser parse the request and cache them in advance, - // After that the HTTPParser will be finalized, - // make sure other threads inspecting the request won't trigger a race to finalize the parser. - [slf.currentRequest HTTPBody]; - - [[FLEXNetworkObserver sharedObserver] URLSessionTaskWillResume:slf]; - ((void(*)(id, SEL))objc_msgSend)(slf, swizzledSelector); - }; + for (Class current in classTree) { + IMP af_resume = [current instanceMethodForSelector:sel_af_resume]; + if (af_resume == originalResume) { + [self swizzleResumeSelector:sel_af_resume forClass:current]; + } + } + } + }); +} - IMP implementation = imp_implementationWithBlock(swizzleBlock); - class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalResume)); - Method newResume = class_getInstanceMethod(class, swizzledSelector); - method_exchangeImplementations(originalResume, newResume); ++ (void)swizzleResumeSelector:(SEL)selector forClass:(Class)class { + SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; + Method originalResume = class_getInstanceMethod(class, selector); + IMP implementation = imp_implementationWithBlock(^(NSURLSessionTask *slf) { + + // iOS's internal HTTP parser finalization code is mysteriously not thread safe, + // invoking it asynchronously has a chance to cause a `double free` crash. + // This line below will ask for HTTPBody synchronously, make the HTTPParser + // parse the request, and cache them in advance. After that the HTTPParser + // will be finalized. Make sure other threads inspecting the request + // won't trigger a race to finalize the parser. + [slf.currentRequest HTTPBody]; + + [FLEXNetworkObserver.sharedObserver URLSessionTaskWillResume:slf]; + ((void(*)(id, SEL))objc_msgSend)( + slf, swizzledSelector + ); }); + + class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalResume)); + Method newResume = class_getInstanceMethod(class, swizzledSelector); + method_exchangeImplementations(originalResume, newResume); } -+ (void)injectIntoNSURLConnectionAsynchronousClassMethod -{ ++ (void)injectIntoNSURLConnectionAsynchronousClassMethod { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = objc_getMetaClass(class_getName([NSURLConnection class])); SEL selector = @selector(sendAsynchronousRequest:queue:completionHandler:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - typedef void (^NSURLConnectionAsyncCompletion)(NSURLResponse* response, NSData* data, NSError* connectionError); - - void (^asyncSwizzleBlock)(Class, NSURLRequest *, NSOperationQueue *, NSURLConnectionAsyncCompletion) = ^(Class slf, NSURLRequest *request, NSOperationQueue *queue, NSURLConnectionAsyncCompletion completion) { - if ([FLEXNetworkObserver isEnabled]) { + typedef void (^AsyncCompletion)( + NSURLResponse *response, NSData *data, NSError *error + ); + typedef void (^SendAsyncRequestBlock)( + Class, NSURLRequest *, NSOperationQueue *, AsyncCompletion + ); + SendAsyncRequestBlock swizzleBlock = ^(Class slf, + NSURLRequest *request, + NSOperationQueue *queue, + AsyncCompletion completion) { + if (FLEXNetworkObserver.isEnabled) { NSString *requestID = [self nextRequestID]; - [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:nil]; + [FLEXNetworkRecorder.defaultRecorder + recordRequestWillBeSentWithRequestID:requestID + request:request + redirectResponse:nil + ]; + NSString *mechanism = [self mechanismFromClassMethod:selector onClass:class]; - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID]; - NSURLConnectionAsyncCompletion completionWrapper = ^(NSURLResponse *response, NSData *data, NSError *connectionError) { - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response]; - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length]; - if (connectionError) { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:connectionError]; + [FLEXNetworkRecorder.defaultRecorder recordMechanism:mechanism forRequestID:requestID]; + + AsyncCompletion wrapper = ^(NSURLResponse *response, NSData *data, NSError *error) { + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:response + ]; + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:data.length + ]; + if (error) { + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFailedWithRequestID:requestID + error:error + ]; } else { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:data]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFinishedWithRequestID:requestID + responseBody:data + ]; } // Call through to the original completion handler if (completion) { - completion(response, data, connectionError); + completion(response, data, error); } }; - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, queue, completionWrapper); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, request, queue, wrapper + ); } else { - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, queue, completion); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, request, queue, completion + ); } }; - [FLEXUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:asyncSwizzleBlock swizzledSelector:swizzledSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:selector + onClass:class withBlock:swizzleBlock swizzledSelector:swizzledSelector + ]; }); } -+ (void)injectIntoNSURLConnectionSynchronousClassMethod -{ ++ (void)injectIntoNSURLConnectionSynchronousClassMethod { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = objc_getMetaClass(class_getName([NSURLConnection class])); SEL selector = @selector(sendSynchronousRequest:returningResponse:error:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - NSData *(^syncSwizzleBlock)(Class, NSURLRequest *, NSURLResponse **, NSError **) = ^NSData *(Class slf, NSURLRequest *request, NSURLResponse **response, NSError **error) { + typedef NSData * (^AsyncCompletion)(Class, NSURLRequest *, NSURLResponse **, NSError **); + AsyncCompletion swizzleBlock = ^NSData *(Class slf, + NSURLRequest *request, + NSURLResponse **response, + NSError **error) { NSData *data = nil; - if ([FLEXNetworkObserver isEnabled]) { + if (FLEXNetworkObserver.isEnabled) { NSString *requestID = [self nextRequestID]; - [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:nil]; + [FLEXNetworkRecorder.defaultRecorder + recordRequestWillBeSentWithRequestID:requestID + request:request + redirectResponse:nil + ]; + NSString *mechanism = [self mechanismFromClassMethod:selector onClass:class]; - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID]; + [FLEXNetworkRecorder.defaultRecorder recordMechanism:mechanism forRequestID:requestID]; NSError *temporaryError = nil; NSURLResponse *temporaryResponse = nil; - data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)(slf, swizzledSelector, request, &temporaryResponse, &temporaryError); - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:temporaryResponse]; - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length]; + data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)( + slf, swizzledSelector, request, &temporaryResponse, &temporaryError + ); + + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:temporaryResponse + ]; + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:data.length + ]; + if (temporaryError) { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:temporaryError]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFailedWithRequestID:requestID + error:temporaryError + ]; } else { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:data]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFinishedWithRequestID:requestID + responseBody:data + ]; } + if (error) { *error = temporaryError; } @@ -384,23 +483,27 @@ + (void)injectIntoNSURLConnectionSynchronousClassMethod *response = temporaryResponse; } } else { - data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)(slf, swizzledSelector, request, response, error); + data = ((id(*)(id, SEL, id, NSURLResponse **, NSError **))objc_msgSend)( + slf, swizzledSelector, request, response, error + ); } return data; }; - [FLEXUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:syncSwizzleBlock swizzledSelector:swizzledSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:selector + onClass:class withBlock:swizzleBlock swizzledSelector:swizzledSelector + ]; }); } -+ (void)injectIntoNSURLSessionAsyncDataAndDownloadTaskMethods -{ ++ (void)injectIntoNSURLSessionAsyncDataAndDownloadTaskMethods { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = [NSURLSession class]; - // The method signatures here are close enough that we can use the same logic to inject into all of them. + // The method signatures here are close enough that + // we can use the same logic to inject into all of them. const SEL selectors[] = { @selector(dataTaskWithRequest:completionHandler:), @selector(dataTaskWithURL:completionHandler:), @@ -420,37 +523,58 @@ + (void)injectIntoNSURLSessionAsyncDataAndDownloadTaskMethods // swizzle __NSCFURLSession, which we can get from the class of the shared session class = [NSURLSession.sharedSession class]; } - - NSURLSessionTask *(^asyncDataOrDownloadSwizzleBlock)(Class, id, NSURLSessionAsyncCompletion) = ^NSURLSessionTask *(Class slf, id argument, NSURLSessionAsyncCompletion completion) { + + typedef NSURLSessionTask * (^NSURLSessionNewTaskMethod)( + NSURLSession *, id, NSURLSessionAsyncCompletion + ); + NSURLSessionNewTaskMethod swizzleBlock = ^NSURLSessionTask *(NSURLSession *slf, + id argument, + NSURLSessionAsyncCompletion completion) { NSURLSessionTask *task = nil; - // If completion block was not provided sender expect to receive delegated methods or does not - // interested in callback at all. In this case we should just call original method implementation - // with nil completion block. - if ([FLEXNetworkObserver isEnabled] && completion) { + // Check if network observing is on and a callback was provided + if (FLEXNetworkObserver.isEnabled && completion) { NSString *requestID = [self nextRequestID]; NSString *mechanism = [self mechanismFromClassMethod:selector onClass:class]; - NSURLSessionAsyncCompletion completionWrapper = [self asyncCompletionWrapperForRequestID:requestID mechanism:mechanism completion:completion]; - task = ((id(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, argument, completionWrapper); + // "Hook" the completion block + NSURLSessionAsyncCompletion completionWrapper = [self + asyncCompletionWrapperForRequestID:requestID + mechanism:mechanism + completion:completion + ]; + + // Call the original method + task = ((id(*)(id, SEL, id, id))objc_msgSend)( + slf, swizzledSelector, argument, completionWrapper + ); [self setRequestID:requestID forConnectionOrTask:task]; } else { - task = ((id(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, argument, completion); + // Network observer disabled or no callback provided, + // just pass through to the original method + task = ((id(*)(id, SEL, id, id))objc_msgSend)( + slf, swizzledSelector, argument, completion + ); } return task; }; - [FLEXUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:asyncDataOrDownloadSwizzleBlock swizzledSelector:swizzledSelector]; + // Actually swizzle + [FLEXUtility replaceImplementationOfKnownSelector:selector + onClass:class withBlock:swizzleBlock swizzledSelector:swizzledSelector + ]; } }); } -+ (void)injectIntoNSURLSessionAsyncUploadTaskMethods -{ ++ (void)injectIntoNSURLSessionAsyncUploadTaskMethods { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class class = [NSURLSession class]; // The method signatures here are close enough that we can use the same logic to inject into both of them. // Note that they have 3 arguments, so we can't easily combine with the data and download method above. + typedef NSURLSessionUploadTask *(^UploadTaskMethod)( + NSURLSession *, NSURLRequest *, id, NSURLSessionAsyncCompletion + ); const SEL selectors[] = { @selector(uploadTaskWithRequest:fromData:completionHandler:), @selector(uploadTaskWithRequest:fromFile:completionHandler:) @@ -468,46 +592,76 @@ + (void)injectIntoNSURLSessionAsyncUploadTaskMethods class = [NSURLSession.sharedSession class]; } - NSURLSessionUploadTask *(^asyncUploadTaskSwizzleBlock)(Class, NSURLRequest *, id, NSURLSessionAsyncCompletion) = ^NSURLSessionUploadTask *(Class slf, NSURLRequest *request, id argument, NSURLSessionAsyncCompletion completion) { + + UploadTaskMethod swizzleBlock = ^NSURLSessionUploadTask *(NSURLSession * slf, + NSURLRequest *request, + id argument, + NSURLSessionAsyncCompletion completion) { NSURLSessionUploadTask *task = nil; - if ([FLEXNetworkObserver isEnabled] && completion) { + if (FLEXNetworkObserver.isEnabled && completion) { NSString *requestID = [self nextRequestID]; NSString *mechanism = [self mechanismFromClassMethod:selector onClass:class]; - NSURLSessionAsyncCompletion completionWrapper = [self asyncCompletionWrapperForRequestID:requestID mechanism:mechanism completion:completion]; - task = ((id(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, argument, completionWrapper); + NSURLSessionAsyncCompletion completionWrapper = [self + asyncCompletionWrapperForRequestID:requestID + mechanism:mechanism + completion:completion + ]; + + task = ((id(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, request, argument, completionWrapper + ); [self setRequestID:requestID forConnectionOrTask:task]; } else { - task = ((id(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, request, argument, completion); + task = ((id(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, request, argument, completion + ); } return task; }; - [FLEXUtility replaceImplementationOfKnownSelector:selector onClass:class withBlock:asyncUploadTaskSwizzleBlock swizzledSelector:swizzledSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:selector + onClass:class withBlock:swizzleBlock swizzledSelector:swizzledSelector + ]; } }); } -+ (NSString *)mechanismFromClassMethod:(SEL)selector onClass:(Class)class -{ ++ (NSString *)mechanismFromClassMethod:(SEL)selector onClass:(Class)class { return [NSString stringWithFormat:@"+[%@ %@]", NSStringFromClass(class), NSStringFromSelector(selector)]; } -+ (NSURLSessionAsyncCompletion)asyncCompletionWrapperForRequestID:(NSString *)requestID mechanism:(NSString *)mechanism completion:(NSURLSessionAsyncCompletion)completion -{ ++ (NSURLSessionAsyncCompletion)asyncCompletionWrapperForRequestID:(NSString *)requestID + mechanism:(NSString *)mechanism + completion:(NSURLSessionAsyncCompletion)completion { NSURLSessionAsyncCompletion completionWrapper = ^(id fileURLOrData, NSURLResponse *response, NSError *error) { - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID]; - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response]; + [FLEXNetworkRecorder.defaultRecorder recordMechanism:mechanism forRequestID:requestID]; + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:response + ]; + NSData *data = nil; if ([fileURLOrData isKindOfClass:[NSURL class]]) { data = [NSData dataWithContentsOfURL:fileURLOrData]; } else if ([fileURLOrData isKindOfClass:[NSData class]]) { data = fileURLOrData; } - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length]; + + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:data.length + ]; + if (error) { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:error]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFailedWithRequestID:requestID + error:error + ]; } else { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:data]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFinishedWithRequestID:requestID + responseBody:data + ]; } // Call through to the original completion handler @@ -518,287 +672,471 @@ + (NSURLSessionAsyncCompletion)asyncCompletionWrapperForRequestID:(NSString *)re return completionWrapper; } -+ (void)injectWillSendRequestIntoDelegateClass:(Class)cls -{ ++ (void)injectWillSendRequestIntoDelegateClass:(Class)cls { SEL selector = @selector(connection:willSendRequest:redirectResponse:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; Protocol *protocol = @protocol(NSURLConnectionDataDelegate); - if (!protocol) { - protocol = @protocol(NSURLConnectionDelegate); - } + protocol = protocol ?: @protocol(NSURLConnectionDelegate); + struct objc_method_description methodDescription = protocol_getMethodDescription( + protocol, selector, NO, YES + ); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + typedef NSURLRequest *(^WillSendRequestBlock)( + id slf, NSURLConnection *connection, + NSURLRequest *request, NSURLResponse *response + ); - typedef NSURLRequest *(^NSURLConnectionWillSendRequestBlock)(id slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response); - - NSURLConnectionWillSendRequestBlock undefinedBlock = ^NSURLRequest *(id slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response) { - [[FLEXNetworkObserver sharedObserver] connection:connection willSendRequest:request redirectResponse:response delegate:slf]; + WillSendRequestBlock undefinedBlock = ^NSURLRequest *(id slf, + NSURLConnection *connection, + NSURLRequest *request, + NSURLResponse *response) { + [FLEXNetworkObserver.sharedObserver + connection:connection + willSendRequest:request + redirectResponse:response + delegate:slf + ]; return request; }; - NSURLConnectionWillSendRequestBlock implementationBlock = ^NSURLRequest *(id slf, NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response) { + WillSendRequestBlock implementationBlock = ^NSURLRequest *(id slf, + NSURLConnection *connection, + NSURLRequest *request, + NSURLResponse *response) { __block NSURLRequest *returnValue = nil; [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{ undefinedBlock(slf, connection, request, response); } originalImplementationBlock:^{ - returnValue = ((id(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, connection, request, response); + returnValue = ((id(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, connection, request, response + ); }]; return returnValue; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:methodDescription + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDidReceiveResponseIntoDelegateClass:(Class)cls -{ ++ (void)injectDidReceiveResponseIntoDelegateClass:(Class)cls { SEL selector = @selector(connection:didReceiveResponse:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; Protocol *protocol = @protocol(NSURLConnectionDataDelegate); - if (!protocol) { - protocol = @protocol(NSURLConnectionDelegate); - } + protocol = protocol ?: @protocol(NSURLConnectionDelegate); + struct objc_method_description description = protocol_getMethodDescription( + protocol, selector, NO, YES + ); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + typedef void (^DidReceiveResponseBlock)( + id slf, NSURLConnection *connection, NSURLResponse *response + ); - typedef void (^NSURLConnectionDidReceiveResponseBlock)(id slf, NSURLConnection *connection, NSURLResponse *response); - - NSURLConnectionDidReceiveResponseBlock undefinedBlock = ^(id slf, NSURLConnection *connection, NSURLResponse *response) { - [[FLEXNetworkObserver sharedObserver] connection:connection didReceiveResponse:response delegate:slf]; + DidReceiveResponseBlock undefinedBlock = ^(id slf, + NSURLConnection *connection, + NSURLResponse *response) { + [FLEXNetworkObserver.sharedObserver connection:connection + didReceiveResponse:response delegate:slf + ]; }; - NSURLConnectionDidReceiveResponseBlock implementationBlock = ^(id slf, NSURLConnection *connection, NSURLResponse *response) { + DidReceiveResponseBlock implementationBlock = ^(id slf, + NSURLConnection *connection, + NSURLResponse *response) { [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{ undefinedBlock(slf, connection, response); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, response); + ((void(*)(id, SEL, id, id))objc_msgSend)( + slf, swizzledSelector, connection, response + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDidReceiveDataIntoDelegateClass:(Class)cls -{ ++ (void)injectDidReceiveDataIntoDelegateClass:(Class)cls { SEL selector = @selector(connection:didReceiveData:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; Protocol *protocol = @protocol(NSURLConnectionDataDelegate); - if (!protocol) { - protocol = @protocol(NSURLConnectionDelegate); - } - - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + protocol = protocol ?: @protocol(NSURLConnectionDelegate); + struct objc_method_description description = protocol_getMethodDescription( + protocol, selector, NO, YES + ); - typedef void (^NSURLConnectionDidReceiveDataBlock)(id slf, NSURLConnection *connection, NSData *data); + typedef void (^DidReceiveDataBlock)( + id slf, NSURLConnection *connection, NSData *data + ); - NSURLConnectionDidReceiveDataBlock undefinedBlock = ^(id slf, NSURLConnection *connection, NSData *data) { - [[FLEXNetworkObserver sharedObserver] connection:connection didReceiveData:data delegate:slf]; + DidReceiveDataBlock undefinedBlock = ^(id slf, + NSURLConnection *connection, + NSData *data) { + [FLEXNetworkObserver.sharedObserver connection:connection + didReceiveData:data delegate:slf + ]; }; - NSURLConnectionDidReceiveDataBlock implementationBlock = ^(id slf, NSURLConnection *connection, NSData *data) { + DidReceiveDataBlock implementationBlock = ^(id slf, + NSURLConnection *connection, + NSData *data) { [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{ undefinedBlock(slf, connection, data); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, data); + ((void(*)(id, SEL, id, id))objc_msgSend)( + slf, swizzledSelector, connection, data + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDidFinishLoadingIntoDelegateClass:(Class)cls -{ ++ (void)injectDidFinishLoadingIntoDelegateClass:(Class)cls { SEL selector = @selector(connectionDidFinishLoading:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; Protocol *protocol = @protocol(NSURLConnectionDataDelegate); - if (!protocol) { - protocol = @protocol(NSURLConnectionDelegate); - } - - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + protocol = protocol ?: @protocol(NSURLConnectionDelegate); + struct objc_method_description description = protocol_getMethodDescription( + protocol, selector, NO, YES + ); - typedef void (^NSURLConnectionDidFinishLoadingBlock)(id slf, NSURLConnection *connection); + typedef void (^FinishLoadingBlock)(id slf, NSURLConnection *connection); - NSURLConnectionDidFinishLoadingBlock undefinedBlock = ^(id slf, NSURLConnection *connection) { - [[FLEXNetworkObserver sharedObserver] connectionDidFinishLoading:connection delegate:slf]; + FinishLoadingBlock undefinedBlock = ^(id slf, NSURLConnection *connection) { + [FLEXNetworkObserver.sharedObserver connectionDidFinishLoading:connection delegate:slf]; }; - NSURLConnectionDidFinishLoadingBlock implementationBlock = ^(id slf, NSURLConnection *connection) { + FinishLoadingBlock implementationBlock = ^(id slf, NSURLConnection *connection) { [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{ undefinedBlock(slf, connection); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledSelector, connection); + ((void(*)(id, SEL, id))objc_msgSend)( + slf, swizzledSelector, connection + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDidFailWithErrorIntoDelegateClass:(Class)cls -{ ++ (void)injectDidFailWithErrorIntoDelegateClass:(Class)cls { SEL selector = @selector(connection:didFailWithError:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLConnectionDelegate); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLConnectionDelegate), selector, NO, YES + ); - typedef void (^NSURLConnectionDidFailWithErrorBlock)(id slf, NSURLConnection *connection, NSError *error); + typedef void (^DidFailWithErrorBlock)( + id slf, NSURLConnection *connection, NSError *error + ); - NSURLConnectionDidFailWithErrorBlock undefinedBlock = ^(id slf, NSURLConnection *connection, NSError *error) { - [[FLEXNetworkObserver sharedObserver] connection:connection didFailWithError:error delegate:slf]; + DidFailWithErrorBlock undefinedBlock = ^(id slf, + NSURLConnection *connection, + NSError *error) { + [FLEXNetworkObserver.sharedObserver connection:connection + didFailWithError:error delegate:slf + ]; }; - NSURLConnectionDidFailWithErrorBlock implementationBlock = ^(id slf, NSURLConnection *connection, NSError *error) { + DidFailWithErrorBlock implementationBlock = ^(id slf, + NSURLConnection *connection, + NSError *error) { [self sniffWithoutDuplicationForObject:connection selector:selector sniffingBlock:^{ undefinedBlock(slf, connection, error); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id))objc_msgSend)(slf, swizzledSelector, connection, error); + ((void(*)(id, SEL, id, id))objc_msgSend)( + slf, swizzledSelector, connection, error + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectTaskWillPerformHTTPRedirectionIntoDelegateClass:(Class)cls -{ ++ (void)injectTaskWillPerformHTTPRedirectionIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionTaskDelegate); - - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionTaskDelegate), selector, NO, YES + ); - typedef void (^NSURLSessionWillPerformHTTPRedirectionBlock)(id slf, NSURLSession *session, NSURLSessionTask *task, NSHTTPURLResponse *response, NSURLRequest *newRequest, void(^completionHandler)(NSURLRequest *)); + typedef void (^HTTPRedirectionBlock)(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSHTTPURLResponse *response, + NSURLRequest *newRequest, + void(^completionHandler)(NSURLRequest *)); - NSURLSessionWillPerformHTTPRedirectionBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionTask *task, NSHTTPURLResponse *response, NSURLRequest *newRequest, void(^completionHandler)(NSURLRequest *)) { - [[FLEXNetworkObserver sharedObserver] URLSession:session task:task willPerformHTTPRedirection:response newRequest:newRequest completionHandler:completionHandler delegate:slf]; + HTTPRedirectionBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSHTTPURLResponse *response, + NSURLRequest *newRequest, + void(^completionHandler)(NSURLRequest *)) { + [FLEXNetworkObserver.sharedObserver + URLSession:session task:task + willPerformHTTPRedirection:response + newRequest:newRequest + completionHandler:completionHandler + delegate:slf + ]; completionHandler(newRequest); }; - NSURLSessionWillPerformHTTPRedirectionBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionTask *task, NSHTTPURLResponse *response, NSURLRequest *newRequest, void(^completionHandler)(NSURLRequest *)) { + HTTPRedirectionBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSHTTPURLResponse *response, + NSURLRequest *newRequest, + void(^completionHandler)(NSURLRequest *)) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ - [[FLEXNetworkObserver sharedObserver] URLSession:session task:task willPerformHTTPRedirection:response newRequest:newRequest completionHandler:completionHandler delegate:slf]; + [FLEXNetworkObserver.sharedObserver + URLSession:session task:task + willPerformHTTPRedirection:response + newRequest:newRequest + completionHandler:completionHandler + delegate:slf + ]; } originalImplementationBlock:^{ - ((id(*)(id, SEL, id, id, id, id, void(^)(NSURLRequest *)))objc_msgSend)(slf, swizzledSelector, session, task, response, newRequest, completionHandler); + ((id(*)(id, SEL, id, id, id, id, void(^)(NSURLRequest *)))objc_msgSend)( + slf, swizzledSelector, session, task, response, newRequest, completionHandler + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; - + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectTaskDidReceiveDataIntoDelegateClass:(Class)cls -{ ++ (void)injectTaskDidReceiveDataIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:dataTask:didReceiveData:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionDataDelegate); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDataDelegate), selector, NO, YES + ); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); - - typedef void (^NSURLSessionDidReceiveDataBlock)(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); - - NSURLSessionDidReceiveDataBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data) { - [[FLEXNetworkObserver sharedObserver] URLSession:session dataTask:dataTask didReceiveData:data delegate:slf]; + typedef void (^DidReceiveDataBlock)(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSData *data); + DidReceiveDataBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSData *data) { + [FLEXNetworkObserver.sharedObserver URLSession:session + dataTask:dataTask didReceiveData:data delegate:slf + ]; }; - NSURLSessionDidReceiveDataBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data) { + DidReceiveDataBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSData *data) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ undefinedBlock(slf, session, dataTask, data); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, session, dataTask, data); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, session, dataTask, data + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; - + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDataTaskDidBecomeDownloadTaskIntoDelegateClass:(Class)cls -{ ++ (void)injectDataTaskDidBecomeDownloadTaskIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:dataTask:didBecomeDownloadTask:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionDataDelegate); - - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); - - typedef void (^NSURLSessionDidBecomeDownloadTaskBlock)(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); - - NSURLSessionDidBecomeDownloadTaskBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask) { - [[FLEXNetworkObserver sharedObserver] URLSession:session dataTask:dataTask didBecomeDownloadTask:downloadTask delegate:slf]; + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDataDelegate), selector, NO, YES + ); + + typedef void (^DidBecomeDownloadTaskBlock)(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLSessionDownloadTask *downloadTask); + + DidBecomeDownloadTaskBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLSessionDownloadTask *downloadTask) { + [FLEXNetworkObserver.sharedObserver URLSession:session + dataTask:dataTask didBecomeDownloadTask:downloadTask delegate:slf + ]; }; - NSURLSessionDidBecomeDownloadTaskBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask) { + DidBecomeDownloadTaskBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLSessionDownloadTask *downloadTask) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ undefinedBlock(slf, session, dataTask, downloadTask); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, session, dataTask, downloadTask); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, session, dataTask, downloadTask + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectTaskDidReceiveResponseIntoDelegateClass:(Class)cls -{ ++ (void)injectTaskDidReceiveResponseIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:dataTask:didReceiveResponse:completionHandler:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionDataDelegate); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDataDelegate), selector, NO, YES + ); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + typedef void (^DidReceiveResponseBlock)(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLResponse *response, + void(^completion)(NSURLSessionResponseDisposition)); - typedef void (^NSURLSessionDidReceiveResponseBlock)(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response, void(^completionHandler)(NSURLSessionResponseDisposition disposition)); - - NSURLSessionDidReceiveResponseBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response, void(^completionHandler)(NSURLSessionResponseDisposition disposition)) { - [[FLEXNetworkObserver sharedObserver] URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler delegate:slf]; - completionHandler(NSURLSessionResponseAllow); + DidReceiveResponseBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLResponse *response, + void(^completion)(NSURLSessionResponseDisposition)) { + [FLEXNetworkObserver.sharedObserver + URLSession:session + dataTask:dataTask + didReceiveResponse:response + completionHandler:completion + delegate:slf + ]; + completion(NSURLSessionResponseAllow); }; - NSURLSessionDidReceiveResponseBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response, void(^completionHandler)(NSURLSessionResponseDisposition disposition)) { + DidReceiveResponseBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDataTask *dataTask, + NSURLResponse *response, + void(^completion)(NSURLSessionResponseDisposition )) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ - [[FLEXNetworkObserver sharedObserver] URLSession:session dataTask:dataTask didReceiveResponse:response completionHandler:completionHandler delegate:slf]; + [FLEXNetworkObserver.sharedObserver + URLSession:session + dataTask:dataTask + didReceiveResponse:response + completionHandler:completion + delegate:slf + ]; } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, id, void(^)(NSURLSessionResponseDisposition)))objc_msgSend)(slf, swizzledSelector, session, dataTask, response, completionHandler); + ((void(*)(id, SEL, id, id, id, void(^)(NSURLSessionResponseDisposition)))objc_msgSend)( + slf, swizzledSelector, session, dataTask, response, completion + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectTaskDidCompleteWithErrorIntoDelegateClass:(Class)cls -{ ++ (void)injectTaskDidCompleteWithErrorIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:task:didCompleteWithError:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionTaskDelegate); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDataDelegate), selector, NO, YES + ); - typedef void (^NSURLSessionTaskDidCompleteWithErrorBlock)(id slf, NSURLSession *session, NSURLSessionTask *task, NSError *error); - - NSURLSessionTaskDidCompleteWithErrorBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionTask *task, NSError *error) { - [[FLEXNetworkObserver sharedObserver] URLSession:session task:task didCompleteWithError:error delegate:slf]; + typedef void (^DidCompleteWithErrorBlock)(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSError *error); + + DidCompleteWithErrorBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSError *error) { + [FLEXNetworkObserver.sharedObserver URLSession:session + task:task didCompleteWithError:error delegate:slf + ]; }; - - NSURLSessionTaskDidCompleteWithErrorBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionTask *task, NSError *error) { + + DidCompleteWithErrorBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionTask *task, + NSError *error) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ undefinedBlock(slf, session, task, error); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, session, task, error); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, session, task, error + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } // Used for overriding AFNetworking behavior -+ (void)injectRespondsToSelectorIntoDelegateClass:(Class)cls -{ ++ (void)injectRespondsToSelectorIntoDelegateClass:(Class)cls { SEL selector = @selector(respondsToSelector:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; @@ -806,77 +1144,133 @@ + (void)injectRespondsToSelectorIntoDelegateClass:(Class)cls Method method = class_getInstanceMethod(cls, selector); struct objc_method_description methodDescription = *method_getDescription(method); - BOOL (^undefinedBlock)(id , SEL) = ^(id slf, SEL sel) { + typedef BOOL (^RespondsToSelectorImpl)(id self, SEL sel); + RespondsToSelectorImpl undefinedBlock = ^(id slf, SEL sel) { return YES; }; - BOOL (^implementationBlock)(id , SEL) = ^(id slf, SEL sel) { + RespondsToSelectorImpl implementationBlock = ^(id slf, SEL sel) { if (sel == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { return undefinedBlock(slf, sel); } return ((BOOL(*)(id, SEL, SEL))objc_msgSend)(slf, swizzledSelector, sel); }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:methodDescription + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } - -+ (void)injectDownloadTaskDidFinishDownloadingIntoDelegateClass:(Class)cls -{ ++ (void)injectDownloadTaskDidFinishDownloadingIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:downloadTask:didFinishDownloadingToURL:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionDownloadDelegate); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDownloadDelegate), selector, NO, YES + ); - typedef void (^NSURLSessionDownloadTaskDidFinishDownloadingBlock)(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, NSURL *location); + typedef void (^DidFinishDownloadingBlock)(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + NSURL *location); - NSURLSessionDownloadTaskDidFinishDownloadingBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, NSURL *location) { + DidFinishDownloadingBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + NSURL *location) { NSData *data = [NSData dataWithContentsOfFile:location.relativePath]; - [[FLEXNetworkObserver sharedObserver] URLSession:session task:task didFinishDownloadingToURL:location data:data delegate:slf]; + [FLEXNetworkObserver.sharedObserver URLSession:session + task:task didFinishDownloadingToURL:location data:data delegate:slf + ]; }; - NSURLSessionDownloadTaskDidFinishDownloadingBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, NSURL *location) { + DidFinishDownloadingBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + NSURL *location) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ undefinedBlock(slf, session, task, location); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, id))objc_msgSend)(slf, swizzledSelector, session, task, location); + ((void(*)(id, SEL, id, id, id))objc_msgSend)( + slf, swizzledSelector, session, task, location + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } -+ (void)injectDownloadTaskDidWriteDataIntoDelegateClass:(Class)cls -{ ++ (void)injectDownloadTaskDidWriteDataIntoDelegateClass:(Class)cls { SEL selector = @selector(URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:); SEL swizzledSelector = [FLEXUtility swizzledSelectorForSelector:selector]; - Protocol *protocol = @protocol(NSURLSessionDownloadDelegate); - struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES); - - typedef void (^NSURLSessionDownloadTaskDidWriteDataBlock)(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); - - NSURLSessionDownloadTaskDidWriteDataBlock undefinedBlock = ^(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { - [[FLEXNetworkObserver sharedObserver] URLSession:session downloadTask:task didWriteData:bytesWritten totalBytesWritten:totalBytesWritten totalBytesExpectedToWrite:totalBytesExpectedToWrite delegate:slf]; + struct objc_method_description description = protocol_getMethodDescription( + @protocol(NSURLSessionDownloadDelegate), selector, NO, YES + ); + + typedef void (^DidWriteDataBlock)(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + int64_t bytesWritten, + int64_t totalBytesWritten, + int64_t totalBytesExpectedToWrite); + + DidWriteDataBlock undefinedBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + int64_t bytesWritten, + int64_t totalBytesWritten, + int64_t totalBytesExpectedToWrite) { + [FLEXNetworkObserver.sharedObserver URLSession:session + downloadTask:task didWriteData:bytesWritten + totalBytesWritten:totalBytesWritten + totalBytesExpectedToWrite:totalBytesExpectedToWrite + delegate:slf + ]; }; - NSURLSessionDownloadTaskDidWriteDataBlock implementationBlock = ^(id slf, NSURLSession *session, NSURLSessionDownloadTask *task, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { + DidWriteDataBlock implementationBlock = ^(id slf, + NSURLSession *session, + NSURLSessionDownloadTask *task, + int64_t bytesWritten, + int64_t totalBytesWritten, + int64_t totalBytesExpectedToWrite) { [self sniffWithoutDuplicationForObject:session selector:selector sniffingBlock:^{ - undefinedBlock(slf, session, task, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + undefinedBlock( + slf, session, task, bytesWritten, + totalBytesWritten, totalBytesExpectedToWrite + ); } originalImplementationBlock:^{ - ((void(*)(id, SEL, id, id, int64_t, int64_t, int64_t))objc_msgSend)(slf, swizzledSelector, session, task, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + ((void(*)(id, SEL, id, id, int64_t, int64_t, int64_t))objc_msgSend)( + slf, swizzledSelector, session, task, bytesWritten, + totalBytesWritten, totalBytesExpectedToWrite + ); }]; }; - [FLEXUtility replaceImplementationOfSelector:selector withSelector:swizzledSelector forClass:cls withMethodDescription:methodDescription implementationBlock:implementationBlock undefinedBlock:undefinedBlock]; + [FLEXUtility replaceImplementationOfSelector:selector + withSelector:swizzledSelector + forClass:cls + withMethodDescription:description + implementationBlock:implementationBlock + undefinedBlock:undefinedBlock + ]; } static char const * const kFLEXRequestIDKey = "kFLEXRequestIDKey"; -+ (NSString *)requestIDForConnectionOrTask:(id)connectionOrTask -{ ++ (NSString *)requestIDForConnectionOrTask:(id)connectionOrTask { NSString *requestID = objc_getAssociatedObject(connectionOrTask, kFLEXRequestIDKey); if (!requestID) { requestID = [self nextRequestID]; @@ -885,44 +1279,45 @@ + (NSString *)requestIDForConnectionOrTask:(id)connectionOrTask return requestID; } -+ (void)setRequestID:(NSString *)requestID forConnectionOrTask:(id)connectionOrTask -{ - objc_setAssociatedObject(connectionOrTask, kFLEXRequestIDKey, requestID, OBJC_ASSOCIATION_RETAIN_NONATOMIC); ++ (void)setRequestID:(NSString *)requestID forConnectionOrTask:(id)connectionOrTask { + objc_setAssociatedObject( + connectionOrTask, kFLEXRequestIDKey, requestID, OBJC_ASSOCIATION_RETAIN_NONATOMIC + ); } #pragma mark - Initialization -- (id)init -{ +- (id)init { self = [super init]; if (self) { self.requestStatesForRequestIDs = [NSMutableDictionary new]; - self.queue = dispatch_queue_create("com.flex.FLEXNetworkObserver", DISPATCH_QUEUE_SERIAL); + self.queue = dispatch_queue_create( + "com.flex.FLEXNetworkObserver", DISPATCH_QUEUE_SERIAL + ); } + return self; } #pragma mark - Private Methods -- (void)performBlock:(dispatch_block_t)block -{ +- (void)performBlock:(dispatch_block_t)block { if ([[self class] isEnabled]) { dispatch_async(_queue, block); } } -- (FLEXInternalRequestState *)requestStateForRequestID:(NSString *)requestID -{ +- (FLEXInternalRequestState *)requestStateForRequestID:(NSString *)requestID { FLEXInternalRequestState *requestState = self.requestStatesForRequestIDs[requestID]; if (!requestState) { requestState = [FLEXInternalRequestState new]; [self.requestStatesForRequestIDs setObject:requestState forKey:requestID]; } + return requestState; } -- (void)removeRequestStateForRequestID:(NSString *)requestID -{ +- (void)removeRequestStateForRequestID:(NSString *)requestID { [self.requestStatesForRequestIDs removeObjectForKey:requestID]; } @@ -931,80 +1326,101 @@ - (void)removeRequestStateForRequestID:(NSString *)requestID @implementation FLEXNetworkObserver (NSURLConnectionHelpers) -- (void)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response delegate:(id)delegate -{ +- (void)connection:(NSURLConnection *)connection + willSendRequest:(NSURLRequest *)request + redirectResponse:(NSURLResponse *)response + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:connection]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; requestState.request = request; - [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:response]; - NSString *mechanism = [NSString stringWithFormat:@"NSURLConnection (delegate: %@)", [delegate class]]; - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:mechanism forRequestID:requestID]; + + [FLEXNetworkRecorder.defaultRecorder + recordRequestWillBeSentWithRequestID:requestID + request:request + redirectResponse:response + ]; + + NSString *mechanism = [NSString stringWithFormat: + @"NSURLConnection (delegate: %@)", [delegate class] + ]; + [FLEXNetworkRecorder.defaultRecorder recordMechanism:mechanism forRequestID:requestID]; }]; } -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response delegate:(id)delegate -{ +- (void)connection:(NSURLConnection *)connection +didReceiveResponse:(NSURLResponse *)response + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:connection]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; + requestState.dataAccumulator = [NSMutableData new]; - NSMutableData *dataAccumulator = nil; - if (response.expectedContentLength < 0) { - dataAccumulator = [NSMutableData new]; - } else if (response.expectedContentLength < 52428800) { - dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength]; - } - requestState.dataAccumulator = dataAccumulator; - - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response]; + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:response + ]; }]; } -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data delegate:(id)delegate -{ +- (void)connection:(NSURLConnection *)connection + didReceiveData:(NSData *)data + delegate:(id)delegate { // Just to be safe since we're doing this async data = [data copy]; [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:connection]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; [requestState.dataAccumulator appendData:data]; - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length]; + + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:data.length + ]; }]; } -- (void)connectionDidFinishLoading:(NSURLConnection *)connection delegate:(id)delegate -{ +- (void)connectionDidFinishLoading:(NSURLConnection *)connection + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:connection]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:requestState.dataAccumulator]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFinishedWithRequestID:requestID + responseBody:requestState.dataAccumulator + ]; [self removeRequestStateForRequestID:requestID]; }]; } -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error delegate:(id)delegate -{ +- (void)connection:(NSURLConnection *)connection + didFailWithError:(NSError *)error + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:connection]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; - // Cancellations can occur prior to the willSendRequest:... NSURLConnection delegate call. - // These are pretty common and clutter up the logs. Only record the failure if the recorder already knows about the request through willSendRequest:... + // Cancellations can occur prior to the willSendRequest:... + // NSURLConnection delegate call. These are pretty common + // and clutter up the logs. Only record the failure if the + // recorder already knows about the request through willSendRequest:... if (requestState.request) { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:error]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFailedWithRequestID:requestID error:error + ]; } [self removeRequestStateForRequestID:requestID]; }]; } -- (void)connectionWillCancel:(NSURLConnection *)connection -{ +- (void)connectionWillCancel:(NSURLConnection *)connection { [self performBlock:^{ // Mimic the behavior of NSURLSession which is to create an error on cancellation. NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : @"cancelled" }; - NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:userInfo]; + NSError *error = [NSError errorWithDomain:NSURLErrorDomain + code:NSURLErrorCancelled userInfo:userInfo + ]; [self connection:connection didFailWithError:error delegate:nil]; }]; } @@ -1014,37 +1430,51 @@ - (void)connectionWillCancel:(NSURLConnection *)connection @implementation FLEXNetworkObserver (NSURLSessionTaskHelpers) -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:task]; - [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:request redirectResponse:response]; + [FLEXNetworkRecorder.defaultRecorder + recordRequestWillBeSentWithRequestID:requestID + request:request + redirectResponse:response + ]; }]; } -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:dataTask]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; - - NSMutableData *dataAccumulator = nil; - if (response.expectedContentLength < 0) { - dataAccumulator = [NSMutableData new]; - } else { - dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength]; - } - requestState.dataAccumulator = dataAccumulator; - - NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)", [delegate class]]; - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestID:requestID]; - - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:response]; + requestState.dataAccumulator = [NSMutableData new]; + + NSString *requestMechanism = [NSString stringWithFormat: + @"NSURLSessionDataTask (delegate: %@)", [delegate class] + ]; + [FLEXNetworkRecorder.defaultRecorder + recordMechanism:requestMechanism + forRequestID:requestID + ]; + + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:response + ]; }]; } -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask + delegate:(id)delegate { [self performBlock:^{ // By setting the request ID of the download task to match the data task, // it can pick up where the data task left off. @@ -1053,8 +1483,10 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)data }]; } -- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data + delegate:(id)delegate { // Just to be safe since we're doing this async data = [data copy]; [self performBlock:^{ @@ -1063,47 +1495,73 @@ - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)data [requestState.dataAccumulator appendData:data]; - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:data.length]; + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:data.length + ]; }]; } -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:task]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; if (error) { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFailedWithRequestID:requestID error:error]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFailedWithRequestID:requestID error:error + ]; } else { - [[FLEXNetworkRecorder defaultRecorder] recordLoadingFinishedWithRequestID:requestID responseBody:requestState.dataAccumulator]; + [FLEXNetworkRecorder.defaultRecorder + recordLoadingFinishedWithRequestID:requestID + responseBody:requestState.dataAccumulator + ]; } [self removeRequestStateForRequestID:requestID]; }]; } -- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite + delegate:(id)delegate { [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:downloadTask]; FLEXInternalRequestState *requestState = [self requestStateForRequestID:requestID]; if (!requestState.dataAccumulator) { - NSUInteger unsignedBytesExpectedToWrite = totalBytesExpectedToWrite > 0 ? (NSUInteger)totalBytesExpectedToWrite : 0; - requestState.dataAccumulator = [[NSMutableData alloc] initWithCapacity:unsignedBytesExpectedToWrite]; - [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestID:requestID response:downloadTask.response]; - - NSString *requestMechanism = [NSString stringWithFormat:@"NSURLSessionDownloadTask (delegate: %@)", [delegate class]]; - [[FLEXNetworkRecorder defaultRecorder] recordMechanism:requestMechanism forRequestID:requestID]; + requestState.dataAccumulator = [NSMutableData new]; + [FLEXNetworkRecorder.defaultRecorder + recordResponseReceivedWithRequestID:requestID + response:downloadTask.response + ]; + + NSString *requestMechanism = [NSString stringWithFormat: + @"NSURLSessionDownloadTask (delegate: %@)", [delegate class] + ]; + [FLEXNetworkRecorder.defaultRecorder + recordMechanism:requestMechanism + forRequestID:requestID + ]; } - [[FLEXNetworkRecorder defaultRecorder] recordDataReceivedWithRequestID:requestID dataLength:bytesWritten]; + [FLEXNetworkRecorder.defaultRecorder + recordDataReceivedWithRequestID:requestID + dataLength:bytesWritten + ]; }]; } -- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location data:(NSData *)data delegate:(id)delegate -{ +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location data:(NSData *)data + delegate:(id)delegate { data = [data copy]; [self performBlock:^{ NSString *requestID = [[self class] requestIDForConnectionOrTask:downloadTask]; @@ -1112,8 +1570,7 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionDownloadTask *)down }]; } -- (void)URLSessionTaskWillResume:(NSURLSessionTask *)task -{ +- (void)URLSessionTaskWillResume:(NSURLSessionTask *)task { // Since resume can be called multiple times on the same task, only treat the first resume as // the equivalent to connection:willSendRequest:... [self performBlock:^{ @@ -1122,7 +1579,11 @@ - (void)URLSessionTaskWillResume:(NSURLSessionTask *)task if (!requestState.request) { requestState.request = task.currentRequest; - [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestID:requestID request:task.currentRequest redirectResponse:nil]; + [FLEXNetworkRecorder.defaultRecorder + recordRequestWillBeSentWithRequestID:requestID + request:task.currentRequest + redirectResponse:nil + ]; } }]; } diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.h deleted file mode 100644 index 761ee063..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXArrayExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXArrayExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.m deleted file mode 100644 index 68433479..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// FLEXArrayExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXArrayExplorerViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXObjectExplorerFactory.h" - -@interface FLEXArrayExplorerViewController () - -@property (nonatomic, readonly) NSArray *array; - -@end - -@implementation FLEXArrayExplorerViewController - -- (NSArray *)array -{ - return [self.object isKindOfClass:[NSArray class]] ? self.object : nil; -} - - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Array Indices"; -} - -- (NSArray *)customSectionRowCookies -{ - // Use index numbers as the row cookies - NSMutableArray *cookies = [NSMutableArray arrayWithCapacity:self.array.count]; - for (NSUInteger i = 0; i < self.array.count; i++) { - [cookies addObject:@(i)]; - } - return cookies; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - return [rowCookie description]; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[self detailObjectForRowCookie:rowCookie]]; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - return [FLEXObjectExplorerFactory explorerViewControllerForObject:[self detailObjectForRowCookie:rowCookie]]; -} - -- (BOOL)shouldShowDescription -{ - return NO; -} - - -#pragma mark - Helpers - -- (id)detailObjectForRowCookie:(id)rowCookie -{ - NSUInteger index = [rowCookie unsignedIntegerValue]; - return self.array[index]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.h deleted file mode 100644 index 0728a782..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXBundleExplorerViewController.h -// FLEX -// -// Created by Tanner Bennett on 6/13/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXBundleExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.m deleted file mode 100644 index 76f46ff1..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// FLEXBundleExplorerViewController.m -// FLEX -// -// Created by Tanner Bennett on 6/13/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXBundleExplorerViewController.h" -#import "FLEXFileBrowserTableViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXBundleExplorerRow) { - FLEXBundleExplorerRowBundlePath = 1 -}; - -@interface FLEXBundleExplorerViewController () -@property (nonatomic, readonly) NSBundle *bundleToExplore; -@end - -@implementation FLEXBundleExplorerViewController - -- (NSBundle *)bundleToExplore -{ - return (id)self.object; -} - -- (NSArray *)shortcutPropertyNames -{ - return @[@"bundleIdentifier", @"principalClass", @"infoDictionary", - @"bundlePath", @"executablePath", @"loaded"]; -} - -- (NSArray *)customSectionRowCookies -{ - BOOL isDirectory = NO; - NSString *bundlePath = self.bundleToExplore.bundlePath; - if ([NSFileManager.defaultManager fileExistsAtPath:bundlePath isDirectory:&isDirectory] && isDirectory) { - return [@[@(FLEXBundleExplorerRowBundlePath)] arrayByAddingObjectsFromArray:[super customSectionRowCookies]]; - } - - return [super customSectionRowCookies]; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXBundleExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXBundleExplorerRowBundlePath: - return @"Explore bundle directory"; - } - } else { - return [super customSectionTitleForRowCookie:rowCookie]; - } -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSNumber class]]) { - return nil; - } else { - return [super customSectionSubtitleForRowCookie:rowCookie]; - } -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXBundleExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXBundleExplorerRowBundlePath: - return [[FLEXFileBrowserTableViewController alloc] initWithPath:self.bundleToExplore.bundlePath]; - } - } else { - return [super customSectionDrillInViewControllerForRowCookie:rowCookie]; - } -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.h deleted file mode 100644 index 9bb36ce6..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXClassExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 6/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXClassExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.m deleted file mode 100644 index 2dff9df6..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.m +++ /dev/null @@ -1,127 +0,0 @@ -// -// FLEXClassExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 6/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXClassExplorerViewController.h" -#import "FLEXMethodCallingViewController.h" -#import "FLEXInstancesTableViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXClassExplorerRow) { - FLEXClassExplorerRowNew, - FLEXClassExplorerRowAlloc, - FLEXClassExplorerRowLiveInstances -}; - -@interface FLEXClassExplorerViewController () - -@property (nonatomic, readonly) Class theClass; - -@end - -@implementation FLEXClassExplorerViewController - -- (Class)theClass -{ - Class theClass = Nil; - if (class_isMetaClass(object_getClass(self.object))) { - theClass = self.object; - } - return theClass; -} - -#pragma mark - Superclass Overrides - -- (NSArray *)possibleExplorerSections -{ - // Move class methods to between our custom section and the properties section since - // we are more interested in the class sections than in the instance level sections. - NSMutableArray *mutableSections = [[super possibleExplorerSections] mutableCopy]; - [mutableSections removeObject:@(FLEXObjectExplorerSectionClassMethods)]; - [mutableSections insertObject:@(FLEXObjectExplorerSectionClassMethods) atIndex:[mutableSections indexOfObject:@(FLEXObjectExplorerSectionProperties)]]; - return mutableSections; -} - -- (NSString *)customSectionTitle -{ - return @"Shortcuts"; -} - -- (NSArray *)customSectionRowCookies -{ - NSMutableArray *cookies = [NSMutableArray array]; - if ([self.theClass respondsToSelector:@selector(new)]) { - [cookies addObject:@(FLEXClassExplorerRowNew)]; - } - if ([self.theClass respondsToSelector:@selector(alloc)]) { - [cookies addObject:@(FLEXClassExplorerRowAlloc)]; - } - [cookies addObject:@(FLEXClassExplorerRowLiveInstances)]; - return cookies; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - NSString *title = nil; - FLEXClassExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXClassExplorerRowNew: - title = @"+ (id)new"; - break; - - case FLEXClassExplorerRowAlloc: - title = @"+ (id)alloc"; - break; - - case FLEXClassExplorerRowLiveInstances: - title = @"Live Instances"; - break; - } - return title; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return nil; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - FLEXClassExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXClassExplorerRowNew: - drillInViewController = [[FLEXMethodCallingViewController alloc] initWithTarget:self.theClass method:class_getClassMethod(self.theClass, @selector(new))]; - break; - - case FLEXClassExplorerRowAlloc: - drillInViewController = [[FLEXMethodCallingViewController alloc] initWithTarget:self.theClass method:class_getClassMethod(self.theClass, @selector(alloc))]; - break; - - case FLEXClassExplorerRowLiveInstances: - drillInViewController = [FLEXInstancesTableViewController instancesTableViewControllerForClassName:NSStringFromClass(self.theClass)]; - break; - } - return drillInViewController; -} - -- (BOOL)shouldShowDescription -{ - // Redundant with our title. - return NO; -} - -- (BOOL)canCallInstanceMethods -{ - return NO; -} - -- (BOOL)canHaveInstanceState -{ - return NO; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.h deleted file mode 100644 index 6b77daa4..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FLEXClassTreeViewController.h -// FLEX -// -// Created by Tanner Bennett on 7/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FLEXClassTreeViewController : UIPageViewController - -@end - -NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.m deleted file mode 100644 index 533fa188..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// FLEXClassTreeViewController.m -// FLEX -// -// Created by Tanner Bennett on 7/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXClassTreeViewController.h" - -@interface FLEXClassTreeViewController () - -@end - -@implementation FLEXClassTreeViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.h deleted file mode 100644 index 0352d63e..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXColorExplorerViewController.h -// Flipboard -// -// Created by Tanner on 10/18/18. -// Copyright © 2018 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXColorExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.m deleted file mode 100644 index 758930e5..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// FLEXColorExplorerViewController.m -// Flipboard -// -// Created by Tanner on 10/18/18. -// Copyright © 2018 Flipboard. All rights reserved. -// - -#import "FLEXColorExplorerViewController.h" - -@interface FLEXColorExplorerViewController () -@property (nonatomic, readonly) UIColor *colorObject; -@end - -@implementation FLEXColorExplorerViewController - -- (UIColor *)colorObject -{ - return (UIColor *)self.object; -} - -- (NSString *)displayedObjectDescription -{ - CGFloat h, s, l; - CGFloat r, g, b, a; - [self.colorObject getRed:&r green:&g blue:&b alpha:&a]; - [self.colorObject getHue:&h saturation:&s brightness:&l alpha:nil]; - - return [NSString stringWithFormat:@"HSL: (%.3f, %.3f, %.3f)\nRGB: (%.3f, %.3f, %.3f)\nAlpha: %.3f", h, s, l, r, g, b, a]; -} - -- (NSString *)customSectionTitle -{ - return @"Color"; -} - -- (NSArray *)customSectionRowCookies -{ - return @[@0]; -} - -- (UIView *)customViewForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSNumber class]]) { - CGFloat width = UIScreen.mainScreen.bounds.size.width; - switch ([rowCookie integerValue]) { - case 0: { - UIView *square = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)]; - square.backgroundColor = (UIColor *)self.object; - return square; - } - } - } - - return [super customViewForRowCookie:rowCookie]; -} - -- (BOOL)customSectionCanDrillIntoRowWithCookie:(id)rowCookie -{ - if ([@0 isEqual:rowCookie]) { - return NO; - } - - return [super customSectionCanDrillIntoRowWithCookie:rowCookie]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.h deleted file mode 100644 index 8ed698b7..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXDefaultsExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXDefaultsExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.m deleted file mode 100644 index aaf15b2f..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// FLEXDefaultsExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/23/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXDefaultsExplorerViewController.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXDefaultEditorViewController.h" - -@interface FLEXDefaultsExplorerViewController () - -@property (nonatomic, readonly) NSUserDefaults *defaults; -@property (nonatomic) BOOL onlyShowKeysForAppPrefs; -@property (nonatomic) NSArray *keyWhitelist; -@property (nonatomic) NSArray *keys; - -@end - -@implementation FLEXDefaultsExplorerViewController -@synthesize keys = _keys; - -- (NSUserDefaults *)defaults -{ - return [self.object isKindOfClass:[NSUserDefaults class]] ? self.object : nil; -} - -- (NSArray *)keys -{ - if (!_keys) { - self.keys = self.defaults.dictionaryRepresentation.allKeys; - } - - return _keys; -} - -- (void)setKeys:(NSArray *)keys { - _keys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; -} - -- (void)setOnlyShowKeysForAppPrefs:(BOOL)onlyShowKeysForAppPrefs -{ - if (_onlyShowKeysForAppPrefs == onlyShowKeysForAppPrefs) return; - _onlyShowKeysForAppPrefs = onlyShowKeysForAppPrefs; - - if (onlyShowKeysForAppPrefs) { - // Read keys from preferences file - NSString *bundle = NSBundle.mainBundle.bundleIdentifier; - NSString *prefsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences"]; - NSString *filePath = [NSString stringWithFormat:@"%@/%@.plist", prefsPath, bundle]; - self.keys = [NSDictionary dictionaryWithContentsOfFile:filePath].allKeys; - } -} - -#pragma mark - Superclass Overrides - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Hide keys not present in the preferences file. - // Useful because standardUserDefaults includes a lot of keys that are - // included by default in every app, and probably aren't what you wan to see. - self.onlyShowKeysForAppPrefs = self.defaults == [NSUserDefaults standardUserDefaults]; -} - -- (NSString *)customSectionTitle -{ - return @"Defaults"; -} - -- (NSArray *)customSectionRowCookies -{ - return self.keys; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - return rowCookie; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[self.defaults objectForKey:rowCookie]]; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - NSString *key = rowCookie; - id drillInObject = [self.defaults objectForKey:key]; - if ([FLEXDefaultEditorViewController canEditDefaultWithValue:drillInObject]) { - drillInViewController = [[FLEXDefaultEditorViewController alloc] initWithDefaults:self.defaults key:key]; - } else { - drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:drillInObject]; - } - return drillInViewController; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.h deleted file mode 100644 index 77b9c80c..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXDictionaryExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXDictionaryExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.m deleted file mode 100644 index d34fad32..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// FLEXDictionaryExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXDictionaryExplorerViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXObjectExplorerFactory.h" - -@interface FLEXDictionaryExplorerViewController () - -@property (nonatomic, readonly) NSDictionary *dictionary; - -@end - -@implementation FLEXDictionaryExplorerViewController - -- (NSDictionary *)dictionary -{ - return [self.object isKindOfClass:[NSDictionary class]] ? self.object : nil; -} - - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Dictionary Objects"; -} - -- (NSArray *)customSectionRowCookies -{ - return self.dictionary.allKeys; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:rowCookie]; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:self.dictionary[rowCookie]]; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - return [FLEXObjectExplorerFactory explorerViewControllerForObject:self.dictionary[rowCookie]]; -} - -- (BOOL)shouldShowDescription -{ - return NO; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.h deleted file mode 100644 index ea8cf5e3..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXImageExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 6/12/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXImageExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.m deleted file mode 100644 index 83e94512..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// FLEXImageExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 6/12/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXImageExplorerViewController.h" -#import "FLEXImagePreviewViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXImageExplorerRow) { - FLEXImageExplorerRowImage -}; - -@interface FLEXImageExplorerViewController () - -@property (nonatomic, readonly) UIImage *image; - -@end - -@implementation FLEXImageExplorerViewController - -- (UIImage *)image -{ - return [self.object isKindOfClass:[UIImage class]] ? self.object : nil; -} - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Shortcuts"; -} - -- (NSArray *)customSectionRowCookies -{ - return @[@(FLEXImageExplorerRowImage)]; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - NSString *title = nil; - if ([rowCookie isEqual:@(FLEXImageExplorerRowImage)]) { - title = @"Show Image"; - } - return title; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return nil; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - if ([rowCookie isEqual:@(FLEXImageExplorerRowImage)]) { - drillInViewController = [[FLEXImagePreviewViewController alloc] initWithImage:self.image]; - } - return drillInViewController; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.h deleted file mode 100644 index 890628d5..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXLayerExplorerViewController.h -// FLEX -// -// Created by Ryan Olson on 12/14/14. -// Copyright (c) 2014 f. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXLayerExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.m deleted file mode 100644 index 7fb7c309..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// FLEXLayerExplorerViewController.m -// FLEX -// -// Created by Ryan Olson on 12/14/14. -// Copyright (c) 2014 f. All rights reserved. -// - -#import "FLEXLayerExplorerViewController.h" -#import "FLEXImagePreviewViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXLayerExplorerRow) { - FLEXLayerExplorerRowPreview -}; - -@interface FLEXLayerExplorerViewController () - -@property (nonatomic, readonly) CALayer *layerToExplore; - -@end - -@implementation FLEXLayerExplorerViewController - -- (CALayer *)layerToExplore -{ - return [self.object isKindOfClass:[CALayer class]] ? self.object : nil; -} - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Shortcuts"; -} - -- (NSArray *)customSectionRowCookies -{ - return @[@(FLEXLayerExplorerRowPreview)]; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - NSString *title = nil; - - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXLayerExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXLayerExplorerRowPreview: - title = @"Preview Image"; - break; - } - } - - return title; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXLayerExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXLayerExplorerRowPreview: - drillInViewController = [[self class] imagePreviewViewControllerForLayer:self.layerToExplore]; - break; - } - } - - return drillInViewController; -} - -+ (UIViewController *)imagePreviewViewControllerForLayer:(CALayer *)layer -{ - UIViewController *imagePreviewViewController = nil; - if (!CGRectIsEmpty(layer.bounds)) { - UIGraphicsBeginImageContextWithOptions(layer.bounds.size, NO, 0.0); - CGContextRef imageContext = UIGraphicsGetCurrentContext(); - [layer renderInContext:imageContext]; - UIImage *previewImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - imagePreviewViewController = [[FLEXImagePreviewViewController alloc] initWithImage:previewImage]; - } - return imagePreviewViewController; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.h deleted file mode 100644 index ad2baef1..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// FLEXObjectExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXObjectExplorerSection) { - FLEXObjectExplorerSectionDescription, - FLEXObjectExplorerSectionCustom, - FLEXObjectExplorerSectionProperties, - FLEXObjectExplorerSectionIvars, - FLEXObjectExplorerSectionMethods, - FLEXObjectExplorerSectionClassMethods, - FLEXObjectExplorerSectionSuperclasses, - FLEXObjectExplorerSectionReferencingInstances -}; - -@interface FLEXObjectExplorerViewController : FLEXTableViewController - -@property (nonatomic) id object; - -// Subclasses can override the methods below to provide data in a custom section. -// The subclass should provide an array of "row cookies" to allow retrieval of individual row data later on. -// The objects in the rowCookies array will be used to call the row title, subtitle, etc methods to construct the rows. -// The cookies approach is used here because we may filter the visible rows based on the search text entered by the user. -- (NSString *)customSectionTitle; -- (NSArray *)customSectionRowCookies; -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie; -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie; -- (BOOL)customSectionCanDrillIntoRowWithCookie:(id)rowCookie; -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie; -- (UIView *)customViewForRowCookie:(id)rowCookie; - -// More subclass configuration hooks. - -/// Whether to allow showing/drilling in to current values for ivars and properties. Default is YES. -- (BOOL)canHaveInstanceState; - -/// Whether to allow drilling in to method calling interfaces for instance methods. Default is YES. -- (BOOL)canCallInstanceMethods; - -/// If the custom section data makes the description redundant, subclasses can choose to hide it. Default is YES. -- (BOOL)shouldShowDescription; - -/// Subclasses can reorder/change which sections can display directly by overriding this method. -- (NSArray *)possibleExplorerSections; - -/// Subclasses can override to provide a more useful description -- (NSString *)displayedObjectDescription; - -@end - -@interface FLEXObjectExplorerViewController (Shortcuts) - -/// @brief Names of properties to supply as shortcuts. If this array is empty, no shortcuts are displayed. -/// -/// @discussion Populating this array in a subclass will make FLEXObjectExplorerViewController show a custom -/// section with row titles like "@property NSString *foo" and subtitles with their values. -/// customSectionRowCookies will return this array. Every row in the section is drillable by default. -/// -/// For an example on how to use the default behavior provided or to override it, -/// see FLEXViewExplorerViewController -- (NSArray *)shortcutPropertyNames; - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.m deleted file mode 100644 index dc134bdb..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.m +++ /dev/null @@ -1,1073 +0,0 @@ -// -// FLEXObjectExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-03. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" -#import "FLEXUtility.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXMultilineTableViewCell.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXPropertyEditorViewController.h" -#import "FLEXIvarEditorViewController.h" -#import "FLEXMethodCallingViewController.h" -#import "FLEXInstancesTableViewController.h" -#import "FLEXTableView.h" -#import "FLEXScopeCarousel.h" -#import - -typedef NS_ENUM(NSUInteger, FLEXMetadataKind) { - FLEXMetadataKindProperties, - FLEXMetadataKindIvars, - FLEXMetadataKindMethods, - FLEXMetadataKindClassMethods -}; - -// Convenience boxes to keep runtime properties, ivars, and methods in foundation collections. -@interface FLEXPropertyBox : NSObject -@property (nonatomic) objc_property_t property; -@end -@implementation FLEXPropertyBox -@end - -@interface FLEXIvarBox : NSObject -@property (nonatomic) Ivar ivar; -@end -@implementation FLEXIvarBox -@end - -@interface FLEXMethodBox : NSObject -@property (nonatomic) Method method; -@end -@implementation FLEXMethodBox -@end - -@interface FLEXObjectExplorerViewController () - -@property (nonatomic) NSMutableArray *> *properties; -@property (nonatomic) NSArray *filteredProperties; - -@property (nonatomic) NSMutableArray *> *ivars; -@property (nonatomic) NSArray *filteredIvars; - -@property (nonatomic) NSMutableArray *> *methods; -@property (nonatomic) NSArray *filteredMethods; - -@property (nonatomic) NSMutableArray *> *classMethods; -@property (nonatomic) NSArray *filteredClassMethods; - -@property (nonatomic, copy) NSArray *classHierarchy; -@property (nonatomic, copy) NSArray *filteredSuperclasses; - -@property (nonatomic) NSArray *cachedCustomSectionRowCookies; -@property (nonatomic) NSIndexSet *customSectionVisibleIndexes; - -@property (nonatomic) NSString *filterText; -/// An index into the `classHierarchy` array -@property (nonatomic) NSInteger classScope; - -@end - -@implementation FLEXObjectExplorerViewController - -+ (void)initialize -{ - if (self == [FLEXObjectExplorerViewController class]) { - // Initialize custom menu items for entire app - UIMenuItem *copyObjectAddress = [[UIMenuItem alloc] initWithTitle:@"Copy Address" action:@selector(copyObjectAddress:)]; - UIMenuController.sharedMenuController.menuItems = @[copyObjectAddress]; - [UIMenuController.sharedMenuController update]; - } -} - -- (void)loadView -{ - self.tableView = [[FLEXTableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.showsSearchBar = YES; - self.searchBarDebounceInterval = kFLEXDebounceInstant; - self.showsCarousel = YES; - [self refreshScopeTitles]; - - self.refreshControl = [UIRefreshControl new]; - [self.refreshControl addTarget:self action:@selector(refreshControlDidRefresh:) forControlEvents:UIControlEventValueChanged]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // Reload the entire table view rather than just the visible cells because the filtered rows - // may have changed (i.e. a change in the description row that causes it to get filtered out). - [self updateTableData]; -} - -- (void)refreshControlDidRefresh:(id)sender -{ - [self updateTableData]; - [self.refreshControl endRefreshing]; -} - -- (BOOL)shouldShowDescription -{ - // Not if we have filter text that doesn't match the desctiption. - if (self.filterText.length) { - NSString *description = [self displayedObjectDescription]; - return [description rangeOfString:self.filterText options:NSCaseInsensitiveSearch].length > 0; - } - - return YES; -} - -- (NSString *)displayedObjectDescription -{ - NSString *desc = [FLEXUtility safeDescriptionForObject:self.object]; - - if (!desc.length) { - NSString *address = [FLEXUtility addressOfObject:self.object]; - desc = [NSString stringWithFormat:@"Object at %@ returned empty description", address]; - } - - return desc; -} - - -#pragma mark - Search - -- (void)refreshScopeTitles -{ - [self updateSuperclasses]; - - self.carousel.items = [FLEXUtility map:self.classHierarchy block:^id(Class cls, NSUInteger idx) { - return NSStringFromClass(cls); - }]; - - [self updateTableData]; -} - -- (void)updateSearchResults:(NSString *)newText; -{ - self.filterText = newText; - [self updateDisplayedData]; -} - -- (NSArray *)metadata:(FLEXMetadataKind)metadataKind forClassAtIndex:(NSUInteger)idx -{ - switch (metadataKind) { - case FLEXMetadataKindProperties: - return self.properties[idx]; - case FLEXMetadataKindIvars: - return self.ivars[idx]; - case FLEXMetadataKindMethods: - return self.methods[idx]; - case FLEXMetadataKindClassMethods: - return self.classMethods[idx]; - } -} - -- (NSInteger)totalCountOfMetadata:(FLEXMetadataKind)metadataKind forClassAtIndex:(NSUInteger)idx -{ - return [self metadata:metadataKind forClassAtIndex:idx].count; -} - -#pragma mark - Setter overrides - -- (void)setObject:(id)object -{ - _object = object; - // Use [object class] here rather than object_getClass because we don't want to show the KVO prefix for observed objects. - self.title = [[object class] description]; - - // Only refresh if the view has appeared - // TODO: make .object readonly so we don't have to deal with this... - if (self.showsCarousel) { - [self refreshScopeTitles]; - } -} - -#pragma mark - Reloading - -- (void)updateTableData -{ - [self updateCustomData]; - [self updateMetadata]; - [self updateDisplayedData]; -} - -- (void)updateDisplayedData -{ - [self updateFilteredCustomData]; - [self updateFilteredProperties]; - [self updateFilteredIvars]; - [self updateFilteredMethods]; - [self updateFilteredClassMethods]; - [self updateFilteredSuperclasses]; - - if (self.isViewLoaded) { - [self.tableView reloadData]; - } -} - -- (void)updateMetadata -{ - self.properties = [NSMutableArray new]; - self.ivars = [NSMutableArray new]; - self.methods = [NSMutableArray new]; - self.classMethods = [NSMutableArray new]; - - for (Class cls in self.classHierarchy) { - [self.properties addObject:[[self class] propertiesForClass:cls]]; - [self.ivars addObject:[[self class] ivarsForClass:cls]]; - [self.methods addObject:[[self class] methodsForClass:cls]]; - [self.classMethods addObject:[[self class] methodsForClass:object_getClass(cls)]]; - } -} - - -#pragma mark - Properties - -+ (NSArray *)propertiesForClass:(Class)class -{ - if (!class) { - return @[]; - } - - NSMutableArray *boxedProperties = [NSMutableArray array]; - unsigned int propertyCount = 0; - objc_property_t *propertyList = class_copyPropertyList(class, &propertyCount); - if (propertyList) { - for (unsigned int i = 0; i < propertyCount; i++) { - FLEXPropertyBox *propertyBox = [FLEXPropertyBox new]; - propertyBox.property = propertyList[i]; - [boxedProperties addObject:propertyBox]; - } - free(propertyList); - } - return boxedProperties; -} - -- (void)updateFilteredProperties -{ - NSArray *candidateProperties = [self metadata:FLEXMetadataKindProperties forClassAtIndex:self.selectedScope]; - - NSArray *unsortedFilteredProperties = nil; - if (self.filterText.length > 0) { - NSMutableArray *mutableUnsortedFilteredProperties = [NSMutableArray array]; - for (FLEXPropertyBox *propertyBox in candidateProperties) { - NSString *prettyName = [FLEXRuntimeUtility prettyNameForProperty:propertyBox.property]; - if ([prettyName rangeOfString:self.filterText options:NSCaseInsensitiveSearch].location != NSNotFound) { - [mutableUnsortedFilteredProperties addObject:propertyBox]; - } - } - unsortedFilteredProperties = mutableUnsortedFilteredProperties; - } else { - unsortedFilteredProperties = candidateProperties; - } - - self.filteredProperties = [unsortedFilteredProperties sortedArrayUsingComparator:^NSComparisonResult(FLEXPropertyBox *propertyBox1, FLEXPropertyBox *propertyBox2) { - NSString *name1 = [NSString stringWithUTF8String:property_getName(propertyBox1.property)]; - NSString *name2 = [NSString stringWithUTF8String:property_getName(propertyBox2.property)]; - return [name1 caseInsensitiveCompare:name2]; - }]; -} - -- (NSString *)titleForPropertyAtIndex:(NSInteger)index -{ - FLEXPropertyBox *propertyBox = self.filteredProperties[index]; - return [FLEXRuntimeUtility prettyNameForProperty:propertyBox.property]; -} - -- (id)valueForPropertyAtIndex:(NSInteger)index -{ - id value = nil; - if ([self canHaveInstanceState]) { - FLEXPropertyBox *propertyBox = self.filteredProperties[index]; - NSString *typeString = [FLEXRuntimeUtility typeEncodingForProperty:propertyBox.property]; - const FLEXTypeEncoding *encoding = [typeString cStringUsingEncoding:NSUTF8StringEncoding]; - value = [FLEXRuntimeUtility valueForProperty:propertyBox.property onObject:self.object]; - value = [FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:value type:encoding]; - } - return value; -} - - -#pragma mark - Ivars - -+ (NSArray *)ivarsForClass:(Class)class -{ - if (!class) { - return @[]; - } - NSMutableArray *boxedIvars = [NSMutableArray array]; - unsigned int ivarCount = 0; - Ivar *ivarList = class_copyIvarList(class, &ivarCount); - if (ivarList) { - for (unsigned int i = 0; i < ivarCount; i++) { - FLEXIvarBox *ivarBox = [FLEXIvarBox new]; - ivarBox.ivar = ivarList[i]; - [boxedIvars addObject:ivarBox]; - } - free(ivarList); - } - return boxedIvars; -} - -- (void)updateFilteredIvars -{ - NSArray *candidateIvars = [self metadata:FLEXMetadataKindIvars forClassAtIndex:self.selectedScope]; - - NSArray *unsortedFilteredIvars = nil; - if (self.filterText.length > 0) { - NSMutableArray *mutableUnsortedFilteredIvars = [NSMutableArray array]; - for (FLEXIvarBox *ivarBox in candidateIvars) { - NSString *prettyName = [FLEXRuntimeUtility prettyNameForIvar:ivarBox.ivar]; - if ([prettyName rangeOfString:self.filterText options:NSCaseInsensitiveSearch].location != NSNotFound) { - [mutableUnsortedFilteredIvars addObject:ivarBox]; - } - } - unsortedFilteredIvars = mutableUnsortedFilteredIvars; - } else { - unsortedFilteredIvars = candidateIvars; - } - - self.filteredIvars = [unsortedFilteredIvars sortedArrayUsingComparator:^NSComparisonResult(FLEXIvarBox *ivarBox1, FLEXIvarBox *ivarBox2) { - NSString *name1 = [NSString stringWithUTF8String:ivar_getName(ivarBox1.ivar)]; - NSString *name2 = [NSString stringWithUTF8String:ivar_getName(ivarBox2.ivar)]; - return [name1 caseInsensitiveCompare:name2]; - }]; -} - -- (NSString *)titleForIvarAtIndex:(NSInteger)index -{ - FLEXIvarBox *ivarBox = self.filteredIvars[index]; - return [FLEXRuntimeUtility prettyNameForIvar:ivarBox.ivar]; -} - -- (id)valueForIvarAtIndex:(NSInteger)index -{ - id value = nil; - if ([self canHaveInstanceState]) { - FLEXIvarBox *ivarBox = self.filteredIvars[index]; - const FLEXTypeEncoding *encoding = ivar_getTypeEncoding(ivarBox.ivar); - value = [FLEXRuntimeUtility valueForIvar:ivarBox.ivar onObject:self.object]; - value = [FLEXRuntimeUtility potentiallyUnwrapBoxedPointer:value type:encoding]; - } - return value; -} - - -#pragma mark - Methods - -- (void)updateFilteredMethods -{ - NSArray *candidateMethods = [self metadata:FLEXMetadataKindMethods forClassAtIndex:self.selectedScope]; - self.filteredMethods = [self filteredMethodsFromMethods:candidateMethods areClassMethods:NO]; -} - -- (void)updateFilteredClassMethods -{ - NSArray *candidateMethods = [self metadata:FLEXMetadataKindClassMethods forClassAtIndex:self.selectedScope]; - self.filteredClassMethods = [self filteredMethodsFromMethods:candidateMethods areClassMethods:YES]; -} - -+ (NSArray *)methodsForClass:(Class)class -{ - if (!class) { - return @[]; - } - - NSMutableArray *boxedMethods = [NSMutableArray array]; - unsigned int methodCount = 0; - Method *methodList = class_copyMethodList(class, &methodCount); - if (methodList) { - for (unsigned int i = 0; i < methodCount; i++) { - FLEXMethodBox *methodBox = [FLEXMethodBox new]; - methodBox.method = methodList[i]; - [boxedMethods addObject:methodBox]; - } - free(methodList); - } - return boxedMethods; -} - -- (NSArray *)filteredMethodsFromMethods:(NSArray *)methods areClassMethods:(BOOL)areClassMethods -{ - NSArray *candidateMethods = methods; - NSArray *unsortedFilteredMethods = nil; - if (self.filterText.length > 0) { - NSMutableArray *mutableUnsortedFilteredMethods = [NSMutableArray array]; - for (FLEXMethodBox *methodBox in candidateMethods) { - NSString *prettyName = [FLEXRuntimeUtility prettyNameForMethod:methodBox.method isClassMethod:areClassMethods]; - if ([prettyName rangeOfString:self.filterText options:NSCaseInsensitiveSearch].location != NSNotFound) { - [mutableUnsortedFilteredMethods addObject:methodBox]; - } - } - unsortedFilteredMethods = mutableUnsortedFilteredMethods; - } else { - unsortedFilteredMethods = candidateMethods; - } - - NSArray *sortedFilteredMethods = [unsortedFilteredMethods sortedArrayUsingComparator:^NSComparisonResult(FLEXMethodBox *methodBox1, FLEXMethodBox *methodBox2) { - NSString *name1 = NSStringFromSelector(method_getName(methodBox1.method)); - NSString *name2 = NSStringFromSelector(method_getName(methodBox2.method)); - return [name1 caseInsensitiveCompare:name2]; - }]; - - return sortedFilteredMethods; -} - -- (NSString *)titleForMethodAtIndex:(NSInteger)index -{ - FLEXMethodBox *methodBox = self.filteredMethods[index]; - return [FLEXRuntimeUtility prettyNameForMethod:methodBox.method isClassMethod:NO]; -} - -- (NSString *)titleForClassMethodAtIndex:(NSInteger)index -{ - FLEXMethodBox *classMethodBox = self.filteredClassMethods[index]; - return [FLEXRuntimeUtility prettyNameForMethod:classMethodBox.method isClassMethod:YES]; -} - -- (objc_property_t)viewPropertyForName:(NSString *)propertyName -{ - return class_getProperty([self.object class], propertyName.UTF8String); -} - - -#pragma mark - Superclasses - -- (void)updateSuperclasses -{ - self.classHierarchy = [FLEXRuntimeUtility classHierarchyOfObject:self.object]; -} - -- (void)updateFilteredSuperclasses -{ - if (self.filterText.length > 0) { - NSMutableArray *filteredSuperclasses = [NSMutableArray array]; - for (Class superclass in self.classHierarchy) { - if ([NSStringFromClass(superclass) localizedCaseInsensitiveContainsString:self.filterText]) { - [filteredSuperclasses addObject:superclass]; - } - } - self.filteredSuperclasses = filteredSuperclasses; - } else { - self.filteredSuperclasses = self.classHierarchy; - } -} - - -#pragma mark - Table View Data Helpers - -- (NSArray *)possibleExplorerSections -{ - static NSArray *possibleSections = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - possibleSections = @[@(FLEXObjectExplorerSectionDescription), - @(FLEXObjectExplorerSectionCustom), - @(FLEXObjectExplorerSectionProperties), - @(FLEXObjectExplorerSectionIvars), - @(FLEXObjectExplorerSectionMethods), - @(FLEXObjectExplorerSectionClassMethods), - @(FLEXObjectExplorerSectionSuperclasses), - @(FLEXObjectExplorerSectionReferencingInstances)]; - }); - return possibleSections; -} - -- (NSArray *)visibleExplorerSections -{ - NSMutableArray *visibleSections = [NSMutableArray array]; - - for (NSNumber *possibleSection in [self possibleExplorerSections]) { - FLEXObjectExplorerSection explorerSection = [possibleSection unsignedIntegerValue]; - if ([self numberOfRowsForExplorerSection:explorerSection] > 0) { - [visibleSections addObject:possibleSection]; - } - } - - return visibleSections; -} - -- (NSString *)sectionTitleWithBaseName:(NSString *)baseName totalCount:(NSUInteger)totalCount filteredCount:(NSUInteger)filteredCount -{ - NSString *sectionTitle = nil; - if (totalCount == filteredCount) { - sectionTitle = [baseName stringByAppendingFormat:@" (%lu)", (unsigned long)totalCount]; - } else { - sectionTitle = [baseName stringByAppendingFormat:@" (%lu of %lu)", (unsigned long)filteredCount, (unsigned long)totalCount]; - } - return sectionTitle; -} - -- (FLEXObjectExplorerSection)explorerSectionAtIndex:(NSInteger)sectionIndex -{ - return [[[self visibleExplorerSections] objectAtIndex:sectionIndex] unsignedIntegerValue]; -} - -- (NSInteger)numberOfRowsForExplorerSection:(FLEXObjectExplorerSection)section -{ - NSInteger numberOfRows = 0; - switch (section) { - case FLEXObjectExplorerSectionDescription: - numberOfRows = [self shouldShowDescription] ? 1 : 0; - break; - - case FLEXObjectExplorerSectionCustom: - numberOfRows = self.customSectionVisibleIndexes.count; - break; - - case FLEXObjectExplorerSectionProperties: - numberOfRows = self.filteredProperties.count; - break; - - case FLEXObjectExplorerSectionIvars: - numberOfRows = self.filteredIvars.count; - break; - - case FLEXObjectExplorerSectionMethods: - numberOfRows = self.filteredMethods.count; - break; - - case FLEXObjectExplorerSectionClassMethods: - numberOfRows = self.filteredClassMethods.count; - break; - - case FLEXObjectExplorerSectionSuperclasses: - numberOfRows = self.filteredSuperclasses.count; - break; - - case FLEXObjectExplorerSectionReferencingInstances: - // Hide this section if there is fliter text since there's nothing searchable (only 1 row, always the same). - numberOfRows = self.filterText.length == 0 ? 1 : 0; - break; - } - return numberOfRows; -} - -- (NSString *)titleForRow:(NSInteger)row inExplorerSection:(FLEXObjectExplorerSection)section -{ - NSString *title = nil; - switch (section) { - case FLEXObjectExplorerSectionDescription: - title = [self displayedObjectDescription]; - break; - - case FLEXObjectExplorerSectionCustom: - title = [self customSectionTitleForRowCookie:[self customSectionRowCookieForVisibleRow:row]]; - break; - - case FLEXObjectExplorerSectionProperties: - title = [self titleForPropertyAtIndex:row]; - break; - - case FLEXObjectExplorerSectionIvars: - title = [self titleForIvarAtIndex:row]; - break; - - case FLEXObjectExplorerSectionMethods: - title = [self titleForMethodAtIndex:row]; - break; - - case FLEXObjectExplorerSectionClassMethods: - title = [self titleForClassMethodAtIndex:row]; - break; - - case FLEXObjectExplorerSectionSuperclasses: - title = NSStringFromClass(self.filteredSuperclasses[row]); - break; - - case FLEXObjectExplorerSectionReferencingInstances: - title = @"Other objects with ivars referencing this object"; - break; - } - return title; -} - -- (NSString *)subtitleForRow:(NSInteger)row inExplorerSection:(FLEXObjectExplorerSection)section -{ - NSString *subtitle = nil; - switch (section) { - case FLEXObjectExplorerSectionDescription: - break; - - case FLEXObjectExplorerSectionCustom: - subtitle = [self customSectionSubtitleForRowCookie:[self customSectionRowCookieForVisibleRow:row]]; - break; - - case FLEXObjectExplorerSectionProperties: - subtitle = [self canHaveInstanceState] ? [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[self valueForPropertyAtIndex:row]] : nil; - break; - - case FLEXObjectExplorerSectionIvars: - subtitle = [self canHaveInstanceState] ? [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[self valueForIvarAtIndex:row]] : nil; - break; - - case FLEXObjectExplorerSectionMethods: - break; - - case FLEXObjectExplorerSectionClassMethods: - break; - - case FLEXObjectExplorerSectionSuperclasses: - break; - - case FLEXObjectExplorerSectionReferencingInstances: - break; - } - return subtitle; -} - -- (BOOL)canDrillInToRow:(NSInteger)row inExplorerSection:(FLEXObjectExplorerSection)section -{ - BOOL canDrillIn = NO; - switch (section) { - case FLEXObjectExplorerSectionDescription: - break; - - case FLEXObjectExplorerSectionCustom: - canDrillIn = [self customSectionCanDrillIntoRowWithCookie:[self customSectionRowCookieForVisibleRow:row]]; - break; - - case FLEXObjectExplorerSectionProperties: { - if ([self canHaveInstanceState]) { - FLEXPropertyBox *propertyBox = self.filteredProperties[row]; - objc_property_t property = propertyBox.property; - id currentValue = [self valueForPropertyAtIndex:row]; - BOOL canEdit = [FLEXPropertyEditorViewController canEditProperty:property onObject:self.object currentValue:currentValue]; - BOOL canExplore = currentValue != nil; - canDrillIn = canEdit || canExplore; - } - } break; - - case FLEXObjectExplorerSectionIvars: { - if ([self canHaveInstanceState]) { - FLEXIvarBox *ivarBox = self.filteredIvars[row]; - Ivar ivar = ivarBox.ivar; - id currentValue = [self valueForIvarAtIndex:row]; - BOOL canEdit = [FLEXIvarEditorViewController canEditIvar:ivar currentValue:currentValue]; - BOOL canExplore = currentValue != nil; - canDrillIn = canEdit || canExplore; - } - } break; - - case FLEXObjectExplorerSectionMethods: - canDrillIn = [self canCallInstanceMethods]; - break; - - case FLEXObjectExplorerSectionClassMethods: - canDrillIn = YES; - break; - - case FLEXObjectExplorerSectionSuperclasses: - canDrillIn = YES; - break; - - case FLEXObjectExplorerSectionReferencingInstances: - canDrillIn = YES; - break; - } - return canDrillIn; -} - -- (BOOL)sectionHasActions:(NSInteger)section -{ - return [self explorerSectionAtIndex:section] == FLEXObjectExplorerSectionDescription; -} - -- (NSString *)titleForExplorerSection:(FLEXObjectExplorerSection)section -{ - NSString *title = nil; - switch (section) { - case FLEXObjectExplorerSectionDescription: { - title = @"Description"; - } break; - - case FLEXObjectExplorerSectionCustom: { - title = [self customSectionTitle]; - } break; - - case FLEXObjectExplorerSectionProperties: { - NSUInteger totalCount = [self totalCountOfMetadata:FLEXMetadataKindProperties forClassAtIndex:self.selectedScope]; - title = [self sectionTitleWithBaseName:@"Properties" totalCount:totalCount filteredCount:self.filteredProperties.count]; - } break; - - case FLEXObjectExplorerSectionIvars: { - NSUInteger totalCount = [self totalCountOfMetadata:FLEXMetadataKindIvars forClassAtIndex:self.selectedScope]; - title = [self sectionTitleWithBaseName:@"Ivars" totalCount:totalCount filteredCount:self.filteredIvars.count]; - } break; - - case FLEXObjectExplorerSectionMethods: { - NSUInteger totalCount = [self totalCountOfMetadata:FLEXMetadataKindMethods forClassAtIndex:self.selectedScope]; - title = [self sectionTitleWithBaseName:@"Methods" totalCount:totalCount filteredCount:self.filteredMethods.count]; - } break; - - case FLEXObjectExplorerSectionClassMethods: { - NSUInteger totalCount = [self totalCountOfMetadata:FLEXMetadataKindClassMethods forClassAtIndex:self.selectedScope]; - title = [self sectionTitleWithBaseName:@"Class Methods" totalCount:totalCount filteredCount:self.filteredClassMethods.count]; - } break; - - case FLEXObjectExplorerSectionSuperclasses: { - title = [self sectionTitleWithBaseName:@"Superclasses" totalCount:self.classHierarchy.count filteredCount:self.filteredSuperclasses.count]; - } break; - - case FLEXObjectExplorerSectionReferencingInstances: { - title = @"Object Graph"; - } break; - } - return title; -} - -- (UIViewController *)drillInViewControllerForRow:(NSUInteger)row inExplorerSection:(FLEXObjectExplorerSection)section -{ - UIViewController *viewController = nil; - switch (section) { - case FLEXObjectExplorerSectionDescription: - break; - - case FLEXObjectExplorerSectionCustom: - viewController = [self customSectionDrillInViewControllerForRowCookie:[self customSectionRowCookieForVisibleRow:row]]; - break; - - case FLEXObjectExplorerSectionProperties: { - FLEXPropertyBox *propertyBox = self.filteredProperties[row]; - objc_property_t property = propertyBox.property; - id currentValue = [self valueForPropertyAtIndex:row]; - if ([FLEXPropertyEditorViewController canEditProperty:property onObject:self.object currentValue:currentValue]) { - viewController = [[FLEXPropertyEditorViewController alloc] initWithTarget:self.object property:property]; - } else if (currentValue) { - viewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:currentValue]; - } - } break; - - case FLEXObjectExplorerSectionIvars: { - FLEXIvarBox *ivarBox = self.filteredIvars[row]; - Ivar ivar = ivarBox.ivar; - id currentValue = [self valueForIvarAtIndex:row]; - if ([FLEXIvarEditorViewController canEditIvar:ivar currentValue:currentValue]) { - viewController = [[FLEXIvarEditorViewController alloc] initWithTarget:self.object ivar:ivar]; - } else if (currentValue) { - viewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:currentValue]; - } - } break; - - case FLEXObjectExplorerSectionMethods: { - FLEXMethodBox *methodBox = self.filteredMethods[row]; - Method method = methodBox.method; - viewController = [[FLEXMethodCallingViewController alloc] initWithTarget:self.object method:method]; - } break; - - case FLEXObjectExplorerSectionClassMethods: { - FLEXMethodBox *methodBox = self.filteredClassMethods[row]; - Method method = methodBox.method; - viewController = [[FLEXMethodCallingViewController alloc] initWithTarget:[self.object class] method:method]; - } break; - - case FLEXObjectExplorerSectionSuperclasses: { - Class superclass = self.filteredSuperclasses[row]; - viewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:superclass]; - } break; - - case FLEXObjectExplorerSectionReferencingInstances: { - viewController = [FLEXInstancesTableViewController instancesTableViewControllerForInstancesReferencingObject:self.object]; - } break; - } - return viewController; -} - - -#pragma mark - Table View Data Source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return [self visibleExplorerSections].count; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:section]; - return [self numberOfRowsForExplorerSection:explorerSection]; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:section]; - return [self titleForExplorerSection:explorerSection]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - - BOOL isCustomSection = explorerSection == FLEXObjectExplorerSectionCustom; - BOOL useDescriptionCell = explorerSection == FLEXObjectExplorerSectionDescription; - NSString *cellIdentifier = useDescriptionCell ? kFLEXMultilineTableViewCellIdentifier : @"cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; - if (!cell) { - if (useDescriptionCell) { - cell = [[FLEXMultilineTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; - cell.textLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - } else { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; - UIFont *cellFont = [FLEXUtility defaultTableViewCellLabelFont]; - cell.textLabel.font = cellFont; - cell.detailTextLabel.font = cellFont; - cell.detailTextLabel.textColor = UIColor.grayColor; - } - } - - - UIView *customView; - if (isCustomSection) { - customView = [self customViewForRowCookie:[self customSectionRowCookieForVisibleRow:indexPath.row]]; - if (customView) { - [cell.contentView addSubview:customView]; - } - } - - cell.textLabel.text = [self titleForRow:indexPath.row inExplorerSection:explorerSection]; - cell.detailTextLabel.text = [self subtitleForRow:indexPath.row inExplorerSection:explorerSection]; - cell.accessoryType = [self canDrillInToRow:indexPath.row inExplorerSection:explorerSection] ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone; - - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - CGFloat height = self.tableView.rowHeight; - if (explorerSection == FLEXObjectExplorerSectionDescription) { - NSString *text = [self titleForRow:indexPath.row inExplorerSection:explorerSection]; - NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{ NSFontAttributeName : [FLEXUtility defaultTableViewCellLabelFont] }]; - CGFloat preferredHeight = [FLEXMultilineTableViewCell preferredHeightWithAttributedText:attributedText inTableViewWidth:self.tableView.frame.size.width style:tableView.style showsAccessory:NO]; - height = MAX(height, preferredHeight); - } else if (explorerSection == FLEXObjectExplorerSectionCustom) { - id cookie = [self customSectionRowCookieForVisibleRow:indexPath.row]; - height = [self heightForCustomViewRowForRowCookie:cookie]; - } - - return height; -} - - -#pragma mark - Table View Delegate - -- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - return [self canDrillInToRow:indexPath.row inExplorerSection:explorerSection]; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - UIViewController *detailViewController = [self drillInViewControllerForRow:indexPath.row inExplorerSection:explorerSection]; - if (detailViewController) { - [self.navigationController pushViewController:detailViewController animated:YES]; - } else { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - } -} - -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [self sectionHasActions:indexPath.section]; -} - -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - switch (explorerSection) { - case FLEXObjectExplorerSectionDescription: - return action == @selector(copy:) || action == @selector(copyObjectAddress:); - - default: - return NO; - } -} - -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [self performSelector:action withObject:indexPath]; -#pragma clang diagnostic pop -} - - -#pragma mark - UIMenuController - -/// Prevent the search bar from trying to use us as a responder -/// -/// Our table cells will use the UITableViewDelegate methods -/// to make sure we can perform the actions we want to -- (BOOL)canPerformAction:(SEL)action withSender:(id)sender -{ - return NO; -} - -- (void)copy:(NSIndexPath *)indexPath -{ - FLEXObjectExplorerSection explorerSection = [self explorerSectionAtIndex:indexPath.section]; - NSString *stringToCopy = @""; - - NSString *title = [self titleForRow:indexPath.row inExplorerSection:explorerSection]; - if (title.length) { - stringToCopy = [stringToCopy stringByAppendingString:title]; - } - - NSString *subtitle = [self subtitleForRow:indexPath.row inExplorerSection:explorerSection]; - if (subtitle.length) { - if (stringToCopy.length) { - stringToCopy = [stringToCopy stringByAppendingString:@"\n\n"]; - } - stringToCopy = [stringToCopy stringByAppendingString:subtitle]; - } - - UIPasteboard.generalPasteboard.string = stringToCopy; -} - -- (void)copyObjectAddress:(NSIndexPath *)indexPath -{ - UIPasteboard.generalPasteboard.string = [FLEXUtility addressOfObject:self.object]; -} - - -#pragma mark - Custom Section - -- (void)updateCustomData -{ - self.cachedCustomSectionRowCookies = [self customSectionRowCookies]; -} - -- (void)updateFilteredCustomData -{ - NSIndexSet *filteredIndexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.cachedCustomSectionRowCookies.count)]; - if (self.filterText.length > 0) { - filteredIndexSet = [filteredIndexSet indexesPassingTest:^BOOL(NSUInteger index, BOOL *stop) { - BOOL matches = NO; - NSString *rowTitle = [self customSectionTitleForRowCookie:self.cachedCustomSectionRowCookies[index]]; - if ([rowTitle rangeOfString:self.filterText options:NSCaseInsensitiveSearch].location != NSNotFound) { - matches = YES; - } - return matches; - }]; - } - self.customSectionVisibleIndexes = filteredIndexSet; -} - -- (id)customSectionRowCookieForVisibleRow:(NSUInteger)row -{ - return [[self.cachedCustomSectionRowCookies objectsAtIndexes:self.customSectionVisibleIndexes] objectAtIndex:row]; -} - - -#pragma mark - Subclasses Can Override - -- (NSString *)customSectionTitle -{ - return self.shortcutPropertyNames.count ? @"Shortcuts" : nil; -} - -- (NSArray *)customSectionRowCookies -{ - return self.shortcutPropertyNames; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSString class]]) { - objc_property_t property = [self viewPropertyForName:rowCookie]; - if (property) { - NSString *prettyPropertyName = [FLEXRuntimeUtility prettyNameForProperty:property]; - // Since we're outside of the "properties" section, prepend @property for clarity. - return [@"@property " stringByAppendingString:prettyPropertyName]; - } else if ([rowCookie respondsToSelector:@selector(description)]) { - return [@"No property found for object: " stringByAppendingString:[rowCookie description]]; - } else { - NSString *cls = NSStringFromClass([rowCookie class]); - return [@"No property found for object of class " stringByAppendingString:cls]; - } - } - - return nil; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSString class]]) { - objc_property_t property = [self viewPropertyForName:rowCookie]; - if (property) { - id value = [FLEXRuntimeUtility valueForProperty:property onObject:self.object]; - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:value]; - } else { - return nil; - } - } - - return nil; -} - -- (BOOL)customSectionCanDrillIntoRowWithCookie:(id)rowCookie -{ - return YES; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - if ([rowCookie isKindOfClass:[NSString class]]) { - objc_property_t property = [self viewPropertyForName:rowCookie]; - if (property) { - id currentValue = [FLEXRuntimeUtility valueForProperty:property onObject:self.object]; - if ([FLEXPropertyEditorViewController canEditProperty:property onObject:self.object currentValue:currentValue]) { - return [[FLEXPropertyEditorViewController alloc] initWithTarget:self.object property:property]; - } else { - return [FLEXObjectExplorerFactory explorerViewControllerForObject:currentValue]; - } - } else { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot drill into row for cookie: %@", rowCookie]; - return nil; - } - } - - return nil; -} - -- (UIView *)customViewForRowCookie:(id)rowCookie -{ - return nil; -} - -- (CGFloat)heightForCustomViewRowForRowCookie:(id)rowCookie -{ - return self.tableView.rowHeight; -} - -- (BOOL)canHaveInstanceState -{ - return YES; -} - -- (BOOL)canCallInstanceMethods -{ - return YES; -} - -@end - - -@implementation FLEXObjectExplorerViewController (Shortcuts) - -- (NSArray *)shortcutPropertyNames { return @[]; } - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.h deleted file mode 100644 index 7e438703..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXSetExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXSetExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.m deleted file mode 100644 index 152b93d2..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// FLEXSetExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 5/16/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXSetExplorerViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXObjectExplorerFactory.h" - -@interface FLEXSetExplorerViewController () - -@property (nonatomic, readonly) NSSet *set; - -@end - -@implementation FLEXSetExplorerViewController - -- (NSSet *)set -{ - return [self.object isKindOfClass:[NSSet class]] ? self.object : nil; -} - - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Set Objects"; -} - -- (NSArray *)customSectionRowCookies -{ - return self.set.allObjects; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - return [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:rowCookie]; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - return nil; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - return [FLEXObjectExplorerFactory explorerViewControllerForObject:rowCookie]; -} - -- (BOOL)shouldShowDescription -{ - return NO; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.h deleted file mode 100644 index 7b7ed757..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXViewControllerExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 6/11/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXViewControllerExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.m deleted file mode 100644 index 4d51865f..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.m +++ /dev/null @@ -1,96 +0,0 @@ -// -// FLEXViewControllerExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 6/11/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXViewControllerExplorerViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXObjectExplorerFactory.h" - -typedef NS_ENUM(NSUInteger, FLEXViewControllerExplorerRow) { - FLEXViewControllerExplorerRowPush, - FLEXViewControllerExplorerRowView -}; - -@interface FLEXViewControllerExplorerViewController () - -@property (nonatomic, readonly) UIViewController *viewController; - -@end - -@implementation FLEXViewControllerExplorerViewController - -- (UIViewController *)viewController -{ - return [self.object isKindOfClass:[UIViewController class]] ? self.object : nil; -} - -- (BOOL)canPushViewController -{ - // Only show the "Push View Controller" option if it's not already part of the hierarchy to avoid really disrupting the app. - return self.viewController.view.window == nil; -} - - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Shortcuts"; -} - -- (NSArray *)customSectionRowCookies -{ - NSArray *rowCookies = @[@(FLEXViewControllerExplorerRowView)]; - if ([self canPushViewController]) { - rowCookies = [@[@(FLEXViewControllerExplorerRowPush)] arrayByAddingObjectsFromArray:rowCookies]; - } - return rowCookies; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - NSString *title = nil; - if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) { - title = @"Push View Controller"; - } else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) { - title = @"@property UIView *view"; - } - return title; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - NSString *subtitle = nil; - if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) { - subtitle = [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:self.viewController.view]; - } - return subtitle; -} - -- (BOOL)customSectionCanDrillIntoRowWithCookie:(id)rowCookie -{ - BOOL canDrillIn = NO; - if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) { - canDrillIn = [self canPushViewController]; - } else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) { - canDrillIn = self.viewController.view != nil; - } - return canDrillIn; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) { - drillInViewController = self.viewController; - } else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) { - drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:self.viewController.view]; - } - return drillInViewController; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.h deleted file mode 100644 index 241ff1d8..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXViewExplorerViewController.h -// Flipboard -// -// Created by Ryan Olson on 6/11/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXObjectExplorerViewController.h" - -@interface FLEXViewExplorerViewController : FLEXObjectExplorerViewController - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.m deleted file mode 100644 index 0ab396a6..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.m +++ /dev/null @@ -1,208 +0,0 @@ -// -// FLEXViewExplorerViewController.m -// Flipboard -// -// Created by Ryan Olson on 6/11/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXViewExplorerViewController.h" -#import "FLEXRuntimeUtility.h" -#import "FLEXUtility.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXImagePreviewViewController.h" -#import "FLEXPropertyEditorViewController.h" - -typedef NS_ENUM(NSUInteger, FLEXViewExplorerRow) { - FLEXViewExplorerRowViewController, - FLEXViewExplorerRowPreview, - FLEXViewExplorerRowViewControllerForAncestor -}; - -@interface FLEXViewExplorerViewController () - -// Don't clash with UIViewController's view property -@property (nonatomic, readonly) UIView *viewToExplore; - -@end - -@implementation FLEXViewExplorerViewController - -- (UIView *)viewToExplore -{ - return [self.object isKindOfClass:[UIView class]] ? self.object : nil; -} - - -#pragma mark - Superclass Overrides - -- (NSString *)customSectionTitle -{ - return @"Shortcuts"; -} - -- (NSArray *)customSectionRowCookies -{ - NSMutableArray *rowCookies = [NSMutableArray array]; - - if ([FLEXUtility viewControllerForView:self.viewToExplore]) { - [rowCookies addObject:@(FLEXViewExplorerRowViewController)]; - }else{ - [rowCookies addObject:@(FLEXViewExplorerRowViewControllerForAncestor)]; - } - - [rowCookies addObject:@(FLEXViewExplorerRowPreview)]; - [rowCookies addObjectsFromArray:[super customSectionRowCookies]]; - - return rowCookies; -} - -- (NSArray *)shortcutPropertyNames -{ - NSArray *propertyNames = @[@"frame", @"bounds", @"center", @"transform", - @"backgroundColor", @"alpha", @"opaque", @"hidden", - @"clipsToBounds", @"userInteractionEnabled", @"layer"]; - - if ([self.viewToExplore isKindOfClass:[UILabel class]]) { - propertyNames = [@[@"text", @"font", @"textColor"] arrayByAddingObjectsFromArray:propertyNames]; - } - - return propertyNames; -} - -- (NSString *)customSectionTitleForRowCookie:(id)rowCookie -{ - NSString *title = nil; - - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXViewExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXViewExplorerRowViewController: - title = @"View Controller"; - break; - - case FLEXViewExplorerRowPreview: - title = @"Preview Image"; - break; - - case FLEXViewExplorerRowViewControllerForAncestor: - title = @"View Controller For Ancestor"; - break; - } - } else if ([rowCookie isKindOfClass:[NSString class]]) { - title = [super customSectionTitleForRowCookie:rowCookie]; - } - - return title; -} - -- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie -{ - NSString *subtitle = nil; - - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXViewExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXViewExplorerRowViewController: - subtitle = [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[FLEXUtility viewControllerForView:self.viewToExplore]]; - break; - - case FLEXViewExplorerRowPreview: - break; - - case FLEXViewExplorerRowViewControllerForAncestor: - subtitle = [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:[FLEXUtility viewControllerForAncestralView:self.viewToExplore]]; - break; - } - } else if ([rowCookie isKindOfClass:[NSString class]]) { - return [super customSectionSubtitleForRowCookie:rowCookie]; - } - - return subtitle; -} - -- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie -{ - UIViewController *drillInViewController = nil; - - if ([rowCookie isKindOfClass:[NSNumber class]]) { - FLEXViewExplorerRow row = [rowCookie unsignedIntegerValue]; - switch (row) { - case FLEXViewExplorerRowViewController: - drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:[FLEXUtility viewControllerForView:self.viewToExplore]]; - break; - - case FLEXViewExplorerRowPreview: - drillInViewController = [[self class] imagePreviewViewControllerForView:self.viewToExplore]; - break; - - case FLEXViewExplorerRowViewControllerForAncestor: - drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:[FLEXUtility viewControllerForAncestralView:self.viewToExplore]]; - break; - } - } else if ([rowCookie isKindOfClass:[NSString class]]) { - return [super customSectionDrillInViewControllerForRowCookie:rowCookie]; - } - - return drillInViewController; -} - -+ (UIViewController *)imagePreviewViewControllerForView:(UIView *)view -{ - UIViewController *imagePreviewViewController = nil; - if (!CGRectIsEmpty(view.bounds)) { - CGSize viewSize = view.bounds.size; - UIGraphicsBeginImageContextWithOptions(viewSize, NO, 0.0); - [view drawViewHierarchyInRect:CGRectMake(0, 0, viewSize.width, viewSize.height) afterScreenUpdates:YES]; - UIImage *previewImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - imagePreviewViewController = [[FLEXImagePreviewViewController alloc] initWithImage:previewImage]; - } - return imagePreviewViewController; -} - - -#pragma mark - Runtime Adjustment - -#define PropertyKey(suffix) kFLEXUtilityAttribute##suffix : @"" -#define PropertyKeyGetter(getter) kFLEXUtilityAttributeCustomGetter : NSStringFromSelector(@selector(getter)) -#define PropertyKeySetter(setter) kFLEXUtilityAttributeCustomSetter : NSStringFromSelector(@selector(setter)) - -#define FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, type, ...) ({ \ - if (@available(iOS iOS_atLeast, *)) { \ - NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithDictionary:@{ \ - kFLEXUtilityAttributeTypeEncoding : @(type), \ - __VA_ARGS__ \ - }]; \ - [FLEXRuntimeUtility \ - tryAddPropertyWithName:#name \ - attributes:attrs \ - toClass:[cls class] \ - ]; \ - } \ -}) -#define FLEXRuntimeUtilityTryAddNonatomicProperty(iOS_atLeast, name, cls, type, ...) \ - FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, @encode(type), PropertyKey(NonAtomic), __VA_ARGS__); -#define FLEXRuntimeUtilityTryAddObjectProperty(iOS_atLeast, name, cls, type, ...) \ - FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, FLEXEncodeClass(type), PropertyKey(NonAtomic), __VA_ARGS__); - -+ (void)initialize -{ - // A quirk of UIView and some other classes: a lot of the `@property`s are - // not actually properties from the perspective of the runtime. - // - // We add these properties to the class at runtime if they haven't been added yet. - // This way, we can use our property editor to access and change them. - // The property attributes match the declared attributes in their headers. - - // UIView - FLEXRuntimeUtilityTryAddNonatomicProperty(2, frame, UIView, CGRect); - FLEXRuntimeUtilityTryAddNonatomicProperty(2, alpha, UIView, CGFloat); - FLEXRuntimeUtilityTryAddNonatomicProperty(2, clipsToBounds, UIView, BOOL); - FLEXRuntimeUtilityTryAddNonatomicProperty(2, opaque, UIView, BOOL, PropertyKeyGetter(isOpaque)); - FLEXRuntimeUtilityTryAddNonatomicProperty(2, hidden, UIView, BOOL, PropertyKeyGetter(isHidden)); - FLEXRuntimeUtilityTryAddObjectProperty(2, backgroundColor, UIView, UIColor, PropertyKey(Copy)); - FLEXRuntimeUtilityTryAddObjectProperty(6, constraints, UIView, NSArray, PropertyKey(ReadOnly)); -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.h new file mode 100644 index 00000000..40707dd3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.h @@ -0,0 +1,73 @@ +// +// FLEXObjectExplorer.h +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. 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> *)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 *> *allProperties; +@property (nonatomic, readonly) NSArray *properties; + +@property (nonatomic, readonly) NSArray *> *allClassProperties; +@property (nonatomic, readonly) NSArray *classProperties; + +@property (nonatomic, readonly) NSArray *> *allIvars; +@property (nonatomic, readonly) NSArray *ivars; + +@property (nonatomic, readonly) NSArray *> *allMethods; +@property (nonatomic, readonly) NSArray *methods; + +@property (nonatomic, readonly) NSArray *> *allClassMethods; +@property (nonatomic, readonly) NSArray *classMethods; + +@property (nonatomic, readonly) NSArray *classHierarchyClasses; +@property (nonatomic, readonly) NSArray *classHierarchy; + +@property (nonatomic, readonly) NSArray *> *allConformedProtocols; +@property (nonatomic, readonly) NSArray *conformedProtocols; + +@property (nonatomic, readonly) NSArray *allInstanceSizes; +@property (nonatomic, readonly) FLEXStaticMetadata *instanceSize; + +@property (nonatomic, readonly) NSArray *allImageNames; +@property (nonatomic, readonly) FLEXStaticMetadata *imageName; + +- (void)reloadMetadata; +- (void)reloadClassHierarchy; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.m new file mode 100644 index 00000000..fc03b726 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorer.m @@ -0,0 +1,344 @@ +// +// FLEXObjectExplorer.m +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXObjectExplorer.h" +#import "FLEXUtility.h" +#import "FLEXRuntimeUtility.h" +#import "NSObject+FLEX_Reflection.h" +#import "FLEXRuntime+Compare.h" +#import "FLEXRuntime+UIKitHelpers.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXMetadataSection.h" +#import "NSUserDefaults+FLEX.h" + +@implementation FLEXObjectExplorerDefaults + ++ (instancetype)canEdit:(BOOL)editable wantsPreviews:(BOOL)showPreviews { + FLEXObjectExplorerDefaults *defaults = [self new]; + defaults->_isEditable = editable; + defaults->_wantsDynamicPreviews = showPreviews; + return defaults; +} + +@end + +@interface FLEXObjectExplorer () { + NSMutableArray *> *_allProperties; + NSMutableArray *> *_allClassProperties; + NSMutableArray *> *_allIvars; + NSMutableArray *> *_allMethods; + NSMutableArray *> *_allClassMethods; + NSMutableArray *> *_allConformedProtocols; + NSMutableArray *_allInstanceSizes; + NSMutableArray *_allImageNames; + NSString *_objectDescription; +} +@end + +@implementation FLEXObjectExplorer + +#pragma mark - Initialization + ++ (id)forObject:(id)objectOrClass { + return [[self alloc] initWithObject:objectOrClass]; +} + +- (id)initWithObject:(id)objectOrClass { + NSParameterAssert(objectOrClass); + + self = [super init]; + if (self) { + _object = objectOrClass; + _objectIsInstance = !object_isClass(objectOrClass); + + [self reloadMetadata]; + } + + return self; +} + + +#pragma mark - Public + ++ (void)configureDefaultsForItems:(NSArray> *)items { + BOOL hidePreviews = NSUserDefaults.standardUserDefaults.flex_explorerHidesVariablePreviews; + FLEXObjectExplorerDefaults *mutable = [FLEXObjectExplorerDefaults + canEdit:YES wantsPreviews:!hidePreviews + ]; + FLEXObjectExplorerDefaults *immutable = [FLEXObjectExplorerDefaults + canEdit:NO wantsPreviews:!hidePreviews + ]; + + // .tag is used to cache whether the value of .isEditable; + // This could change at runtime so it is important that + // it is cached every time shortcuts are requeted and not + // just once at as shortcuts are initially registered + for (id metadata in items) { + metadata.defaults = metadata.isEditable ? mutable : immutable; + } +} + +- (NSString *)objectDescription { + if (!_objectDescription) { + // Hard-code UIColor description + if ([self.object isKindOfClass:[UIColor class]]) { + CGFloat h, s, l, r, g, b, a; + [self.object getRed:&r green:&g blue:&b alpha:&a]; + [self.object getHue:&h saturation:&s brightness:&l alpha:nil]; + + return [NSString stringWithFormat: + @"HSL: (%.3f, %.3f, %.3f)\nRGB: (%.3f, %.3f, %.3f)\nAlpha: %.3f", + h, s, l, r, g, b, a + ]; + } + + NSString *description = [FLEXRuntimeUtility safeDescriptionForObject:self.object]; + + if (!description.length) { + NSString *address = [FLEXUtility addressOfObject:self.object]; + return [NSString stringWithFormat:@"Object at %@ returned empty description", address]; + } + + if (description.length > 10000) { + description = [description substringToIndex:10000]; + } + + _objectDescription = description; + } + + return _objectDescription; +} + +- (void)setClassScope:(NSInteger)classScope { + _classScope = classScope; + + [self reloadScopedMetadata]; +} + +- (void)reloadMetadata { + _allProperties = [NSMutableArray new]; + _allClassProperties = [NSMutableArray new]; + _allIvars = [NSMutableArray new]; + _allMethods = [NSMutableArray new]; + _allClassMethods = [NSMutableArray new]; + _allConformedProtocols = [NSMutableArray new]; + _allInstanceSizes = [NSMutableArray new]; + _allImageNames = [NSMutableArray new]; + _objectDescription = nil; + + [self reloadClassHierarchy]; + + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + BOOL hideBackingIvars = defaults.flex_explorerHidesPropertyIvars; + BOOL hidePropertyMethods = defaults.flex_explorerHidesPropertyMethods; + BOOL showMethodOverrides = defaults.flex_explorerShowsMethodOverrides; + + // Loop over each class and each superclass, collect + // the fresh and unique metadata in each category + Class superclass = nil; + NSInteger count = self.classHierarchyClasses.count; + NSInteger rootIdx = count - 1; + for (NSInteger i = 0; i < count; i++) { + Class cls = self.classHierarchyClasses[i]; + superclass = (i < rootIdx) ? self.classHierarchyClasses[i+1] : nil; + + [_allProperties addObject:[self + metadataUniquedByName:[cls flex_allInstanceProperties] + superclass:superclass + kind:FLEXMetadataKindProperties + skip:showMethodOverrides + ]]; + [_allClassProperties addObject:[self + metadataUniquedByName:[cls flex_allClassProperties] + superclass:superclass + kind:FLEXMetadataKindClassProperties + skip:showMethodOverrides + ]]; + [_allIvars addObject:[self + metadataUniquedByName:[cls flex_allIvars] + superclass:nil + kind:FLEXMetadataKindIvars + skip:NO + ]]; + [_allMethods addObject:[self + metadataUniquedByName:[cls flex_allInstanceMethods] + superclass:superclass + kind:FLEXMetadataKindMethods + skip:showMethodOverrides + ]]; + [_allClassMethods addObject:[self + metadataUniquedByName:[cls flex_allClassMethods] + superclass:superclass + kind:FLEXMetadataKindClassMethods + skip:showMethodOverrides + ]]; + [_allConformedProtocols addObject:[self + metadataUniquedByName:[cls flex_protocols] + superclass:superclass + kind:FLEXMetadataKindProtocols + skip:NO + ]]; + + // TODO: join instance size, image name, and class hierarchy into a single model object + // This would greatly reduce the laziness that has begun to manifest itself here + [_allInstanceSizes addObject:[FLEXStaticMetadata + style:FLEXStaticMetadataRowStyleKeyValue + title:@"Instance Size" number:@(class_getInstanceSize(cls)) + ]]; + [_allImageNames addObject:[FLEXStaticMetadata + style:FLEXStaticMetadataRowStyleDefault + title:@"Image Name" string:@(class_getImageName(cls) ?: "Created at Runtime") + ]]; + } + + _classHierarchy = [FLEXStaticMetadata classHierarchy:self.classHierarchyClasses]; + + NSArray *> *properties = _allProperties; + + // Potentially filter property-backing ivars + if (hideBackingIvars) { + NSArray *> *ivars = _allIvars.copy; + _allIvars = [ivars flex_mapped:^id(NSArray *list, NSUInteger idx) { + // Get a set of all backing ivar names for the current class in the hierarchy + NSSet *ivarNames = [NSSet setWithArray:({ + [properties[idx] flex_mapped:^id(FLEXProperty *p, NSUInteger idx) { + // Nil if no ivar, and array is flatted + return p.attributes.backingIvar; + }]; + })]; + + // Remove ivars whose name is in the ivar names list + return [list flex_filtered:^BOOL(FLEXIvar *ivar, NSUInteger idx) { + return ![ivarNames containsObject:ivar.name]; + }]; + }]; + } + + // Potentially filter property-backing methods + if (hidePropertyMethods) { + NSArray *> *methods = _allMethods.copy; + _allMethods = [methods flex_mapped:^id(NSArray *list, NSUInteger idx) { + // Get a set of all property method names for the current class in the hierarchy + NSSet *methodNames = [NSSet setWithArray:({ + [properties[idx] flex_flatmapped:^NSArray *(FLEXProperty *p, NSUInteger idx) { + if (p.likelyGetterExists) { + if (p.likelySetterExists) { + return @[p.likelyGetterString, p.likelySetterString]; + } + + return @[p.likelyGetterString]; + } else if (p.likelySetterExists) { + return @[p.likelySetterString]; + } + + return nil; + }]; + })]; + + // Remove ivars whose name is in the ivar names list + return [list flex_filtered:^BOOL(FLEXMethod *method, NSUInteger idx) { + return ![methodNames containsObject:method.selectorString]; + }]; + }]; + } + + // Set up UIKit helper data + // Really, we only need to call this on properties and ivars + // because no other metadata types support editing. + for (NSArray *matrix in @[_allProperties, _allIvars, /* _allMethods, _allClassMethods, _allConformedProtocols */]) { + for (NSArray *metadataByClass in matrix) { + [FLEXObjectExplorer configureDefaultsForItems:metadataByClass]; + } + } + + [self reloadScopedMetadata]; +} + + +#pragma mark - Private + +- (void)reloadScopedMetadata { + _properties = self.allProperties[self.classScope]; + _classProperties = self.allClassProperties[self.classScope]; + _ivars = self.allIvars[self.classScope]; + _methods = self.allMethods[self.classScope]; + _classMethods = self.allClassMethods[self.classScope]; + _conformedProtocols = self.allConformedProtocols[self.classScope]; + _instanceSize = self.allInstanceSizes[self.classScope]; + _imageName = self.allImageNames[self.classScope]; +} + +/// Accepts an array of flex metadata objects and discards objects +/// with duplicate names, as well as properties and methods which +/// aren't "new" (i.e. those which the superclass responds to) +- (NSArray *)metadataUniquedByName:(NSArray *)list + superclass:(Class)superclass + kind:(FLEXMetadataKind)kind + skip:(BOOL)skip { + if (skip) { + return list; + } + + // Remove items with same name and return filtered list + NSMutableSet *names = [NSMutableSet new]; + return [list flex_filtered:^BOOL(id obj, NSUInteger idx) { + NSString *name = [obj name]; + if ([names containsObject:name]) { + return NO; + } else { + [names addObject:name]; + + // Skip methods and properties which are just overrides, + // potentially skip ivars and methods associated with properties + switch (kind) { + case FLEXMetadataKindProperties: + if ([superclass instancesRespondToSelector:[obj likelyGetter]]) { + return NO; + } + break; + case FLEXMetadataKindClassProperties: + if ([superclass respondsToSelector:[obj likelyGetter]]) { + return NO; + } + break; + case FLEXMetadataKindMethods: + if ([superclass instancesRespondToSelector:NSSelectorFromString(name)]) { + return NO; + } + break; + case FLEXMetadataKindClassMethods: + if ([superclass respondsToSelector:NSSelectorFromString(name)]) { + return NO; + } + break; + + case FLEXMetadataKindProtocols: + case FLEXMetadataKindClassHierarchy: + case FLEXMetadataKindOther: + return YES; // These types are already uniqued + break; + + // Ivars cannot be overidden + case FLEXMetadataKindIvars: break; + } + + return YES; + } + }]; +} + + +#pragma mark - Superclasses + +- (void)reloadClassHierarchy { + // The class hierarchy will never contain metaclass objects by this logic; + // it is always the same for a given class and instances of it + _classHierarchyClasses = [[self.object class] flex_classHierarchy]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.h index efd60efa..65322411 100644 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.h +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.h @@ -3,15 +3,28 @@ // Flipboard // // Created by Ryan Olson on 5/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXGlobalsEntry.h" +#ifndef _FLEXObjectExplorerViewController_h +#import "FLEXObjectExplorerViewController.h" +#else @class FLEXObjectExplorerViewController; +#endif + +NS_ASSUME_NONNULL_BEGIN @interface FLEXObjectExplorerFactory : NSObject -+ (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object; ++ (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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.m index ee026043..46d886ca 100644 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.m +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerFactory.m @@ -3,83 +3,99 @@ // Flipboard // // Created by Ryan Olson on 5/15/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXObjectExplorerFactory.h" -#import "FLEXObjectExplorerViewController.h" -#import "FLEXArrayExplorerViewController.h" -#import "FLEXSetExplorerViewController.h" -#import "FLEXDictionaryExplorerViewController.h" -#import "FLEXDefaultsExplorerViewController.h" -#import "FLEXViewControllerExplorerViewController.h" -#import "FLEXViewExplorerViewController.h" -#import "FLEXImageExplorerViewController.h" -#import "FLEXClassExplorerViewController.h" -#import "FLEXLayerExplorerViewController.h" -#import "FLEXColorExplorerViewController.h" -#import "FLEXBundleExplorerViewController.h" -#import +#import "FLEXGlobalsViewController.h" +#import "FLEXClassShortcuts.h" +#import "FLEXViewShortcuts.h" +#import "FLEXViewControllerShortcuts.h" +#import "FLEXImageShortcuts.h" +#import "FLEXLayerShortcuts.h" +#import "FLEXColorPreviewSection.h" +#import "FLEXDefaultsContentSection.h" +#import "FLEXBundleShortcuts.h" +#import "FLEXBlockShortcuts.h" +#import "FLEXUtility.h" @implementation FLEXObjectExplorerFactory +static NSMutableDictionary *classesToRegisteredSections = nil; -+ (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object -{ - // Bail for nil object. We can't explore nil. ++ (void)initialize { + if (self == [FLEXObjectExplorerFactory class]) { + #define ClassKey(name) (Class)[name class] + #define ClassKeyByName(str) (Class)NSClassFromString(@ #str) + #define MetaclassKey(meta) (Class)object_getClass([meta class]) + classesToRegisteredSections = [NSMutableDictionary dictionaryWithDictionary:@{ + MetaclassKey(NSObject) : [FLEXClassShortcuts class], + ClassKey(NSArray) : [FLEXCollectionContentSection class], + ClassKey(NSSet) : [FLEXCollectionContentSection class], + ClassKey(NSDictionary) : [FLEXCollectionContentSection class], + ClassKey(NSOrderedSet) : [FLEXCollectionContentSection class], + ClassKey(NSUserDefaults) : [FLEXDefaultsContentSection class], + ClassKey(UIViewController) : [FLEXViewControllerShortcuts class], + ClassKey(UIView) : [FLEXViewShortcuts class], + ClassKey(UIImage) : [FLEXImageShortcuts class], + ClassKey(CALayer) : [FLEXLayerShortcuts class], + ClassKey(UIColor) : [FLEXColorPreviewSection class], + ClassKey(NSBundle) : [FLEXBundleShortcuts class], + ClassKeyByName(NSBlock) : [FLEXBlockShortcuts class], + }]; + #undef ClassKey + #undef ClassKeyByName + #undef MetaclassKey + } +} + ++ (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object { + // Can't explore nil if (!object) { return nil; } - - static NSDictionary *explorerSubclassesForObjectTypeStrings = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - explorerSubclassesForObjectTypeStrings = @{NSStringFromClass([NSArray class]) : [FLEXArrayExplorerViewController class], - NSStringFromClass([NSSet class]) : [FLEXSetExplorerViewController class], - NSStringFromClass([NSDictionary class]) : [FLEXDictionaryExplorerViewController class], - NSStringFromClass([NSUserDefaults class]) : [FLEXDefaultsExplorerViewController class], - NSStringFromClass([UIViewController class]) : [FLEXViewControllerExplorerViewController class], - NSStringFromClass([UIView class]) : [FLEXViewExplorerViewController class], - NSStringFromClass([UIImage class]) : [FLEXImageExplorerViewController class], - NSStringFromClass([CALayer class]) : [FLEXLayerExplorerViewController class], - NSStringFromClass([UIColor class]) : [FLEXColorExplorerViewController class], - NSStringFromClass([NSBundle class]) : [FLEXBundleExplorerViewController class], - }; - }); - - Class explorerClass = nil; - BOOL objectIsClass = class_isMetaClass(object_getClass(object)); - if (objectIsClass) { - explorerClass = [FLEXClassExplorerViewController class]; - } else { - explorerClass = [FLEXObjectExplorerViewController class]; - for (NSString *objectTypeString in explorerSubclassesForObjectTypeStrings) { - Class objectClass = NSClassFromString(objectTypeString); - if ([object isKindOfClass:objectClass]) { - explorerClass = explorerSubclassesForObjectTypeStrings[objectTypeString]; - break; - } - } + + // If we're given an object, this will look up it's class hierarchy + // until it finds a registration. This will work for KVC classes, + // since they are children of the original class, and not siblings. + // If we are given an object, object_getClass will return a metaclass, + // and the same thing will happen. FLEXClassShortcuts is the default + // shortcut section for NSObject. + // + // TODO: rename it to FLEXNSObjectShortcuts or something? + Class sectionClass = nil; + Class cls = object_getClass(object); + do { + sectionClass = classesToRegisteredSections[(Class)cls]; + } while (!sectionClass && (cls = [cls superclass])); + + if (!sectionClass) { + sectionClass = [FLEXShortcutsSection class]; } - - FLEXObjectExplorerViewController *explorerViewController = [explorerClass new]; - explorerViewController.object = object; - - return explorerViewController; + + return [FLEXObjectExplorerViewController + exploringObject:object + customSection:[sectionClass forObject:object] + ]; +} + ++ (void)registerExplorerSection:(Class)explorerClass forClass:(Class)objectClass { + classesToRegisteredSections[(Class)objectClass] = explorerClass; } #pragma mark - FLEXGlobalsEntry -+ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row -{ ++ (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row { switch (row) { case FLEXGlobalsRowAppDelegate: - return @"👉 App delegate"; + return @"🎟 App Delegate"; + case FLEXGlobalsRowKeyWindow: + return @"🔑 Key Window"; case FLEXGlobalsRowRootViewController: - return @"🌴 Root view controller"; + return @"🌴 Root View Controller"; case FLEXGlobalsRowProcessInfo: return @"🚦 NSProcessInfo.processInfo"; case FLEXGlobalsRowUserDefaults: - return @"💾 Preferences (NSUserDefaults)"; + return @"💾 Preferences"; case FLEXGlobalsRowMainBundle: return @"📦 NSBundle.mainBundle"; case FLEXGlobalsRowApplication: @@ -89,13 +105,34 @@ + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row case FLEXGlobalsRowCurrentDevice: return @"📱 UIDevice.currentDevice"; case FLEXGlobalsRowPasteboard: - return @"📋 UIPasteboard.generalPastboard"; + return @"📋 UIPasteboard.generalPasteboard"; + case FLEXGlobalsRowURLSession: + return @"📡 NSURLSession.sharedSession"; + case FLEXGlobalsRowURLCache: + return @"⏳ NSURLCache.sharedURLCache"; + case FLEXGlobalsRowNotificationCenter: + return @"🔔 NSNotificationCenter.defaultCenter"; + case FLEXGlobalsRowMenuController: + return @"📎 UIMenuController.sharedMenuController"; + case FLEXGlobalsRowFileManager: + return @"🗄 NSFileManager.defaultManager"; + case FLEXGlobalsRowTimeZone: + return @"🌎 NSTimeZone.systemTimeZone"; + case FLEXGlobalsRowLocale: + return @"🗣 NSLocale.currentLocale"; + case FLEXGlobalsRowCalendar: + return @"📅 NSCalendar.currentCalendar"; + case FLEXGlobalsRowMainRunLoop: + return @"🏃🏻‍♂️ NSRunLoop.mainRunLoop"; + case FLEXGlobalsRowMainThread: + return @"🧵 NSThread.mainThread"; + case FLEXGlobalsRowOperationQueue: + return @"📚 NSOperationQueue.mainQueue"; default: return nil; } } -+ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row -{ ++ (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row { switch (row) { case FLEXGlobalsRowAppDelegate: { id appDelegate = UIApplication.sharedApplication.delegate; @@ -115,6 +152,62 @@ + (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row return [self explorerViewControllerForObject:UIDevice.currentDevice]; case FLEXGlobalsRowPasteboard: return [self explorerViewControllerForObject:UIPasteboard.generalPasteboard]; + case FLEXGlobalsRowURLSession: + return [self explorerViewControllerForObject:NSURLSession.sharedSession]; + case FLEXGlobalsRowURLCache: + return [self explorerViewControllerForObject:NSURLCache.sharedURLCache]; + case FLEXGlobalsRowNotificationCenter: + return [self explorerViewControllerForObject:NSNotificationCenter.defaultCenter]; + case FLEXGlobalsRowMenuController: + return [self explorerViewControllerForObject:UIMenuController.sharedMenuController]; + case FLEXGlobalsRowFileManager: + return [self explorerViewControllerForObject:NSFileManager.defaultManager]; + case FLEXGlobalsRowTimeZone: + return [self explorerViewControllerForObject:NSTimeZone.systemTimeZone]; + case FLEXGlobalsRowLocale: + return [self explorerViewControllerForObject:NSLocale.currentLocale]; + case FLEXGlobalsRowCalendar: + return [self explorerViewControllerForObject:NSCalendar.currentCalendar]; + case FLEXGlobalsRowMainRunLoop: + return [self explorerViewControllerForObject:NSRunLoop.mainRunLoop]; + case FLEXGlobalsRowMainThread: + return [self explorerViewControllerForObject:NSThread.mainThread]; + case FLEXGlobalsRowOperationQueue: + return [self explorerViewControllerForObject:NSOperationQueue.mainQueue]; + + case FLEXGlobalsRowKeyWindow: + return [FLEXObjectExplorerFactory + explorerViewControllerForObject:FLEXUtility.appKeyWindow + ]; + case FLEXGlobalsRowRootViewController: { + id delegate = UIApplication.sharedApplication.delegate; + if ([delegate respondsToSelector:@selector(window)]) { + return [self explorerViewControllerForObject:delegate.window.rootViewController]; + } + + return nil; + } + default: return nil; + } +} + ++ (FLEXGlobalsEntryRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row { + switch (row) { + case FLEXGlobalsRowRootViewController: { + // Check if the app delegate responds to -window. If not, present an alert + return ^(UITableViewController *host) { + id delegate = UIApplication.sharedApplication.delegate; + if ([delegate respondsToSelector:@selector(window)]) { + UIViewController *explorer = [self explorerViewControllerForObject: + delegate.window.rootViewController + ]; + [host.navigationController pushViewController:explorer animated:YES]; + } else { + NSString *msg = @"The app delegate doesn't respond to -window"; + [FLEXAlert showAlert:@":(" message:msg from:host]; + } + }; + } default: return nil; } } diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.h new file mode 100644 index 00000000..a87d9b12 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.h @@ -0,0 +1,54 @@ +// +// FLEXObjectExplorerViewController.h +// Flipboard +// +// Created by Ryan Olson on 2014-05-03. +// Copyright (c) 2020 Flipboard. 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 *)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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.m new file mode 100644 index 00000000..7222c26a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/FLEXObjectExplorerViewController.m @@ -0,0 +1,381 @@ +// +// FLEXObjectExplorerViewController.m +// Flipboard +// +// Created by Ryan Olson on 2014-05-03. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXObjectExplorerViewController.h" +#import "FLEXUtility.h" +#import "FLEXRuntimeUtility.h" +#import "UIBarButtonItem+FLEX.h" +#import "FLEXMultilineTableViewCell.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXFieldEditorViewController.h" +#import "FLEXMethodCallingViewController.h" +#import "FLEXObjectListViewController.h" +#import "FLEXTabsViewController.h" +#import "FLEXBookmarkManager.h" +#import "FLEXTableView.h" +#import "FLEXResources.h" +#import "FLEXTableViewCell.h" +#import "FLEXScopeCarousel.h" +#import "FLEXMetadataSection.h" +#import "FLEXSingleRowSection.h" +#import "FLEXShortcutsSection.h" +#import "NSUserDefaults+FLEX.h" +#import + +#pragma mark - Private properties +@interface FLEXObjectExplorerViewController () +@property (nonatomic, readonly) FLEXSingleRowSection *descriptionSection; +@property (nonatomic, readonly) FLEXTableViewSection *customSection; +@property (nonatomic) NSIndexSet *customSectionVisibleIndexes; + +@property (nonatomic, readonly) NSArray *observedNotifications; + +@end + +@implementation FLEXObjectExplorerViewController + +#pragma mark - Initialization + ++ (instancetype)exploringObject:(id)target { + return [self exploringObject:target customSection:[FLEXShortcutsSection forObject:target]]; +} + ++ (instancetype)exploringObject:(id)target customSection:(FLEXTableViewSection *)section { + return [[self alloc] + initWithObject:target + explorer:[FLEXObjectExplorer forObject:target] + customSection:section + ]; +} + +- (id)initWithObject:(id)target + explorer:(__kindof FLEXObjectExplorer *)explorer + customSection:(FLEXTableViewSection *)customSection { + NSParameterAssert(target); + + self = [super initWithStyle:UITableViewStyleGrouped]; + if (self) { + _object = target; + _explorer = explorer; + _customSection = customSection; + } + + return self; +} + +- (NSArray *)observedNotifications { + return @[ + kFLEXDefaultsHidePropertyIvarsKey, + kFLEXDefaultsHidePropertyMethodsKey, + kFLEXDefaultsHideMethodOverridesKey, + kFLEXDefaultsHideVariablePreviewsKey, + ]; +} + +#pragma mark - View controller lifecycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.showsShareToolbarItem = YES; + self.wantsSectionIndexTitles = YES; + + // Use [object class] here rather than object_getClass + // to avoid the KVO prefix for observed objects + self.title = [[self.object class] description]; + + // Search + self.showsSearchBar = YES; + self.searchBarDebounceInterval = kFLEXDebounceInstant; + self.showsCarousel = YES; + + // Carousel scope bar + [self.explorer reloadClassHierarchy]; + self.carousel.items = [self.explorer.classHierarchyClasses flex_mapped:^id(Class cls, NSUInteger idx) { + return NSStringFromClass(cls); + }]; + + // ... button for extra options + [self addToolbarItems:@[[UIBarButtonItem + itemWithImage:FLEXResources.moreIcon target:self action:@selector(moreButtonPressed:) + ]]]; + + // Swipe gestures to swipe between classes in the hierarchy + UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self action:@selector(handleSwipeGesture:) + ]; + UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self action:@selector(handleSwipeGesture:) + ]; + leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; + rightSwipe.direction = UISwipeGestureRecognizerDirectionRight; + leftSwipe.delegate = self; + rightSwipe.delegate = self; + [self.tableView addGestureRecognizer:leftSwipe]; + [self.tableView addGestureRecognizer:rightSwipe]; + + // Observe preferences which may change on other screens + // + // "If your app targets iOS 9.0 and later or macOS 10.11 and later, + // you don't need to unregister an observer in its dealloc method." + for (NSString *pref in self.observedNotifications) { + [NSNotificationCenter.defaultCenter + addObserver:self + selector:@selector(fullyReloadData) + name:pref + object:nil + ]; + } +} + +- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { + [self.navigationController setToolbarHidden:NO animated:YES]; + return YES; +} + + +#pragma mark - Overrides + +/// Override to hide the description section when searching +- (NSArray *)nonemptySections { + if (self.shouldShowDescription) { + return super.nonemptySections; + } + + return [super.nonemptySections flex_filtered:^BOOL(FLEXTableViewSection *section, NSUInteger idx) { + return section != self.descriptionSection; + }]; +} + +- (NSArray *)makeSections { + FLEXObjectExplorer *explorer = self.explorer; + + // Description section is only for instances + if (self.explorer.objectIsInstance) { + _descriptionSection = [FLEXSingleRowSection + title:@"Description" reuse:kFLEXMultilineCell cell:^(FLEXTableViewCell *cell) { + cell.titleLabel.font = UIFont.flex_defaultTableCellFont; + cell.titleLabel.text = explorer.objectDescription; + } + ]; + self.descriptionSection.filterMatcher = ^BOOL(NSString *filterText) { + return [explorer.objectDescription localizedCaseInsensitiveContainsString:filterText]; + }; + } + + // Object graph section + FLEXSingleRowSection *referencesSection = [FLEXSingleRowSection + title:@"Object Graph" reuse:kFLEXDefaultCell cell:^(FLEXTableViewCell *cell) { + cell.titleLabel.text = @"See Objects with References to This Object"; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + ]; + referencesSection.selectionAction = ^(UIViewController *host) { + UIViewController *references = [FLEXObjectListViewController + objectsWithReferencesToObject:explorer.object + ]; + [host.navigationController pushViewController:references animated:YES]; + }; + + NSMutableArray *sections = [NSMutableArray arrayWithArray:@[ + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindProperties], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindClassProperties], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindIvars], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindMethods], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindClassMethods], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindClassHierarchy], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindProtocols], + [FLEXMetadataSection explorer:self.explorer kind:FLEXMetadataKindOther], + referencesSection + ]]; + + if (self.customSection) { + [sections insertObject:self.customSection atIndex:0]; + } + if (self.descriptionSection) { + [sections insertObject:self.descriptionSection atIndex:0]; + } + + return sections.copy; +} + +/// In our case, all this does is reload the table view, +/// or reload the sections' data if we changed places +/// in the class hierarchy. Doesn't refresh \c self.explorer +- (void)reloadData { + // Check to see if class scope changed, update accordingly + if (self.explorer.classScope != self.selectedScope) { + self.explorer.classScope = self.selectedScope; + [self reloadSections]; + } + + [super reloadData]; +} + +- (void)shareButtonPressed:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + make.button(@"Add to Bookmarks").handler(^(NSArray *strings) { + [FLEXBookmarkManager.bookmarks addObject:self.object]; + }); + make.button(@"Copy Description").handler(^(NSArray *strings) { + UIPasteboard.generalPasteboard.string = self.explorer.objectDescription; + }); + make.button(@"Copy Address").handler(^(NSArray *strings) { + UIPasteboard.generalPasteboard.string = [FLEXUtility addressOfObject:self.object]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + + +#pragma mark - Private + +/// Unlike \c -reloadData, this refreshes everything, including the explorer. +- (void)fullyReloadData { + [self.explorer reloadMetadata]; + [self reloadSections]; + [self reloadData]; +} + +- (void)handleSwipeGesture:(UISwipeGestureRecognizer *)gesture { + if (gesture.state == UIGestureRecognizerStateEnded) { + switch (gesture.direction) { + case UISwipeGestureRecognizerDirectionRight: + if (self.selectedScope > 0) { + self.selectedScope -= 1; + } + break; + case UISwipeGestureRecognizerDirectionLeft: + if (self.selectedScope != self.explorer.classHierarchy.count - 1) { + self.selectedScope += 1; + } + break; + + default: + break; + } + } +} + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)g1 shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)g2 { + // Prioritize important pan gestures over our swipe gesture + if ([g2 isKindOfClass:[UIPanGestureRecognizer class]]) { + if (g2 == self.navigationController.interactivePopGestureRecognizer || + g2 == self.navigationController.barHideOnSwipeGestureRecognizer || + g2 == self.tableView.panGestureRecognizer) { + return NO; + } + } + + return YES; +} + +- (BOOL)gestureRecognizerShouldBegin:(UISwipeGestureRecognizer *)gesture { + // Don't allow swiping from the carousel + CGPoint location = [gesture locationInView:self.tableView]; + if ([self.carousel hitTest:location withEvent:nil]) { + return NO; + } + + return YES; +} + +- (void)moreButtonPressed:(UIBarButtonItem *)sender { + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + // Maps preference keys to a description of what they affect + NSDictionary *explorerToggles = @{ + kFLEXDefaultsHidePropertyIvarsKey: @"Property-Backing Ivars", + kFLEXDefaultsHidePropertyMethodsKey: @"Property-Backing Methods", + kFLEXDefaultsHideMethodOverridesKey: @"Method Overrides", + kFLEXDefaultsHideVariablePreviewsKey: @"Variable Previews" + }; + + // Maps the key of the action itself to a map of a description + // of the action ("hide X") mapped to the current state. + // + // So keys that are hidden by default have NO mapped to "Show" + NSDictionary *nextStateDescriptions = @{ + kFLEXDefaultsHidePropertyIvarsKey: @{ @NO: @"Hide ", @YES: @"Show " }, + kFLEXDefaultsHidePropertyMethodsKey: @{ @NO: @"Hide ", @YES: @"Show " }, + kFLEXDefaultsHideMethodOverridesKey: @{ @NO: @"Show ", @YES: @"Hide " }, + kFLEXDefaultsHideVariablePreviewsKey: @{ @NO: @"Hide ", @YES: @"Show " }, + }; + + [FLEXAlert makeSheet:^(FLEXAlert *make) { + make.title(@"Options"); + + for (NSString *option in explorerToggles.allKeys) { + BOOL current = [defaults boolForKey:option]; + NSString *title = [nextStateDescriptions[option][@(current)] + stringByAppendingString:explorerToggles[option] + ]; + make.button(title).handler(^(NSArray *strings) { + [NSUserDefaults.standardUserDefaults toggleBoolForKey:option]; + [self fullyReloadData]; + }); + } + + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + +#pragma mark - Description + +- (BOOL)shouldShowDescription { + // Hide if we have filter text; it is rarely + // useful to see the description when searching + // since it's already at the top of the screen + if (self.filterText.length) { + return NO; + } + + return YES; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + // For the description section, we want that nice slim/snug looking row. + // Other rows use the automatic size. + FLEXTableViewSection *section = self.filterDelegate.sections[indexPath.section]; + + if (section == self.descriptionSection) { + NSAttributedString *attributedText = [[NSAttributedString alloc] + initWithString:self.explorer.objectDescription + attributes:@{ NSFontAttributeName : UIFont.flex_defaultTableCellFont } + ]; + + return [FLEXMultilineTableViewCell + preferredHeightWithAttributedText:attributedText + maxWidth:tableView.frame.size.width - tableView.separatorInset.right + style:tableView.style + showsAccessory:NO + ]; + } + + return UITableViewAutomaticDimension; +} + +- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { + return self.filterDelegate.sections[indexPath.section] == self.descriptionSection; +} + +- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + // Only the description section has "actions" + if (self.filterDelegate.sections[indexPath.section] == self.descriptionSection) { + return action == @selector(copy:); + } + + return NO; +} + +- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + if (action == @selector(copy:)) { + UIPasteboard.generalPasteboard.string = self.explorer.objectDescription; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.h new file mode 100644 index 00000000..b741e157 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.h @@ -0,0 +1,98 @@ +// +// FLEXCollectionContentSection.h +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTableViewSection.h" +#import "FLEXObjectInfoSection.h" +@class FLEXCollectionContentSection, FLEXTableViewCell; +@protocol FLEXCollection, FLEXMutableCollection; + +typedef id(^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 + +@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 +- (void)filterUsingPredicate:(NSPredicate *)predicate; +@end + +@interface NSArray (FLEXCollection) @end +@interface NSSet (FLEXCollection) @end +@interface NSOrderedSet (FLEXCollection) @end +@interface NSDictionary (FLEXCollection) @end + +@interface NSMutableArray (FLEXMutableCollection) @end +@interface NSMutableSet (FLEXMutableCollection) @end +@interface NSMutableOrderedSet (FLEXMutableCollection) @end +@interface NSMutableDictionary (FLEXMutableCollection) +- (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 { + @protected + /// Unused if initialized with a future + id _collection; + /// Unused if initialized with a collection + FLEXCollectionContentFuture _collectionFuture; + /// The filtered collection from \c _collection or \c _collectionFuture + id _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) 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; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.m new file mode 100644 index 00000000..d481d446 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.m @@ -0,0 +1,222 @@ +// +// FLEXCollectionContentSection.m +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXCollectionContentSection.h" +#import "FLEXUtility.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXSubtitleTableViewCell.h" +#import "FLEXTableView.h" +#import "FLEXObjectExplorerFactory.h" + +typedef NS_ENUM(NSUInteger, FLEXCollectionType) { + FLEXUnsupportedCollection, + FLEXOrderedCollection, + FLEXUnorderedCollection, + FLEXKeyedCollection +}; + +@interface FLEXCollectionContentSection () +@property (nonatomic, copy) id cachedCollection; +@property (nonatomic, readonly) id collection; +@property (nonatomic, readonly) FLEXCollectionContentFuture collectionFuture; +@property (nonatomic, readonly) FLEXCollectionType collectionType; +@end + +@implementation FLEXCollectionContentSection +@synthesize filterText = _filterText; + +#pragma mark Initialization + ++ (instancetype)forObject:(id)object { + return [self forCollection:object]; +} + ++ (id)forCollection:(id)collection { + FLEXCollectionContentSection *section = [self new]; + section->_collectionType = [self typeForCollection:collection]; + section->_collection = collection; + section.cachedCollection = collection; + return section; +} + ++ (id)forReusableFuture:(FLEXCollectionContentFuture)collectionFuture { + FLEXCollectionContentSection *section = [self new]; + section->_collectionFuture = collectionFuture; + section.cachedCollection = collectionFuture(section); + section->_collectionType = [self typeForCollection:section.cachedCollection]; + return section; +} + + +#pragma mark - Misc + ++ (FLEXCollectionType)typeForCollection:(id)collection { + // Order matters here, as NSDictionary is keyed but it responds to allObjects + if ([collection respondsToSelector:@selector(objectAtIndex:)]) { + return FLEXOrderedCollection; + } + if ([collection respondsToSelector:@selector(objectForKey:)]) { + return FLEXKeyedCollection; + } + if ([collection respondsToSelector:@selector(allObjects)]) { + return FLEXUnorderedCollection; + } + + [NSException raise:NSInvalidArgumentException + format:@"Given collection does not properly conform to FLEXCollection"]; + return FLEXUnsupportedCollection; +} + +/// Row titles +/// - Ordered: the index +/// - Unordered: the object +/// - Keyed: the key +- (NSString *)titleForRow:(NSInteger)row { + switch (self.collectionType) { + case FLEXOrderedCollection: + if (!self.hideOrderIndexes) { + return @(row).stringValue; + } + // Fall-through + case FLEXUnorderedCollection: + return [self describe:[self objectForRow:row]]; + case FLEXKeyedCollection: + return [self describe:self.cachedCollection.allKeys[row]]; + + case FLEXUnsupportedCollection: + return nil; + } +} + +/// Row subtitles +/// - Ordered: the object +/// - Unordered: nothing +/// - Keyed: the value +- (NSString *)subtitleForRow:(NSInteger)row { + switch (self.collectionType) { + case FLEXOrderedCollection: + if (!self.hideOrderIndexes) { + nil; + } + // Fall-through + case FLEXKeyedCollection: + return [self describe:[self objectForRow:row]]; + case FLEXUnorderedCollection: + return nil; + + case FLEXUnsupportedCollection: + return nil; + } +} + +- (NSString *)describe:(id)object { + return [FLEXRuntimeUtility summaryForObject:object]; +} + +- (id)objectForRow:(NSInteger)row { + switch (self.collectionType) { + case FLEXOrderedCollection: + return self.cachedCollection[row]; + case FLEXUnorderedCollection: + return self.cachedCollection.allObjects[row]; + case FLEXKeyedCollection: + return self.cachedCollection[self.cachedCollection.allKeys[row]]; + + case FLEXUnsupportedCollection: + return nil; + } +} + + +#pragma mark - Overrides + +- (NSString *)title { + if (!self.hideSectionTitle) { + if (self.customTitle) { + return self.customTitle; + } + + return FLEXPluralString(self.cachedCollection.count, @"Entries", @"Entry"); + } + + return nil; +} + +- (NSInteger)numberOfRows { + return self.cachedCollection.count; +} + +- (void)setFilterText:(NSString *)filterText { + super.filterText = filterText; + + if (filterText.length) { + BOOL (^matcher)(id, id) = self.customFilter ?: ^BOOL(NSString *query, id obj) { + return [[self describe:obj] localizedCaseInsensitiveContainsString:query]; + }; + + NSPredicate *filter = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) { + return matcher(filterText, obj); + }]; + + id tmp = self.collection.mutableCopy; + [tmp filterUsingPredicate:filter]; + self.cachedCollection = tmp; + } else { + self.cachedCollection = self.collection ?: self.collectionFuture(self); + } +} + +- (void)reloadData { + if (self.collectionFuture) { + self.cachedCollection = self.collectionFuture(self); + } else { + self.cachedCollection = self.collection.copy; + } +} + +- (BOOL)canSelectRow:(NSInteger)row { + return YES; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:[self objectForRow:row]]; +} + +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + return kFLEXDetailCell; +} + +- (void)configureCell:(__kindof FLEXTableViewCell *)cell forRow:(NSInteger)row { + cell.titleLabel.text = [self titleForRow:row]; + cell.subtitleLabel.text = [self subtitleForRow:row]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; +} + +@end + + +#pragma mark - NSMutableDictionary + +@implementation NSMutableDictionary (FLEXMutableCollection) + +- (void)filterUsingPredicate:(NSPredicate *)predicate { + id test = ^BOOL(id key, NSUInteger idx, BOOL *stop) { + if ([predicate evaluateWithObject:key]) { + return NO; + } + + return ![predicate evaluateWithObject:self[key]]; + }; + + NSArray *keys = self.allKeys; + NSIndexSet *remove = [keys indexesOfObjectsPassingTest:test]; + + [self removeObjectsForKeys:[keys objectsAtIndexes:remove]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.h new file mode 100644 index 00000000..2977207c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.h @@ -0,0 +1,16 @@ +// +// FLEXColorPreviewSection.h +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXSingleRowSection.h" +#import "FLEXObjectInfoSection.h" + +@interface FLEXColorPreviewSection : FLEXSingleRowSection + ++ (instancetype)forObject:(UIColor *)color; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.m new file mode 100644 index 00000000..3da50872 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.m @@ -0,0 +1,30 @@ +// +// FLEXColorPreviewSection.m +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXColorPreviewSection.h" + +@implementation FLEXColorPreviewSection + ++ (instancetype)forObject:(UIColor *)color { + return [self title:@"Color" reuse:nil cell:^(__kindof UITableViewCell *cell) { + cell.backgroundColor = color; + }]; +} + +- (BOOL)canSelectRow:(NSInteger)row { + return NO; +} + +- (BOOL (^)(NSString *))filterMatcher { + return ^BOOL(NSString *filterText) { + // Hide when searching + return !filterText.length; + }; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.h new file mode 100644 index 00000000..6722654c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.h @@ -0,0 +1,27 @@ +// +// FLEXDefaultsContentSection.h +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXCollectionContentSection.h" +#import "FLEXObjectInfoSection.h" + +@interface FLEXDefaultsContentSection : FLEXCollectionContentSection + +/// 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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.m new file mode 100644 index 00000000..a2fe076c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.m @@ -0,0 +1,94 @@ +// +// FLEXDefaultsContentSection.m +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXDefaultsContentSection.h" + +@interface FLEXDefaultsContentSection () +@property (nonatomic) NSUserDefaults *defaults; +@property (nonatomic) NSArray *keys; +@property (nonatomic, readonly) NSDictionary *whitelistedDefaults; +@end + +@implementation FLEXDefaultsContentSection +@synthesize keys = _keys; + +#pragma mark Initialization + ++ (instancetype)forObject:(id)object { + return [self forDefaults:object]; +} + ++ (instancetype)standard { + return [self forDefaults:NSUserDefaults.standardUserDefaults]; +} + ++ (instancetype)forDefaults:(NSUserDefaults *)userDefaults { + FLEXDefaultsContentSection *section = [self forReusableFuture:^id(FLEXDefaultsContentSection *section) { + section.defaults = userDefaults; + section.onlyShowKeysForAppPrefs = YES; + return section.whitelistedDefaults; + }]; + return section; +} + +#pragma mark - Overrides + +- (NSString *)title { + return @"Defaults"; +} + +#pragma mark - Private + +- (NSArray *)keys { + if (!_keys) { + if (self.onlyShowKeysForAppPrefs) { + // Read keys from preferences file + NSString *bundle = NSBundle.mainBundle.bundleIdentifier; + NSString *prefsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences"]; + NSString *filePath = [NSString stringWithFormat:@"%@/%@.plist", prefsPath, bundle]; + self.keys = [NSDictionary dictionaryWithContentsOfFile:filePath].allKeys; + } else { + self.keys = self.defaults.dictionaryRepresentation.allKeys; + } + } + + return _keys; +} + +- (void)setKeys:(NSArray *)keys { + _keys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; +} + +- (NSDictionary *)whitelistedDefaults { + // Case: no whitelisting + if (!self.onlyShowKeysForAppPrefs) { + return self.defaults.dictionaryRepresentation; + } + + // Always regenerate key whitelist when this method is called + _keys = nil; + + // Generate new dictionary from whitelisted keys + NSArray *values = [self.defaults.dictionaryRepresentation + objectsForKeys:self.keys notFoundMarker:NSNull.null + ]; + return [NSDictionary dictionaryWithObjects:values forKeys:self.keys]; +} + +#pragma mark - Public + +- (void)setOnlyShowKeysForAppPrefs:(BOOL)onlyShowKeysForAppPrefs { + if (onlyShowKeysForAppPrefs) { + // This property only applies if we're using standardUserDefaults + if (self.defaults != NSUserDefaults.standardUserDefaults) return; + } + + _onlyShowKeysForAppPrefs = onlyShowKeysForAppPrefs; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.h new file mode 100644 index 00000000..e6cffb7d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.h @@ -0,0 +1,37 @@ +// +// FLEXMetadataSection.h +// FLEX +// +// Created by Tanner Bennett on 9/19/19. +// Copyright © 2019 Flipboard. 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 *excludedMetadata; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.m new file mode 100644 index 00000000..628dc0ba --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMetadataSection.m @@ -0,0 +1,237 @@ +// +// FLEXMetadataSection.m +// FLEX +// +// Created by Tanner Bennett on 9/19/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXMetadataSection.h" +#import "FLEXTableView.h" +#import "FLEXTableViewCell.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXFieldEditorViewController.h" +#import "FLEXMethodCallingViewController.h" +#import "FLEXIvar.h" +#import "NSArray+FLEX.h" +#import "FLEXRuntime+UIKitHelpers.h" + +@interface FLEXMetadataSection () +@property (nonatomic, readonly) FLEXObjectExplorer *explorer; +/// Filtered +@property (nonatomic, copy) NSArray> *metadata; +/// Unfiltered +@property (nonatomic, copy) NSArray> *allMetadata; +@end + +@implementation FLEXMetadataSection + +#pragma mark - Initialization + ++ (instancetype)explorer:(FLEXObjectExplorer *)explorer kind:(FLEXMetadataKind)metadataKind { + return [[self alloc] initWithExplorer:explorer kind:metadataKind]; +} + +- (id)initWithExplorer:(FLEXObjectExplorer *)explorer kind:(FLEXMetadataKind)metadataKind { + self = [super init]; + if (self) { + _explorer = explorer; + _metadataKind = metadataKind; + + [self reloadData]; + } + + return self; +} + +#pragma mark - Private + +- (NSString *)titleWithBaseName:(NSString *)baseName { + unsigned long totalCount = self.allMetadata.count; + unsigned long filteredCount = self.metadata.count; + + if (totalCount == filteredCount) { + return [baseName stringByAppendingFormat:@" (%lu)", totalCount]; + } else { + return [baseName stringByAppendingFormat:@" (%lu of %lu)", filteredCount, totalCount]; + } +} + +- (UITableViewCellAccessoryType)accessoryTypeForRow:(NSInteger)row { + return [self.metadata[row] suggestedAccessoryTypeWithTarget:self.explorer.object]; +} + +#pragma mark - Public + +- (void)setExcludedMetadata:(NSSet *)excludedMetadata { + _excludedMetadata = excludedMetadata; + [self reloadData]; +} + +#pragma mark - Overrides + +- (NSString *)titleForRow:(NSInteger)row { + return [self.metadata[row] description]; +} + +- (NSString *)subtitleForRow:(NSInteger)row { + return [self.metadata[row] previewWithTarget:self.explorer.object]; +} + +- (NSString *)title { + switch (self.metadataKind) { + case FLEXMetadataKindProperties: + return [self titleWithBaseName:@"Properties"]; + case FLEXMetadataKindClassProperties: + return [self titleWithBaseName:@"Class Properties"]; + case FLEXMetadataKindIvars: + return [self titleWithBaseName:@"Ivars"]; + case FLEXMetadataKindMethods: + return [self titleWithBaseName:@"Methods"]; + case FLEXMetadataKindClassMethods: + return [self titleWithBaseName:@"Class Methods"]; + case FLEXMetadataKindClassHierarchy: + return [self titleWithBaseName:@"Class Hierarchy"]; + case FLEXMetadataKindProtocols: + return [self titleWithBaseName:@"Protocols"]; + case FLEXMetadataKindOther: + return @"Miscellaneous"; + } +} + +- (NSInteger)numberOfRows { + return self.metadata.count; +} + +- (void)setFilterText:(NSString *)filterText { + super.filterText = filterText; + + if (!self.filterText.length) { + self.metadata = self.allMetadata; + } else { + self.metadata = [self.allMetadata flex_filtered:^BOOL(FLEXProperty *obj, NSUInteger idx) { + return [obj.description localizedCaseInsensitiveContainsString:self.filterText]; + }]; + } +} + +- (void)reloadData { + switch (self.metadataKind) { + case FLEXMetadataKindProperties: + self.allMetadata = self.explorer.properties; + break; + case FLEXMetadataKindClassProperties: + self.allMetadata = self.explorer.classProperties; + break; + case FLEXMetadataKindIvars: + self.allMetadata = self.explorer.ivars; + break; + case FLEXMetadataKindMethods: + self.allMetadata = self.explorer.methods; + break; + case FLEXMetadataKindClassMethods: + self.allMetadata = self.explorer.classMethods; + break; + case FLEXMetadataKindProtocols: + self.allMetadata = self.explorer.conformedProtocols; + break; + case FLEXMetadataKindClassHierarchy: + self.allMetadata = self.explorer.classHierarchy; + break; + case FLEXMetadataKindOther: + self.allMetadata = @[self.explorer.instanceSize, self.explorer.imageName]; + break; + } + + // Remove excluded metadata + if (self.excludedMetadata.count) { + id filterBlock = ^BOOL(id obj, NSUInteger idx) { + return ![self.excludedMetadata containsObject:obj.name]; + }; + + // Filter exclusions and sort + self.allMetadata = [[self.allMetadata flex_filtered:filterBlock] + sortedArrayUsingSelector:@selector(compare:) + ]; + } + + // Re-filter data + self.filterText = self.filterText; +} + +- (BOOL)canSelectRow:(NSInteger)row { + UITableViewCellAccessoryType accessory = [self accessoryTypeForRow:row]; + return accessory == UITableViewCellAccessoryDisclosureIndicator || + accessory == UITableViewCellAccessoryDetailDisclosureButton; +} + +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + return [self.metadata[row] reuseIdentifierWithTarget:self.explorer.object] ?: kFLEXCodeFontCell; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return [self.metadata[row] viewerWithTarget:self.explorer.object]; +} + +- (void (^)(__kindof UIViewController *))didPressInfoButtonAction:(NSInteger)row { + return ^(UIViewController *host) { + [host.navigationController pushViewController:[self editorForRow:row] animated:YES]; + }; +} + +- (UIViewController *)editorForRow:(NSInteger)row { + return [self.metadata[row] editorWithTarget:self.explorer.object]; +} + +- (void)configureCell:(__kindof FLEXTableViewCell *)cell forRow:(NSInteger)row { + cell.titleLabel.text = [self titleForRow:row]; + cell.subtitleLabel.text = [self subtitleForRow:row]; + cell.accessoryType = [self accessoryTypeForRow:row]; +} + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSString *)menuSubtitleForRow:(NSInteger)row { + return [self.metadata[row] contextualSubtitleWithTarget:self.explorer.object]; +} + +- (NSArray *)menuItemsForRow:(NSInteger)row sender:(UIViewController *)sender { + NSArray *existingItems = [super menuItemsForRow:row sender:sender]; + + // These two metadata kinds don't any of the additional options below + switch (self.metadataKind) { + case FLEXMetadataKindClassHierarchy: + case FLEXMetadataKindOther: + return existingItems; + + default: break; + } + + id metadata = self.metadata[row]; + NSMutableArray *menuItems = [NSMutableArray new]; + + [menuItems addObject:[UIAction + actionWithTitle:@"Explore Metadata" + image:nil + identifier:nil + handler:^(__kindof UIAction *action) { + [sender.navigationController pushViewController:[FLEXObjectExplorerFactory + explorerViewControllerForObject:metadata + ] animated:YES]; + } + ]]; + [menuItems addObjectsFromArray:[metadata + additionalActionsWithTarget:self.explorer.object sender:sender + ]]; + [menuItems addObjectsFromArray:existingItems]; + + return menuItems.copy; +} + +- (NSArray *)copyMenuItemsForRow:(NSInteger)row { + return [self.metadata[row] copiableMetadataWithTarget:self.explorer.object]; +} + +#endif + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.h new file mode 100644 index 00000000..cf009584 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.h @@ -0,0 +1,58 @@ +// +// FLEXMutableListSection.h +// FLEX +// +// Created by Tanner on 3/9/20. +// Copyright © 2020 Flipboard. 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 *)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) void (^selectionHandler)(__kindof UIViewController * host, id element); + +/// The objects representing all possible rows in the section. +@property (nonatomic) NSArray *list; +/// The objects representing the currently unfiltered rows in the section. +@property (nonatomic, readonly) NSArray *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 *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 + diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.m new file mode 100644 index 00000000..b54793ac --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXMutableListSection.m @@ -0,0 +1,107 @@ +// +// FLEXMutableListSection.m +// FLEX +// +// Created by Tanner on 3/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXMutableListSection.h" + +@interface FLEXMutableListSection () +@property (nonatomic, readonly) FLEXMutableListCellForElement configureCell; +@end + +@implementation FLEXMutableListSection +@synthesize cellRegistrationMapping = _cellRegistrationMapping; + +#pragma mark - Initialization + ++ (instancetype)list:(NSArray *)list + cellConfiguration:(FLEXMutableListCellForElement)cellConfig + filterMatcher:(BOOL(^)(NSString *, id))filterBlock { + return [[self alloc] initWithList:list configurationBlock:cellConfig filterMatcher:filterBlock]; +} + +- (id)initWithList:(NSArray *)list +configurationBlock:(FLEXMutableListCellForElement)cellConfig + filterMatcher:(BOOL(^)(NSString *, id))filterBlock { + self = [super init]; + if (self) { + _configureCell = cellConfig; + + self.list = list.mutableCopy; + self.customFilter = filterBlock; + self.hideSectionTitle = YES; + } + + return self; +} + + +#pragma mark - Public + +- (NSArray *)list { + return (id)_collection; +} + +- (void)setList:(NSMutableArray *)list { + NSParameterAssert(list); + _collection = list; + + [self reloadData]; +} + +- (NSArray *)filteredList { + return (id)_cachedCollection; +} + +- (void)mutate:(void (^)(NSMutableArray *))block { + block((NSMutableArray *)_collection); + [self reloadData]; +} + + +#pragma mark - Overrides + +- (void)setCustomTitle:(NSString *)customTitle { + super.customTitle = customTitle; + self.hideSectionTitle = customTitle == nil; +} + +- (BOOL)canSelectRow:(NSInteger)row { + return self.selectionHandler != nil; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + return nil; +} + +- (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { + if (self.selectionHandler) { + return ^(UIViewController *host) { + self.selectionHandler(host, self.filteredList[row]); + }; + } + + return nil; +} + +- (void)configureCell:(__kindof UITableViewCell *)cell forRow:(NSInteger)row { + self.configureCell(cell, self.filteredList[row], row); +} + +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + if (self.cellRegistrationMapping.count) { + return self.cellRegistrationMapping.allKeys.firstObject; + } + + return [super reuseIdentifierForRow:row]; +} + +- (void)setCellRegistrationMapping:(NSDictionary *)cellRegistrationMapping { + NSParameterAssert(cellRegistrationMapping.count <= 1); + _cellRegistrationMapping = cellRegistrationMapping; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXObjectInfoSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXObjectInfoSection.h new file mode 100644 index 00000000..1558e3e4 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/FLEXObjectInfoSection.h @@ -0,0 +1,19 @@ +// +// FLEXObjectInfoSection.h +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +/// \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 + ++ (instancetype)forObject:(id)object; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.h new file mode 100644 index 00000000..ce1ad46d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.h @@ -0,0 +1,19 @@ +// +// FLEXBlockShortcuts.h +// FLEX +// +// Created by Tanner on 1/30/20. +// Copyright © 2020 Flipboard. 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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.m new file mode 100644 index 00000000..201d0926 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.m @@ -0,0 +1,59 @@ +// +// FLEXBlockShortcuts.m +// FLEX +// +// Created by Tanner on 1/30/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXBlockShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXBlockDescription.h" +#import "FLEXObjectExplorerFactory.h" + +#pragma mark - +@implementation FLEXBlockShortcuts + +#pragma mark Overrides + ++ (instancetype)forObject:(id)block { + NSParameterAssert([block isKindOfClass:NSClassFromString(@"NSBlock")]); + + FLEXBlockDescription *blockInfo = [FLEXBlockDescription describing:block]; + NSMethodSignature *signature = blockInfo.signature; + NSArray *blockShortcutRows = @[blockInfo.summary]; + + if (signature) { + blockShortcutRows = @[ + blockInfo.summary, + blockInfo.sourceDeclaration, + signature.debugDescription, + [FLEXActionShortcut title:@"View Method Signature" + subtitle:^NSString *(id block) { + return signature.description ?: @"unsupported signature"; + } + viewer:^UIViewController *(id block) { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:signature]; + } + accessoryType:^UITableViewCellAccessoryType(id view) { + if (signature) { + return UITableViewCellAccessoryDisclosureIndicator; + } + return UITableViewCellAccessoryNone; + } + ] + ]; + } + + return [self forObject:block additionalRows:blockShortcutRows]; +} + +- (NSString *)title { + return @"Metadata"; +} + +- (NSInteger)numberOfLines { + return 0; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.h new file mode 100644 index 00000000..ce18e91e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.h @@ -0,0 +1,18 @@ +// +// FLEXBundleShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +NS_ASSUME_NONNULL_BEGIN + +/// Provides a "Browse Bundle Directory" action +@interface FLEXBundleShortcuts : FLEXShortcutsSection + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.m new file mode 100644 index 00000000..02d74219 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.m @@ -0,0 +1,113 @@ +// +// FLEXBundleShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXBundleShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXAlert.h" +#import "FLEXRuntimeExporter.h" +#import "FLEXTableListViewController.h" +#import "FLEXFileBrowserController.h" + +#pragma mark - +@implementation FLEXBundleShortcuts +#pragma mark Overrides + ++ (instancetype)forObject:(NSBundle *)bundle { + return [self forObject:bundle additionalRows:@[ + [FLEXActionShortcut + title:@"Browse Bundle Directory" subtitle:nil + viewer:^UIViewController *(NSBundle *bundle) { + return [FLEXFileBrowserController path:bundle.bundlePath]; + } + accessoryType:^UITableViewCellAccessoryType(NSBundle *bundle) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + [FLEXActionShortcut title:@"Browse Bundle as Database…" subtitle:nil + selectionHandler:^(UIViewController *host, NSBundle *bundle) { + [self promptToExportBundleAsDatabase:bundle host:host]; + } + accessoryType:^UITableViewCellAccessoryType(NSBundle *bundle) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + ]]; +} + ++ (void)promptToExportBundleAsDatabase:(NSBundle *)bundle host:(UIViewController *)host { + [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Save As…").message( + @"The database be saved in the Library folder. " + "Depending on the number of classes, it may take " + "10 minutes or more to finish exporting. 20,000 " + "classes takes about 7 minutes." + ); + make.configuredTextField(^(UITextField *field) { + field.placeholder = @"FLEXRuntimeExport.objc.db"; + field.text = [NSString stringWithFormat: + @"%@.objc.db", bundle.executablePath.lastPathComponent + ]; + }); + make.button(@"Start").handler(^(NSArray *strings) { + [self browseBundleAsDatabase:bundle host:host name:strings[0]]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:host]; +} + ++ (void)browseBundleAsDatabase:(NSBundle *)bundle host:(UIViewController *)host name:(NSString *)name { + NSParameterAssert(name.length); + + UIAlertController *progress = [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Generating Database"); + // Some iOS version glitch out of there is + // no initial message and you add one later + make.message(@"…"); + }]; + + [host presentViewController:progress animated:YES completion:^{ + // Generate path to store db + NSString *path = [NSSearchPathForDirectoriesInDomains( + NSLibraryDirectory, NSUserDomainMask, YES + )[0] stringByAppendingPathComponent:name]; + + progress.message = [path stringByAppendingString:@"\n\nCreating database…"]; + + // Generate db and show progress + [FLEXRuntimeExporter createRuntimeDatabaseAtPath:path + forImages:@[bundle.executablePath] + progressHandler:^(NSString *status) { + dispatch_async(dispatch_get_main_queue(), ^{ + progress.message = [progress.message + stringByAppendingFormat:@"\n%@", status + ]; + [progress.view setNeedsLayout]; + [progress.view layoutIfNeeded]; + }); + } completion:^(NSString *error) { + // Display error if any + if (error) { + progress.title = @"Error"; + progress.message = error; + [progress addAction:[UIAlertAction + actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:nil] + ]; + } + // Browse database + else { + [progress dismissViewControllerAnimated:YES completion:nil]; + [host.navigationController pushViewController:[ + [FLEXTableListViewController alloc] initWithPath:path + ] animated:YES]; + } + } + ]; + }]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.h new file mode 100644 index 00000000..11e7deeb --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.h @@ -0,0 +1,17 @@ +// +// FLEXClassShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 11/22/19. +// Copyright © 2019 Flipboard. 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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.m new file mode 100644 index 00000000..16921172 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.m @@ -0,0 +1,72 @@ +// +// FLEXClassShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 11/22/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXClassShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXObjectListViewController.h" +#import "NSObject+FLEX_Reflection.h" + +@interface FLEXClassShortcuts () +@property (nonatomic, readonly) Class cls; +@end + +@implementation FLEXClassShortcuts + ++ (instancetype)forObject:(Class)cls { + // These additional rows will appear at the beginning of the shortcuts section. + // The methods below are written in such a way that they will not interfere + // with properties/etc being registered alongside these + return [self forObject:cls additionalRows:@[ + [FLEXActionShortcut title:@"Find Live Instances" subtitle:nil + viewer:^UIViewController *(id obj) { + return [FLEXObjectListViewController + instancesOfClassWithName:NSStringFromClass(obj) + ]; + } + accessoryType:^UITableViewCellAccessoryType(id obj) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + [FLEXActionShortcut title:@"List Subclasses" subtitle:nil + viewer:^UIViewController *(id obj) { + NSString *name = NSStringFromClass(obj); + return [FLEXObjectListViewController subclassesOfClassWithName:name]; + } + accessoryType:^UITableViewCellAccessoryType(id view) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + [FLEXActionShortcut title:@"Explore Bundle for Class" + subtitle:^NSString *(id obj) { + return [self shortNameForBundlePath:[NSBundle bundleForClass:obj].executablePath]; + } + viewer:^UIViewController *(id obj) { + NSBundle *bundle = [NSBundle bundleForClass:obj]; + return [FLEXObjectExplorerFactory explorerViewControllerForObject:bundle]; + } + accessoryType:^UITableViewCellAccessoryType(id view) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + ]]; +} + ++ (NSString *)shortNameForBundlePath:(NSString *)imageName { + NSArray *components = [imageName componentsSeparatedByString:@"/"]; + if (components.count >= 2) { + return [NSString stringWithFormat:@"%@/%@", + components[components.count - 2], + components[components.count - 1] + ]; + } + + return imageName.lastPathComponent; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.h new file mode 100644 index 00000000..aafed749 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.h @@ -0,0 +1,16 @@ +// +// FLEXImageShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +/// Provides "view image" and "save image" shortcuts for UIImage objects +@interface FLEXImageShortcuts : FLEXShortcutsSection + ++ (instancetype)forObject:(UIImage *)image; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.m new file mode 100644 index 00000000..e88cc48e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.m @@ -0,0 +1,67 @@ +// +// FLEXImageShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXImageShortcuts.h" +#import "FLEXImagePreviewViewController.h" +#import "FLEXShortcut.h" +#import "FLEXAlert.h" + +@interface UIAlertController (FLEXImageShortcuts) +- (void)flex_image:(UIImage *)image disSaveWithError:(NSError *)error :(void *)context; +@end + +@implementation FLEXImageShortcuts + +#pragma mark - Overrides + ++ (instancetype)forObject:(UIImage *)image { + // These additional rows will appear at the beginning of the shortcuts section. + // The methods below are written in such a way that they will not interfere + // with properties/etc being registered alongside these + return [self forObject:image additionalRows:@[ + [FLEXActionShortcut title:@"View Image" subtitle:nil + viewer:^UIViewController *(id image) { + return [FLEXImagePreviewViewController forImage:image]; + } + accessoryType:^UITableViewCellAccessoryType(id image) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ], + [FLEXActionShortcut title:@"Save Image" subtitle:nil + selectionHandler:^(UIViewController *host, id image) { + // Present modal alerting user about saving + UIAlertController *alert = [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Saving Image…"); + }]; + [host presentViewController:alert animated:YES completion:nil]; + + // Save the image + UIImageWriteToSavedPhotosAlbum( + image, alert, @selector(flex_image:disSaveWithError::), nil + ); + } + accessoryType:^UITableViewCellAccessoryType(id image) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ] + ]]; +} + +@end + + +@implementation UIAlertController (FLEXImageShortcuts) + +- (void)flex_image:(UIImage *)image disSaveWithError:(NSError *)error :(void *)context { + self.title = @"Image Saved"; + flex_dispatch_after(1, dispatch_get_main_queue(), ^{ + [self dismissViewControllerAnimated:YES completion:nil]; + }); +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.h new file mode 100644 index 00000000..c1dac30f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.h @@ -0,0 +1,15 @@ +// +// FLEXLayerShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +@interface FLEXLayerShortcuts : FLEXShortcutsSection + ++ (instancetype)forObject:(CALayer *)layer; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.m new file mode 100644 index 00000000..b6ee84c9 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.m @@ -0,0 +1,28 @@ +// +// FLEXLayerShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXLayerShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXImagePreviewViewController.h" + +@implementation FLEXLayerShortcuts + ++ (instancetype)forObject:(CALayer *)layer { + return [self forObject:layer additionalRows:@[ + [FLEXActionShortcut title:@"Preview Image" subtitle:nil + viewer:^UIViewController *(id layer) { + return [FLEXImagePreviewViewController previewForLayer:layer]; + } + accessoryType:^UITableViewCellAccessoryType(id layer) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ] + ]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h new file mode 100644 index 00000000..bd0b9e14 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h @@ -0,0 +1,71 @@ +// +// FLEXShortcut.h +// FLEX +// +// Created by Tanner Bennett on 12/10/19. +// Copyright © 2019 Flipboard. 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 + +- (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; + +@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 + +/// @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)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 + ++ (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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.m new file mode 100644 index 00000000..9304b661 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.m @@ -0,0 +1,254 @@ +// +// FLEXShortcut.m +// FLEX +// +// Created by Tanner Bennett on 12/10/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcut.h" +#import "FLEXProperty.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXIvar.h" +#import "FLEXMethod.h" +#import "FLEXRuntime+UIKitHelpers.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXFieldEditorViewController.h" +#import "FLEXMethodCallingViewController.h" +#import "FLEXMetadataSection.h" +#import "FLEXTableView.h" + + +#pragma mark - FLEXShortcut + +@interface FLEXShortcut () { + id _item; +} + +@property (nonatomic, readonly) FLEXMetadataKind metadataKind; +@property (nonatomic, readonly) FLEXProperty *property; +@property (nonatomic, readonly) FLEXMethod *method; +@property (nonatomic, readonly) FLEXIvar *ivar; +@property (nonatomic, readonly) id metadata; +@end + +@implementation FLEXShortcut +@synthesize defaults = _defaults; + ++ (id)shortcutFor:(id)item { + if ([item conformsToProtocol:@protocol(FLEXShortcut)]) { + return item; + } + + FLEXShortcut *shortcut = [self new]; + shortcut->_item = item; + + if ([item isKindOfClass:[FLEXProperty class]]) { + if (shortcut.property.isClassProperty) { + shortcut->_metadataKind = FLEXMetadataKindClassProperties; + } else { + shortcut->_metadataKind = FLEXMetadataKindProperties; + } + } + if ([item isKindOfClass:[FLEXIvar class]]) { + shortcut->_metadataKind = FLEXMetadataKindIvars; + } + if ([item isKindOfClass:[FLEXMethod class]]) { + // We don't care if it's a class method or not + shortcut->_metadataKind = FLEXMetadataKindMethods; + } + + return shortcut; +} + +- (id)propertyOrIvarValue:(id)object { + return [self.metadata currentValueWithTarget:object]; +} + +- (NSString *)titleWith:(id)object { + switch (self.metadataKind) { + case FLEXMetadataKindClassProperties: + case FLEXMetadataKindProperties: + // Since we're outside of the "properties" section, prepend @property for clarity. + return [@"@property " stringByAppendingString:[_item description]]; + + default: + return [_item description]; + } + + NSAssert( + [_item isKindOfClass:[NSString class]], + @"Unexpected type: %@", [_item class] + ); + + return _item; +} + +- (NSString *)subtitleWith:(id)object { + if (self.metadataKind) { + return [self.metadata previewWithTarget:object]; + } + + // Item is probably a string; must return empty string since + // these will be gathered into an array. If the object is a + // just a string, it doesn't get a subtitle. + return @""; +} + +- (void (^)(UIViewController *))didSelectActionWith:(id)object { + return nil; +} + +- (UIViewController *)viewerWith:(id)object { + NSAssert(self.metadataKind, @"Static titles cannot be viewed"); + return [self.metadata viewerWithTarget:object]; +} + +- (UIViewController *)editorWith:(id)object { + NSAssert(self.metadataKind, @"Static titles cannot be edited"); + return [self.metadata editorWithTarget:object]; +} + +- (UITableViewCellAccessoryType)accessoryTypeWith:(id)object { + if (self.metadataKind) { + return [self.metadata suggestedAccessoryTypeWithTarget:object]; + } + + return UITableViewCellAccessoryNone; +} + +- (NSString *)customReuseIdentifierWith:(id)object { + if (self.metadataKind) { + return kFLEXCodeFontCell; + } + + return kFLEXMultilineCell; +} + +#pragma mark FLEXObjectExplorerDefaults + +- (void)setDefaults:(FLEXObjectExplorerDefaults *)defaults { + _defaults = defaults; + + if (_metadataKind) { + self.metadata.defaults = defaults; + } +} + +- (BOOL)isEditable { + if (_metadataKind) { + return self.metadata.isEditable; + } + + return NO; +} + +- (BOOL)isCallable { + if (_metadataKind) { + return self.metadata.isCallable; + } + + return NO; +} + +#pragma mark - Helpers + +- (FLEXProperty *)property { return _item; } +- (FLEXMethodBase *)method { return _item; } +- (FLEXIvar *)ivar { return _item; } +- (id)metadata { return _item; } + +@end + + +#pragma mark - FLEXActionShortcut + +@interface FLEXActionShortcut () +@property (nonatomic, readonly) NSString *title; +@property (nonatomic, readonly) NSString *(^subtitleFuture)(id); +@property (nonatomic, readonly) UIViewController *(^viewerFuture)(id); +@property (nonatomic, readonly) void (^selectionHandler)(UIViewController *, id); +@property (nonatomic, readonly) UITableViewCellAccessoryType (^accessoryTypeFuture)(id); +@end + +@implementation FLEXActionShortcut +@synthesize defaults = _defaults; + ++ (instancetype)title:(NSString *)title + subtitle:(NSString *(^)(id))subtitle + viewer:(UIViewController *(^)(id))viewer + accessoryType:(UITableViewCellAccessoryType (^)(id))type { + return [[self alloc] initWithTitle:title subtitle:subtitle viewer:viewer selectionHandler:nil accessoryType:type]; +} + ++ (instancetype)title:(NSString *)title + subtitle:(NSString * (^)(id))subtitle + selectionHandler:(void (^)(UIViewController *, id))tapAction + accessoryType:(UITableViewCellAccessoryType (^)(id))type { + return [[self alloc] initWithTitle:title subtitle:subtitle viewer:nil selectionHandler:tapAction accessoryType:type]; +} + +- (id)initWithTitle:(NSString *)title + subtitle:(id)subtitleFuture + viewer:(id)viewerFuture + selectionHandler:(id)tapAction + accessoryType:(id)accessoryTypeFuture { + NSParameterAssert(title.length); + + self = [super init]; + if (self) { + id nilBlock = ^id (id obj) { return nil; }; + + _title = title; + _subtitleFuture = subtitleFuture ?: nilBlock; + _viewerFuture = viewerFuture ?: nilBlock; + _selectionHandler = tapAction; + _accessoryTypeFuture = accessoryTypeFuture ?: nilBlock; + } + + return self; +} + +- (NSString *)titleWith:(id)object { + return self.title; +} + +- (NSString *)subtitleWith:(id)object { + if (self.defaults.wantsDynamicPreviews) { + return self.subtitleFuture(object); + } + + return nil; +} + +- (void (^)(UIViewController *))didSelectActionWith:(id)object { + if (self.selectionHandler) { + return ^(UIViewController *host) { + self.selectionHandler(host, object); + }; + } + + return nil; +} + +- (UIViewController *)viewerWith:(id)object { + return self.viewerFuture(object); +} + +- (UITableViewCellAccessoryType)accessoryTypeWith:(id)object { + return self.accessoryTypeFuture(object); +} + +- (NSString *)customReuseIdentifierWith:(id)object { + if (!self.subtitleFuture(object)) { + // The text is more centered with this style if there is no subtitle + return kFLEXDefaultCell; + } + + return nil; +} + +- (BOOL)isEditable { return NO; } +- (BOOL)isCallable { return NO; } + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.h new file mode 100644 index 00000000..a1e4dc92 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.h @@ -0,0 +1,25 @@ +// +// FLEXShortcutsFactory+Defaults.h +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +@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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.m new file mode 100644 index 00000000..264f6369 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.m @@ -0,0 +1,260 @@ +// +// FLEXShortcutsFactory+Defaults.m +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsFactory+Defaults.h" +#import "FLEXShortcut.h" +#import "FLEXRuntimeUtility.h" +#import "NSObject+FLEX_Reflection.h" + +#pragma mark - Views + +@implementation FLEXShortcutsFactory (Views) + ++ (void)load { FLEX_EXIT_IF_TESTING() + // A quirk of UIView and some other classes: a lot of the `@property`s are + // not actually properties from the perspective of the runtime. + // + // We add these properties to the class at runtime if they haven't been added yet. + // This way, we can use our property editor to access and change them. + // The property attributes match the declared attributes in their headers. + + // UIView, public + Class UIView_ = UIView.class; + FLEXRuntimeUtilityTryAddNonatomicProperty(2, frame, UIView_, CGRect); + FLEXRuntimeUtilityTryAddNonatomicProperty(2, alpha, UIView_, CGFloat); + FLEXRuntimeUtilityTryAddNonatomicProperty(2, clipsToBounds, UIView_, BOOL); + FLEXRuntimeUtilityTryAddNonatomicProperty(2, opaque, UIView_, BOOL, PropertyKeyGetter(isOpaque)); + FLEXRuntimeUtilityTryAddNonatomicProperty(2, hidden, UIView_, BOOL, PropertyKeyGetter(isHidden)); + FLEXRuntimeUtilityTryAddObjectProperty(2, backgroundColor, UIView_, UIColor, PropertyKey(Copy)); + FLEXRuntimeUtilityTryAddObjectProperty(6, constraints, UIView_, NSArray, PropertyKey(ReadOnly)); + FLEXRuntimeUtilityTryAddObjectProperty(2, subviews, UIView_, NSArray, PropertyKey(ReadOnly)); + FLEXRuntimeUtilityTryAddObjectProperty(2, superview, UIView_, UIView, PropertyKey(ReadOnly)); + + // UIButton, private + FLEXRuntimeUtilityTryAddObjectProperty(2, font, UIButton.class, UIFont, PropertyKey(ReadOnly)); + + // Only available since iOS 3.2, but we never supported iOS 3, so who cares + NSArray *ivars = @[@"_gestureRecognizers"]; + NSArray *methods = @[@"sizeToFit", @"setNeedsLayout", @"removeFromSuperview"]; + + // UIView + self.append.ivars(ivars).methods(methods).properties(@[ + @"frame", @"bounds", @"center", @"transform", + @"backgroundColor", @"alpha", @"opaque", @"hidden", + @"clipsToBounds", @"userInteractionEnabled", @"layer", + @"superview", @"subviews" + ]).forClass(UIView.class); + + // UILabel + self.append.ivars(ivars).methods(methods).properties(@[ + @"text", @"attributedText", @"font", @"frame", + @"textColor", @"textAlignment", @"numberOfLines", + @"lineBreakMode", @"enabled", @"backgroundColor", + @"alpha", @"hidden", @"preferredMaxLayoutWidth", + @"superview", @"subviews" + ]).forClass(UILabel.class); + + // UIWindow + self.append.ivars(ivars).properties(@[ + @"rootViewController", @"windowLevel", @"keyWindow", + @"frame", @"bounds", @"center", @"transform", + @"backgroundColor", @"alpha", @"opaque", @"hidden", + @"clipsToBounds", @"userInteractionEnabled", @"layer", + @"subviews" + ]).forClass(UIWindow.class); + + if (@available(iOS 13, *)) { + self.append.properties(@[@"windowScene"]).forClass(UIWindow.class); + } + + ivars = @[@"_targetActions", @"_gestureRecognizers"]; + + // Property was added in iOS 10 but we want it on iOS 9 too + FLEXRuntimeUtilityTryAddObjectProperty(9, allTargets, UIControl.class, NSArray, PropertyKey(ReadOnly)); + + // UIControl + self.append.ivars(ivars).methods(methods).properties(@[ + @"enabled", @"allTargets", @"frame", + @"backgroundColor", @"hidden", @"clipsToBounds", + @"userInteractionEnabled", @"superview", @"subviews" + ]).forClass(UIControl.class); + + // UIButton + self.append.ivars(ivars).properties(@[ + @"titleLabel", @"font", @"imageView", @"tintColor", + @"currentTitle", @"currentImage", @"enabled", @"frame", + @"superview", @"subviews" + ]).forClass(UIButton.class); + + // UIImageView + self.append.properties(@[ + @"image", @"animationImages", @"frame", @"bounds", @"center", + @"transform", @"alpha", @"hidden", @"clipsToBounds", + @"userInteractionEnabled", @"layer", @"superview", @"subviews", + ]).forClass(UIImageView.class); +} + +@end + + +#pragma mark - View Controllers + +@implementation FLEXShortcutsFactory (ViewControllers) + ++ (void)load { FLEX_EXIT_IF_TESTING() + // toolbarItems is not really a property, make it one + FLEXRuntimeUtilityTryAddObjectProperty(3, toolbarItems, UIViewController.class, NSArray); + + // UIViewController + self.append + .properties(@[ + @"viewIfLoaded", @"title", @"navigationItem", @"toolbarItems", @"tabBarItem", + @"childViewControllers", @"navigationController", @"tabBarController", @"splitViewController", + @"parentViewController", @"presentedViewController", @"presentingViewController", + ]).methods(@[@"view"]).forClass(UIViewController.class); +} + +@end + + +#pragma mark - UIImage + +@implementation FLEXShortcutsFactory (UIImage) + ++ (void)load { FLEX_EXIT_IF_TESTING() + self.append.methods(@[ + @"CGImage", @"CIImage" + ]).properties(@[ + @"scale", @"size", @"capInsets", + @"alignmentRectInsets", @"duration", @"images" + ]).forClass(UIImage.class); + + if (@available(iOS 13, *)) { + self.append.properties(@[@"symbolImage"]); + } +} + +@end + + +#pragma mark - NSBundle + +@implementation FLEXShortcutsFactory (NSBundle) + ++ (void)load { FLEX_EXIT_IF_TESTING() + self.append.properties(@[ + @"bundleIdentifier", @"principalClass", + @"infoDictionary", @"bundlePath", + @"executablePath", @"loaded" + ]).forClass(NSBundle.class); +} + +@end + + +#pragma mark - Classes + +@implementation FLEXShortcutsFactory (Classes) + ++ (void)load { FLEX_EXIT_IF_TESTING() + self.append.classMethods(@[@"new", @"alloc"]).forClass(NSObject.flex_metaclass); +} + +@end + + +#pragma mark - Activities + +@implementation FLEXShortcutsFactory (Activities) + ++ (void)load { FLEX_EXIT_IF_TESTING() + // Property was added in iOS 10 but we want it on iOS 9 too + FLEXRuntimeUtilityTryAddNonatomicProperty(9, item, UIActivityItemProvider.class, id, PropertyKey(ReadOnly)); + + self.append.properties(@[ + @"item", @"placeholderItem", @"activityType" + ]).forClass(UIActivityItemProvider.class); + + self.append.properties(@[ + @"activityItems", @"applicationActivities", @"excludedActivityTypes", @"completionHandler" + ]).forClass(UIActivityViewController.class); +} + +@end + + +#pragma mark - Blocks + +@implementation FLEXShortcutsFactory (Blocks) + ++ (void)load { FLEX_EXIT_IF_TESTING() + self.append.methods(@[@"invoke"]).forClass(NSClassFromString(@"NSBlock")); +} + +@end + +#pragma mark - Foundation + +@implementation FLEXShortcutsFactory (Foundation) + ++ (void)load { FLEX_EXIT_IF_TESTING() + self.append.properties(@[ + @"configuration", @"delegate", @"delegateQueue", @"sessionDescription", + ]).methods(@[ + @"dataTaskWithURL:", @"finishTasksAndInvalidate", @"invalidateAndCancel", + ]).forClass(NSURLSession.class); + + self.append.methods(@[ + @"cachedResponseForRequest:", @"storeCachedResponse:forRequest:", + @"storeCachedResponse:forDataTask:", @"removeCachedResponseForRequest:", + @"removeCachedResponseForDataTask:", @"removeCachedResponsesSinceDate:", + @"removeAllCachedResponses", + ]).forClass(NSURLCache.class); + + + self.append.methods(@[ + @"postNotification:", @"postNotificationName:object:userInfo:", + @"addObserver:selector:name:object:", @"removeObserver:", + @"removeObserver:name:object:", + ]).forClass(NSNotificationCenter.class); + + // NSTimeZone class properties aren't real properties + FLEXRuntimeUtilityTryAddObjectProperty(2, localTimeZone, NSTimeZone.flex_metaclass, NSTimeZone); + FLEXRuntimeUtilityTryAddObjectProperty(2, systemTimeZone, NSTimeZone.flex_metaclass, NSTimeZone); + FLEXRuntimeUtilityTryAddObjectProperty(2, defaultTimeZone, NSTimeZone.flex_metaclass, NSTimeZone); + FLEXRuntimeUtilityTryAddObjectProperty(2, knownTimeZoneNames, NSTimeZone.flex_metaclass, NSArray); + FLEXRuntimeUtilityTryAddObjectProperty(2, abbreviationDictionary, NSTimeZone.flex_metaclass, NSDictionary); + + self.append.classMethods(@[ + @"timeZoneWithName:", @"timeZoneWithAbbreviation:", @"timeZoneForSecondsFromGMT:", @"", @"", @"", + ]).forClass(NSTimeZone.flex_metaclass); + + self.append.classProperties(@[ + @"defaultTimeZone", @"systemTimeZone", @"localTimeZone" + ]).forClass(NSTimeZone.class); + + +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +// +// +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +// +// +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +// +// +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +// +// +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +// +// +// self.append.<#type#>(@[@"<#value#>"]).forClass(NSURLSession.class); +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h new file mode 100644 index 00000000..6084cda7 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h @@ -0,0 +1,123 @@ +// +// FLEXShortcutsSection.h +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. 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 + +/// Uses \c kFLEXDefaultCell ++ (instancetype)forObject:(id)objectOrClass rowTitles:(NSArray *)titles; +/// Uses \c kFLEXDetailCell for non-empty subtitles, otherwise uses \c kFLEXDefaultCell ++ (instancetype)forObject:(id)objectOrClass + rowTitles:(NSArray *)titles + rowSubtitles:(NSArray *)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: +- (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 diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.m new file mode 100644 index 00000000..7c28f286 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.m @@ -0,0 +1,436 @@ +// +// FLEXShortcutsSection.m +// FLEX +// +// Created by Tanner Bennett on 8/29/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" +#import "FLEXTableView.h" +#import "FLEXTableViewCell.h" +#import "FLEXUtility.h" +#import "FLEXShortcut.h" +#import "FLEXProperty.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXIvar.h" +#import "FLEXMethod.h" +#import "FLEXRuntime+UIKitHelpers.h" +#import "FLEXObjectExplorer.h" + +#pragma mark Private + +@interface FLEXShortcutsSection () +@property (nonatomic, copy) NSArray *titles; +@property (nonatomic, copy) NSArray *subtitles; + +@property (nonatomic, copy) NSArray *allTitles; +@property (nonatomic, copy) NSArray *allSubtitles; + +// Shortcuts are not used if initialized with static titles and subtitles +@property (nonatomic, copy) NSArray> *shortcuts; +@property (nonatomic, readonly) NSArray> *allShortcuts; +@end + +@implementation FLEXShortcutsSection + +#pragma mark Initialization + ++ (instancetype)forObject:(id)objectOrClass rowTitles:(NSArray *)titles { + return [self forObject:objectOrClass rowTitles:titles rowSubtitles:nil]; +} + ++ (instancetype)forObject:(id)objectOrClass + rowTitles:(NSArray *)titles + rowSubtitles:(NSArray *)subtitles { + return [[self alloc] initWithObject:objectOrClass titles:titles subtitles:subtitles]; +} + ++ (instancetype)forObject:(id)objectOrClass rows:(NSArray *)rows { + return [[self alloc] initWithObject:objectOrClass rows:rows]; +} + ++ (instancetype)forObject:(id)objectOrClass additionalRows:(NSArray *)toPrepend { + NSArray *rows = [FLEXShortcutsFactory shortcutsForObjectOrClass:objectOrClass]; + NSArray *allRows = [toPrepend arrayByAddingObjectsFromArray:rows] ?: rows; + return [self forObject:objectOrClass rows:allRows]; +} + ++ (instancetype)forObject:(id)objectOrClass { + return [self forObject:objectOrClass additionalRows:nil]; +} + +- (id)initWithObject:(id)object + titles:(NSArray *)titles + subtitles:(NSArray *)subtitles { + + NSParameterAssert(titles.count == subtitles.count || !subtitles); + NSParameterAssert(titles.count); + + self = [super init]; + if (self) { + _object = object; + _allTitles = titles.copy; + _allSubtitles = subtitles.copy; + _numberOfLines = 1; + } + + return self; +} + +- (id)initWithObject:object rows:(NSArray *)rows { + self = [super init]; + if (self) { + _object = object; + + _allShortcuts = [rows flex_mapped:^id(id obj, NSUInteger idx) { + return [FLEXShortcut shortcutFor:obj]; + }]; + _numberOfLines = 1; + + // Populate titles and subtitles + [self reloadData]; + } + + return self; +} + + +#pragma mark - Public + +- (void)setCacheSubtitles:(BOOL)cacheSubtitles { + if (_cacheSubtitles == cacheSubtitles) return; + + // cacheSubtitles only applies if we have shortcut objects + if (self.allShortcuts) { + _cacheSubtitles = cacheSubtitles; + [self reloadData]; + } else { + NSLog(@"Warning: setting 'cacheSubtitles' on a shortcut section with static subtitles"); + } +} + + +#pragma mark - Overrides + +- (UITableViewCellAccessoryType)accessoryTypeForRow:(NSInteger)row { + if (_allShortcuts) { + return [self.shortcuts[row] accessoryTypeWith:self.object]; + } + + return UITableViewCellAccessoryNone; +} + +- (void)setFilterText:(NSString *)filterText { + super.filterText = filterText; + + NSAssert( + self.allTitles.count == self.allSubtitles.count, + @"Each title needs a (possibly empty) subtitle" + ); + + if (filterText.length) { + // Tally up indexes of titles and subtitles matching the filter + NSMutableIndexSet *filterMatches = [NSMutableIndexSet new]; + id filterBlock = ^BOOL(NSString *obj, NSUInteger idx) { + if ([obj localizedCaseInsensitiveContainsString:filterText]) { + [filterMatches addIndex:idx]; + return YES; + } + + return NO; + }; + + // Get all matching indexes, including subtitles + [self.allTitles flex_forEach:filterBlock]; + [self.allSubtitles flex_forEach:filterBlock]; + // Filter to matching indexes only + self.titles = [self.allTitles objectsAtIndexes:filterMatches]; + self.subtitles = [self.allSubtitles objectsAtIndexes:filterMatches]; + self.shortcuts = [self.allShortcuts objectsAtIndexes:filterMatches]; + } else { + self.shortcuts = self.allShortcuts; + self.titles = self.allTitles; + self.subtitles = [self.allSubtitles flex_filtered:^BOOL(NSString *sub, NSUInteger idx) { + return sub.length > 0; + }]; + } +} + +- (void)reloadData { + [FLEXObjectExplorer configureDefaultsForItems:self.allShortcuts]; + + // Generate all (sub)titles from shortcuts + if (self.allShortcuts) { + self.allTitles = [self.allShortcuts flex_mapped:^id(FLEXShortcut *s, NSUInteger idx) { + return [s titleWith:self.object]; + }]; + self.allSubtitles = [self.allShortcuts flex_mapped:^id(FLEXShortcut *s, NSUInteger idx) { + return [s subtitleWith:self.object] ?: @""; + }]; + } + + // Re-generate filtered (sub)titles and shortcuts + self.filterText = self.filterText; +} + +- (NSString *)title { + return @"Shortcuts"; +} + +- (NSInteger)numberOfRows { + return self.titles.count; +} + +- (BOOL)canSelectRow:(NSInteger)row { + UITableViewCellAccessoryType type = [self.shortcuts[row] accessoryTypeWith:self.object]; + BOOL hasDisclosure = NO; + hasDisclosure |= type == UITableViewCellAccessoryDisclosureIndicator; + hasDisclosure |= type == UITableViewCellAccessoryDetailDisclosureButton; + return hasDisclosure; +} + +- (void (^)(__kindof UIViewController *))didSelectRowAction:(NSInteger)row { + return [self.shortcuts[row] didSelectActionWith:self.object]; +} + +- (UIViewController *)viewControllerToPushForRow:(NSInteger)row { + /// Nil if shortcuts is nil, i.e. if initialized with forObject:rowTitles:rowSubtitles: + return [self.shortcuts[row] viewerWith:self.object]; +} + +- (void (^)(__kindof UIViewController *))didPressInfoButtonAction:(NSInteger)row { + id shortcut = self.shortcuts[row]; + if ([shortcut respondsToSelector:@selector(editorWith:)]) { + id object = self.object; + return ^(UIViewController *host) { + UIViewController *editor = [shortcut editorWith:object]; + [host.navigationController pushViewController:editor animated:YES]; + }; + } + + return nil; +} + +- (NSString *)reuseIdentifierForRow:(NSInteger)row { + FLEXTableViewCellReuseIdentifier defaultReuse = kFLEXDetailCell; + if (@available(iOS 11, *)) { + defaultReuse = kFLEXMultilineDetailCell; + } + + return [self.shortcuts[row] customReuseIdentifierWith:self.object] ?: defaultReuse; +} + +- (void)configureCell:(__kindof FLEXTableViewCell *)cell forRow:(NSInteger)row { + cell.titleLabel.text = [self titleForRow:row]; + cell.titleLabel.numberOfLines = self.numberOfLines; + cell.subtitleLabel.text = [self subtitleForRow:row]; + cell.subtitleLabel.numberOfLines = self.numberOfLines; + cell.accessoryType = [self accessoryTypeForRow:row]; +} + +- (NSString *)titleForRow:(NSInteger)row { + return self.titles[row]; +} + +- (NSString *)subtitleForRow:(NSInteger)row { + // Case: dynamic, uncached subtitles + if (!self.cacheSubtitles) { + NSString *subtitle = [self.shortcuts[row] subtitleWith:self.object]; + return subtitle.length ? subtitle : nil; + } + + // Case: static subtitles, or cached subtitles + return self.subtitles[row]; +} + +@end + + +#pragma mark - Global shortcut registration + +@interface FLEXShortcutsFactory () { + BOOL _append, _prepend, _replace, _notInstance; + NSArray *_properties, *_ivars, *_methods; +} +@end + +#define NewAndSet(ivar) ({ FLEXShortcutsFactory *r = [self new]; r->ivar = YES; r; }) +#define SetIvar(ivar) ({ self->ivar = YES; self; }) +#define SetParamBlock(ivar) ^(NSArray *p) { self->ivar = p; return self; } + +@implementation FLEXShortcutsFactory + +typedef NSMutableDictionary> *> RegistrationBuckets; +// Class buckets +static RegistrationBuckets *cProperties = nil; +static RegistrationBuckets *cIvars = nil; +static RegistrationBuckets *cMethods = nil; +// Metaclass buckets +static RegistrationBuckets *mProperties = nil; +static RegistrationBuckets *mMethods = nil; + ++ (void)load { + cProperties = [NSMutableDictionary new]; + cIvars = [NSMutableDictionary new]; + cMethods = [NSMutableDictionary new]; + + mProperties = [NSMutableDictionary new]; + mMethods = [NSMutableDictionary new]; +} + ++ (NSArray> *)shortcutsForObjectOrClass:(id)objectOrClass { + NSMutableArray> *shortcuts = [NSMutableArray new]; + BOOL isClass = object_isClass(objectOrClass); + // The -class does not give you a metaclass, and we want a metaclass + // if a class is passed in, or a class if an object is passed in + Class classKey = object_getClass(objectOrClass); + + RegistrationBuckets *propertyBucket = isClass ? mProperties : cProperties; + RegistrationBuckets *methodBucket = isClass ? mMethods : cMethods; + RegistrationBuckets *ivarBucket = isClass ? nil : cIvars; + + BOOL stop = NO; + while (!stop && classKey) { + NSArray *properties = propertyBucket[classKey]; + NSArray *ivars = ivarBucket[classKey]; + NSArray *methods = methodBucket[classKey]; + + // Stop if we found anything + stop = properties || ivars || methods; + if (stop) { + // Add things we found to the list + [shortcuts addObjectsFromArray:properties]; + [shortcuts addObjectsFromArray:ivars]; + [shortcuts addObjectsFromArray:methods]; + } else { + classKey = class_getSuperclass(classKey); + } + } + + [FLEXObjectExplorer configureDefaultsForItems:shortcuts]; + return shortcuts; +} + ++ (FLEXShortcutsFactory *)append { + return NewAndSet(_append); +} + ++ (FLEXShortcutsFactory *)prepend { + return NewAndSet(_prepend); +} + ++ (FLEXShortcutsFactory *)replace { + return NewAndSet(_replace); +} + +- (void)_register:(NSArray> *)items to:(RegistrationBuckets *)global class:(Class)key { + // Get (or initialize) the bucket for this class + NSMutableArray *bucket = ({ + id bucket = global[key]; + if (!bucket) { + bucket = [NSMutableArray new]; + global[(id)key] = bucket; + } + bucket; + }); + + if (self->_append) { [bucket addObjectsFromArray:items]; } + if (self->_replace) { [bucket setArray:items]; } + if (self->_prepend) { + if (bucket.count) { + // Set new items as array, add old items behind them + id copy = bucket.copy; + [bucket setArray:items]; + [bucket addObjectsFromArray:copy]; + } else { + [bucket addObjectsFromArray:items]; + } + } +} + +- (FLEXShortcutsFactory *)class { + return SetIvar(_notInstance); +} + +- (FLEXShortcutsFactoryNames)properties { + NSAssert(!_notInstance, @"Do not try to set properties+classProperties at the same time"); + return SetParamBlock(_properties); +} + +- (FLEXShortcutsFactoryNames)classProperties { + _notInstance = YES; + return SetParamBlock(_properties); +} + +- (FLEXShortcutsFactoryNames)ivars { + return SetParamBlock(_ivars); +} + +- (FLEXShortcutsFactoryNames)methods { + NSAssert(!_notInstance, @"Do not try to set methods+classMethods at the same time"); + return SetParamBlock(_methods); +} + +- (FLEXShortcutsFactoryNames)classMethods { + _notInstance = YES; + return SetParamBlock(_methods); +} + +- (FLEXShortcutsFactoryTarget)forClass { + return ^(Class cls) { + NSAssert( + ( self->_append && !self->_prepend && !self->_replace) || + (!self->_append && self->_prepend && !self->_replace) || + (!self->_append && !self->_prepend && self->_replace), + @"You can only do one of [append, prepend, replace]" + ); + + + /// Whether the metadata we're about to add is instance or + /// class metadata, i.e. class properties vs instance properties + BOOL instanceMetadata = !self->_notInstance; + /// Whether the given class is a metaclass or not; we need to switch to + /// the metaclass to add class metadata if we are given the normal class object + BOOL isMeta = class_isMetaClass(cls); + /// Whether the shortcuts we're about to add should appear for classes or instances + BOOL instanceShortcut = !isMeta; + + if (instanceMetadata) { + NSAssert(!isMeta, + @"Instance metadata can only be added as an instance shortcut" + ); + } + + Class metaclass = isMeta ? cls : object_getClass(cls); + Class clsForMetadata = instanceMetadata ? cls : metaclass; + + RegistrationBuckets *propertyBucket = instanceShortcut ? cProperties : mProperties; + RegistrationBuckets *methodBucket = instanceShortcut ? cMethods : mMethods; + RegistrationBuckets *ivarBucket = instanceShortcut ? cIvars : nil; + + if (self->_properties) { + NSArray *items = [self->_properties flex_mapped:^id(NSString *name, NSUInteger idx) { + return [FLEXProperty named:name onClass:clsForMetadata]; + }]; + [self _register:items to:propertyBucket class:cls]; + } + + if (self->_methods) { + NSArray *items = [self->_methods flex_mapped:^id(NSString *name, NSUInteger idx) { + return [FLEXMethod selector:NSSelectorFromString(name) class:clsForMetadata]; + }]; + [self _register:items to:methodBucket class:cls]; + } + + if (self->_ivars) { + NSAssert(instanceMetadata, @"Instance metadata can only be added as an instance shortcut (%@)", cls); + NSArray *items = [self->_ivars flex_mapped:^id(NSString *name, NSUInteger idx) { + return [FLEXIvar named:name onClass:clsForMetadata]; + }]; + [self _register:items to:ivarBucket class:cls]; + } + }; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.h new file mode 100644 index 00000000..83efd991 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.h @@ -0,0 +1,15 @@ +// +// FLEXViewControllerShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +@interface FLEXViewControllerShortcuts : FLEXShortcutsSection + ++ (instancetype)forObject:(UIViewController *)viewController; + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.m new file mode 100644 index 00000000..539102a8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.m @@ -0,0 +1,77 @@ +// +// FLEXViewControllerShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 12/12/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXViewControllerShortcuts.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXShortcut.h" +#import "FLEXAlert.h" + +@interface FLEXViewControllerShortcuts () +@property (nonatomic, readonly) UIViewController *viewController; +@property (nonatomic, readonly) BOOL viewControllerIsInUse; +@end + +@implementation FLEXViewControllerShortcuts + +#pragma mark - Internal + +- (UIViewController *)viewController { + return self.object; +} + +/// A view controller is "in use" if it's view is in a window, +/// or if it belongs to a navigation stack which is in use. +- (BOOL)viewControllerIsInUse { + if (self.viewController.view.window) { + return YES; + } + + return self.viewController.navigationController != nil; +} + + +#pragma mark - Overrides + ++ (instancetype)forObject:(UIViewController *)viewController { + BOOL (^vcIsInuse)(UIViewController *) = ^BOOL(UIViewController *controller) { + if (controller.viewIfLoaded.window) { + return YES; + } + + return controller.navigationController != nil; + }; + + return [self forObject:viewController additionalRows:@[ + [FLEXActionShortcut title:@"Push View Controller" + subtitle:^NSString *(UIViewController *controller) { + return vcIsInuse(controller) ? @"In use, cannot push" : nil; + } + selectionHandler:^void(UIViewController *host, UIViewController *controller) { + if (!vcIsInuse(controller)) { + [host.navigationController pushViewController:controller animated:YES]; + } else { + [FLEXAlert + showAlert:@"Cannot Push View Controller" + message:@"This view controller's view is currently in use." + from:host + ]; + } + } + accessoryType:^UITableViewCellAccessoryType(UIViewController *controller) { + if (!vcIsInuse(controller)) { + return UITableViewCellAccessoryDisclosureIndicator; + } else { + return UITableViewCellAccessoryNone; + } + } + ] + ]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.h new file mode 100644 index 00000000..ad917699 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.h @@ -0,0 +1,14 @@ +// +// FLEXViewShortcuts.h +// FLEX +// +// Created by Tanner Bennett on 12/11/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXShortcutsSection.h" + +/// Adds "Nearest View Controller" and "Preview Image" shortcuts to all views +@interface FLEXViewShortcuts : FLEXShortcutsSection + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.m new file mode 100644 index 00000000..63152860 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.m @@ -0,0 +1,87 @@ +// +// FLEXViewShortcuts.m +// FLEX +// +// Created by Tanner Bennett on 12/11/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXViewShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXImagePreviewViewController.h" + +@interface FLEXViewShortcuts () +@property (nonatomic, readonly) UIView *view; +@end + +@implementation FLEXViewShortcuts + +#pragma mark - Internal + +- (UIView *)view { + return self.object; +} + ++ (UIViewController *)viewControllerForView:(UIView *)view { + NSString *viewDelegate = @"viewDelegate"; + if ([view respondsToSelector:NSSelectorFromString(viewDelegate)]) { + return [view valueForKey:viewDelegate]; + } + + return nil; +} + ++ (UIViewController *)viewControllerForAncestralView:(UIView *)view { + NSString *_viewControllerForAncestor = @"_viewControllerForAncestor"; + if ([view respondsToSelector:NSSelectorFromString(_viewControllerForAncestor)]) { + return [view valueForKey:_viewControllerForAncestor]; + } + + return nil; +} + ++ (UIViewController *)nearestViewControllerForView:(UIView *)view { + return [self viewControllerForView:view] ?: [self viewControllerForAncestralView:view]; +} + + +#pragma mark - Overrides + ++ (instancetype)forObject:(UIView *)view { + // In the past, FLEX would not hold a strong reference to something like this. + // After using FLEX for so long, I am certain it is more useful to eagerly + // reference something as useful as a view controller so that the reference + // is not lost and swept out from under you before you can access it. + // + // The alternative here is to use a future in place of `controller` which would + // dynamically grab a reference to the view controller. 99% of the time, however, + // it is not all that useful. If you need it to refresh, you can simply go back + // and go forward again and it will show if the view controller is nil or changed. + UIViewController *controller = [FLEXViewShortcuts nearestViewControllerForView:view]; + + return [self forObject:view additionalRows:@[ + [FLEXActionShortcut title:@"Nearest View Controller" + subtitle:^NSString *(id view) { + return [FLEXRuntimeUtility safeDescriptionForObject:controller]; + } + viewer:^UIViewController *(id view) { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:controller]; + } + accessoryType:^UITableViewCellAccessoryType(id view) { + return controller ? UITableViewCellAccessoryDisclosureIndicator : 0; + } + ], + [FLEXActionShortcut title:@"Preview Image" subtitle:nil + viewer:^UIViewController *(id view) { + return [FLEXImagePreviewViewController previewForView:view]; + } + accessoryType:^UITableViewCellAccessoryType(id view) { + return UITableViewCellAccessoryDisclosureIndicator; + } + ] + ]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.h deleted file mode 100644 index ea5f5a48..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FLEXMultilineTableViewCell.h -// FLEX -// -// Created by Ryan Olson on 2/13/15. -// Copyright (c) 2015 f. All rights reserved. -// - -#import "FLEXTableViewCell.h" - -extern NSString *const kFLEXMultilineTableViewCellIdentifier; - -@interface FLEXMultilineTableViewCell : FLEXTableViewCell - -+ (CGFloat)preferredHeightWithAttributedText:(NSAttributedString *)attributedText inTableViewWidth:(CGFloat)tableViewWidth style:(UITableViewStyle)style showsAccessory:(BOOL)showsAccessory; - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.m deleted file mode 100644 index 1318e139..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// FLEXMultilineTableViewCell.m -// FLEX -// -// Created by Ryan Olson on 2/13/15. -// Copyright (c) 2015 f. All rights reserved. -// - -#import "FLEXMultilineTableViewCell.h" - -NSString *const kFLEXMultilineTableViewCellIdentifier = @"kFLEXMultilineTableViewCellIdentifier"; - -@implementation FLEXMultilineTableViewCell - -- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - self.textLabel.numberOfLines = 0; - } - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - self.textLabel.frame = UIEdgeInsetsInsetRect(self.contentView.bounds, [[self class] labelInsets]); -} - -+ (UIEdgeInsets)labelInsets -{ - return UIEdgeInsetsMake(10.0, 15.0, 10.0, 15.0); -} - -+ (CGFloat)preferredHeightWithAttributedText:(NSAttributedString *)attributedText inTableViewWidth:(CGFloat)tableViewWidth style:(UITableViewStyle)style showsAccessory:(BOOL)showsAccessory -{ - CGFloat labelWidth = tableViewWidth; - - // Content view inset due to accessory view observed on iOS 8.1 iPhone 6. - if (showsAccessory) { - labelWidth -= 34.0; - } - - UIEdgeInsets labelInsets = [self labelInsets]; - labelWidth -= (labelInsets.left + labelInsets.right); - - CGSize constrainSize = CGSizeMake(labelWidth, CGFLOAT_MAX); - CGFloat preferredLabelHeight = ceil([attributedText boundingRectWithSize:constrainSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.height); - CGFloat preferredCellHeight = preferredLabelHeight + labelInsets.top + labelInsets.bottom + 1.0; - - return preferredCellHeight; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.h deleted file mode 100644 index 847b0573..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FLEXSubtitleTableViewCell.h -// FLEX -// -// Created by Tanner on 4/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FLEXSubtitleTableViewCell : UITableViewCell - -@end - -NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.h deleted file mode 100644 index 8906d92d..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FLEXTableView.h -// FLEX -// -// Created by Tanner on 4/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import - -@interface FLEXTableView : UITableView - -@property (nonatomic, readonly) NSString *defaultReuseIdentifier; -@property (nonatomic, readonly) NSString *subtitleReuseIdentifier; -@property (nonatomic, readonly) NSString *multilineReuseIdentifier; - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.m deleted file mode 100644 index 172b826b..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableView.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// FLEXTableView.m -// FLEX -// -// Created by Tanner on 4/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXTableView.h" -#import "FLEXSubtitleTableViewCell.h" -#import "FLEXMultilineTableViewCell.h" - -@interface UITableView (Private) -- (CGFloat)_heightForHeaderInSection:(NSInteger)section; -@end - -@implementation FLEXTableView - -- (CGFloat)_heightForHeaderInSection:(NSInteger)section { - CGFloat height = [super _heightForHeaderInSection:section]; - if (section == 0 && self.tableHeaderView && !@available(iOS 13.0, *)) { - return height - self.tableHeaderView.frame.size.height + 8; - } - - return height; -} - -- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style -{ - self = [super initWithFrame:frame style:style]; - if (self) { - [self registerCells:@{ - self.defaultReuseIdentifier : [FLEXTableViewCell class], - self.subtitleReuseIdentifier : [FLEXSubtitleTableViewCell class], - self.multilineReuseIdentifier : [FLEXMultilineTableViewCell class], - }]; - } - - return self; -} - -- (void)registerCells:(NSDictionary *)registrationMapping -{ - [registrationMapping enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, Class cellClass, BOOL *stop) { - [self registerClass:cellClass forCellReuseIdentifier:identifier]; - }]; -} - -- (NSString *)defaultReuseIdentifier -{ - return @"kFLEXTableViewCellIdentifier"; -} - -- (NSString *)subtitleReuseIdentifier -{ - return @"kFLEXSubtitleTableViewCellIdentifier"; -} - -- (NSString *)multilineReuseIdentifier -{ - return kFLEXMultilineTableViewCellIdentifier; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.h b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.h deleted file mode 100644 index f9d7b038..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// FLEXTableViewCell.h -// FLEX -// -// Created by Tanner on 4/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import - -@interface FLEXTableViewCell : UITableViewCell - -@end diff --git a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.m b/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.m deleted file mode 100644 index 383d3e91..00000000 --- a/xcode/Pods/FLEX/Classes/ObjectExplorers/Views/FLEXTableViewCell.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// FLEXTableViewCell.m -// FLEX -// -// Created by Tanner on 4/17/19. -// Copyright © 2019 Flipboard. All rights reserved. -// - -#import "FLEXTableViewCell.h" -#import "FLEXUtility.h" -#import "FLEXTableView.h" - -@interface UITableView (Internal) -// Exists at least since iOS 5 -- (BOOL)_canPerformAction:(SEL)action forCell:(UITableViewCell *)cell sender:(id)sender; -- (void)_performAction:(SEL)action forCell:(UITableViewCell *)cell sender:(id)sender; -@end - -@interface UITableViewCell (Internal) -// Exists at least since iOS 5 -@property (nonatomic, readonly) FLEXTableView *_tableView; -@end - -@implementation FLEXTableViewCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - UIFont *cellFont = [FLEXUtility defaultTableViewCellLabelFont]; - self.textLabel.font = cellFont; - self.detailTextLabel.font = cellFont; - self.detailTextLabel.textColor = UIColor.grayColor; - } - - return self; -} - -- (BOOL)canPerformAction:(SEL)action withSender:(id)sender -{ - return [self._tableView _canPerformAction:action forCell:self sender:sender]; -} - -/// We use this to allow our table view to allow its delegate -/// to handle any action it chooses to support, without -/// explicitly implementing the method ourselves. -/// -/// Alternative considered: override respondsToSelector -/// to return NO. I decided against this for simplicity's -/// sake. I see this as "fixing" a poorly designed API. -/// That approach would require lots of boilerplate to -/// make the menu appear above this cell. -- (void)forwardInvocation:(NSInvocation *)invocation -{ - // Must be unretained to avoid over-releasing - __unsafe_unretained id sender; - [invocation getArgument:&sender atIndex:2]; - SEL action = invocation.selector; - - // [self._tableView _performAction:action forCell:[self retain] sender:[sender retain]]; - invocation.selector = @selector(_performAction:forCell:sender:); - [invocation setArgument:&action atIndex:2]; - [invocation setArgument:(void *)&self atIndex:3]; - [invocation setArgument:(void *)&sender atIndex:4]; - [invocation invokeWithTarget:self._tableView]; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector -{ - if ([self canPerformAction:selector withSender:nil]) { - return [self._tableView methodSignatureForSelector:@selector(_performAction:forCell:sender:)]; - } - - return [super methodSignatureForSelector:selector]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.h b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.h index 57eb96aa..1ee3f5a4 100644 --- a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.h +++ b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.h @@ -3,38 +3,41 @@ // Flipboard // // Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import -@class FLEXToolbarItem; +@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 *toolbarItems; +@property (nonatomic, copy) NSArray *toolbarItems; /// Toolbar item for selecting views. -/// Users of the toolbar can configure the enabled/selected state and event targets/actions. -@property (nonatomic, readonly) FLEXToolbarItem *selectItem; +@property (nonatomic, readonly) FLEXExplorerToolbarItem *selectItem; /// Toolbar item for presenting a list with the view hierarchy. -/// Users of the toolbar can configure the enabled state and event targets/actions. -@property (nonatomic, readonly) FLEXToolbarItem *hierarchyItem; +@property (nonatomic, readonly) FLEXExplorerToolbarItem *hierarchyItem; /// Toolbar item for moving views. -/// Users of the toolbar can configure the enabled/selected state and event targets/actions. -@property (nonatomic, readonly) FLEXToolbarItem *moveItem; +/// 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 inspecting details of the selected view. -/// Users of the toolbar can configure the enabled state and event targets/actions. -@property (nonatomic, readonly) FLEXToolbarItem *globalsItem; +/// Toolbar item for presenting a screen with various tools for inspecting the app. +@property (nonatomic, readonly) FLEXExplorerToolbarItem *globalsItem; /// Toolbar item for hiding the explorer. -/// Users of the toolbar can configure the event targets/actions. -@property (nonatomic, readonly) FLEXToolbarItem *closeItem; +@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. @@ -51,3 +54,5 @@ @property (nonatomic, readonly) UIView *selectedViewDescriptionContainer; @end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.m b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.m index d1d3a386..749e427a 100644 --- a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.m +++ b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbar.m @@ -3,22 +3,23 @@ // Flipboard // // Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXColor.h" #import "FLEXExplorerToolbar.h" -#import "FLEXToolbarItem.h" +#import "FLEXExplorerToolbarItem.h" #import "FLEXResources.h" #import "FLEXUtility.h" @interface FLEXExplorerToolbar () -@property (nonatomic, readwrite) FLEXToolbarItem *selectItem; -@property (nonatomic, readwrite) FLEXToolbarItem *moveItem; -@property (nonatomic, readwrite) FLEXToolbarItem *globalsItem; -@property (nonatomic, readwrite) FLEXToolbarItem *closeItem; -@property (nonatomic, readwrite) FLEXToolbarItem *hierarchyItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *globalsItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *hierarchyItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *selectItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *recentItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *moveItem; +@property (nonatomic, readwrite) FLEXExplorerToolbarItem *closeItem; @property (nonatomic, readwrite) UIView *dragHandle; @property (nonatomic) UIImageView *dragHandleImageView; @@ -34,38 +35,32 @@ @interface FLEXExplorerToolbar () @implementation FLEXExplorerToolbar -- (id)initWithFrame:(CGRect)frame -{ +- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { + // Background self.backgroundView = [UIView new]; self.backgroundView.backgroundColor = [FLEXColor secondaryBackgroundColorWithAlpha:0.95]; [self addSubview:self.backgroundView]; + // Drag handle self.dragHandle = [UIView new]; self.dragHandle.backgroundColor = UIColor.clearColor; - [self addSubview:self.dragHandle]; - - UIImage *dragHandle = [FLEXResources dragHandle]; - self.dragHandleImageView = [[UIImageView alloc] initWithImage:dragHandle]; - self.dragHandleImageView.tintColor = [FLEXColor iconColor]; + self.dragHandleImageView = [[UIImageView alloc] initWithImage:FLEXResources.dragHandle]; + self.dragHandleImageView.tintColor = [FLEXColor.iconColor colorWithAlphaComponent:0.666]; [self.dragHandle addSubview:self.dragHandleImageView]; + [self addSubview:self.dragHandle]; - UIImage *globalsIcon = [FLEXResources globeIcon]; - self.globalsItem = [FLEXToolbarItem toolbarItemWithTitle:@"menu" image:globalsIcon]; - - UIImage *listIcon = [FLEXResources listIcon]; - self.hierarchyItem = [FLEXToolbarItem toolbarItemWithTitle:@"views" image:listIcon]; - - UIImage *selectIcon = [FLEXResources selectIcon]; - self.selectItem = [FLEXToolbarItem toolbarItemWithTitle:@"select" image:selectIcon]; - - UIImage *moveIcon = [FLEXResources moveIcon]; - self.moveItem = [FLEXToolbarItem toolbarItemWithTitle:@"move" image:moveIcon]; + // Buttons + self.globalsItem = [FLEXExplorerToolbarItem itemWithTitle:@"menu" image:FLEXResources.globalsIcon]; + self.hierarchyItem = [FLEXExplorerToolbarItem itemWithTitle:@"views" image:FLEXResources.hierarchyIcon]; + self.selectItem = [FLEXExplorerToolbarItem itemWithTitle:@"select" image:FLEXResources.selectIcon]; + self.recentItem = [FLEXExplorerToolbarItem itemWithTitle:@"recent" image:FLEXResources.recentIcon]; + self.moveItem = [FLEXExplorerToolbarItem itemWithTitle:@"move" image:FLEXResources.moveIcon sibling:self.recentItem]; + self.closeItem = [FLEXExplorerToolbarItem itemWithTitle:@"close" image:FLEXResources.closeIcon]; + + // Selected view box // - UIImage *closeIcon = [FLEXResources closeIcon]; - self.closeItem = [FLEXToolbarItem toolbarItemWithTitle:@"close" image:closeIcon]; - self.selectedViewDescriptionContainer = [UIView new]; self.selectedViewDescriptionContainer.backgroundColor = [FLEXColor tertiaryBackgroundColorWithAlpha:0.95]; self.selectedViewDescriptionContainer.hidden = YES; @@ -84,14 +79,14 @@ - (id)initWithFrame:(CGRect)frame self.selectedViewDescriptionLabel.font = [[self class] descriptionLabelFont]; [self.selectedViewDescriptionSafeAreaContainer addSubview:self.selectedViewDescriptionLabel]; + // toolbarItems self.toolbarItems = @[_globalsItem, _hierarchyItem, _selectItem, _moveItem, _closeItem]; } return self; } -- (void)layoutSubviews -{ +- (void)layoutSubviews { [super layoutSubviews]; @@ -110,13 +105,13 @@ - (void)layoutSubviews CGFloat originY = CGRectGetMinY(safeArea); CGFloat height = kToolbarItemHeight; CGFloat width = FLEXFloor((CGRectGetWidth(safeArea) - CGRectGetWidth(self.dragHandle.frame)) / self.toolbarItems.count); - for (UIView *toolbarItem in self.toolbarItems) { - toolbarItem.frame = CGRectMake(originX, originY, width, height); - originX = CGRectGetMaxX(toolbarItem.frame); + for (FLEXExplorerToolbarItem *toolbarItem in self.toolbarItems) { + toolbarItem.currentItem.frame = CGRectMake(originX, originY, width, height); + originX = CGRectGetMaxX(toolbarItem.currentItem.frame); } // Make sure the last toolbar item goes to the edge to account for any accumulated rounding effects. - UIView *lastToolbarItem = self.toolbarItems.lastObject; + UIView *lastToolbarItem = self.toolbarItems.lastObject.currentItem; CGRect lastToolbarItemFrame = lastToolbarItem.frame; lastToolbarItemFrame.size.width = CGRectGetMaxX(safeArea) - lastToolbarItemFrame.origin.x; lastToolbarItem.frame = lastToolbarItemFrame; @@ -165,14 +160,14 @@ - (void)layoutSubviews #pragma mark - Setter Overrides -- (void)setToolbarItems:(NSArray *)toolbarItems { +- (void)setToolbarItems:(NSArray *)toolbarItems { if (_toolbarItems == toolbarItems) { return; } // Remove old toolbar items, if any - for (FLEXToolbarItem *item in _toolbarItems) { - [item removeFromSuperview]; + for (FLEXExplorerToolbarItem *item in _toolbarItems) { + [item.currentItem removeFromSuperview]; } // Trim to 5 items if necessary @@ -180,8 +175,8 @@ - (void)setToolbarItems:(NSArray *)toolbarItems { toolbarItems = [toolbarItems subarrayWithRange:NSMakeRange(0, 5)]; } - for (FLEXToolbarItem *item in toolbarItems) { - [self addSubview:item]; + for (FLEXExplorerToolbarItem *item in toolbarItems) { + [self addSubview:item.currentItem]; } _toolbarItems = toolbarItems.copy; @@ -191,16 +186,14 @@ - (void)setToolbarItems:(NSArray *)toolbarItems { [self layoutIfNeeded]; } -- (void)setSelectedViewOverlayColor:(UIColor *)selectedViewOverlayColor -{ +- (void)setSelectedViewOverlayColor:(UIColor *)selectedViewOverlayColor { if (![_selectedViewOverlayColor isEqual:selectedViewOverlayColor]) { _selectedViewOverlayColor = selectedViewOverlayColor; self.selectedViewColorIndicator.backgroundColor = selectedViewOverlayColor; } } -- (void)setSelectedViewDescription:(NSString *)selectedViewDescription -{ +- (void)setSelectedViewDescription:(NSString *)selectedViewDescription { if (![_selectedViewDescription isEqual:selectedViewDescription]) { _selectedViewDescription = selectedViewDescription; self.selectedViewDescriptionLabel.text = selectedViewDescription; @@ -212,56 +205,46 @@ - (void)setSelectedViewDescription:(NSString *)selectedViewDescription #pragma mark - Sizing Convenience Methods -+ (UIFont *)descriptionLabelFont -{ ++ (UIFont *)descriptionLabelFont { return [UIFont systemFontOfSize:12.0]; } -+ (CGFloat)toolbarItemHeight -{ ++ (CGFloat)toolbarItemHeight { return 44.0; } -+ (CGFloat)dragHandleWidth -{ - return 30.0; ++ (CGFloat)dragHandleWidth { + return FLEXResources.dragHandle.size.width; } -+ (CGFloat)descriptionLabelHeight -{ ++ (CGFloat)descriptionLabelHeight { return ceil([[self descriptionLabelFont] lineHeight]); } -+ (CGFloat)descriptionVerticalPadding -{ ++ (CGFloat)descriptionVerticalPadding { return 2.0; } -+ (CGFloat)descriptionContainerHeight -{ ++ (CGFloat)descriptionContainerHeight { return [self descriptionVerticalPadding] * 2.0 + [self descriptionLabelHeight]; } -+ (CGFloat)selectedViewColorIndicatorDiameter -{ ++ (CGFloat)selectedViewColorIndicatorDiameter { return ceil([self descriptionLabelHeight] / 2.0); } -+ (CGFloat)horizontalPadding -{ ++ (CGFloat)horizontalPadding { return 11.0; } -- (CGSize)sizeThatFits:(CGSize)size -{ +- (CGSize)sizeThatFits:(CGSize)size { CGFloat height = 0.0; height += [[self class] toolbarItemHeight]; height += [[self class] descriptionContainerHeight]; return CGSizeMake(size.width, height); } -- (CGRect)safeArea -{ +- (CGRect)safeArea { CGRect safeArea = self.bounds; if (@available(iOS 11.0, *)) { safeArea = UIEdgeInsetsInsetRect(self.bounds, self.safeAreaInsets); diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.h b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.h new file mode 100644 index 00000000..1090ef07 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.h @@ -0,0 +1,44 @@ +// +// FLEXExplorerToolbarItem.h +// Flipboard +// +// Created by Ryan Olson on 4/4/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import + +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 diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.m b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.m new file mode 100644 index 00000000..c0d67bf8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Toolbar/FLEXExplorerToolbarItem.m @@ -0,0 +1,155 @@ +// +// FLEXExplorerToolbarItem.m +// Flipboard +// +// Created by Ryan Olson on 4/4/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXColor.h" +#import "FLEXExplorerToolbarItem.h" +#import "FLEXUtility.h" + +@interface FLEXExplorerToolbarItem () + +@property (nonatomic) FLEXExplorerToolbarItem *sibling; +@property (nonatomic, copy) NSString *title; +@property (nonatomic) UIImage *image; + +@property (nonatomic, readonly, class) UIColor *defaultBackgroundColor; +@property (nonatomic, readonly, class) UIColor *highlightedBackgroundColor; +@property (nonatomic, readonly, class) UIColor *selectedBackgroundColor; + +@end + +@implementation FLEXExplorerToolbarItem + +#pragma mark - Public + ++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image { + return [self itemWithTitle:title image:image sibling:nil]; +} + ++ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image sibling:(FLEXExplorerToolbarItem *)backupItem { + NSParameterAssert(title); NSParameterAssert(image); + + FLEXExplorerToolbarItem *toolbarItem = [self buttonWithType:UIButtonTypeSystem]; + toolbarItem.sibling = backupItem; + toolbarItem.title = title; + toolbarItem.image = image; + toolbarItem.tintColor = FLEXColor.iconColor; + toolbarItem.backgroundColor = self.defaultBackgroundColor; + toolbarItem.titleLabel.font = [UIFont systemFontOfSize:12.0]; + [toolbarItem setTitle:title forState:UIControlStateNormal]; + [toolbarItem setImage:image forState:UIControlStateNormal]; + [toolbarItem setTitleColor:FLEXColor.primaryTextColor forState:UIControlStateNormal]; + [toolbarItem setTitleColor:FLEXColor.deemphasizedTextColor forState:UIControlStateDisabled]; + return toolbarItem; +} + +- (FLEXExplorerToolbarItem *)currentItem { + if (!self.enabled && self.sibling) { + return self.sibling.currentItem; + } + + return self; +} + + +#pragma mark - Display Defaults + ++ (NSDictionary *)titleAttributes { + return @{ NSFontAttributeName : [UIFont systemFontOfSize:12.0] }; +} + ++ (UIColor *)highlightedBackgroundColor { + return FLEXColor.toolbarItemHighlightedColor; +} + ++ (UIColor *)selectedBackgroundColor { + return FLEXColor.toolbarItemSelectedColor; +} + ++ (UIColor *)defaultBackgroundColor { + return UIColor.clearColor; +} + ++ (CGFloat)topMargin { + return 2.0; +} + + +#pragma mark - State Changes + +- (void)setHighlighted:(BOOL)highlighted { + super.highlighted = highlighted; + [self updateColors]; +} + +- (void)setSelected:(BOOL)selected { + super.selected = selected; + [self updateColors]; +} + +- (void)setEnabled:(BOOL)enabled { + if (self.enabled != enabled) { + if (self.sibling) { + if (enabled) { // Replace sibling with myself + UIView *superview = self.sibling.superview; + [self.sibling removeFromSuperview]; + self.frame = self.sibling.frame; + [superview addSubview:self]; + } else { // Replace myself with sibling + UIView *superview = self.superview; + [self removeFromSuperview]; + self.sibling.frame = self.frame; + [superview addSubview:self.sibling]; + } + } + + super.enabled = enabled; + } +} + ++ (id)_selectedIndicatorImage { return nil; } + +- (void)updateColors { + // Background color + if (self.highlighted) { + self.backgroundColor = self.class.highlightedBackgroundColor; + } else if (self.selected) { + self.backgroundColor = self.class.selectedBackgroundColor; + } else { + self.backgroundColor = self.class.defaultBackgroundColor; + } +} + + +#pragma mark - UIButton Layout Overrides + +- (CGRect)titleRectForContentRect:(CGRect)contentRect { + NSDictionary *attrs = [[self class] titleAttributes]; + // Bottom aligned and centered. + CGRect titleRect = CGRectZero; + CGSize titleSize = [self.title boundingRectWithSize:contentRect.size + options:0 + attributes:attrs + context:nil].size; + titleSize = CGSizeMake(ceil(titleSize.width), ceil(titleSize.height)); + titleRect.size = titleSize; + titleRect.origin.y = contentRect.origin.y + CGRectGetMaxY(contentRect) - titleSize.height; + titleRect.origin.x = contentRect.origin.x + FLEXFloor((contentRect.size.width - titleSize.width) / 2.0); + return titleRect; +} + +- (CGRect)imageRectForContentRect:(CGRect)contentRect { + CGSize imageSize = self.image.size; + CGRect titleRect = [self titleRectForContentRect:contentRect]; + CGFloat availableHeight = contentRect.size.height - titleRect.size.height - [[self class] topMargin]; + CGFloat originY = [[self class] topMargin] + FLEXFloor((availableHeight - imageSize.height) / 2.0); + CGFloat originX = FLEXFloor((contentRect.size.width - imageSize.width) / 2.0); + CGRect imageRect = CGRectMake(originX, originY, imageSize.width, imageSize.height); + return imageRect; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.h b/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.h deleted file mode 100644 index 97887b3e..00000000 --- a/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// FLEXToolbarItem.h -// Flipboard -// -// Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import - -@interface FLEXToolbarItem : UIButton - -+ (instancetype)toolbarItemWithTitle:(NSString *)title image:(UIImage *)image; - -@end diff --git a/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.m b/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.m deleted file mode 100644 index cfe4abe4..00000000 --- a/xcode/Pods/FLEX/Classes/Toolbar/FLEXToolbarItem.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// FLEXToolbarItem.m -// Flipboard -// -// Created by Ryan Olson on 4/4/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXColor.h" -#import "FLEXToolbarItem.h" -#import "FLEXUtility.h" - -@interface FLEXToolbarItem () - -@property (nonatomic, copy) NSString *title; -@property (nonatomic) UIImage *image; - -@end - -@implementation FLEXToolbarItem - -+ (instancetype)toolbarItemWithTitle:(NSString *)title image:(UIImage *)image -{ - FLEXToolbarItem *toolbarItem = [self buttonWithType:UIButtonTypeSystem]; - toolbarItem.title = title; - toolbarItem.backgroundColor = [self defaultBackgroundColor]; - toolbarItem.image = image; - toolbarItem.titleLabel.font = [FLEXUtility defaultFontOfSize:12.0]; - [toolbarItem setTitle:title forState:UIControlStateNormal]; - [toolbarItem setImage:image forState:UIControlStateNormal]; - [toolbarItem setTitleColor:[FLEXColor primaryTextColor] forState:UIControlStateNormal]; - [toolbarItem setTitleColor:[FLEXColor deemphasizedTextColor] forState:UIControlStateDisabled]; - [toolbarItem setTintColor:[FLEXColor iconColor]]; - return toolbarItem; -} - - -#pragma mark - Display Defaults - -+ (NSDictionary *)titleAttributes -{ - return @{NSFontAttributeName : [FLEXUtility defaultFontOfSize:12.0]}; -} - -+ (UIColor *)highlightedBackgroundColor -{ - return [FLEXColor toolbarItemHighlightedColor]; -} - -+ (UIColor *)selectedBackgroundColor -{ - return [FLEXColor toolbarItemSelectedColor]; -} - -+ (UIColor *)defaultBackgroundColor -{ - return UIColor.clearColor; -} - -+ (CGFloat)topMargin -{ - return 2.0; -} - - -#pragma mark - State Changes - -- (void)setHighlighted:(BOOL)highlighted -{ - [super setHighlighted:highlighted]; - [self updateColors]; -} - -- (void)setSelected:(BOOL)selected -{ - [super setSelected:selected]; - [self updateColors]; -} - -+ (id)_selectedIndicatorImage { return nil; } - -- (void)updateColors -{ - // Background color - if (self.highlighted) { - self.backgroundColor = [[self class] highlightedBackgroundColor]; - } else if (self.selected) { - self.backgroundColor = [[self class] selectedBackgroundColor]; - } else { - self.backgroundColor = [[self class] defaultBackgroundColor]; - } -} - - -#pragma mark - UIButton Layout Overrides - -- (CGRect)titleRectForContentRect:(CGRect)contentRect -{ - NSDictionary *attrs = [[self class] titleAttributes]; - // Bottom aligned and centered. - CGRect titleRect = CGRectZero; - CGSize titleSize = [self.title boundingRectWithSize:contentRect.size - options:0 - attributes:attrs - context:nil].size; - titleSize = CGSizeMake(ceil(titleSize.width), ceil(titleSize.height)); - titleRect.size = titleSize; - titleRect.origin.y = contentRect.origin.y + CGRectGetMaxY(contentRect) - titleSize.height; - titleRect.origin.x = contentRect.origin.x + FLEXFloor((contentRect.size.width - titleSize.width) / 2.0); - return titleRect; -} - -- (CGRect)imageRectForContentRect:(CGRect)contentRect -{ - CGSize imageSize = self.image.size; - CGRect titleRect = [self titleRectForContentRect:contentRect]; - CGFloat availableHeight = contentRect.size.height - titleRect.size.height - [[self class] topMargin]; - CGFloat originY = [[self class] topMargin] + FLEXFloor((availableHeight - imageSize.height) / 2.0); - CGFloat originX = FLEXFloor((contentRect.size.width - imageSize.width) / 2.0); - CGRect imageRect = CGRectMake(originX, originY, imageSize.width, imageSize.height); - return imageRect; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.h new file mode 100644 index 00000000..8b73e81d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.h @@ -0,0 +1,15 @@ +// +// CALayer+FLEX.h +// FLEX +// +// Created by Tanner on 2/28/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +@interface CALayer (FLEX) + +@property (nonatomic) BOOL flex_continuousCorners; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.m new file mode 100644 index 00000000..1d0e03e9 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/CALayer+FLEX.m @@ -0,0 +1,46 @@ +// +// CALayer+FLEX.m +// FLEX +// +// Created by Tanner on 2/28/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "CALayer+FLEX.h" + +@interface CALayer (Private) +@property (nonatomic) BOOL continuousCorners; +@end + +@implementation CALayer (FLEX) + +static BOOL respondsToContinuousCorners = NO; + ++ (void)load { + respondsToContinuousCorners = [CALayer + instancesRespondToSelector:@selector(setContinuousCorners:) + ]; +} + +- (BOOL)flex_continuousCorners { + if (respondsToContinuousCorners) { + return self.continuousCorners; + } + + return NO; +} + +- (void)setFlex_continuousCorners:(BOOL)enabled { + if (respondsToContinuousCorners) { + if (@available(iOS 13, *)) { + self.cornerCurve = kCACornerCurveContinuous; + } else { + self.continuousCorners = enabled; +// self.masksToBounds = NO; + // self.allowsEdgeAntialiasing = YES; + // self.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerTopEdge | kCALayerBottomEdge; + } + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.h b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.h new file mode 100644 index 00000000..3b9f2213 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.h @@ -0,0 +1,29 @@ +// +// FLEXRuntime+Compare.h +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import +#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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.m b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.m new file mode 100644 index 00000000..8889bbf3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+Compare.m @@ -0,0 +1,47 @@ +// +// FLEXRuntime+Compare.m +// FLEX +// +// Created by Tanner Bennett on 8/28/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXRuntime+Compare.h" + +@implementation FLEXProperty (Compare) + +- (NSComparisonResult)compare:(FLEXProperty *)other { + NSComparisonResult r = [self.name caseInsensitiveCompare:other.name]; + if (r == NSOrderedSame) { + // TODO make sure empty image name sorts above an image name + return [self.imageName ?: @"" compare:other.imageName]; + } + + return r; +} + +@end + +@implementation FLEXIvar (Compare) + +- (NSComparisonResult)compare:(FLEXIvar *)other { + return [self.name caseInsensitiveCompare:other.name]; +} + +@end + +@implementation FLEXMethodBase (Compare) + +- (NSComparisonResult)compare:(FLEXMethodBase *)other { + return [self.name caseInsensitiveCompare:other.name]; +} + +@end + +@implementation FLEXProtocol (Compare) + +- (NSComparisonResult)compare:(FLEXProtocol *)other { + return [self.name caseInsensitiveCompare:other.name]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h new file mode 100644 index 00000000..0cf51a22 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h @@ -0,0 +1,92 @@ +// +// FLEXRuntime+UIKitHelpers.h +// FLEX +// +// Created by Tanner Bennett on 12/16/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import +#import "FLEXProperty.h" +#import "FLEXIvar.h" +#import "FLEXMethod.h" +#import "FLEXProtocol.h" + +@class FLEXObjectExplorerDefaults; + +/// Model objects of an object explorer screen adopt this +/// protocol in order respond to user defaults changes +@protocol FLEXObjectExplorerItem +/// 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 +/// 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. +- (UIViewController *)editorWithTarget:(id)object; +/// 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 *)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 *)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) @end +@interface FLEXIvar (UIKitHelpers) @end +@interface FLEXMethodBase (UIKitHelpers) @end +@interface FLEXMethod (UIKitHelpers) @end +@interface FLEXProtocol (UIKitHelpers) @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 + ++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title string:(NSString *)string; ++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title number:(NSNumber *)number; + ++ (NSArray *)classHierarchy:(NSArray *)classes; + +@end + + +/// This is assigned to the \c tag property of each metadata. + diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.m b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.m new file mode 100644 index 00000000..7e0edb26 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.m @@ -0,0 +1,620 @@ +// +// FLEXRuntime+UIKitHelpers.m +// FLEX +// +// Created by Tanner Bennett on 12/16/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXRuntime+UIKitHelpers.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXArgumentInputViewFactory.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXFieldEditorViewController.h" +#import "FLEXMethodCallingViewController.h" +#import "FLEXTableView.h" +#import "FLEXUtility.h" +#import "NSArray+FLEX.h" +#import "NSString+FLEX.h" + +#define FLEXObjectExplorerDefaultsImpl \ +- (FLEXObjectExplorerDefaults *)defaults { \ + return self.tag; \ +} \ + \ +- (void)setDefaults:(FLEXObjectExplorerDefaults *)defaults { \ + self.tag = defaults; \ +} + +#pragma mark FLEXProperty +@implementation FLEXProperty (UIKitHelpers) +FLEXObjectExplorerDefaultsImpl + +/// Decide whether to use potentialTarget or [potentialTarget class] to get or set property +- (id)appropriateTargetForPropertyType:(id)potentialTarget { + if (!object_isClass(potentialTarget)) { + if (self.isClassProperty) { + return [potentialTarget class]; + } else { + return potentialTarget; + } + } else { + if (self.isClassProperty) { + return potentialTarget; + } else { + // Instance property with a class object + return nil; + } + } +} + +- (BOOL)isEditable { + if (self.attributes.isReadOnly) { + return self.likelySetterExists; + } + + const FLEXTypeEncoding *typeEncoding = self.attributes.typeEncoding.UTF8String; + return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:typeEncoding currentValue:nil]; +} + +- (BOOL)isCallable { + return YES; +} + +- (id)currentValueWithTarget:(id)object { + return [self getPotentiallyUnboxedValue: + [self appropriateTargetForPropertyType:object] + ]; +} + +- (id)currentValueBeforeUnboxingWithTarget:(id)object { + return [self getValue: + [self appropriateTargetForPropertyType:object] + ]; +} + +- (NSString *)previewWithTarget:(id)object { + if (object_isClass(object) && !self.isClassProperty) { + return self.attributes.fullDeclaration; + } else if (self.defaults.wantsDynamicPreviews) { + return [FLEXRuntimeUtility + summaryForObject:[self currentValueWithTarget:object] + ]; + } + + return nil; +} + +- (UIViewController *)viewerWithTarget:(id)object { + id value = [self currentValueWithTarget:object]; + return [FLEXObjectExplorerFactory explorerViewControllerForObject:value]; +} + +- (UIViewController *)editorWithTarget:(id)object { + id target = [self appropriateTargetForPropertyType:object]; + return [FLEXFieldEditorViewController target:target property:self]; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + id targetForValueCheck = [self appropriateTargetForPropertyType:object]; + if (!targetForValueCheck) { + // Instance property with a class object + return UITableViewCellAccessoryNone; + } + + // We use .tag to store the cached value of .isEditable that is + // initialized by FLEXObjectExplorer in -reloadMetada + if ([self getPotentiallyUnboxedValue:targetForValueCheck]) { + if (self.defaults.isEditable) { + // Editable non-nil value, both + return UITableViewCellAccessoryDetailDisclosureButton; + } else { + // Uneditable non-nil value, chevron only + return UITableViewCellAccessoryDisclosureIndicator; + } + } else { + if (self.defaults.isEditable) { + // Editable nil value, just (i) + return UITableViewCellAccessoryDetailButton; + } else { + // Non-editable nil value, neither + return UITableViewCellAccessoryNone; + } + } +} + +- (NSString *)reuseIdentifierWithTarget:(id)object { return nil; } + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender __IOS_AVAILABLE(13.0) { + Class propertyClass = self.attributes.typeEncoding.flex_typeClass; + + // "Explore PropertyClass" for properties with a concrete class name + if (propertyClass) { + NSString *title = [NSString stringWithFormat:@"Explore %@", NSStringFromClass(propertyClass)]; + return @[[UIAction actionWithTitle:title image:nil identifier:nil handler:^(UIAction *action) { + UIViewController *explorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:propertyClass]; + [sender.navigationController pushViewController:explorer animated:YES]; + }]]; + } + + return nil; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + BOOL returnsObject = self.attributes.typeEncoding.flex_typeIsObjectOrClass; + BOOL targetNotNil = [self appropriateTargetForPropertyType:object] != nil; + + NSMutableArray *items = [NSMutableArray arrayWithArray:@[ + @"Name", self.name ?: @"", + @"Type", self.attributes.typeEncoding ?: @"", + @"Declaration", self.fullDescription ?: @"", + ]]; + + if (targetNotNil) { + id value = [self currentValueBeforeUnboxingWithTarget:object]; + [items addObjectsFromArray:@[ + @"Value Preview", [self previewWithTarget:object], + @"Value Address", returnsObject ? [FLEXUtility addressOfObject:value] : @"", + ]]; + } + + [items addObjectsFromArray:@[ + @"Getter", NSStringFromSelector(self.likelyGetter) ?: @"", + @"Setter", self.likelySetterExists ? NSStringFromSelector(self.likelySetter) : @"", + @"Image Name", self.imageName ?: @"", + @"Attributes", self.attributes.string ?: @"", + @"objc_property", [FLEXUtility pointerToString:self.objc_property], + @"objc_property_attribute_t", [FLEXUtility pointerToString:self.attributes.list], + ]]; + + return items; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + id target = [self appropriateTargetForPropertyType:object]; + if (target && self.attributes.typeEncoding.flex_typeIsObjectOrClass) { + return [FLEXUtility addressOfObject:[self currentValueBeforeUnboxingWithTarget:target]]; + } + + return nil; +} + +#endif + +@end + + +#pragma mark FLEXIvar +@implementation FLEXIvar (UIKitHelpers) +FLEXObjectExplorerDefaultsImpl + +- (BOOL)isEditable { + const FLEXTypeEncoding *typeEncoding = self.typeEncoding.UTF8String; + return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:typeEncoding currentValue:nil]; +} + +- (BOOL)isCallable { + return NO; +} + +- (id)currentValueWithTarget:(id)object { + if (!object_isClass(object)) { + return [self getPotentiallyUnboxedValue:object]; + } + + return nil; +} + +- (NSString *)previewWithTarget:(id)object { + if (object_isClass(object)) { + return self.details; + } else if (self.defaults.wantsDynamicPreviews) { + return [FLEXRuntimeUtility + summaryForObject:[self currentValueWithTarget:object] + ]; + } + + return nil; +} + +- (UIViewController *)viewerWithTarget:(id)object { + NSAssert(!object_isClass(object), @"Unreachable state: viewing ivar on class object"); + id value = [self currentValueWithTarget:object]; + return [FLEXObjectExplorerFactory explorerViewControllerForObject:value]; +} + +- (UIViewController *)editorWithTarget:(id)object { + NSAssert(!object_isClass(object), @"Unreachable state: editing ivar on class object"); + return [FLEXFieldEditorViewController target:object ivar:self]; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + if (object_isClass(object)) { + return UITableViewCellAccessoryNone; + } + + // Could use .isEditable here, but we use .tag for speed since it is cached + if ([self getPotentiallyUnboxedValue:object]) { + if (self.defaults.isEditable) { + // Editable non-nil value, both + return UITableViewCellAccessoryDetailDisclosureButton; + } else { + // Uneditable non-nil value, chevron only + return UITableViewCellAccessoryDisclosureIndicator; + } + } else { + if (self.defaults.isEditable) { + // Editable nil value, just (i) + return UITableViewCellAccessoryDetailButton; + } else { + // Non-editable nil value, neither + return UITableViewCellAccessoryNone; + } + } +} + +- (NSString *)reuseIdentifierWithTarget:(id)object { return nil; } + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender __IOS_AVAILABLE(13.0) { + Class ivarClass = self.typeEncoding.flex_typeClass; + + // "Explore PropertyClass" for properties with a concrete class name + if (ivarClass) { + NSString *title = [NSString stringWithFormat:@"Explore %@", NSStringFromClass(ivarClass)]; + return @[[UIAction actionWithTitle:title image:nil identifier:nil handler:^(UIAction *action) { + UIViewController *explorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:ivarClass]; + [sender.navigationController pushViewController:explorer animated:YES]; + }]]; + } + + return nil; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + BOOL isInstance = !object_isClass(object); + BOOL returnsObject = self.typeEncoding.flex_typeIsObjectOrClass; + id value = isInstance ? [self getValue:object] : nil; + + NSMutableArray *items = [NSMutableArray arrayWithArray:@[ + @"Name", self.name ?: @"", + @"Type", self.typeEncoding ?: @"", + @"Declaration", self.description ?: @"", + ]]; + + if (isInstance) { + [items addObjectsFromArray:@[ + @"Value Preview", isInstance ? [self previewWithTarget:object] : @"", + @"Value Address", returnsObject ? [FLEXUtility addressOfObject:value] : @"", + ]]; + } + + [items addObjectsFromArray:@[ + @"Size", @(self.size).stringValue, + @"Offset", @(self.offset).stringValue, + @"objc_ivar", [FLEXUtility pointerToString:self.objc_ivar], + ]]; + + return items; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + if (!object_isClass(object) && self.typeEncoding.flex_typeIsObjectOrClass) { + return [FLEXUtility addressOfObject:[self getValue:object]]; + } + + return nil; +} + +#endif + +@end + + +#pragma mark FLEXMethod +@implementation FLEXMethodBase (UIKitHelpers) +FLEXObjectExplorerDefaultsImpl + +- (BOOL)isEditable { + return NO; +} + +- (BOOL)isCallable { + return NO; +} + +- (id)currentValueWithTarget:(id)object { + // Methods can't be "edited" and have no "value" + return nil; +} + +- (NSString *)previewWithTarget:(id)object { + return [self.selectorString stringByAppendingFormat:@" — %@", self.typeEncoding]; +} + +- (UIViewController *)viewerWithTarget:(id)object { + // We disallow calling of FLEXMethodBase methods + @throw NSInternalInconsistencyException; + return nil; +} + +- (UIViewController *)editorWithTarget:(id)object { + // Methods cannot be edited + @throw NSInternalInconsistencyException; + return nil; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + // We shouldn't be using any FLEXMethodBase objects for this + @throw NSInternalInconsistencyException; + return UITableViewCellAccessoryNone; +} + +- (NSString *)reuseIdentifierWithTarget:(id)object { return nil; } + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender __IOS_AVAILABLE(13.0) { + return nil; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + return @[ + @"Selector", self.name ?: @"", + @"Type Encoding", self.typeEncoding ?: @"", + @"Declaration", self.description ?: @"", + ]; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + return nil; +} + +#endif + +@end + +@implementation FLEXMethod (UIKitHelpers) + +- (BOOL)isCallable { + return self.signature != nil; +} + +- (UIViewController *)viewerWithTarget:(id)object { + object = self.isInstanceMethod ? object : (object_isClass(object) ? object : [object class]); + return [FLEXMethodCallingViewController target:object method:self]; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + if (self.isInstanceMethod) { + if (object_isClass(object)) { + // Instance method from class, can't call + return UITableViewCellAccessoryNone; + } else { + // Instance method from instance, can call + return UITableViewCellAccessoryDisclosureIndicator; + } + } else { + return UITableViewCellAccessoryDisclosureIndicator; + } +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + return [[super copiableMetadataWithTarget:object] arrayByAddingObjectsFromArray:@[ + @"NSMethodSignature *", [FLEXUtility addressOfObject:self.signature], + @"Signature String", self.signatureString ?: @"", + @"Number of Arguments", @(self.numberOfArguments).stringValue, + @"Return Type", @(self.returnType ?: ""), + @"Return Size", @(self.returnSize).stringValue, + @"objc_method", [FLEXUtility pointerToString:self.objc_method], + ]]; +} + +@end + + +#pragma mark FLEXProtocol +@implementation FLEXProtocol (UIKitHelpers) +FLEXObjectExplorerDefaultsImpl + +- (BOOL)isEditable { + return NO; +} + +- (BOOL)isCallable { + return NO; +} + +- (id)currentValueWithTarget:(id)object { + return nil; +} + +- (NSString *)previewWithTarget:(id)object { + return nil; +} + +- (UIViewController *)viewerWithTarget:(id)object { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:self]; +} + +- (UIViewController *)editorWithTarget:(id)object { + return nil; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + return UITableViewCellAccessoryDisclosureIndicator; +} + +- (NSString *)reuseIdentifierWithTarget:(id)object { return nil; } + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender __IOS_AVAILABLE(13.0) { + return nil; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + NSArray *conformanceNames = [self.protocols valueForKeyPath:@"name"]; + NSString *conformances = [conformanceNames componentsJoinedByString:@"\n"]; + return @[ + @"Name", self.name ?: @"", + @"Conformances", conformances, + ]; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + return nil; +} + +#endif + +@end + + +#pragma mark FLEXStaticMetadata +@interface FLEXStaticMetadata () { + @protected + NSString *_name; +} +@property (nonatomic) FLEXTableViewCellReuseIdentifier reuse; +@property (nonatomic) NSString *subtitle; +@property (nonatomic) id metadata; +@end + +@interface FLEXStaticMetadata_Class : FLEXStaticMetadata ++ (instancetype)withClass:(Class)cls; +@end + +@implementation FLEXStaticMetadata +@synthesize name = _name; +@synthesize tag = _tag; + +FLEXObjectExplorerDefaultsImpl + ++ (NSArray *)classHierarchy:(NSArray *)classes { + return [classes flex_mapped:^id(Class cls, NSUInteger idx) { + return [FLEXStaticMetadata_Class withClass:cls]; + }]; +} + ++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title string:(NSString *)string { + return [[self alloc] initWithStyle:style title:title subtitle:string]; +} + ++ (instancetype)style:(FLEXStaticMetadataRowStyle)style title:(NSString *)title number:(NSNumber *)number { + return [[self alloc] initWithStyle:style title:title subtitle:number.stringValue]; +} + +- (id)initWithStyle:(FLEXStaticMetadataRowStyle)style title:(NSString *)title subtitle:(NSString *)subtitle { + self = [super init]; + if (self) { + if (style == FLEXStaticMetadataRowStyleKeyValue) { + _reuse = kFLEXKeyValueCell; + } else { + _reuse = kFLEXMultilineDetailCell; + } + + _name = title; + _subtitle = subtitle; + } + + return self; +} + +- (NSString *)description { + return self.name; +} + +- (NSString *)reuseIdentifierWithTarget:(id)object { + return self.reuse; +} + +- (BOOL)isEditable { + return NO; +} + +- (BOOL)isCallable { + return NO; +} + +- (id)currentValueWithTarget:(id)object { + return nil; +} + +- (NSString *)previewWithTarget:(id)object { + return self.subtitle; +} + +- (UIViewController *)viewerWithTarget:(id)object { + return nil; +} + +- (UIViewController *)editorWithTarget:(id)object { + return nil; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + return UITableViewCellAccessoryNone; +} + +#if FLEX_AT_LEAST_IOS13_SDK + +- (NSArray *)additionalActionsWithTarget:(id)object sender:(UIViewController *)sender __IOS_AVAILABLE(13.0) { + return nil; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + return @[self.name, self.subtitle]; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + return nil; +} + +#endif + +@end + + +#pragma mark FLEXStaticMetadata_Class +@implementation FLEXStaticMetadata_Class + ++ (instancetype)withClass:(Class)cls { + NSParameterAssert(cls); + + FLEXStaticMetadata_Class *metadata = [self new]; + metadata.metadata = cls; + metadata->_name = NSStringFromClass(cls); + metadata.reuse = kFLEXDefaultCell; + return metadata; +} + +- (id)initWithStyle:(FLEXStaticMetadataRowStyle)style title:(NSString *)title subtitle:(NSString *)subtitle { + @throw NSInternalInconsistencyException; + return nil; +} + +- (UIViewController *)viewerWithTarget:(id)object { + return [FLEXObjectExplorerFactory explorerViewControllerForObject:self.metadata]; +} + +- (UITableViewCellAccessoryType)suggestedAccessoryTypeWithTarget:(id)object { + return UITableViewCellAccessoryDisclosureIndicator; +} + +- (NSArray *)copiableMetadataWithTarget:(id)object { + return @[ + @"Class Name", self.name, + @"Class", [FLEXUtility addressOfObject:self.metadata] + ]; +} + +- (NSString *)contextualSubtitleWithTarget:(id)object { + return [FLEXUtility addressOfObject:self.metadata]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.h new file mode 100644 index 00000000..356dfeeb --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.h @@ -0,0 +1,32 @@ +// +// NSArray+FLEX.h +// FLEX +// +// Created by Tanner Bennett on 9/25/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +@interface NSArray (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)collection block:(id(^)(T obj, NSUInteger idx))mapFunc; + +- (instancetype)sortedUsingSelector:(SEL)selector; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.m new file mode 100644 index 00000000..8fbda0a1 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSArray+FLEX.m @@ -0,0 +1,117 @@ +// +// NSArray+FLEX.m +// FLEX +// +// Created by Tanner Bennett on 9/25/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "NSArray+FLEX.h" + +#define FLEXArrayClassIsMutable(me) ([[self class] isSubclassOfClass:[NSMutableArray class]]) + +@implementation NSArray (Functional) + +- (__kindof NSArray *)flex_mapped:(id (^)(id, NSUInteger))mapFunc { + NSMutableArray *map = [NSMutableArray new]; + [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + id ret = mapFunc(obj, idx); + if (ret) { + [map addObject:ret]; + } + }]; + + if (self.count < 2048 && !FLEXArrayClassIsMutable(self)) { + return map.copy; + } + + return map; +} + +- (__kindof NSArray *)flex_flatmapped:(NSArray *(^)(id, NSUInteger))block { + NSMutableArray *array = [NSMutableArray new]; + [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + NSArray *toAdd = block(obj, idx); + if (toAdd) { + [array addObjectsFromArray:toAdd]; + } + }]; + + if (array.count < 2048 && !FLEXArrayClassIsMutable(self)) { + return array.copy; + } + + return array; +} + +- (NSArray *)flex_filtered:(BOOL (^)(id, NSUInteger))filterFunc { + return [self flex_mapped:^id(id obj, NSUInteger idx) { + return filterFunc(obj, idx) ? obj : nil; + }]; +} + +- (void)flex_forEach:(void(^)(id, NSUInteger))block { + [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + block(obj, idx); + }]; +} + +- (instancetype)flex_subArrayUpto:(NSUInteger)maxLength { + if (maxLength > self.count) { + if (FLEXArrayClassIsMutable(self)) { + return self.mutableCopy; + } + + return self; + } + + return [self subarrayWithRange:NSMakeRange(0, maxLength)]; +} + ++ (__kindof NSArray *)flex_forEachUpTo:(NSUInteger)bound map:(id(^)(NSUInteger))block { + NSMutableArray *array = [NSMutableArray new]; + for (NSUInteger i = 0; i < bound; i++) { + id obj = block(i); + if (obj) { + [array addObject:obj]; + } + } + + // For performance reasons, don't copy large arrays + if (bound < 2048 && !FLEXArrayClassIsMutable(self)) { + return array.copy; + } + + return array; +} + + ++ (instancetype)flex_mapped:(id)collection block:(id(^)(id obj, NSUInteger idx))mapFunc { + NSMutableArray *array = [NSMutableArray new]; + NSInteger idx = 0; + for (id obj in collection) { + id ret = mapFunc(obj, idx++); + if (ret) { + [array addObject:ret]; + } + } + + // For performance reasons, don't copy large arrays + if (array.count < 2048) { + return array.copy; + } + + return array; +} + +- (instancetype)sortedUsingSelector:(SEL)selector { + if (FLEXArrayClassIsMutable(self)) { + NSMutableArray *me = (id)self; + [me sortUsingSelector:selector]; + return me; + } else { + return [self sortedArrayUsingSelector:selector]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.h new file mode 100644 index 00000000..2d5f0fca --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.h @@ -0,0 +1,21 @@ +// +// NSDictionary+ObjcRuntime.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +#import + +@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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.m new file mode 100644 index 00000000..bb0d5ff5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSDictionary+ObjcRuntime.m @@ -0,0 +1,107 @@ +// +// NSDictionary+ObjcRuntime.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "NSDictionary+ObjcRuntime.h" +#import "FLEXRuntimeUtility.h" + +@implementation NSDictionary (ObjcRuntime) + +/// See this link on how to construct a proper attributes string: +/// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html +- (NSString *)propertyAttributesString { + if (!self[kFLEXPropertyAttributeKeyTypeEncoding]) return nil; + + NSMutableString *attributes = [NSMutableString new]; + [attributes appendFormat:@"T%@,", self[kFLEXPropertyAttributeKeyTypeEncoding]]; + + for (NSString *attribute in self.allKeys) { + FLEXPropertyAttribute c = (FLEXPropertyAttribute)[attribute characterAtIndex:0]; + switch (c) { + case FLEXPropertyAttributeTypeEncoding: + break; + case FLEXPropertyAttributeBackingIvarName: + [attributes appendFormat:@"%@%@,", + kFLEXPropertyAttributeKeyBackingIvarName, + self[kFLEXPropertyAttributeKeyBackingIvarName] + ]; + break; + case FLEXPropertyAttributeCopy: + if ([self[kFLEXPropertyAttributeKeyCopy] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyCopy]; + break; + case FLEXPropertyAttributeCustomGetter: + [attributes appendFormat:@"%@%@,", + kFLEXPropertyAttributeKeyCustomGetter, + self[kFLEXPropertyAttributeKeyCustomGetter] + ]; + break; + case FLEXPropertyAttributeCustomSetter: + [attributes appendFormat:@"%@%@,", + kFLEXPropertyAttributeKeyCustomSetter, + self[kFLEXPropertyAttributeKeyCustomSetter] + ]; + break; + case FLEXPropertyAttributeDynamic: + if ([self[kFLEXPropertyAttributeKeyDynamic] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyDynamic]; + break; + case FLEXPropertyAttributeGarbageCollectible: + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyGarbageCollectable]; + break; + case FLEXPropertyAttributeNonAtomic: + if ([self[kFLEXPropertyAttributeKeyNonAtomic] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyNonAtomic]; + break; + case FLEXPropertyAttributeOldTypeEncoding: + [attributes appendFormat:@"%@%@,", + kFLEXPropertyAttributeKeyOldStyleTypeEncoding, + self[kFLEXPropertyAttributeKeyOldStyleTypeEncoding] + ]; + break; + case FLEXPropertyAttributeReadOnly: + if ([self[kFLEXPropertyAttributeKeyReadOnly] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyReadOnly]; + break; + case FLEXPropertyAttributeRetain: + if ([self[kFLEXPropertyAttributeKeyRetain] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyRetain]; + break; + case FLEXPropertyAttributeWeak: + if ([self[kFLEXPropertyAttributeKeyWeak] boolValue]) + [attributes appendFormat:@"%@,", kFLEXPropertyAttributeKeyWeak]; + break; + default: + return nil; + break; + } + } + + [attributes deleteCharactersInRange:NSMakeRange(attributes.length-1, 1)]; + return attributes.copy; +} + ++ (instancetype)attributesDictionaryForProperty:(objc_property_t)property { + NSMutableDictionary *attrs = [NSMutableDictionary new]; + + for (NSString *key in FLEXRuntimeUtility.allPropertyAttributeKeys) { + char *value = property_copyAttributeValue(property, key.UTF8String); + if (value) { + attrs[key] = [[NSString alloc] + initWithBytesNoCopy:value + length:strlen(value) + encoding:NSUTF8StringEncoding + freeWhenDone:YES + ]; + } + } + + return attrs.copy; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.h new file mode 100644 index 00000000..ed33f35d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.h @@ -0,0 +1,20 @@ +// +// NSMapTable+FLEX_Subscripting.h +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSMapTable (FLEX_Subscripting) + +- (nullable ObjectType)objectForKeyedSubscript:(KeyType)key; +- (void)setObject:(nullable ObjectType)obj forKeyedSubscript:(KeyType )key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.m new file mode 100644 index 00000000..56ac626e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.m @@ -0,0 +1,21 @@ +// +// NSMapTable+FLEX_Subscripting.m +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "NSMapTable+FLEX_Subscripting.h" + +@implementation NSMapTable (FLEX_Subscripting) + +- (id)objectForKeyedSubscript:(id)key { + return [self objectForKey:key]; +} + +- (void)setObject:(id)obj forKeyedSubscript:(id)key { + [self setObject:obj forKey:key]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.h new file mode 100644 index 00000000..7184a471 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.h @@ -0,0 +1,234 @@ +// +// NSObject+FLEX_Reflection.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +#import +@class FLEXMirror, FLEXMethod, FLEXIvar, FLEXProperty, FLEXMethodBase, FLEXPropertyAttributes, FLEXProtocol; + +NS_ASSUME_NONNULL_BEGIN + +/// 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 *FLEXGetAllSubclasses(_Nullable Class cls, BOOL includeSelf); +NSArray *FLEXGetClassHierarchy(_Nullable Class cls, BOOL includeSelf); +NSArray *FLEXGetConformedProtocols(_Nullable Class cls); + +NSArray *FLEXGetAllIvars(_Nullable Class cls); +/// @param cls a class object to get instance properties, +/// or a metaclass object to get class properties +NSArray *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 *FLEXGetAllMethods(_Nullable Class cls, BOOL instance); +/// @param cls a class object to get all instance and class methods. +NSArray *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 *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 *flex_classHierarchy; + +/// Calls into \c FLEXGetConformedProtocols +/// @return a list of protocols this class itself conforms to. +@property (nonatomic, readonly, class) NSArray *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 *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 *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 *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 *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 *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 *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 *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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.m new file mode 100644 index 00000000..26d01fee --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSObject+FLEX_Reflection.m @@ -0,0 +1,431 @@ +// +// NSObject+FLEX_Reflection.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "NSObject+FLEX_Reflection.h" +#import "FLEXClassBuilder.h" +#import "FLEXMirror.h" +#import "FLEXProperty.h" +#import "FLEXMethod.h" +#import "FLEXIvar.h" +#import "FLEXProtocol.h" +#import "FLEXPropertyAttributes.h" +#import "NSArray+FLEX.h" +#import "FLEXUtility.h" + + +NSString * FLEXTypeEncodingString(const char *returnType, NSUInteger count, ...) { + if (returnType == NULL) return nil; + + NSMutableString *encoding = [NSMutableString new]; + [encoding appendFormat:@"%s%s%s", returnType, @encode(id), @encode(SEL)]; + + va_list args; + va_start(args, count); + char *type = va_arg(args, char *); + for (NSUInteger i = 0; i < count; i++, type = va_arg(args, char *)) { + [encoding appendFormat:@"%s", type]; + } + va_end(args); + + return encoding.copy; +} + +NSArray *FLEXGetAllSubclasses(Class cls, BOOL includeSelf) { + if (!cls) { + return nil; + } + + Class *buffer = NULL; + + int count, size; + do { + count = objc_getClassList(NULL, 0); + buffer = (Class *)realloc(buffer, count * sizeof(*buffer)); + size = objc_getClassList(buffer, count); + } while (size != count); + + NSMutableArray *classes = [NSMutableArray new]; + if (includeSelf) { + [classes addObject:cls]; + } + + for (int i = 0; i < count; i++) { + Class candidate = buffer[i]; + Class superclass = candidate; + while ((superclass = class_getSuperclass(superclass))) { + if (superclass == cls) { + [classes addObject:candidate]; + break; + } + } + } + + free(buffer); + return classes.copy; +} + +NSArray *FLEXGetClassHierarchy(Class cls, BOOL includeSelf) { + if (!cls) { + return nil; + } + + NSMutableArray *classes = [NSMutableArray new]; + if (includeSelf) { + [classes addObject:cls]; + } + + while ((cls = [cls superclass])) { + [classes addObject:cls]; + }; + + return classes.copy; +} + +NSArray *FLEXGetConformedProtocols(Class cls) { + if (!cls) { + return nil; + } + + unsigned int count = 0; + Protocol *__unsafe_unretained *list = class_copyProtocolList(cls, &count); + NSArray *protocols = [NSArray arrayWithObjects:list count:count]; + + return [protocols flex_mapped:^id(Protocol *pro, NSUInteger idx) { + return [FLEXProtocol protocol:pro]; + }]; +} + +NSArray *FLEXGetAllIvars(_Nullable Class cls) { + if (!cls) return nil; + + unsigned int ivcount; + Ivar *objcivars = class_copyIvarList(cls, &ivcount); + NSArray *ivars = [NSArray flex_forEachUpTo:ivcount map:^id(NSUInteger i) { + return [FLEXIvar ivar:objcivars[i]]; + }]; + + free(objcivars); + return ivars; +} + +NSArray *FLEXGetAllProperties(_Nullable Class cls) { + if (!cls) return nil; + + unsigned int pcount; + objc_property_t *objcproperties = class_copyPropertyList(cls, &pcount); + NSArray *properties = [NSArray flex_forEachUpTo:pcount map:^id(NSUInteger i) { + return [FLEXProperty property:objcproperties[i] onClass:cls]; + }]; + + free(objcproperties); + return properties; +} + +NSArray *FLEXGetAllMethods(_Nullable Class cls, BOOL instance) { + if (!cls) return nil; + + unsigned int mcount; + Method *objcmethods = class_copyMethodList(cls, &mcount); + NSArray *methods = [NSArray flex_forEachUpTo:mcount map:^id(NSUInteger i) { + return [FLEXMethod method:objcmethods[i] isInstanceMethod:instance]; + }]; + + free(objcmethods); + return methods; +} + + +#pragma mark NSProxy + +@interface NSProxy (AnyObjectAdditions) @end +@implementation NSProxy (AnyObjectAdditions) + ++ (void)load { FLEX_EXIT_IF_TESTING() + // We need to get all of the methods in this file and add them to NSProxy. + // To do this we we need the class itself and it's metaclass. + // Edit: also add them to Swift._SwiftObject + Class NSProxyClass = [NSProxy class]; + Class NSProxy_meta = object_getClass(NSProxyClass); + Class SwiftObjectClass = ( + NSClassFromString(@"SwiftObject") ?: NSClassFromString(@"Swift._SwiftObject") + ); + + // Copy all of the "flex_" methods from NSObject + id filterFunc = ^BOOL(FLEXMethod *method, NSUInteger idx) { + return [method.name hasPrefix:@"flex_"]; + }; + NSArray *instanceMethods = [NSObject.flex_allInstanceMethods flex_filtered:filterFunc]; + NSArray *classMethods = [NSObject.flex_allClassMethods flex_filtered:filterFunc]; + + FLEXClassBuilder *proxy = [FLEXClassBuilder builderForClass:NSProxyClass]; + FLEXClassBuilder *proxyMeta = [FLEXClassBuilder builderForClass:NSProxy_meta]; + [proxy addMethods:instanceMethods]; + [proxyMeta addMethods:classMethods]; + + if (SwiftObjectClass) { + Class SwiftObject_meta = object_getClass(SwiftObjectClass); + FLEXClassBuilder *swiftObject = [FLEXClassBuilder builderForClass:SwiftObjectClass]; + FLEXClassBuilder *swiftObjectMeta = [FLEXClassBuilder builderForClass:SwiftObject_meta]; + [swiftObject addMethods:instanceMethods]; + [swiftObjectMeta addMethods:classMethods]; + + // So we can put Swift objects into dictionaries... + [swiftObjectMeta addMethods:@[ + [NSObject flex_classMethodNamed:@"copyWithZone:"]] + ]; + } +} + +@end + +#pragma mark Reflection + +@implementation NSObject (Reflection) + ++ (FLEXMirror *)flex_reflection { + return [FLEXMirror reflect:self]; +} + +- (FLEXMirror *)flex_reflection { + return [FLEXMirror reflect:self]; +} + +/// Code borrowed from MAObjCRuntime by Mike Ash ++ (NSArray *)flex_allSubclasses { + return FLEXGetAllSubclasses(self, YES); +} + +- (Class)flex_setClass:(Class)cls { + return object_setClass(self, cls); +} + ++ (Class)flex_metaclass { + return objc_getMetaClass(NSStringFromClass(self.class).UTF8String); +} + ++ (size_t)flex_instanceSize { + return class_getInstanceSize(self.class); +} + ++ (Class)flex_setSuperclass:(Class)superclass { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + return class_setSuperclass(self, superclass); + #pragma clang diagnostic pop +} + ++ (NSArray *)flex_classHierarchy { + return FLEXGetClassHierarchy(self, YES); +} + ++ (NSArray *)flex_protocols { + return FLEXGetConformedProtocols(self); +} + +@end + + +#pragma mark Methods + +@implementation NSObject (Methods) + ++ (NSArray *)flex_allMethods { + NSMutableArray *instanceMethods = self.flex_allInstanceMethods.mutableCopy; + [instanceMethods addObjectsFromArray:self.flex_allClassMethods]; + return instanceMethods; +} + ++ (NSArray *)flex_allInstanceMethods { + return FLEXGetAllMethods(self, YES); +} + ++ (NSArray *)flex_allClassMethods { + return FLEXGetAllMethods(self.flex_metaclass, NO); +} + ++ (FLEXMethod *)flex_methodNamed:(NSString *)name { + Method m = class_getInstanceMethod([self class], NSSelectorFromString(name)); + if (m == NULL) { + return nil; + } + + return [FLEXMethod method:m isInstanceMethod:YES]; +} + ++ (FLEXMethod *)flex_classMethodNamed:(NSString *)name { + Method m = class_getClassMethod([self class], NSSelectorFromString(name)); + if (m == NULL) { + return nil; + } + + return [FLEXMethod method:m isInstanceMethod:NO]; +} + ++ (BOOL)addMethod:(SEL)selector + typeEncoding:(NSString *)typeEncoding + implementation:(IMP)implementaiton + toInstances:(BOOL)instance { + return class_addMethod(instance ? self.class : self.flex_metaclass, selector, implementaiton, typeEncoding.UTF8String); +} + ++ (IMP)replaceImplementationOfMethod:(FLEXMethodBase *)method with:(IMP)implementation useInstance:(BOOL)instance { + return class_replaceMethod(instance ? self.class : self.flex_metaclass, method.selector, implementation, method.typeEncoding.UTF8String); +} + ++ (void)swizzle:(FLEXMethodBase *)original with:(FLEXMethodBase *)other onInstance:(BOOL)instance { + [self swizzleBySelector:original.selector with:other.selector onInstance:instance]; +} + ++ (BOOL)swizzleByName:(NSString *)original with:(NSString *)other onInstance:(BOOL)instance { + SEL originalMethod = NSSelectorFromString(original); + SEL newMethod = NSSelectorFromString(other); + if (originalMethod == 0 || newMethod == 0) { + return NO; + } + + [self swizzleBySelector:originalMethod with:newMethod onInstance:instance]; + return YES; +} + ++ (void)swizzleBySelector:(SEL)original with:(SEL)other onInstance:(BOOL)instance { + Class cls = instance ? self.class : self.flex_metaclass; + Method originalMethod = class_getInstanceMethod(cls, original); + Method newMethod = class_getInstanceMethod(cls, other); + if (class_addMethod(cls, original, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) { + class_replaceMethod(cls, other, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); + } else { + method_exchangeImplementations(originalMethod, newMethod); + } +} + +@end + + +#pragma mark Ivars + +@implementation NSObject (Ivars) + ++ (NSArray *)flex_allIvars { + return FLEXGetAllIvars(self); +} + ++ (FLEXIvar *)flex_ivarNamed:(NSString *)name { + Ivar i = class_getInstanceVariable([self class], name.UTF8String); + if (i == NULL) { + return nil; + } + + return [FLEXIvar ivar:i]; +} + +#pragma mark Get address +- (void *)flex_getIvarAddress:(FLEXIvar *)ivar { + return (uint8_t *)(__bridge void *)self + ivar.offset; +} + +- (void *)flex_getObjcIvarAddress:(Ivar)ivar { + return (uint8_t *)(__bridge void *)self + ivar_getOffset(ivar); +} + +- (void *)flex_getIvarAddressByName:(NSString *)name { + Ivar ivar = class_getInstanceVariable(self.class, name.UTF8String); + if (!ivar) return 0; + + return (uint8_t *)(__bridge void *)self + ivar_getOffset(ivar); +} + +#pragma mark Set ivar object +- (void)flex_setIvar:(FLEXIvar *)ivar object:(id)value { + object_setIvar(self, ivar.objc_ivar, value); +} + +- (BOOL)flex_setIvarByName:(NSString *)name object:(id)value { + Ivar ivar = class_getInstanceVariable(self.class, name.UTF8String); + if (!ivar) return NO; + + object_setIvar(self, ivar, value); + return YES; +} + +- (void)flex_setObjcIvar:(Ivar)ivar object:(id)value { + object_setIvar(self, ivar, value); +} + +#pragma mark Set ivar value +- (void)flex_setIvar:(FLEXIvar *)ivar value:(void *)value size:(size_t)size { + void *address = [self flex_getIvarAddress:ivar]; + memcpy(address, value, size); +} + +- (BOOL)flex_setIvarByName:(NSString *)name value:(void *)value size:(size_t)size { + Ivar ivar = class_getInstanceVariable(self.class, name.UTF8String); + if (!ivar) return NO; + + [self flex_setObjcIvar:ivar value:value size:size]; + return YES; +} + +- (void)flex_setObjcIvar:(Ivar)ivar value:(void *)value size:(size_t)size { + void *address = [self flex_getObjcIvarAddress:ivar]; + memcpy(address, value, size); +} + +@end + + +#pragma mark Properties + +@implementation NSObject (Properties) + ++ (NSArray *)flex_allProperties { + NSMutableArray *instanceProperties = self.flex_allInstanceProperties.mutableCopy; + [instanceProperties addObjectsFromArray:self.flex_allClassProperties]; + return instanceProperties; +} + ++ (NSArray *)flex_allInstanceProperties { + return FLEXGetAllProperties(self); +} + ++ (NSArray *)flex_allClassProperties { + return FLEXGetAllProperties(self.flex_metaclass); +} + ++ (FLEXProperty *)flex_propertyNamed:(NSString *)name { + objc_property_t p = class_getProperty([self class], name.UTF8String); + if (p == NULL) { + return nil; + } + + return [FLEXProperty property:p onClass:self]; +} + ++ (FLEXProperty *)flex_classPropertyNamed:(NSString *)name { + objc_property_t p = class_getProperty(object_getClass(self), name.UTF8String); + if (p == NULL) { + return nil; + } + + return [FLEXProperty property:p onClass:object_getClass(self)]; +} + ++ (void)flex_replaceProperty:(FLEXProperty *)property { + [self flex_replaceProperty:property.name attributes:property.attributes]; +} + ++ (void)flex_replaceProperty:(NSString *)name attributes:(FLEXPropertyAttributes *)attributes { + unsigned int count; + objc_property_attribute_t *objc_attributes = [attributes copyAttributesList:&count]; + class_replaceProperty([self class], name.UTF8String, objc_attributes, count); + free(objc_attributes); +} + +@end + + diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.h new file mode 100644 index 00000000..b6c52d46 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.h @@ -0,0 +1,31 @@ +// +// 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 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.m new file mode 100644 index 00000000..3b3a15cf --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+FLEX.m @@ -0,0 +1,150 @@ +// +// NSString+FLEX.m +// FLEX +// +// Created by Tanner on 3/26/17. +// Copyright © 2017 Tanner Bennett. All rights reserved. +// + +#import "NSString+FLEX.h" + +@interface NSMutableString (Replacement) +- (void)replaceOccurencesOfString:(NSString *)string with:(NSString *)replacement; +- (void)removeLastKeyPathComponent; +@end + +@implementation NSMutableString (Replacement) + +- (void)replaceOccurencesOfString:(NSString *)string with:(NSString *)replacement { + [self replaceOccurrencesOfString:string withString:replacement options:0 range:NSMakeRange(0, self.length)]; +} + +- (void)removeLastKeyPathComponent { + if (![self containsString:@"."]) { + [self deleteCharactersInRange:NSMakeRange(0, self.length)]; + return; + } + + BOOL putEscapesBack = NO; + if ([self containsString:@"\\."]) { + [self replaceOccurencesOfString:@"\\." with:@"\\~"]; + + // Case like "UIKit\.framework" + if (![self containsString:@"."]) { + [self deleteCharactersInRange:NSMakeRange(0, self.length)]; + return; + } + + putEscapesBack = YES; + } + + // Case like "Bund" or "Bundle.cla" + if (![self hasSuffix:@"."]) { + NSUInteger len = self.pathExtension.length; + [self deleteCharactersInRange:NSMakeRange(self.length-len, len)]; + } + + if (putEscapesBack) { + [self replaceOccurencesOfString:@"\\~" with:@"\\."]; + } +} + +@end + +@implementation NSString (FLEXTypeEncoding) + +- (NSCharacterSet *)flex_classNameAllowedCharactersSet { + static NSCharacterSet *classNameAllowedCharactersSet = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSMutableCharacterSet *temp = NSMutableCharacterSet.alphanumericCharacterSet; + [temp addCharactersInString:@"_"]; + classNameAllowedCharactersSet = temp.copy; + }); + + return classNameAllowedCharactersSet; +} + +- (BOOL)flex_typeIsConst { + if (!self.length) return NO; + return [self characterAtIndex:0] == FLEXTypeEncodingConst; +} + +- (FLEXTypeEncoding)flex_firstNonConstType { + if (!self.length) return FLEXTypeEncodingNull; + return [self characterAtIndex:(self.flex_typeIsConst ? 1 : 0)]; +} + +- (BOOL)flex_typeIsObjectOrClass { + FLEXTypeEncoding type = self.flex_firstNonConstType; + return type == FLEXTypeEncodingObjcObject || type == FLEXTypeEncodingObjcClass; +} + +- (Class)flex_typeClass { + if (!self.flex_typeIsObjectOrClass) { + return nil; + } + + NSScanner *scan = [NSScanner scannerWithString:self]; + // Skip const + [scan scanString:@"r" intoString:nil]; + // Scan leading @" + if (![scan scanString:@"@\"" intoString:nil]) { + return nil; + } + + // Scan class name + NSString *name = nil; + if (![scan scanCharactersFromSet:self.flex_classNameAllowedCharactersSet intoString:&name]) { + return nil; + } + // Scan trailing quote + if (![scan scanString:@"\"" intoString:nil]) { + return nil; + } + + // Return found class + return NSClassFromString(name); +} + +- (BOOL)flex_typeIsNonObjcPointer { + FLEXTypeEncoding type = self.flex_firstNonConstType; + return type == FLEXTypeEncodingPointer || + type == FLEXTypeEncodingCString || + type == FLEXTypeEncodingSelector; +} + +@end + +@implementation NSString (KeyPaths) + +- (NSString *)stringByRemovingLastKeyPathComponent { + if (![self containsString:@"."]) { + return @""; + } + + NSMutableString *mself = self.mutableCopy; + [mself removeLastKeyPathComponent]; + return mself; +} + +- (NSString *)stringByReplacingLastKeyPathComponent:(NSString *)replacement { + // replacement should not have any escaped '.' in it, + // so we escape all '.' + if ([replacement containsString:@"."]) { + replacement = [replacement stringByReplacingOccurrencesOfString:@"." withString:@"\\."]; + } + + // Case like "Foo" + if (![self containsString:@"."]) { + return [replacement stringByAppendingString:@"."]; + } + + NSMutableString *mself = self.mutableCopy; + [mself removeLastKeyPathComponent]; + [mself appendString:replacement]; + [mself appendString:@"."]; + return mself; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.h new file mode 100644 index 00000000..2219d02d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.h @@ -0,0 +1,23 @@ +// +// NSString+ObjcRuntime.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/1/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import + +@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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.m new file mode 100644 index 00000000..8e66843e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSString+ObjcRuntime.m @@ -0,0 +1,75 @@ +// +// NSString+ObjcRuntime.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/1/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "NSString+ObjcRuntime.h" +#import "FLEXRuntimeUtility.h" + +@implementation NSString (Utilities) + +- (NSString *)stringbyDeletingCharacterAtIndex:(NSUInteger)idx { + NSMutableString *string = self.mutableCopy; + [string replaceCharactersInRange:NSMakeRange(idx, 1) withString:@""]; + return string; +} + +/// See this link on how to construct a proper attributes string: +/// https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html +- (NSDictionary *)propertyAttributes { + if (!self.length) return nil; + + NSMutableDictionary *attributes = [NSMutableDictionary new]; + + NSArray *components = [self componentsSeparatedByString:@","]; + for (NSString *attribute in components) { + FLEXPropertyAttribute c = (FLEXPropertyAttribute)[attribute characterAtIndex:0]; + switch (c) { + case FLEXPropertyAttributeTypeEncoding: + // Note: the type encoding here is not always correct. Radar: FB7499230 + attributes[kFLEXPropertyAttributeKeyTypeEncoding] = [attribute stringbyDeletingCharacterAtIndex:0]; + break; + case FLEXPropertyAttributeBackingIvarName: + attributes[kFLEXPropertyAttributeKeyBackingIvarName] = [attribute stringbyDeletingCharacterAtIndex:0]; + break; + case FLEXPropertyAttributeCopy: + attributes[kFLEXPropertyAttributeKeyCopy] = @YES; + break; + case FLEXPropertyAttributeCustomGetter: + attributes[kFLEXPropertyAttributeKeyCustomGetter] = [attribute stringbyDeletingCharacterAtIndex:0]; + break; + case FLEXPropertyAttributeCustomSetter: + attributes[kFLEXPropertyAttributeKeyCustomSetter] = [attribute stringbyDeletingCharacterAtIndex:0]; + break; + case FLEXPropertyAttributeDynamic: + attributes[kFLEXPropertyAttributeKeyDynamic] = @YES; + break; + case FLEXPropertyAttributeGarbageCollectible: + attributes[kFLEXPropertyAttributeKeyGarbageCollectable] = @YES; + break; + case FLEXPropertyAttributeNonAtomic: + attributes[kFLEXPropertyAttributeKeyNonAtomic] = @YES; + break; + case FLEXPropertyAttributeOldTypeEncoding: + attributes[kFLEXPropertyAttributeKeyOldStyleTypeEncoding] = [attribute stringbyDeletingCharacterAtIndex:0]; + break; + case FLEXPropertyAttributeReadOnly: + attributes[kFLEXPropertyAttributeKeyReadOnly] = @YES; + break; + case FLEXPropertyAttributeRetain: + attributes[kFLEXPropertyAttributeKeyRetain] = @YES; + break; + case FLEXPropertyAttributeWeak: + attributes[kFLEXPropertyAttributeKeyWeak] = @YES; + break; + } + } + + return attributes; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.h new file mode 100644 index 00000000..604f9fbf --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.h @@ -0,0 +1,19 @@ +// +// NSTimer+Blocks.h +// FLEX +// +// Created by Tanner on 3/23/17. +// + +#import + +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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.m new file mode 100644 index 00000000..e5cfe131 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSTimer+FLEX.m @@ -0,0 +1,25 @@ +// +// NSTimer+Blocks.m +// FLEX +// +// Created by Tanner on 3/23/17. +// + +#import "NSTimer+FLEX.h" + +@interface Block : NSObject +- (void)invoke; +@end + +#pragma clang diagnostic ignored "-Wincomplete-implementation" +@implementation NSTimer (Blocks) + ++ (instancetype)fireSecondsFromNow:(NSTimeInterval)delay block:(VoidBlock)block { + if (@available(iOS 10, *)) { + return [self scheduledTimerWithTimeInterval:delay repeats:NO block:(id)block]; + } else { + return [self scheduledTimerWithTimeInterval:delay target:block selector:@selector(invoke) userInfo:nil repeats:NO]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.h new file mode 100644 index 00000000..4dc242a1 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.h @@ -0,0 +1,44 @@ +// +// NSUserDefaults+FLEX.h +// FLEX +// +// Created by Tanner on 3/10/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +// 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)toggleBoolForKey:(NSString *)key; + +@property (nonatomic) double flex_toolbarTopMargin; + +// Not actually stored in defaults, but written to a file +@property (nonatomic) NSArray *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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.m new file mode 100644 index 00000000..1244c881 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/NSUserDefaults+FLEX.m @@ -0,0 +1,157 @@ +// +// NSUserDefaults+FLEX.m +// FLEX +// +// Created by Tanner on 3/10/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "NSUserDefaults+FLEX.h" + +NSString * const kFLEXDefaultsToolbarTopMarginKey = @"com.flex.FLEXToolbar.topMargin"; +NSString * const kFLEXDefaultsiOSPersistentOSLogKey = @"com.flipborad.flex.enable_persistent_os_log"; +NSString * const kFLEXDefaultsHidePropertyIvarsKey = @"com.flipboard.FLEX.hide_property_ivars"; +NSString * const kFLEXDefaultsHidePropertyMethodsKey = @"com.flipboard.FLEX.hide_property_methods"; +NSString * const kFLEXDefaultsHideMethodOverridesKey = @"com.flipboard.FLEX.hide_method_overrides"; +NSString * const kFLEXDefaultsHideVariablePreviewsKey = @"com.flipboard.FLEX.hide_variable_previews"; +NSString * const kFLEXDefaultsNetworkHostBlacklistKey = @"com.flipboard.FLEX.network_host_blacklist"; +NSString * const kFLEXDefaultsDisableOSLogForceASLKey = @"com.flipboard.FLEX.try_disable_os_log"; +NSString * const kFLEXDefaultsRegisterJSONExplorerKey = @"com.flipboard.FLEX.view_json_as_object"; + +#define FLEXDefaultsPathForFile(name) ({ \ + NSArray *paths = NSSearchPathForDirectoriesInDomains( \ + NSLibraryDirectory, NSUserDomainMask, YES \ + ); \ + [paths[0] stringByAppendingPathComponent:@"Preferences"]; \ +}) + +@implementation NSUserDefaults (FLEX) + +#pragma mark Internal + +/// @param filename the name of a plist file without any extension +- (NSString *)flex_defaultsPathForFile:(NSString *)filename { + filename = [filename stringByAppendingPathExtension:@"plist"]; + + NSArray *paths = NSSearchPathForDirectoriesInDomains( + NSLibraryDirectory, NSUserDomainMask, YES + ); + NSString *preferences = [paths[0] stringByAppendingPathComponent:@"Preferences"]; + return [preferences stringByAppendingPathComponent:filename]; +} + +#pragma mark Helper + +- (void)toggleBoolForKey:(NSString *)key { + [self setBool:![self boolForKey:key] forKey:key]; + [NSNotificationCenter.defaultCenter postNotificationName:key object:nil]; +} + +#pragma mark Misc + +- (double)flex_toolbarTopMargin { + if ([self objectForKey:kFLEXDefaultsToolbarTopMarginKey]) { + return [self doubleForKey:kFLEXDefaultsToolbarTopMarginKey]; + } + + return 100; +} + +- (void)setFlex_toolbarTopMargin:(double)margin { + [self setDouble:margin forKey:kFLEXDefaultsToolbarTopMarginKey]; +} + +- (NSArray *)flex_networkHostBlacklist { + return [NSArray arrayWithContentsOfFile:[ + self flex_defaultsPathForFile:kFLEXDefaultsNetworkHostBlacklistKey + ]] ?: @[]; +} + +- (void)setFlex_networkHostBlacklist:(NSArray *)blacklist { + NSParameterAssert(blacklist); + [blacklist writeToFile:[ + self flex_defaultsPathForFile:kFLEXDefaultsNetworkHostBlacklistKey + ] atomically:YES]; +} + +- (BOOL)flex_registerDictionaryJSONViewerOnLaunch { + return [self boolForKey:kFLEXDefaultsRegisterJSONExplorerKey]; +} + +- (void)setFlex_registerDictionaryJSONViewerOnLaunch:(BOOL)enable { + [self setBool:enable forKey:kFLEXDefaultsRegisterJSONExplorerKey]; +} + +#pragma mark System Log + +- (BOOL)flex_disableOSLog { + return [self boolForKey:kFLEXDefaultsDisableOSLogForceASLKey]; +} + +- (void)setFlex_disableOSLog:(BOOL)disable { + [self setBool:disable forKey:kFLEXDefaultsDisableOSLogForceASLKey]; +} + +- (BOOL)flex_cacheOSLogMessages { + return [self boolForKey:kFLEXDefaultsiOSPersistentOSLogKey]; +} + +- (void)setFlex_cacheOSLogMessages:(BOOL)cache { + [self setBool:cache forKey:kFLEXDefaultsiOSPersistentOSLogKey]; + [NSNotificationCenter.defaultCenter + postNotificationName:kFLEXDefaultsiOSPersistentOSLogKey + object:nil + ]; +} + +#pragma mark Object Explorer + +- (BOOL)flex_explorerHidesPropertyIvars { + return [self boolForKey:kFLEXDefaultsHidePropertyIvarsKey]; +} + +- (void)setFlex_explorerHidesPropertyIvars:(BOOL)hide { + [self setBool:hide forKey:kFLEXDefaultsHidePropertyIvarsKey]; + [NSNotificationCenter.defaultCenter + postNotificationName:kFLEXDefaultsHidePropertyIvarsKey + object:nil + ]; +} + +- (BOOL)flex_explorerHidesPropertyMethods { + return [self boolForKey:kFLEXDefaultsHidePropertyMethodsKey]; +} + +- (void)setFlex_explorerHidesPropertyMethods:(BOOL)hide { + [self setBool:hide forKey:kFLEXDefaultsHidePropertyMethodsKey]; + [NSNotificationCenter.defaultCenter + postNotificationName:kFLEXDefaultsHidePropertyMethodsKey + object:nil + ]; +} + +- (BOOL)flex_explorerShowsMethodOverrides { + return [self boolForKey:kFLEXDefaultsHideMethodOverridesKey]; +} + +- (void)setFlex_explorerShowsMethodOverrides:(BOOL)show { + [self setBool:show forKey:kFLEXDefaultsHideMethodOverridesKey]; + [NSNotificationCenter.defaultCenter + postNotificationName:kFLEXDefaultsHideMethodOverridesKey + object:nil + ]; +} + +- (BOOL)flex_explorerHidesVariablePreviews { + return [self boolForKey:kFLEXDefaultsHideVariablePreviewsKey]; +} + +- (void)setFlex_explorerHidesVariablePreviews:(BOOL)hide { + [self setBool:hide forKey:kFLEXDefaultsHideVariablePreviewsKey]; + [NSNotificationCenter.defaultCenter + postNotificationName:kFLEXDefaultsHideVariablePreviewsKey + object:nil + ]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.h new file mode 100644 index 00000000..56527743 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.h @@ -0,0 +1,38 @@ +// +// UIBarButtonItem+FLEX.h +// FLEX +// +// Created by Tanner on 2/4/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +#define FLEXBarButtonItemSystem(item, tgt, sel) \ + [UIBarButtonItem 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)itemWithCustomView:(UIView *)customView; ++ (instancetype)backItemWithTitle:(NSString *)title; + ++ (instancetype)systemItem:(UIBarButtonSystemItem)item target:(id)target action:(SEL)action; + ++ (instancetype)itemWithTitle:(NSString *)title target:(id)target action:(SEL)action; ++ (instancetype)doneStyleitemWithTitle:(NSString *)title target:(id)target action:(SEL)action; + ++ (instancetype)itemWithImage:(UIImage *)image target:(id)target action:(SEL)action; + ++ (instancetype)disabledSystemItem:(UIBarButtonSystemItem)item; ++ (instancetype)disabledItemWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style; ++ (instancetype)disabledItemWithImage:(UIImage *)image; + +/// @return the receiver +- (UIBarButtonItem *)withTintColor:(UIColor *)tint; + +- (void)_setWidth:(CGFloat)width; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.m new file mode 100644 index 00000000..2e52b462 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIBarButtonItem+FLEX.m @@ -0,0 +1,72 @@ +// +// UIBarButtonItem+FLEX.m +// FLEX +// +// Created by Tanner on 2/4/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "UIBarButtonItem+FLEX.h" + +#pragma clang diagnostic ignored "-Wincomplete-implementation" + +@implementation UIBarButtonItem (FLEX) + ++ (UIBarButtonItem *)flex_flexibleSpace { + return [self systemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; +} + ++ (UIBarButtonItem *)flex_fixedSpace { + UIBarButtonItem *fixed = [self systemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + fixed.width = 60; + return fixed; +} + ++ (instancetype)systemItem:(UIBarButtonSystemItem)item target:(id)target action:(SEL)action { + return [[self alloc] initWithBarButtonSystemItem:item target:target action:action]; +} + ++ (instancetype)itemWithCustomView:(UIView *)customView { + return [[self alloc] initWithCustomView:customView]; +} + ++ (instancetype)backItemWithTitle:(NSString *)title { + return [self itemWithTitle:title target:nil action:nil]; +} + ++ (instancetype)itemWithTitle:(NSString *)title target:(id)target action:(SEL)action { + return [[self alloc] initWithTitle:title style:UIBarButtonItemStylePlain target:target action:action]; +} + ++ (instancetype)doneStyleitemWithTitle:(NSString *)title target:(id)target action:(SEL)action { + return [[self alloc] initWithTitle:title style:UIBarButtonItemStyleDone target:target action:action]; +} + ++ (instancetype)itemWithImage:(UIImage *)image target:(id)target action:(SEL)action { + return [[self alloc] initWithImage:image style:UIBarButtonItemStylePlain target:target action:action]; +} + ++ (instancetype)disabledSystemItem:(UIBarButtonSystemItem)system { + UIBarButtonItem *item = [self systemItem:system target:nil action:nil]; + item.enabled = NO; + return item; +} + ++ (instancetype)disabledItemWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style { + UIBarButtonItem *item = [self itemWithTitle:title target:nil action:nil]; + item.enabled = NO; + return item; +} + ++ (instancetype)disabledItemWithImage:(UIImage *)image { + UIBarButtonItem *item = [self itemWithImage:image target:nil action:nil]; + item.enabled = NO; + return item; +} + +- (UIBarButtonItem *)withTintColor:(UIColor *)tint { + self.tintColor = tint; + return self; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.h new file mode 100644 index 00000000..899e6af0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.h @@ -0,0 +1,17 @@ +// +// UIFont+FLEX.h +// FLEX +// +// Created by Tanner Bennett on 12/20/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +@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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.m new file mode 100644 index 00000000..3a04c4a4 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIFont+FLEX.m @@ -0,0 +1,43 @@ +// +// UIFont+FLEX.m +// FLEX +// +// Created by Tanner Bennett on 12/20/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "UIFont+FLEX.h" + +#define kFLEXDefaultCellFontSize 12.0 + +@implementation UIFont (FLEX) + ++ (UIFont *)flex_defaultTableCellFont { + static UIFont *defaultTableCellFont = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + defaultTableCellFont = [UIFont systemFontOfSize:kFLEXDefaultCellFontSize]; + }); + + return defaultTableCellFont; +} + ++ (UIFont *)flex_codeFont { + // Actually only available in iOS 13, the SDK headers are wrong + if (@available(iOS 13, *)) { + return [self monospacedSystemFontOfSize:kFLEXDefaultCellFontSize weight:UIFontWeightRegular]; + } else { + return [self fontWithName:@"Menlo-Regular" size:kFLEXDefaultCellFontSize]; + } +} + ++ (UIFont *)flex_smallCodeFont { + // Actually only available in iOS 13, the SDK headers are wrong + if (@available(iOS 13, *)) { + return [self monospacedSystemFontOfSize:self.smallSystemFontSize weight:UIFontWeightRegular]; + } else { + return [self fontWithName:@"Menlo-Regular" size:self.smallSystemFontSize]; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.h new file mode 100644 index 00000000..11080f38 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.h @@ -0,0 +1,21 @@ +// +// UIGestureRecognizer+Blocks.h +// FLEX +// +// Created by Tanner Bennett on 12/20/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +typedef void (^GestureBlock)(UIGestureRecognizer *gesture); + + +@interface UIGestureRecognizer (Blocks) + ++ (instancetype)action:(GestureBlock)action; + +@property (nonatomic) GestureBlock action; + +@end + diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.m new file mode 100644 index 00000000..609f899a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIGestureRecognizer+Blocks.m @@ -0,0 +1,36 @@ +// +// UIGestureRecognizer+Blocks.m +// FLEX +// +// Created by Tanner Bennett on 12/20/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "UIGestureRecognizer+Blocks.h" +#import + + +@implementation UIGestureRecognizer (Blocks) + +static void * actionKey; + ++ (instancetype)action:(GestureBlock)action { + UIGestureRecognizer *gesture = [[self alloc] initWithTarget:nil action:nil]; + [gesture addTarget:gesture action:@selector(flex_invoke)]; + gesture.action = action; + return gesture; +} + +- (void)flex_invoke { + self.action(self); +} + +- (GestureBlock)action { + return objc_getAssociatedObject(self, &actionKey); +} + +- (void)setAction:(GestureBlock)action { + objc_setAssociatedObject(self, &actionKey, action, OBJC_ASSOCIATION_COPY); +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.h new file mode 100644 index 00000000..99b3a735 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.h @@ -0,0 +1,19 @@ +// +// UIMenu+FLEX.h +// FLEX +// +// Created by Tanner on 1/28/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +@interface UIMenu (FLEX) + ++ (instancetype)inlineMenuWithTitle:(NSString *)title + image:(UIImage *)image + children:(NSArray *)children; + +- (instancetype)collapsed; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.m new file mode 100644 index 00000000..e9b59af3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIMenu+FLEX.m @@ -0,0 +1,39 @@ +// +// UIMenu+FLEX.m +// FLEX +// +// Created by Tanner on 1/28/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "UIMenu+FLEX.h" + +@implementation UIMenu (FLEX) + ++ (instancetype)inlineMenuWithTitle:(NSString *)title image:(UIImage *)image children:(NSArray *)children { + return [UIMenu + menuWithTitle:title + image:image + identifier:nil + options:UIMenuOptionsDisplayInline + children:children + ]; +} + +- (instancetype)collapsed { + return [UIMenu + menuWithTitle:@"" + image:nil + identifier:nil + options:UIMenuOptionsDisplayInline + children:@[[UIMenu + menuWithTitle:self.title + image:self.image + identifier:self.identifier + options:0 + children:self.children + ]] + ]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.h new file mode 100644 index 00000000..74f5981a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.h @@ -0,0 +1,16 @@ +// +// UIPasteboard+FLEX.h +// FLEX +// +// Created by Tanner Bennett on 12/9/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +@interface UIPasteboard (FLEX) + +/// For copying an object which could be a string, data, or number +- (void)flex_copy:(id)unknownType; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.m new file mode 100644 index 00000000..26ff3f7b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIPasteboard+FLEX.m @@ -0,0 +1,26 @@ +// +// UIPasteboard+FLEX.m +// FLEX +// +// Created by Tanner Bennett on 12/9/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "UIPasteboard+FLEX.h" + +@implementation UIPasteboard (FLEX) + +- (void)flex_copy:(id)object { + if ([object isKindOfClass:[NSString class]]) { + UIPasteboard.generalPasteboard.string = object; + } else if([object isKindOfClass:[NSData class]]) { + [UIPasteboard.generalPasteboard setData:object forPasteboardType:@"public.data"]; + } else if ([object isKindOfClass:[NSNumber class]]) { + UIPasteboard.generalPasteboard.string = [object stringValue]; + } + + [NSException raise:NSInternalInconsistencyException + format:@"Tried to copy unsupported type: %@", [object class]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.h new file mode 100644 index 00000000..d758533a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.h @@ -0,0 +1,14 @@ +// +// UITextField+Range.h +// FLEX +// +// Created by Tanner on 6/13/17. +// + +#import + +@interface UITextField (Range) + +@property (nonatomic, readonly) NSRange selectedRange; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.m new file mode 100644 index 00000000..59d01b8f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UITextField+Range.m @@ -0,0 +1,23 @@ +// +// UITextField+Range.m +// FLEX +// +// Created by Tanner on 6/13/17. +// + +#import "UITextField+Range.h" + +@implementation UITextField (Range) + +- (NSRange)selectedRange { + UITextRange *r = self.selectedTextRange; + if (r) { + NSInteger loc = [self offsetFromPosition:self.beginningOfDocument toPosition:r.start]; + NSInteger len = [self offsetFromPosition:r.start toPosition:r.end]; + return NSMakeRange(loc, len); + } + + return NSMakeRange(NSNotFound, 0); +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.h b/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.h similarity index 56% rename from xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.h rename to xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.h index 96e27c60..9cf34bce 100644 --- a/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.h +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.h @@ -1,21 +1,23 @@ // -// UIView+Layout.h +// UIView+FLEX_Layout.h // FLEX // // Created by Tanner Bennett on 7/18/19. -//Copyright © 2019 Flipboard. All rights reserved. +// Copyright © 2019 Flipboard. All rights reserved. // #import #define Padding(p) UIEdgeInsetsMake(p, p, p, p) -@interface UIView (Layout) +@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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.m new file mode 100644 index 00000000..8de6b35e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+FLEX_Layout.m @@ -0,0 +1,66 @@ +// +// UIView+FLEX_Layout.m +// FLEX +// +// Created by Tanner Bennett on 7/18/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "UIView+FLEX_Layout.h" + +@implementation UIView (FLEX_Layout) + +- (void)centerInView:(UIView *)view { + [NSLayoutConstraint activateConstraints:@[ + [self.centerXAnchor constraintEqualToAnchor:view.centerXAnchor], + [self.centerYAnchor constraintEqualToAnchor:view.centerYAnchor], + ]]; +} + +- (void)pinEdgesTo:(UIView *)view { + [NSLayoutConstraint activateConstraints:@[ + [self.topAnchor constraintEqualToAnchor:view.topAnchor], + [self.leftAnchor constraintEqualToAnchor:view.leftAnchor], + [self.bottomAnchor constraintEqualToAnchor:view.bottomAnchor], + [self.rightAnchor constraintEqualToAnchor:view.rightAnchor], + ]]; +} + +- (void)pinEdgesTo:(UIView *)view withInsets:(UIEdgeInsets)i { + [NSLayoutConstraint activateConstraints:@[ + [self.topAnchor constraintEqualToAnchor:view.topAnchor constant:i.top], + [self.leftAnchor constraintEqualToAnchor:view.leftAnchor constant:i.left], + [self.bottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:-i.bottom], + [self.rightAnchor constraintEqualToAnchor:view.rightAnchor constant:-i.right], + ]]; +} + +- (void)pinEdgesToSuperview { + [self pinEdgesTo:self.superview]; +} + +- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets { + [self pinEdgesTo:self.superview withInsets:insets]; +} + +- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)i aboveView:(UIView *)sibling { + UIView *view = self.superview; + [NSLayoutConstraint activateConstraints:@[ + [self.topAnchor constraintEqualToAnchor:view.topAnchor constant:i.top], + [self.leftAnchor constraintEqualToAnchor:view.leftAnchor constant:i.left], + [self.bottomAnchor constraintEqualToAnchor:sibling.topAnchor constant:-i.bottom], + [self.rightAnchor constraintEqualToAnchor:view.rightAnchor constant:-i.right], + ]]; +} + +- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)i belowView:(UIView *)sibling { + UIView *view = self.superview; + [NSLayoutConstraint activateConstraints:@[ + [self.topAnchor constraintEqualToAnchor:sibling.bottomAnchor constant:i.top], + [self.leftAnchor constraintEqualToAnchor:view.leftAnchor constant:i.left], + [self.bottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:-i.bottom], + [self.rightAnchor constraintEqualToAnchor:view.rightAnchor constant:-i.right], + ]]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.m b/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.m deleted file mode 100644 index c21f443c..00000000 --- a/xcode/Pods/FLEX/Classes/Utility/Categories/UIView+Layout.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// UIView+Layout.m -// FLEX -// -// Created by Tanner Bennett on 7/18/19. -//Copyright © 2019 Flipboard. All rights reserved. -// - -#import "UIView+Layout.h" - -@implementation UIView (Layout) - -- (void)centerInView:(UIView *)view { - [self.centerXAnchor constraintEqualToAnchor:view.centerXAnchor].active = YES; - [self.centerYAnchor constraintEqualToAnchor:view.centerYAnchor].active = YES; -} - -- (void)pinEdgesTo:(UIView *)view { - [self.topAnchor constraintEqualToAnchor:view.topAnchor].active = YES; - [self.leftAnchor constraintEqualToAnchor:view.leftAnchor].active = YES; - [self.bottomAnchor constraintEqualToAnchor:view.bottomAnchor].active = YES; - [self.rightAnchor constraintEqualToAnchor:view.rightAnchor].active = YES; -} - -- (void)pinEdgesTo:(UIView *)view withInsets:(UIEdgeInsets)i { - [self.topAnchor constraintEqualToAnchor:view.topAnchor constant:i.top].active = YES; - [self.leftAnchor constraintEqualToAnchor:view.leftAnchor constant:i.left].active = YES; - [self.bottomAnchor constraintEqualToAnchor:view.bottomAnchor constant:-i.bottom].active = YES; - [self.rightAnchor constraintEqualToAnchor:view.rightAnchor constant:-i.right].active = YES; -} - -- (void)pinEdgesToSuperview { - [self pinEdgesTo:self.superview]; -} - -- (void)pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets { - [self pinEdgesTo:self.superview withInsets:insets]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXAlert.h b/xcode/Pods/FLEX/Classes/Utility/FLEXAlert.h index fd387045..7153461f 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXAlert.h +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXAlert.h @@ -10,14 +10,14 @@ @class FLEXAlert, FLEXAlertAction; -typedef void (^FLEXAlertReveal)(); +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)(); +typedef FLEXAlertAction *(^FLEXAlertActionProperty)(void); typedef FLEXAlertAction *(^FLEXAlertActionBOOLProperty)(BOOL); typedef FLEXAlertAction *(^FLEXAlertActionHandler)(void(^handler)(NSArray *strings)); @@ -29,7 +29,9 @@ typedef FLEXAlertAction *(^FLEXAlertActionHandler)(void(^handler)(NSArray diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXHeapEnumerator.m b/xcode/Pods/FLEX/Classes/Utility/FLEXHeapEnumerator.m index 106c37d1..623cb472 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXHeapEnumerator.m +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXHeapEnumerator.m @@ -3,10 +3,11 @@ // Flipboard // // Created by Ryan Olson on 5/28/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXHeapEnumerator.h" +#import "FLEXObjcInternal.h" #import #import #import @@ -20,8 +21,7 @@ @implementation FLEXHeapEnumerator -static void range_callback(task_t task, void *context, unsigned type, vm_range_t *ranges, unsigned rangeCount) -{ +static void range_callback(task_t task, void *context, unsigned type, vm_range_t *ranges, unsigned rangeCount) { if (!context) { return; } @@ -44,14 +44,12 @@ static void range_callback(task_t task, void *context, unsigned type, vm_range_t } } -static kern_return_t reader(__unused task_t remote_task, vm_address_t remote_address, __unused vm_size_t size, void **local_memory) -{ +static kern_return_t reader(__unused task_t remote_task, vm_address_t remote_address, __unused vm_size_t size, void **local_memory) { *local_memory = (void *)remote_address; return KERN_SUCCESS; } -+ (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block -{ ++ (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block { if (!block) { return; } @@ -71,12 +69,10 @@ + (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block for (unsigned int i = 0; i < zoneCount; i++) { malloc_zone_t *zone = (malloc_zone_t *)zones[i]; malloc_introspection_t *introspection = zone->introspect; - NSString *zoneName = @(zone->zone_name); - // We only need to look at the default malloc zone. // This may explain why some zone functions are // sometimes invalid; perhaps not all zones support them? - if (![zoneName isEqualToString:@"DefaultMallocZone"] || !introspection) { + if (!introspection) { continue; } @@ -89,40 +85,24 @@ + (void)enumerateLiveObjectsUsingBlock:(flex_object_enumeration_block_t)block block(object, actualClass); lock_zone(zone); }; - - // The largest realistic memory address varies by platform. - // Only 48 bits are used by 64 bit machines while - // 32 bit machines use all bits. - // - // __LP64__ is defined as 1 for both arm64 and x86_64 - // via: clang -dM -arch [arm64|x86_64] -E -x c /dev/null | grep LP -#if __LP64__ - static uintptr_t MAX_REALISTIC_ADDRESS = 0x0000FFFFFFFFFFFF; - BOOL lockZoneValid = lock_zone != nil && (uintptr_t)lock_zone < MAX_REALISTIC_ADDRESS; - BOOL unlockZoneValid = unlock_zone != nil && (uintptr_t)unlock_zone < MAX_REALISTIC_ADDRESS; -#else - BOOL lockZoneValid = lock_zone != nil; - BOOL unlockZoneValid = unlock_zone != nil; -#endif + + BOOL lockZoneValid = FLEXPointerIsReadable(lock_zone); + BOOL unlockZoneValid = FLEXPointerIsReadable(unlock_zone); // There is little documentation on when and why // any of these function pointers might be NULL // or garbage, so we resort to checking for NULL - // and impossible memory addresses at least + // and whether the pointer is readable if (introspection->enumerator && lockZoneValid && unlockZoneValid) { lock_zone(zone); introspection->enumerator(TASK_NULL, (void *)&callback, MALLOC_PTR_IN_USE_RANGE_TYPE, (vm_address_t)zone, reader, &range_callback); unlock_zone(zone); } - - // Only one zone to enumerate - break; } } } -+ (void)updateRegisteredClasses -{ ++ (void)updateRegisteredClasses { if (!registeredClasses) { registeredClasses = CFSetCreateMutable(NULL, 0, NULL); } else { diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.h b/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.h deleted file mode 100644 index 84a44685..00000000 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// FLEXKeyboardShortcutManager.h -// FLEX -// -// Created by Ryan Olson on 9/19/15. -// Copyright © 2015 Flipboard. All rights reserved. -// - -#import - -#if TARGET_OS_SIMULATOR - -@interface FLEXKeyboardShortcutManager : NSObject - -+ (instancetype)sharedManager; - -- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description; -- (NSString *)keyboardShortcutsDescription; - -@property (nonatomic, getter=isEnabled) BOOL enabled; - -@end - -#endif diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXMacros.h b/xcode/Pods/FLEX/Classes/Utility/FLEXMacros.h new file mode 100644 index 00000000..44279d28 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXMacros.h @@ -0,0 +1,78 @@ +// +// FLEXMacros.h +// FLEX +// +// Created by Tanner on 3/12/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#ifndef FLEXMacros_h +#define FLEXMacros_h + +// Used to prevent loading of pre-registered shortcuts and runtime categories in a test environment +#define FLEX_EXIT_IF_TESTING() if (NSClassFromString(@"XCTest")) 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) + +#endif /* FLEXMacros_h */ diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXResources.h b/xcode/Pods/FLEX/Classes/Utility/FLEXResources.h index 4b5ddc96..01e78e63 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXResources.h +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXResources.h @@ -3,32 +3,56 @@ // FLEX // // Created by Ryan Olson on 6/8/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import #import @interface FLEXResources : NSObject -+ (UIImage *)closeIcon; -+ (UIImage *)dragHandle; -+ (UIImage *)globeIcon; -+ (UIImage *)hierarchyIndentPattern; -+ (UIImage *)listIcon; -+ (UIImage *)moveIcon; -+ (UIImage *)selectIcon; -+ (UIImage *)checkerPattern; - -+ (UIImage *)jsonIcon; -+ (UIImage *)textPlainIcon; -+ (UIImage *)htmlIcon; -+ (UIImage *)audioIcon; -+ (UIImage *)jsIcon; -+ (UIImage *)plistIcon; -+ (UIImage *)textIcon; -+ (UIImage *)videoIcon; -+ (UIImage *)xmlIcon; -+ (UIImage *)binaryIcon; +#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) UIImage *hierarchyIndentPattern; @end diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXResources.m b/xcode/Pods/FLEX/Classes/Utility/FLEXResources.m index 5cc14bff..3da16d2f 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXResources.m +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXResources.m @@ -3,192 +3,8853 @@ // FLEX // // Created by Ryan Olson on 6/8/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXResources.h" -static const u_int8_t FLEXCloseIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0xd6, 0x95, 0x4a, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0xb8, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x9d, 0x92, 0xb1, 0x0d, 0x02, 0x31, 0x10, 0x04, 0x0d, 0x1f, 0x50, 0x01, 0x0d, 0x90, 0x53, 0xdb, 0x8b, 0x2a, 0x48, 0x48, 0x09, 0x49, 0xc8, 0x89, 0xc8, 0xe9, 0xe3, 0x0b, 0xa0, 0x0e, 0xd8, 0xb1, 0x6c, 0xc4, 0x9f, 0xd6, 0x7e, 0xc4, 0x49, 0x2b, 0xdb, 0x77, 0xb7, 0x7b, 0x6b, 0xcb, 0x43, 0x4a, 0xe9, 0x20, 0xdc, 0x84, 0xad, 0xf0, 0x10, 0x7a, 0xb1, 0x52, 0xf1, 0x28, 0x5c, 0x85, 0x17, 0x8d, 0xcf, 0xb2, 0xe1, 0x70, 0x11, 0x68, 0x70, 0x41, 0x9e, 0x3a, 0x7d, 0x00, 0x5e, 0x56, 0xaa, 0x89, 0x96, 0x40, 0x24, 0xd2, 0x87, 0x83, 0x3c, 0xe9, 0x5b, 0x31, 0x0a, 0x38, 0xe2, 0xcc, 0x61, 0xab, 0x61, 0x2d, 0xf1, 0x9e, 0x30, 0xc3, 0x73, 0x38, 0x81, 0x49, 0x95, 0xa5, 0x2b, 0x15, 0xba, 0xbf, 0x42, 0x25, 0xcf, 0xac, 0x7e, 0x18, 0x61, 0x83, 0xd5, 0x38, 0x91, 0x33, 0xf9, 0x6e, 0x38, 0xeb, 0x3f, 0x4d, 0x76, 0xc4, 0xe8, 0xc0, 0x5a, 0x77, 0x44, 0x1a, 0x17, 0x5f, 0xbb, 0x45, 0x24, 0x4f, 0x74, 0xeb, 0xfc, 0x94, 0x7a, 0x2f, 0x56, 0x67, 0xcd, 0x09, 0xe4, 0x1f, 0xf6, 0xf7, 0xdf, 0x1e, 0xca, 0xd4, 0xbd, 0xd6, 0xb3, 0x30, 0x96, 0xb3, 0x16, 0x1b, 0x77, 0x65, 0x37, 0xc2, 0x4e, 0x38, 0xbd, 0x01, 0xa7, 0x78, 0x6a, 0x4b, 0x16, 0xe1, 0xee, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +// Useful regex for formatting pasted hex +// +// To replace something with a newline, you need to manually copy +// a newline from a text editor and paste it into the replace box. +// For the "find" box, you can simply copy and paste the regexes below. +// +// Split into rows of 16: +// ((?:0x[a-f\d][a-f\d], ){16}) +// Replace with: \n $1 +// +// Split last greater-than-16 row into two rows of 16 and less than 16: +// ((?:0x[a-f\d][a-f\d], ){16})((?:0x[a-f\d][a-f\d](?:, )?)+) +// Replace with: $1\n $2 +// +// Trim trailing spaces: +// , \n +// Replace with: ,\n +// +// Trim trailing newline after hex: +// \n\n\} +// Replace with: \n} -static const u_int8_t FLEXCloseIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x30, 0xae, 0xa2, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xc5, 0x97, 0x6b, 0x0e, 0x02, 0x21, 0x0c, 0x84, 0x89, 0x3f, 0xf4, 0xe8, 0x7b, 0x23, 0xe3, 0x8d, 0x38, 0x86, 0x32, 0xc4, 0x6e, 0xd8, 0x86, 0x47, 0x3b, 0x25, 0xd9, 0x4d, 0x2a, 0xb0, 0xb6, 0xf3, 0xb5, 0xd0, 0x18, 0x4c, 0x29, 0xa5, 0x67, 0xb1, 0xa3, 0x58, 0xfe, 0x1b, 0xe6, 0x78, 0xb7, 0xeb, 0x19, 0xea, 0x03, 0xf4, 0x55, 0xf6, 0x2e, 0xeb, 0xd7, 0x06, 0x32, 0x34, 0xa0, 0xa5, 0xf5, 0xc1, 0xac, 0x95, 0xea, 0x2f, 0xb0, 0x8e, 0xc2, 0x47, 0x50, 0x68, 0xe7, 0x19, 0x38, 0x02, 0x9f, 0x41, 0x4f, 0x30, 0xca, 0xc6, 0x62, 0x64, 0xde, 0xca, 0x57, 0x50, 0x70, 0xc0, 0xac, 0x8d, 0xd4, 0x3b, 0x87, 0x36, 0x11, 0x2b, 0xdc, 0x02, 0x85, 0xd6, 0xd9, 0xbc, 0xd6, 0x00, 0xf8, 0x8d, 0x1e, 0x5a, 0x83, 0x0e, 0x2c, 0x99, 0x44, 0x62, 0x6b, 0x21, 0x8c, 0x00, 0x13, 0xd3, 0xdd, 0x35, 0x8f, 0x90, 0xc7, 0xb7, 0x0b, 0xd3, 0x2f, 0x2d, 0x82, 0x9f, 0x12, 0x04, 0x6b, 0x9b, 0x50, 0xcf, 0xad, 0x4d, 0x79, 0xe1, 0x5b, 0xe0, 0x1a, 0xd4, 0xae, 0x29, 0xa8, 0x64, 0xc0, 0xc2, 0x43, 0x50, 0x16, 0xbe, 0x05, 0xda, 0xc2, 0x57, 0xe7, 0x89, 0x6d, 0x86, 0x0f, 0x76, 0x69, 0xf9, 0x3c, 0x96, 0x1e, 0x37, 0x3a, 0x78, 0xcf, 0x79, 0xcb, 0x56, 0x7b, 0xa1, 0xd2, 0xd5, 0x21, 0x38, 0x0b, 0x0d, 0xc1, 0x2d, 0xd0, 0xed, 0x3f, 0x20, 0x16, 0xa8, 0x6c, 0xa5, 0xc7, 0x77, 0xda, 0xa6, 0x8c, 0x10, 0x13, 0x73, 0x49, 0x22, 0x22, 0x40, 0xc7, 0xd2, 0x81, 0x4d, 0xea, 0x6e, 0x0d, 0x5c, 0x43, 0x70, 0x66, 0xd2, 0x8d, 0xbd, 0x51, 0xce, 0xb4, 0xe1, 0x74, 0xa7, 0x56, 0x78, 0xbd, 0xfa, 0x1c, 0x9b, 0xa0, 0x92, 0x89, 0x05, 0x0e, 0xe6, 0xf0, 0x5e, 0x8d, 0xca, 0xad, 0x95, 0x0a, 0x54, 0xc6, 0x15, 0x3c, 0xc3, 0x11, 0x1f, 0x91, 0xed, 0x15, 0x98, 0x1e, 0x67, 0xf0, 0x0a, 0x3e, 0x3a, 0x60, 0xb6, 0x52, 0x2b, 0x1c, 0xcc, 0x7b, 0xfe, 0xb4, 0xfd, 0x00, 0xb3, 0x4a, 0x9f, 0x54, 0x63, 0x5e, 0xe3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +// The 1x icons are unused now since some new icons don't have a 1x version at all +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused" -static const u_int8_t FLEXDragHandle[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x26, 0x08, 0x06, 0x00, 0x00, 0x00, 0xfd, 0x5c, 0x0a, 0xf0, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9e, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x32, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x36, 0x36, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x8a, 0x6f, 0x99, 0x54, 0x00, 0x00, 0x00, 0x4b, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x63, 0x60, 0x60, 0x60, 0xd8, 0x0a, 0xc4, 0xff, 0x09, 0xe0, 0xad, 0x4c, 0x40, 0x05, 0xc4, 0x00, 0x90, 0x41, 0x34, 0x00, 0xa3, 0x6e, 0xa4, 0x4e, 0xa0, 0x8e, 0x86, 0xe3, 0x68, 0x38, 0x22, 0xe7, 0xf5, 0x81, 0xce, 0xd7, 0x9b, 0x80, 0xd1, 0xf1, 0x97, 0x00, 0xde, 0xc4, 0x02, 0x54, 0xc0, 0x0a, 0xc4, 0x84, 0xca, 0x20, 0x56, 0x46, 0xa0, 0x22, 0x10, 0x20, 0xa4, 0xf0, 0x1f, 0x44, 0x19, 0x91, 0xe4, 0xc8, 0x73, 0x23, 0x00, 0x28, 0x34, 0x66, 0xcc, 0x96, 0x10, 0xe2, 0x94, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; -static const u_int8_t FLEXDragHandle2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x6d, 0x54, 0x97, 0x97, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9e, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x32, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x36, 0x36, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x8a, 0x6f, 0x99, 0x54, 0x00, 0x00, 0x00, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0xd5, 0xc1, 0x09, 0xc0, 0x30, 0x0c, 0x43, 0x51, 0xd3, 0xed, 0xba, 0xff, 0x08, 0x19, 0xa4, 0x8d, 0x0f, 0xe9, 0x5d, 0x8d, 0x74, 0xca, 0x0f, 0xf8, 0x68, 0x61, 0x93, 0x07, 0xae, 0xaa, 0xba, 0x67, 0x8d, 0x59, 0xcf, 0x66, 0x75, 0x46, 0x67, 0x59, 0xc2, 0xd6, 0x30, 0xe3, 0xea, 0x44, 0xf7, 0xb3, 0xaf, 0xec, 0x1e, 0xf0, 0xc4, 0x3c, 0xfb, 0xa7, 0x38, 0x50, 0xe3, 0xf0, 0x38, 0x8a, 0x38, 0xfc, 0x7d, 0x0a, 0xbe, 0x13, 0x70, 0x1c, 0x9a, 0xc0, 0xc2, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xc4, 0x61, 0x80, 0x95, 0x1c, 0x89, 0x43, 0x1c, 0xca, 0x68, 0x02, 0x0d, 0x38, 0xdc, 0x73, 0xf8, 0x02, 0x86, 0x61, 0x32, 0xdb, 0x80, 0xa1, 0x94, 0xde, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +#pragma mark - FLEX Toolbar Icons -static const u_int8_t FLEXGlobeIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0xce, 0x8e, 0x57, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0xad, 0x94, 0x3f, 0x4a, 0x03, 0x41, 0x14, 0x87, 0x93, 0xb4, 0x42, 0x7a, 0x2d, 0x2c, 0xed, 0x85, 0x14, 0x16, 0x41, 0x42, 0x4e, 0x10, 0xb0, 0x13, 0x3c, 0x88, 0x20, 0xa9, 0xbc, 0x82, 0x60, 0x95, 0x5a, 0x2b, 0x0b, 0x6f, 0x90, 0x52, 0x4c, 0xbc, 0x41, 0x0a, 0x0b, 0x15, 0x0b, 0x0f, 0x10, 0x02, 0xf1, 0xfb, 0x96, 0x79, 0xc3, 0xc4, 0x6c, 0xd0, 0x48, 0x7e, 0xf0, 0xed, 0xbe, 0x79, 0xff, 0xf6, 0xcd, 0x6c, 0x36, 0x8d, 0x46, 0xbd, 0xba, 0xb8, 0x87, 0x30, 0x85, 0x79, 0x42, 0x5b, 0x9f, 0xb1, 0x5f, 0xd5, 0x26, 0x63, 0x04, 0x33, 0x78, 0x80, 0x77, 0xb8, 0x80, 0x65, 0xb2, 0xf5, 0x19, 0x33, 0xc7, 0xdc, 0x5a, 0x9d, 0xe0, 0x7d, 0x85, 0x1b, 0x38, 0x82, 0x4f, 0x38, 0x06, 0x65, 0x23, 0x6d, 0x7d, 0xc6, 0xcc, 0x31, 0xd7, 0x9a, 0x15, 0xd9, 0xdd, 0xc0, 0x20, 0x79, 0x2f, 0xb9, 0x9b, 0x1c, 0xb2, 0x91, 0xd2, 0x67, 0x4c, 0x99, 0x6b, 0xcd, 0xca, 0x64, 0x8e, 0x5a, 0x16, 0xbe, 0xb0, 0x3e, 0x85, 0x50, 0x34, 0xd2, 0x67, 0x2c, 0x64, 0x8d, 0xb5, 0x95, 0x3c, 0xbc, 0x19, 0x5c, 0x83, 0x05, 0xdb, 0xf2, 0x45, 0x4d, 0xb7, 0xc5, 0xa5, 0x0f, 0x77, 0x70, 0x05, 0x4d, 0xe8, 0xc1, 0x38, 0xd9, 0xae, 0x45, 0x85, 0x6d, 0xac, 0x57, 0xac, 0x6f, 0xb1, 0xfb, 0x2d, 0x2e, 0x1d, 0x78, 0x86, 0xd0, 0x01, 0xc6, 0x5b, 0x2c, 0x6a, 0xee, 0xbe, 0x49, 0x73, 0x42, 0xd6, 0x76, 0x36, 0x35, 0x32, 0x79, 0x93, 0x7c, 0x48, 0xd9, 0x68, 0xc2, 0xda, 0x61, 0xaa, 0xa7, 0x6f, 0x7b, 0x2e, 0x6b, 0xf9, 0x4e, 0xe4, 0x68, 0x67, 0x10, 0x67, 0x70, 0x8e, 0x7d, 0x5f, 0xac, 0x7f, 0x9e, 0x91, 0x31, 0x73, 0x22, 0xdf, 0xda, 0xc7, 0x68, 0x54, 0x8d, 0x86, 0x43, 0x39, 0xfa, 0x7e, 0x65, 0xd5, 0x5f, 0x8c, 0x95, 0x67, 0x98, 0xcf, 0x38, 0x5e, 0xff, 0x5e, 0xaa, 0x3b, 0xe4, 0xfe, 0x01, 0x3e, 0x24, 0xe4, 0x56, 0x94, 0x3e, 0x63, 0xe6, 0x28, 0x6b, 0xfc, 0xe9, 0xe4, 0xef, 0x6f, 0xc4, 0xe2, 0x09, 0xd6, 0xf6, 0xfe, 0x07, 0xdf, 0x94, 0x9c, 0xac, 0x9d, 0x7d, 0x22, 0x76, 0xdc, 0xc9, 0x47, 0x1b, 0xa3, 0x39, 0x99, 0xdb, 0x74, 0xdf, 0xff, 0xfe, 0x1b, 0x89, 0x66, 0xde, 0x3d, 0xbc, 0x21, 0xb8, 0xff, 0x39, 0x2c, 0x92, 0xad, 0x2f, 0x1f, 0x2c, 0x76, 0xd6, 0x37, 0xcc, 0x0f, 0x82, 0x53, 0x11, 0x25, 0x5b, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXCloseIcon[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x30, 0xae, + 0xa2, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0xca, 0x41, 0x37, 0x05, 0x00, 0x00, + 0x01, 0xd2, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xad, 0x96, 0x3b, 0x4e, 0xc3, 0x40, 0x10, 0x86, + 0xe3, 0x08, 0x51, 0x84, 0x0a, 0x24, 0x1e, 0xa2, 0x41, 0xa2, 0x41, 0x9c, 0x82, 0x82, 0x82, 0x23, + 0x20, 0x1a, 0xe0, 0x0c, 0xb4, 0x3c, 0x7c, 0x85, 0x9c, 0x80, 0x0b, 0xa4, 0x04, 0x51, 0x12, 0xe0, + 0x04, 0x08, 0xf1, 0xa8, 0x29, 0x10, 0x52, 0x3a, 0x1a, 0x40, 0xe2, 0x61, 0xbe, 0x89, 0x32, 0x96, + 0x33, 0xac, 0x37, 0xf6, 0x7a, 0x47, 0xfa, 0xb5, 0x8f, 0xf1, 0xfc, 0xdf, 0xec, 0x26, 0x8a, 0xd3, + 0x6a, 0x8d, 0x22, 0xcb, 0xb2, 0x79, 0xd4, 0xd6, 0x75, 0xec, 0x11, 0xef, 0x69, 0x34, 0x9b, 0xfb, + 0xb2, 0x48, 0x50, 0x0f, 0x7d, 0xa3, 0x67, 0xb4, 0x93, 0x27, 0x23, 0x4d, 0xf0, 0x3c, 0x40, 0x03, + 0xf4, 0x89, 0xba, 0x43, 0x5b, 0x26, 0x9b, 0xa8, 0x18, 0x3f, 0x2c, 0xf6, 0x23, 0x31, 0x5b, 0x78, + 0xa5, 0x45, 0xf3, 0xd1, 0x7c, 0x4d, 0x12, 0x5b, 0x8e, 0x44, 0x14, 0x38, 0xbe, 0xa9, 0xc3, 0x5b, + 0xb6, 0xd6, 0x05, 0xdc, 0x46, 0xb7, 0xb2, 0x32, 0xd1, 0x08, 0x8e, 0xd7, 0x89, 0xf1, 0xd3, 0xe5, + 0x79, 0x7e, 0x9b, 0xec, 0x2c, 0xa0, 0x7b, 0xcd, 0x14, 0xc6, 0x20, 0x38, 0xf5, 0x65, 0xd0, 0x6b, + 0x72, 0x33, 0x39, 0x58, 0x26, 0x6c, 0x44, 0x81, 0xe3, 0x73, 0x8c, 0x5c, 0xf1, 0x1f, 0xaa, 0x1d, + 0xf0, 0x74, 0x23, 0x38, 0xf5, 0x65, 0xd0, 0x2b, 0x72, 0xe3, 0x27, 0x55, 0xa8, 0x8e, 0xa1, 0x70, + 0xea, 0x8e, 0x90, 0x2b, 0x26, 0x43, 0x43, 0xe1, 0xd0, 0x9a, 0x43, 0xeb, 0xc2, 0x81, 0x1e, 0xba, + 0x8e, 0xc9, 0x5e, 0x1f, 0xf9, 0xaf, 0x57, 0x61, 0x76, 0xa4, 0xd0, 0xfb, 0x99, 0x93, 0xf7, 0x41, + 0x3b, 0xd6, 0xaf, 0xd6, 0xda, 0x03, 0xff, 0x25, 0xe7, 0x8a, 0x3e, 0x9b, 0xcd, 0xa0, 0xda, 0x21, + 0x46, 0x65, 0x27, 0xb7, 0xe0, 0xcb, 0x68, 0xd0, 0x1a, 0xf0, 0x5a, 0xd0, 0xca, 0xaf, 0xc1, 0x24, + 0x49, 0x06, 0x34, 0x71, 0xa1, 0x8d, 0x38, 0xc6, 0x1e, 0xcf, 0xbc, 0x3b, 0xf6, 0x9b, 0x6d, 0x71, + 0x85, 0xa9, 0xbd, 0x57, 0xb3, 0x0e, 0xfa, 0x79, 0xf5, 0x76, 0x55, 0x01, 0xaa, 0x3d, 0xc4, 0x83, + 0x7b, 0xa0, 0x37, 0xe4, 0xa2, 0xbd, 0x58, 0xc6, 0x4e, 0xee, 0x81, 0x0e, 0x7f, 0xf0, 0xc9, 0x97, + 0x7d, 0xdb, 0xc3, 0x4f, 0x3e, 0x09, 0xaa, 0x1d, 0x46, 0x85, 0x57, 0x85, 0x1a, 0xf8, 0x03, 0x75, + 0x36, 0xaa, 0x9f, 0x9c, 0xca, 0xd4, 0x56, 0x8f, 0xd6, 0xe5, 0xef, 0x53, 0x3a, 0xe0, 0x19, 0xb9, + 0xf6, 0x30, 0x38, 0x85, 0x29, 0x72, 0x85, 0x17, 0x5a, 0x38, 0xf9, 0x22, 0xc5, 0xf5, 0xe0, 0x14, + 0xa4, 0x2e, 0x22, 0x7b, 0x95, 0xa0, 0x41, 0x70, 0xcc, 0xab, 0xff, 0x47, 0x52, 0x82, 0x67, 0xc4, + 0x4f, 0x4e, 0xfe, 0x88, 0x6c, 0xc8, 0x67, 0xbe, 0x3b, 0x2c, 0x65, 0xb2, 0x82, 0x64, 0xc3, 0x46, + 0xad, 0x93, 0xda, 0x3e, 0x30, 0x2b, 0x83, 0xbf, 0x91, 0xeb, 0xc8, 0x97, 0x62, 0x0f, 0xd9, 0x68, + 0x04, 0xd5, 0x26, 0x30, 0x5d, 0x42, 0xae, 0x93, 0x6f, 0x08, 0x78, 0x0e, 0x7d, 0x20, 0x8d, 0x28, + 0x50, 0x03, 0x7f, 0x52, 0x73, 0xc6, 0x17, 0x34, 0x95, 0xc8, 0x03, 0x4c, 0x56, 0x19, 0xe4, 0xee, + 0xef, 0xd0, 0x19, 0x6f, 0x99, 0x2f, 0xc6, 0x68, 0x81, 0xbf, 0xfc, 0x31, 0xd8, 0x46, 0xcb, 0xe8, + 0x14, 0xff, 0xd7, 0x3f, 0x44, 0x89, 0xd3, 0x05, 0x85, 0xe7, 0xc6, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXGlobeIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x98, 0x98, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x03, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xcd, 0x98, 0x3d, 0x6b, 0x54, 0x51, 0x10, 0x86, 0x8d, 0xb1, 0xf3, 0x83, 0xac, 0x60, 0x61, 0x20, 0x58, 0x88, 0x1f, 0xa8, 0x9d, 0x85, 0x85, 0x58, 0x2e, 0x04, 0x4c, 0x61, 0x6a, 0x05, 0x7f, 0x84, 0x56, 0x0a, 0xd9, 0x3f, 0xa0, 0x90, 0xfc, 0x80, 0xfc, 0x00, 0x3b, 0x85, 0xa4, 0x31, 0x92, 0x46, 0x04, 0x2d, 0x6c, 0x44, 0xc5, 0x0f, 0x62, 0x96, 0x14, 0xa6, 0x52, 0x51, 0x23, 0x04, 0x62, 0x8c, 0xef, 0xb3, 0x39, 0x6f, 0x98, 0x7b, 0x72, 0x37, 0x7b, 0x57, 0x76, 0x13, 0x07, 0xde, 0xcc, 0x9c, 0x99, 0x79, 0x67, 0x86, 0x7b, 0xef, 0x39, 0x7b, 0x6f, 0x06, 0xf6, 0x75, 0x2f, 0x35, 0x51, 0xae, 0x0a, 0x75, 0xe1, 0x82, 0x70, 0x5a, 0x38, 0x28, 0x20, 0xbf, 0x84, 0x0f, 0xc2, 0x6b, 0x61, 0x4e, 0x98, 0x15, 0xbe, 0x09, 0x7d, 0x91, 0x71, 0x55, 0x9d, 0x17, 0xd6, 0x84, 0x8d, 0x8a, 0x20, 0x17, 0x0e, 0xdc, 0x9e, 0xc9, 0x65, 0x55, 0x7a, 0x26, 0x54, 0x1d, 0xa2, 0x5d, 0x1e, 0x35, 0xa8, 0xf5, 0xcf, 0x32, 0x28, 0xe6, 0xa4, 0x90, 0x37, 0xf8, 0x93, 0x7c, 0xeb, 0xd2, 0x13, 0xc2, 0xb9, 0x90, 0x83, 0x8d, 0x8f, 0x18, 0x3c, 0xe7, 0xc6, 0x1a, 0xd4, 0xa4, 0x76, 0x57, 0x32, 0xa4, 0xec, 0xc7, 0x42, 0x2c, 0xb4, 0xaa, 0xf5, 0x94, 0xd0, 0x4c, 0xfe, 0xdb, 0xd2, 0x16, 0xe7, 0x79, 0x4d, 0x0c, 0x5f, 0x53, 0x80, 0x03, 0xd7, 0x39, 0x68, 0x6a, 0xd3, 0xa3, 0x92, 0x90, 0xf8, 0x56, 0x88, 0x05, 0x1e, 0x6a, 0x7d, 0x42, 0xb8, 0x95, 0xfc, 0xaf, 0xa4, 0x0f, 0x08, 0x16, 0xe7, 0x7a, 0x4d, 0x8c, 0x1c, 0xfc, 0x70, 0xe0, 0x52, 0xc3, 0x79, 0x68, 0x7a, 0x74, 0x1c, 0x8a, 0x4b, 0x19, 0xaf, 0x0c, 0x97, 0xbc, 0x21, 0x0c, 0x24, 0x2c, 0x48, 0x53, 0x8c, 0x5d, 0x16, 0xc5, 0x8d, 0xa2, 0x8f, 0x1c, 0xfc, 0x70, 0xcc, 0xa7, 0x56, 0xbc, 0x8d, 0xf4, 0xda, 0xf1, 0xf6, 0x4d, 0x2a, 0xc1, 0xc5, 0x21, 0x5e, 0x17, 0x2c, 0xa3, 0x32, 0x88, 0x2d, 0x0a, 0xfb, 0xed, 0x4c, 0xda, 0x9c, 0xe8, 0x26, 0x87, 0x5c, 0x62, 0x70, 0x2d, 0x37, 0x64, 0xc4, 0xa1, 0xe8, 0x59, 0x2a, 0xec, 0x00, 0x17, 0x46, 0x37, 0xb2, 0xac, 0xe9, 0x14, 0xbf, 0x93, 0xf9, 0x59, 0x9a, 0x97, 0x87, 0xee, 0xa6, 0x18, 0xdc, 0x28, 0xd4, 0x36, 0x07, 0x5d, 0xba, 0xfb, 0x7a, 0xb1, 0xb5, 0x63, 0x93, 0x6e, 0x6c, 0x7a, 0x17, 0x84, 0x83, 0xcb, 0x05, 0xd6, 0x83, 0x6d, 0x5f, 0xbf, 0x74, 0xec, 0x55, 0x38, 0x3c, 0xe7, 0xc3, 0x10, 0xf7, 0x0b, 0xa3, 0x6e, 0x2e, 0x6e, 0xa6, 0xf8, 0x83, 0x92, 0x18, 0x2e, 0x0f, 0x5c, 0x16, 0x86, 0x43, 0x9c, 0x1a, 0xb9, 0xd0, 0xcb, 0x5c, 0x66, 0x68, 0x3d, 0x9c, 0x35, 0xe9, 0x2b, 0x2c, 0x24, 0x04, 0xef, 0xb5, 0xac, 0xe2, 0x9f, 0x33, 0x69, 0xc9, 0x56, 0xed, 0x56, 0xcc, 0x71, 0x8d, 0xc8, 0xa7, 0x17, 0x3d, 0x11, 0x66, 0xa8, 0xb1, 0x13, 0xc6, 0x04, 0x9f, 0x29, 0xcf, 0x65, 0x2f, 0x0b, 0xb9, 0x9c, 0x4d, 0x8e, 0x77, 0x79, 0xa0, 0xc2, 0xda, 0x1c, 0xd7, 0x88, 0x14, 0x7a, 0xbd, 0x48, 0x0e, 0x66, 0x18, 0x63, 0xa0, 0x7a, 0x72, 0xa0, 0x1e, 0x05, 0x3b, 0x9a, 0x27, 0xd3, 0xe2, 0x63, 0x74, 0x56, 0xb4, 0xcd, 0x71, 0x8d, 0x9c, 0xc6, 0x81, 0x69, 0xa9, 0x33, 0xd0, 0x88, 0x57, 0xd2, 0x2f, 0x83, 0x1d, 0xcd, 0x23, 0x69, 0xf1, 0x35, 0x3a, 0x2b, 0xda, 0xe6, 0xb8, 0x46, 0x4e, 0x8b, 0x3d, 0x47, 0x18, 0x68, 0x38, 0x64, 0x7c, 0x0e, 0x76, 0x34, 0x0f, 0xa7, 0xc5, 0xcf, 0xe8, 0xac, 0x68, 0xaf, 0xa4, 0x3c, 0xd7, 0xc8, 0x69, 0xb1, 0xe7, 0x30, 0x47, 0x3a, 0x4d, 0x0e, 0xe5, 0x59, 0x7b, 0xb4, 0x5e, 0xe1, 0x0a, 0xf9, 0x29, 0xdf, 0xa3, 0x19, 0x0a, 0x6d, 0x37, 0x18, 0x28, 0xee, 0xaa, 0xf3, 0x5a, 0xfb, 0x87, 0x30, 0xea, 0x2f, 0x89, 0x76, 0xac, 0x4d, 0x3c, 0x85, 0x4b, 0xb9, 0x70, 0x10, 0x6a, 0xc4, 0x9a, 0xb6, 0xe9, 0x69, 0x59, 0x66, 0xa0, 0xc2, 0x3d, 0x74, 0x24, 0xd3, 0x7e, 0x76, 0xfe, 0xe5, 0xd6, 0xfa, 0xd9, 0x71, 0x8d, 0xac, 0x74, 0xf1, 0x19, 0x66, 0xa0, 0xa5, 0x90, 0x71, 0x31, 0xd8, 0xd1, 0xfc, 0x91, 0x16, 0x47, 0xa3, 0xb3, 0xa2, 0xcd, 0xc1, 0x8b, 0x7c, 0xdf, 0x54, 0xdb, 0xfe, 0xc6, 0x9e, 0x4b, 0x0c, 0xf4, 0x24, 0xa4, 0x5c, 0x0b, 0x76, 0x34, 0x17, 0xd2, 0xe2, 0x54, 0x74, 0x56, 0xb4, 0xcd, 0xf9, 0xd4, 0x26, 0x3f, 0xf6, 0x9c, 0x63, 0xa0, 0x19, 0xe1, 0x77, 0x4a, 0xbe, 0x24, 0x7d, 0x3c, 0xd9, 0x51, 0xed, 0x74, 0xda, 0xc6, 0xbc, 0x32, 0xdb, 0x27, 0xb4, 0x6b, 0xc4, 0x1c, 0x7a, 0xd1, 0x13, 0x61, 0x86, 0x59, 0x06, 0xe2, 0xbb, 0xe9, 0xa9, 0x80, 0xf0, 0xa0, 0xc5, 0x77, 0xe5, 0x96, 0x53, 0x7f, 0xde, 0x27, 0x83, 0x97, 0xf8, 0x6e, 0xc5, 0x1c, 0xd7, 0x88, 0x7c, 0x7a, 0xd1, 0x13, 0x61, 0x86, 0xad, 0x6f, 0xb8, 0x71, 0x2d, 0xfc, 0xab, 0xbb, 0x1e, 0x6c, 0xfb, 0xfa, 0xa5, 0x63, 0x2f, 0x66, 0x28, 0x08, 0x2f, 0x49, 0xfd, 0x6a, 0xdc, 0xa9, 0x2e, 0xbd, 0xb7, 0x09, 0xaf, 0x91, 0x91, 0xd8, 0xc8, 0x32, 0xa6, 0x53, 0x7c, 0xd7, 0x5e, 0x61, 0xe9, 0xcf, 0x0b, 0xb7, 0x87, 0xe2, 0x45, 0x9c, 0x17, 0x72, 0xcb, 0xa8, 0x0c, 0x62, 0x8b, 0x02, 0xcf, 0x5e, 0x14, 0x73, 0xa2, 0x8f, 0x1c, 0x72, 0x89, 0xc1, 0xb5, 0x50, 0x93, 0xda, 0xe6, 0xd0, 0xb3, 0xad, 0x0c, 0x2a, 0xc2, 0xa7, 0x89, 0x93, 0x21, 0x36, 0x04, 0x9f, 0xaa, 0x6c, 0x7f, 0x62, 0xbb, 0xf6, 0x19, 0xa4, 0x5e, 0xad, 0x8f, 0xb7, 0xff, 0xe6, 0x43, 0x91, 0x81, 0x90, 0x21, 0x21, 0x5e, 0x29, 0xae, 0xca, 0xaa, 0x30, 0x25, 0x34, 0x05, 0xd6, 0xf1, 0x78, 0x60, 0x0d, 0x2c, 0xc4, 0x58, 0x37, 0x05, 0x38, 0x70, 0x9d, 0x83, 0xa6, 0x36, 0x3d, 0xba, 0x12, 0x6e, 0x5f, 0x7c, 0xa6, 0x5c, 0xd0, 0xf7, 0x9f, 0x2d, 0x3b, 0x21, 0xec, 0xca, 0x3f, 0x1b, 0xe2, 0xe4, 0xec, 0xbe, 0x5e, 0x1c, 0x09, 0xd4, 0xa0, 0x56, 0xcf, 0x84, 0x83, 0x6b, 0x5e, 0x58, 0x13, 0x7c, 0xb5, 0x3a, 0x69, 0x72, 0xe1, 0x6c, 0x3b, 0xf4, 0xe4, 0x2b, 0x15, 0x1f, 0xdb, 0xa5, 0xc1, 0x36, 0xce, 0x9a, 0xfc, 0x7c, 0xa9, 0xd4, 0x05, 0xde, 0x65, 0xca, 0xfe, 0xa5, 0xf7, 0x46, 0xfe, 0x39, 0x61, 0x46, 0xd8, 0xfa, 0x39, 0x90, 0xdd, 0x51, 0xfe, 0x02, 0x89, 0x7c, 0xcc, 0xd6, 0x15, 0x10, 0x0a, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXCloseIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x30, 0xae, + 0xa2, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0xca, 0x41, 0x37, 0x05, 0x00, 0x00, + 0x01, 0xd2, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xad, 0x96, 0x3b, 0x4e, 0xc3, 0x40, 0x10, 0x86, + 0xe3, 0x08, 0x51, 0x84, 0x0a, 0x24, 0x1e, 0xa2, 0x41, 0xa2, 0x41, 0x9c, 0x82, 0x82, 0x82, 0x23, + 0x20, 0x1a, 0xe0, 0x0c, 0xb4, 0x3c, 0x7c, 0x85, 0x9c, 0x80, 0x0b, 0xa4, 0x04, 0x51, 0x12, 0xe0, + 0x04, 0x08, 0xf1, 0xa8, 0x29, 0x10, 0x52, 0x3a, 0x1a, 0x40, 0xe2, 0x61, 0xbe, 0x89, 0x32, 0x96, + 0x33, 0xac, 0x37, 0xf6, 0x7a, 0x47, 0xfa, 0xb5, 0x8f, 0xf1, 0xfc, 0xdf, 0xec, 0x26, 0x8a, 0xd3, + 0x6a, 0x8d, 0x22, 0xcb, 0xb2, 0x79, 0xd4, 0xd6, 0x75, 0xec, 0x11, 0xef, 0x69, 0x34, 0x9b, 0xfb, + 0xb2, 0x48, 0x50, 0x0f, 0x7d, 0xa3, 0x67, 0xb4, 0x93, 0x27, 0x23, 0x4d, 0xf0, 0x3c, 0x40, 0x03, + 0xf4, 0x89, 0xba, 0x43, 0x5b, 0x26, 0x9b, 0xa8, 0x18, 0x3f, 0x2c, 0xf6, 0x23, 0x31, 0x5b, 0x78, + 0xa5, 0x45, 0xf3, 0xd1, 0x7c, 0x4d, 0x12, 0x5b, 0x8e, 0x44, 0x14, 0x38, 0xbe, 0xa9, 0xc3, 0x5b, + 0xb6, 0xd6, 0x05, 0xdc, 0x46, 0xb7, 0xb2, 0x32, 0xd1, 0x08, 0x8e, 0xd7, 0x89, 0xf1, 0xd3, 0xe5, + 0x79, 0x7e, 0x9b, 0xec, 0x2c, 0xa0, 0x7b, 0xcd, 0x14, 0xc6, 0x20, 0x38, 0xf5, 0x65, 0xd0, 0x6b, + 0x72, 0x33, 0x39, 0x58, 0x26, 0x6c, 0x44, 0x81, 0xe3, 0x73, 0x8c, 0x5c, 0xf1, 0x1f, 0xaa, 0x1d, + 0xf0, 0x74, 0x23, 0x38, 0xf5, 0x65, 0xd0, 0x2b, 0x72, 0xe3, 0x27, 0x55, 0xa8, 0x8e, 0xa1, 0x70, + 0xea, 0x8e, 0x90, 0x2b, 0x26, 0x43, 0x43, 0xe1, 0xd0, 0x9a, 0x43, 0xeb, 0xc2, 0x81, 0x1e, 0xba, + 0x8e, 0xc9, 0x5e, 0x1f, 0xf9, 0xaf, 0x57, 0x61, 0x76, 0xa4, 0xd0, 0xfb, 0x99, 0x93, 0xf7, 0x41, + 0x3b, 0xd6, 0xaf, 0xd6, 0xda, 0x03, 0xff, 0x25, 0xe7, 0x8a, 0x3e, 0x9b, 0xcd, 0xa0, 0xda, 0x21, + 0x46, 0x65, 0x27, 0xb7, 0xe0, 0xcb, 0x68, 0xd0, 0x1a, 0xf0, 0x5a, 0xd0, 0xca, 0xaf, 0xc1, 0x24, + 0x49, 0x06, 0x34, 0x71, 0xa1, 0x8d, 0x38, 0xc6, 0x1e, 0xcf, 0xbc, 0x3b, 0xf6, 0x9b, 0x6d, 0x71, + 0x85, 0xa9, 0xbd, 0x57, 0xb3, 0x0e, 0xfa, 0x79, 0xf5, 0x76, 0x55, 0x01, 0xaa, 0x3d, 0xc4, 0x83, + 0x7b, 0xa0, 0x37, 0xe4, 0xa2, 0xbd, 0x58, 0xc6, 0x4e, 0xee, 0x81, 0x0e, 0x7f, 0xf0, 0xc9, 0x97, + 0x7d, 0xdb, 0xc3, 0x4f, 0x3e, 0x09, 0xaa, 0x1d, 0x46, 0x85, 0x57, 0x85, 0x1a, 0xf8, 0x03, 0x75, + 0x36, 0xaa, 0x9f, 0x9c, 0xca, 0xd4, 0x56, 0x8f, 0xd6, 0xe5, 0xef, 0x53, 0x3a, 0xe0, 0x19, 0xb9, + 0xf6, 0x30, 0x38, 0x85, 0x29, 0x72, 0x85, 0x17, 0x5a, 0x38, 0xf9, 0x22, 0xc5, 0xf5, 0xe0, 0x14, + 0xa4, 0x2e, 0x22, 0x7b, 0x95, 0xa0, 0x41, 0x70, 0xcc, 0xab, 0xff, 0x47, 0x52, 0x82, 0x67, 0xc4, + 0x4f, 0x4e, 0xfe, 0x88, 0x6c, 0xc8, 0x67, 0xbe, 0x3b, 0x2c, 0x65, 0xb2, 0x82, 0x64, 0xc3, 0x46, + 0xad, 0x93, 0xda, 0x3e, 0x30, 0x2b, 0x83, 0xbf, 0x91, 0xeb, 0xc8, 0x97, 0x62, 0x0f, 0xd9, 0x68, + 0x04, 0xd5, 0x26, 0x30, 0x5d, 0x42, 0xae, 0x93, 0x6f, 0x08, 0x78, 0x0e, 0x7d, 0x20, 0x8d, 0x28, + 0x50, 0x03, 0x7f, 0x52, 0x73, 0xc6, 0x17, 0x34, 0x95, 0xc8, 0x03, 0x4c, 0x56, 0x19, 0xe4, 0xee, + 0xef, 0xd0, 0x19, 0x6f, 0x99, 0x2f, 0xc6, 0x68, 0x81, 0xbf, 0xfc, 0x31, 0xd8, 0x46, 0xcb, 0xe8, + 0x14, 0xff, 0xd7, 0x3f, 0x44, 0x89, 0xd3, 0x05, 0x85, 0xe7, 0xc6, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXHierarchyIndentPattern[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xf9, 0x3c, 0x0f, 0xcd, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x35, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc0, 0x10, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x10, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, 0x60, 0xf8, 0x0f, 0xc4, 0x70, 0x00, 0x00, 0x0d, 0x04, 0x01, 0x00, 0x65, 0x59, 0x09, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXCloseIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2d, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3a, 0x1a, 0xe2, + 0x9a, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2d, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x46, 0xa8, 0x05, 0x50, 0x00, 0x00, + 0x02, 0xc0, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xd5, 0x99, 0xbf, 0x6b, 0x14, 0x41, 0x14, 0x80, + 0x6f, 0x4f, 0x0b, 0x83, 0x20, 0xb6, 0x42, 0xe2, 0xd8, 0x08, 0xe9, 0x2c, 0x15, 0xec, 0x2c, 0xb5, + 0x14, 0xff, 0x0a, 0xc1, 0xf8, 0x23, 0x88, 0x65, 0x2a, 0x3b, 0x3b, 0x5b, 0xe3, 0xaf, 0xc2, 0x4a, + 0x4b, 0x41, 0x50, 0x50, 0xac, 0xec, 0x45, 0x2c, 0x34, 0x03, 0x56, 0xc1, 0xd6, 0x42, 0x82, 0x9a, + 0xcb, 0x37, 0x61, 0xdf, 0xb2, 0xb7, 0x77, 0xb3, 0x6f, 0x76, 0x77, 0x66, 0x16, 0x1f, 0x7c, 0x79, + 0xbb, 0xfb, 0x66, 0xe6, 0x7d, 0x3b, 0xec, 0x91, 0x5c, 0x76, 0x32, 0xf9, 0x9f, 0x63, 0x36, 0x9b, + 0x5d, 0x83, 0x57, 0xf0, 0x1a, 0x36, 0xe0, 0xe8, 0x98, 0xf7, 0x43, 0xff, 0x13, 0x70, 0x1f, 0xde, + 0xc2, 0x73, 0x38, 0x3f, 0xe7, 0xc3, 0x85, 0x7b, 0xd0, 0x8c, 0xf7, 0x5c, 0x38, 0x3e, 0x37, 0x30, + 0xd3, 0x09, 0x7d, 0xcf, 0xc0, 0x4e, 0x43, 0xe8, 0x1f, 0xe7, 0x97, 0x0f, 0x15, 0x38, 0x38, 0x06, + 0xbf, 0x1b, 0x03, 0xe4, 0xf4, 0x03, 0x07, 0x59, 0xc5, 0xe9, 0x67, 0xc0, 0xc2, 0xb2, 0xf8, 0x2c, + 0xd2, 0xeb, 0xcb, 0xaa, 0xb5, 0x6b, 0xd9, 0xc4, 0xe9, 0x69, 0xc0, 0x82, 0x2f, 0xfe, 0x50, 0x98, + 0x4e, 0xf8, 0xb1, 0x02, 0x7b, 0xbe, 0x51, 0xe5, 0xf5, 0xe4, 0xe2, 0xf4, 0x31, 0x60, 0xa1, 0x2d, + 0xbe, 0x56, 0x4f, 0x28, 0xa3, 0xb6, 0xda, 0x46, 0x96, 0xb5, 0x64, 0xe2, 0xac, 0x6f, 0xa0, 0xf9, + 0x0c, 0x97, 0x6d, 0xe7, 0xd2, 0xd5, 0xba, 0xf4, 0x94, 0xd2, 0xa3, 0xb9, 0xf2, 0xf2, 0x93, 0xe8, + 0xe2, 0xb4, 0x39, 0x0d, 0x21, 0xc2, 0x9b, 0x95, 0xb0, 0x1c, 0x30, 0x31, 0xbb, 0x78, 0x07, 0xe1, + 0x3b, 0xe2, 0xb9, 0x90, 0x73, 0x8a, 0x47, 0x11, 0x96, 0x3b, 0xc8, 0x21, 0x5e, 0x0a, 0x7f, 0x27, + 0x6b, 0xe1, 0xdf, 0x61, 0x11, 0x96, 0xcc, 0x4a, 0xc9, 0x1e, 0x15, 0xd6, 0x5e, 0x83, 0x10, 0xe1, + 0xdb, 0xe2, 0x13, 0x9c, 0x53, 0x88, 0x27, 0x15, 0x96, 0x3b, 0x8b, 0x29, 0xde, 0x41, 0xf8, 0x96, + 0xf4, 0xef, 0x9d, 0x63, 0x88, 0x97, 0xc2, 0xdf, 0xc8, 0x5a, 0x0c, 0x17, 0x96, 0x3b, 0xa5, 0x53, + 0xef, 0x67, 0x9c, 0xb9, 0xab, 0x10, 0x22, 0x7c, 0x53, 0xfa, 0x45, 0xcb, 0x7d, 0xc4, 0x47, 0x15, + 0x96, 0x3b, 0xef, 0x28, 0xee, 0xfe, 0x10, 0x1b, 0x67, 0x87, 0x45, 0x58, 0x72, 0x07, 0xf1, 0xbf, + 0x8c, 0xd5, 0x62, 0x43, 0xd6, 0x4d, 0x9e, 0x31, 0x09, 0x7d, 0xc6, 0xdb, 0xa4, 0xf3, 0x09, 0xcb, + 0x8e, 0x94, 0xe2, 0xdb, 0x6d, 0x56, 0x2d, 0xb5, 0x1b, 0xb2, 0x4e, 0xf6, 0xdc, 0x53, 0x7c, 0x3c, + 0x61, 0xd9, 0xa1, 0x52, 0xfc, 0x45, 0xcb, 0xae, 0xd6, 0x4b, 0x77, 0x65, 0xde, 0x90, 0x3c, 0x1d, + 0x32, 0xb9, 0x9c, 0xbb, 0x46, 0xbe, 0x10, 0xb8, 0xce, 0x15, 0xee, 0x20, 0xeb, 0x77, 0xce, 0x05, + 0x2f, 0x04, 0x0c, 0x58, 0xe8, 0x12, 0xd1, 0xbf, 0x48, 0x2c, 0x88, 0xf9, 0x2e, 0x60, 0x69, 0xc0, + 0x42, 0x9f, 0xc8, 0x2f, 0x8e, 0xa5, 0x01, 0x0b, 0x43, 0x22, 0x9f, 0x38, 0x96, 0x06, 0x2c, 0x68, + 0xf1, 0x49, 0x1b, 0x40, 0x3d, 0xbd, 0x38, 0x4d, 0x0c, 0x58, 0xd0, 0x62, 0x93, 0x01, 0xa1, 0xbf, + 0x80, 0xd2, 0x89, 0x23, 0x61, 0xc0, 0x82, 0x16, 0xd5, 0xb7, 0x66, 0x06, 0x3a, 0xf1, 0x6d, 0x6d, + 0x02, 0xf5, 0xf8, 0xe2, 0x2c, 0x6a, 0xc0, 0x82, 0x16, 0x95, 0xb0, 0x7c, 0x80, 0x99, 0x90, 0x5f, + 0x9c, 0xa6, 0x06, 0x2c, 0x68, 0xb1, 0x20, 0xdc, 0x10, 0x7f, 0xac, 0x2d, 0x40, 0x7d, 0xf8, 0x8e, + 0xb3, 0x88, 0x01, 0x0b, 0x5a, 0x78, 0x85, 0xb3, 0x8a, 0x63, 0x69, 0xc0, 0x82, 0x16, 0xaa, 0x70, + 0x16, 0x71, 0x2c, 0x0d, 0x58, 0xd0, 0x22, 0x58, 0xb8, 0x21, 0xfe, 0x44, 0x5b, 0x98, 0x7a, 0xf8, + 0xa3, 0xc2, 0x60, 0x03, 0x16, 0xb4, 0xe8, 0x2c, 0x9c, 0x44, 0x1c, 0x4b, 0x03, 0x16, 0xb4, 0xe8, + 0x2d, 0xdc, 0x10, 0x7f, 0xaa, 0x35, 0xa2, 0xee, 0xdf, 0x71, 0x8a, 0x06, 0x2c, 0x68, 0x31, 0x58, + 0x38, 0x8a, 0x38, 0x96, 0xee, 0x5f, 0x55, 0x56, 0xb3, 0xa5, 0x1e, 0x4d, 0xb8, 0x21, 0xfe, 0x2c, + 0xa0, 0xb7, 0xdb, 0xf1, 0x15, 0x99, 0xe7, 0xde, 0x06, 0xbc, 0x0b, 0x98, 0x14, 0x5d, 0x58, 0x04, + 0xe8, 0xed, 0x7e, 0x01, 0x85, 0x88, 0x3f, 0x38, 0x9c, 0xc3, 0xe0, 0x53, 0x63, 0x0a, 0x77, 0x14, + 0xff, 0x29, 0xd2, 0x67, 0x15, 0xe9, 0x64, 0x3b, 0x2c, 0xc2, 0x92, 0xf1, 0x70, 0x3b, 0xee, 0xde, + 0x19, 0xfa, 0xe2, 0x17, 0x85, 0xc2, 0x3d, 0x1a, 0x6e, 0xe0, 0x8e, 0x67, 0x54, 0x36, 0xe1, 0x9a, + 0xf8, 0x11, 0x5c, 0x7c, 0xe2, 0x2f, 0x65, 0x9c, 0x13, 0xbf, 0x08, 0xbb, 0x35, 0x71, 0xf7, 0x5e, + 0xf1, 0x7a, 0x35, 0x20, 0xf3, 0x01, 0xbd, 0x9d, 0xf8, 0x43, 0xd8, 0x07, 0x89, 0x2f, 0x1c, 0xac, + 0x3a, 0x95, 0x42, 0x7c, 0xb8, 0x70, 0x92, 0xe3, 0x4b, 0xe0, 0x3e, 0xa1, 0x1f, 0x8b, 0xa2, 0xf8, + 0x21, 0xb5, 0xb1, 0x32, 0x4e, 0xe7, 0xe8, 0xed, 0x5e, 0x2f, 0xef, 0xc2, 0x1b, 0x9c, 0xf6, 0x9c, + 0xcb, 0x01, 0x48, 0xaa, 0xb6, 0x3e, 0x0f, 0xf9, 0xdb, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXHierarchyIndentPattern2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe3, 0x00, 0xef, 0x43, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x30, 0x36, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x90, 0x7a, 0xe1, 0x8d, 0x00, 0x00, 0x00, 0x12, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, 0x60, 0xf8, 0x0f, 0xc5, 0x40, 0x0a, 0x13, 0x00, 0x00, 0x35, 0xeb, 0x01, 0xff, 0x0f, 0x5e, 0xbc, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXDragHandle[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x14, 0x08, 0x06, 0x00, 0x00, 0x01, 0x6d, 0xdf, 0x8a, + 0x41, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x50, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0x5b, 0x90, 0xfc, 0x00, 0x00, 0x00, 0x95, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, + 0x96, 0x51, 0x12, 0x00, 0x11, 0x08, 0x86, 0x73, 0xff, 0xeb, 0xac, 0xf3, 0xd9, 0xf6, 0xa1, 0x17, + 0x9b, 0xc9, 0x43, 0x46, 0xf4, 0x1b, 0xc6, 0x20, 0x93, 0x3e, 0x45, 0x85, 0x94, 0xd2, 0x88, 0xb8, + 0xae, 0x2e, 0xa5, 0x57, 0xa0, 0xa9, 0x65, 0xa1, 0x9f, 0x5c, 0xbf, 0x2f, 0xe5, 0x98, 0x61, 0xd5, + 0x0f, 0x98, 0xd5, 0x52, 0xc2, 0x81, 0xd1, 0x37, 0x13, 0x98, 0x75, 0x7d, 0x2b, 0x34, 0x64, 0xfd, + 0x66, 0x56, 0xba, 0x6d, 0xe1, 0x09, 0xca, 0xd5, 0x38, 0xf5, 0x55, 0xc7, 0x80, 0x59, 0x10, 0x38, + 0x98, 0x80, 0x53, 0x70, 0x48, 0x0a, 0xf1, 0x1c, 0x8c, 0x02, 0x47, 0xdf, 0x44, 0xc0, 0xd9, 0x07, + 0x63, 0x3e, 0xd4, 0x6c, 0xe4, 0x54, 0xae, 0xed, 0x0c, 0x43, 0x02, 0xd3, 0xea, 0x11, 0xb8, 0x9b, + 0x9c, 0x1f, 0x6a, 0x41, 0x20, 0x0b, 0x81, 0xe0, 0x6f, 0x60, 0xcc, 0x8f, 0x23, 0x8b, 0x73, 0xc0, + 0x4e, 0x10, 0x00, 0x01, 0x10, 0xb0, 0x08, 0x04, 0xff, 0x44, 0x86, 0x89, 0xf4, 0x0b, 0xbf, 0x81, + 0xca, 0xc9, 0x10, 0xe6, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; + +static const u_int8_t FLEXDragHandle2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x14, 0x08, 0x06, 0x00, 0x00, 0x01, 0x6d, 0xdf, 0x8a, + 0x41, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x50, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0xbf, 0x5b, 0x90, 0xfc, 0x00, 0x00, 0x00, 0x95, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, + 0x96, 0x51, 0x12, 0x00, 0x11, 0x08, 0x86, 0x73, 0xff, 0xeb, 0xac, 0xf3, 0xd9, 0xf6, 0xa1, 0x17, + 0x9b, 0xc9, 0x43, 0x46, 0xf4, 0x1b, 0xc6, 0x20, 0x93, 0x3e, 0x45, 0x85, 0x94, 0xd2, 0x88, 0xb8, + 0xae, 0x2e, 0xa5, 0x57, 0xa0, 0xa9, 0x65, 0xa1, 0x9f, 0x5c, 0xbf, 0x2f, 0xe5, 0x98, 0x61, 0xd5, + 0x0f, 0x98, 0xd5, 0x52, 0xc2, 0x81, 0xd1, 0x37, 0x13, 0x98, 0x75, 0x7d, 0x2b, 0x34, 0x64, 0xfd, + 0x66, 0x56, 0xba, 0x6d, 0xe1, 0x09, 0xca, 0xd5, 0x38, 0xf5, 0x55, 0xc7, 0x80, 0x59, 0x10, 0x38, + 0x98, 0x80, 0x53, 0x70, 0x48, 0x0a, 0xf1, 0x1c, 0x8c, 0x02, 0x47, 0xdf, 0x44, 0xc0, 0xd9, 0x07, + 0x63, 0x3e, 0xd4, 0x6c, 0xe4, 0x54, 0xae, 0xed, 0x0c, 0x43, 0x02, 0xd3, 0xea, 0x11, 0xb8, 0x9b, + 0x9c, 0x1f, 0x6a, 0x41, 0x20, 0x0b, 0x81, 0xe0, 0x6f, 0x60, 0xcc, 0x8f, 0x23, 0x8b, 0x73, 0xc0, + 0x4e, 0x10, 0x00, 0x01, 0x10, 0xb0, 0x08, 0x04, 0xff, 0x44, 0x86, 0x89, 0xf4, 0x0b, 0xbf, 0x81, + 0xca, 0xc9, 0x10, 0xe6, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; -static const u_int8_t FLEXListIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe4, 0x98, 0xef, 0x55, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0x65, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0x63, 0x60, 0x60, 0x60, 0x68, 0x05, 0xe2, 0x9f, 0x40, 0xfc, 0x9f, 0x42, 0x0c, 0x32, 0xa3, 0x95, 0x11, 0x48, 0x7c, 0x06, 0x62, 0x1e, 0x20, 0xa6, 0x06, 0xf8, 0xc2, 0x0c, 0x34, 0x05, 0x64, 0x98, 0x39, 0x10, 0x83, 0xd8, 0x94, 0x80, 0x5f, 0x40, 0xcd, 0xfd, 0x94, 0x18, 0x30, 0x84, 0xf5, 0x36, 0x03, 0xdd, 0xfe, 0x0d, 0x88, 0xff, 0x52, 0x88, 0x41, 0x66, 0x34, 0xd3, 0x24, 0x96, 0xf9, 0x81, 0x26, 0x53, 0x23, 0x96, 0x7f, 0x03, 0xcd, 0x99, 0x04, 0x72, 0x21, 0x08, 0x80, 0x68, 0x18, 0x1b, 0x2c, 0x40, 0x06, 0x01, 0xcb, 0x18, 0x64, 0x68, 0xa5, 0xb7, 0x96, 0x11, 0x16, 0xcb, 0x00, 0xa6, 0x38, 0x45, 0xd2, 0xe0, 0x92, 0x71, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXDragHandle3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x01, 0x9d, 0xd0, 0x9a, + 0x44, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x7e, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x9a, 0x6c, 0x42, 0x31, 0x00, 0x00, 0x01, 0x8f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, + 0x9a, 0x4d, 0x4e, 0xc3, 0x30, 0x10, 0x46, 0x5d, 0x84, 0xca, 0x06, 0x4e, 0x01, 0xbd, 0x0b, 0x27, + 0x60, 0xc7, 0x41, 0xd8, 0x65, 0xc3, 0x49, 0xd8, 0x71, 0x25, 0xe8, 0x29, 0xca, 0xa6, 0x2b, 0xf8, + 0xbc, 0xa8, 0xd4, 0x4a, 0x1e, 0xb7, 0x8c, 0xd3, 0xb1, 0x62, 0x3d, 0x2b, 0x51, 0x5a, 0x3b, 0xdf, + 0xfc, 0x3c, 0x3b, 0x71, 0x9a, 0x7a, 0x95, 0x2a, 0xe5, 0x37, 0x25, 0x6d, 0xe5, 0xb2, 0x4a, 0x49, + 0xdb, 0x0c, 0xa5, 0x6a, 0x45, 0xee, 0x27, 0xcb, 0x87, 0x84, 0x66, 0x9b, 0xa5, 0x29, 0xd6, 0x9b, + 0x11, 0xc8, 0xfb, 0x5e, 0x8a, 0x75, 0x51, 0xa5, 0x4a, 0x09, 0x4d, 0xad, 0xa5, 0x29, 0xd6, 0x9b, + 0x56, 0x14, 0xc1, 0x9b, 0x14, 0x77, 0x45, 0x95, 0x2a, 0x25, 0x9c, 0xac, 0x36, 0xea, 0x97, 0x45, + 0xc0, 0x1c, 0x04, 0xb5, 0x34, 0x34, 0x40, 0xb4, 0xf9, 0x8a, 0x1c, 0xba, 0x7c, 0x9e, 0x78, 0xcb, + 0x01, 0x38, 0xf7, 0xf7, 0x13, 0x43, 0x7c, 0xe9, 0x41, 0xc0, 0x35, 0x00, 0xd4, 0xdf, 0x93, 0x33, + 0xd8, 0x0f, 0x39, 0xdc, 0x3a, 0xb5, 0x03, 0xc9, 0xbc, 0xd8, 0xbd, 0xd7, 0xfa, 0x8f, 0x1c, 0x3e, + 0x84, 0xf3, 0x53, 0xb4, 0x7b, 0xe7, 0xbd, 0xc1, 0x7b, 0x4f, 0xc9, 0x3a, 0xee, 0x2b, 0xe1, 0x3d, + 0xbd, 0x04, 0x87, 0xae, 0x6b, 0xce, 0x93, 0x58, 0x1e, 0xf2, 0x1e, 0x5d, 0xa3, 0xe6, 0x5b, 0x09, + 0x6e, 0x1a, 0x6d, 0x20, 0x87, 0x00, 0x04, 0xfe, 0x49, 0x20, 0x4f, 0x39, 0xf9, 0x9a, 0x0f, 0xde, + 0xf3, 0x4f, 0xd3, 0x6a, 0xb9, 0xa9, 0xb6, 0xd2, 0x08, 0x01, 0x08, 0x40, 0x00, 0x02, 0x63, 0x10, + 0x08, 0x79, 0xbc, 0xd5, 0x14, 0xf7, 0x25, 0x5c, 0x4f, 0xd1, 0xc8, 0x94, 0x5c, 0x35, 0xbf, 0xdb, + 0xa0, 0x80, 0x9e, 0xe5, 0xe7, 0x35, 0xc8, 0xd7, 0xc1, 0xcd, 0xd9, 0x79, 0xfe, 0x70, 0x22, 0x47, + 0x08, 0x40, 0x00, 0x02, 0xc3, 0x13, 0xa8, 0x4e, 0x05, 0x73, 0x65, 0xaf, 0xa9, 0x6e, 0x27, 0x5b, + 0xf7, 0x73, 0xd9, 0xbb, 0xd4, 0xce, 0xb9, 0xa9, 0x2e, 0x24, 0xf9, 0x4b, 0x83, 0x6d, 0x3d, 0xaf, + 0x17, 0xe4, 0xd6, 0xb8, 0x9d, 0xfa, 0x3e, 0xaf, 0xe1, 0x9d, 0xc1, 0x22, 0x83, 0x00, 0x04, 0x20, + 0x00, 0x01, 0x08, 0x40, 0x00, 0x02, 0x10, 0xb8, 0x22, 0x81, 0xd1, 0x9e, 0xea, 0x1f, 0xc5, 0xea, + 0x45, 0xbb, 0xb9, 0x72, 0xf1, 0x8a, 0x2c, 0x23, 0x4d, 0xe7, 0x97, 0x73, 0x9f, 0xea, 0x3c, 0xf7, + 0x9a, 0xa6, 0xd1, 0x3a, 0xbe, 0xcb, 0xeb, 0xe1, 0xc8, 0x1e, 0x3f, 0xf2, 0xc5, 0x8a, 0x8b, 0x23, + 0x18, 0x7c, 0x84, 0x00, 0x04, 0x20, 0x00, 0x01, 0x08, 0x40, 0x00, 0x02, 0x10, 0x18, 0x85, 0x80, + 0xfe, 0xa4, 0xc9, 0xeb, 0x1b, 0x7b, 0x2c, 0xe5, 0x0f, 0x5f, 0x53, 0x99, 0x73, 0x6d, 0xe9, 0x37, + 0xd6, 0x5c, 0xb6, 0xd0, 0x5b, 0xb0, 0xf6, 0x0f, 0x6b, 0x93, 0x2d, 0x3b, 0x32, 0x91, 0xf4, 0xb4, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXListIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5e, 0xdd, 0x5c, 0xdd, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0x94, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x96, 0xc1, 0x09, 0x80, 0x30, 0x14, 0x43, 0xbf, 0x0a, 0x6e, 0xe0, 0xc1, 0x5d, 0x1c, 0xb0, 0x13, 0x38, 0xa2, 0x8e, 0xa1, 0x89, 0x87, 0xd2, 0x7a, 0xfc, 0x5e, 0x22, 0x44, 0x08, 0xf4, 0x0b, 0xc2, 0x23, 0x8d, 0x4d, 0x23, 0x22, 0x66, 0xa8, 0x40, 0x07, 0x74, 0x89, 0x88, 0x2c, 0x64, 0x22, 0xdb, 0xb3, 0x50, 0x01, 0x7b, 0x73, 0x94, 0x01, 0x80, 0xa4, 0x5d, 0x49, 0x2a, 0xf8, 0x9c, 0xa3, 0x20, 0x54, 0x87, 0x34, 0x61, 0x5a, 0xa0, 0xad, 0x7b, 0xab, 0x33, 0xec, 0x44, 0x61, 0x10, 0xa5, 0x7f, 0x12, 0x1d, 0xbf, 0x4c, 0x62, 0x07, 0xec, 0x40, 0xce, 0x01, 0xf9, 0x63, 0x86, 0x67, 0xe0, 0xbb, 0x03, 0x55, 0x66, 0x77, 0x71, 0x2e, 0x74, 0xcd, 0x57, 0xee, 0xe2, 0x64, 0xbe, 0x79, 0x05, 0xac, 0x17, 0xd6, 0xc6, 0x50, 0x2f, 0xed, 0x80, 0x1d, 0xf8, 0xa5, 0x03, 0xee, 0x62, 0x6c, 0x5b, 0xb6, 0xdb, 0xdd, 0xc5, 0x9f, 0x33, 0xef, 0x2e, 0x4e, 0xe6, 0xaf, 0x76, 0xf1, 0x0d, 0xa7, 0xae, 0x59, 0xeb, 0x22, 0xc6, 0xba, 0x58, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXGlobalsIcon[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x26, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa8, 0x3d, 0xe9, + 0xae, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x84, 0xf2, 0x20, 0x5b, 0x00, 0x00, + 0x03, 0x06, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xcd, 0x98, 0xc9, 0x6b, 0x14, 0x41, 0x14, 0x87, + 0x33, 0x31, 0x8a, 0x22, 0x44, 0x24, 0x0b, 0x6a, 0xc0, 0x10, 0x24, 0x2e, 0x88, 0x42, 0x84, 0x88, + 0x10, 0x24, 0x44, 0x3d, 0x84, 0x78, 0x50, 0x10, 0xd4, 0xa3, 0x20, 0xb8, 0xfc, 0x05, 0x1e, 0x24, + 0x10, 0x15, 0x0f, 0x41, 0x51, 0x24, 0x9e, 0x3d, 0xe8, 0xc1, 0x8b, 0x22, 0xb8, 0x5d, 0x3c, 0x0c, + 0x2a, 0xc4, 0x25, 0x68, 0x04, 0x15, 0xcd, 0x41, 0xdc, 0x0e, 0x8a, 0x5b, 0xa2, 0x12, 0xa2, 0x66, + 0x99, 0x7c, 0x6f, 0x98, 0x32, 0x8f, 0xb2, 0x6b, 0xba, 0x27, 0xa9, 0x6a, 0xfc, 0xc1, 0x47, 0xbd, + 0xae, 0xaa, 0x79, 0xef, 0x37, 0xd3, 0xdd, 0xd5, 0xd5, 0x53, 0x56, 0xf6, 0x9f, 0x2a, 0x13, 0xda, + 0x57, 0x2e, 0x97, 0xab, 0xa7, 0xc6, 0x36, 0x58, 0x05, 0x2b, 0x61, 0x3e, 0xf4, 0xc1, 0x03, 0xb8, + 0x9d, 0xc9, 0x64, 0xde, 0xd2, 0xa6, 0x27, 0x0c, 0xcd, 0x86, 0x43, 0x30, 0x0c, 0x2e, 0xfd, 0x61, + 0xa0, 0x13, 0x2a, 0x52, 0x71, 0x46, 0xa1, 0x3a, 0x78, 0x06, 0x49, 0xf5, 0x88, 0x89, 0x2b, 0x82, + 0x9a, 0xa3, 0xc0, 0x3c, 0xe8, 0x4b, 0xea, 0x48, 0xcd, 0x7b, 0x43, 0xbc, 0x30, 0x98, 0x39, 0x92, + 0x77, 0xab, 0x62, 0x71, 0xe1, 0x20, 0x13, 0x2e, 0xc3, 0x41, 0x68, 0x0c, 0x69, 0xaa, 0x92, 0x02, + 0xdf, 0xa1, 0x98, 0xc6, 0x18, 0x3c, 0x0b, 0xeb, 0xa1, 0x3c, 0x98, 0x19, 0x9d, 0x98, 0x42, 0x3b, + 0x21, 0x4e, 0x27, 0xf4, 0x67, 0x5c, 0xb1, 0x6f, 0xc7, 0xcd, 0xae, 0x42, 0xaa, 0xff, 0x9d, 0x8a, + 0x9d, 0xa1, 0x6f, 0x63, 0x4b, 0x9d, 0x95, 0xa6, 0x06, 0xaa, 0xa6, 0x42, 0x77, 0xe4, 0xdb, 0x58, + 0x75, 0x44, 0xa9, 0x51, 0xfa, 0x1e, 0xc2, 0x58, 0x61, 0xac, 0x3d, 0x62, 0x4e, 0xd8, 0x2e, 0x2e, + 0xae, 0xe7, 0xea, 0x02, 0xbb, 0x44, 0xdc, 0x01, 0xab, 0x61, 0x2f, 0xfc, 0x04, 0xd1, 0x38, 0xfc, + 0xf3, 0x05, 0xe8, 0x6b, 0x80, 0x7d, 0x70, 0x01, 0xca, 0x7d, 0xaf, 0xb8, 0x8b, 0xd5, 0x57, 0xaf, + 0x23, 0x3e, 0x03, 0xf2, 0x08, 0xba, 0x05, 0xf2, 0x18, 0x6a, 0x03, 0x39, 0x4b, 0xed, 0x14, 0xff, + 0x40, 0x2b, 0x8f, 0xa8, 0x35, 0xb0, 0x05, 0x96, 0x81, 0x28, 0xcb, 0x63, 0x6a, 0xc2, 0x9b, 0x31, + 0x0a, 0xcd, 0x25, 0xa9, 0x5e, 0x20, 0xe7, 0x70, 0xbc, 0x1b, 0x16, 0xc0, 0x66, 0x68, 0x05, 0xa3, + 0x0e, 0x82, 0x5e, 0xe8, 0x31, 0x1d, 0xaa, 0xcd, 0xaa, 0x78, 0xe6, 0x21, 0xc6, 0x5a, 0x41, 0x6b, + 0x82, 0x83, 0x1f, 0xd0, 0x0b, 0x47, 0x61, 0x0f, 0x18, 0x7d, 0x25, 0x68, 0x34, 0x07, 0xaa, 0xfd, + 0x48, 0x5c, 0x33, 0x73, 0x37, 0x2a, 0x03, 0x09, 0xcf, 0xab, 0x02, 0x26, 0xdc, 0x4e, 0x20, 0xd7, + 0xd7, 0x45, 0xf8, 0x64, 0x3a, 0x0b, 0x6d, 0x0b, 0xed, 0x0b, 0xab, 0x4f, 0x7e, 0x49, 0x7f, 0x22, + 0xf9, 0x56, 0x90, 0x5f, 0xa8, 0x14, 0x1d, 0x67, 0xf2, 0x49, 0xf5, 0x81, 0x63, 0xfe, 0x1c, 0x91, + 0x89, 0xc4, 0x1b, 0x40, 0x4e, 0x4d, 0xa9, 0xea, 0xe7, 0x03, 0x6d, 0x30, 0x04, 0x3b, 0x7c, 0x9b, + 0xda, 0x45, 0xd2, 0x11, 0x98, 0x8e, 0xe4, 0xcb, 0xd4, 0x40, 0x43, 0x94, 0xa9, 0x69, 0xef, 0x60, + 0x49, 0xd8, 0x49, 0xc2, 0x23, 0x10, 0x97, 0xe3, 0x31, 0x73, 0xee, 0xc1, 0x53, 0x18, 0x84, 0x61, + 0x18, 0x80, 0x57, 0x2c, 0x0b, 0x39, 0x5a, 0x3f, 0xc2, 0x50, 0x35, 0x5c, 0x81, 0x38, 0x7d, 0x61, + 0x82, 0xdf, 0x8b, 0xd9, 0xf5, 0x15, 0x28, 0x94, 0x5f, 0x18, 0xe3, 0x1c, 0x31, 0xfe, 0x19, 0x96, + 0xbb, 0xf2, 0x78, 0xeb, 0xa7, 0x88, 0xec, 0x4a, 0x7b, 0x20, 0x89, 0x7e, 0x31, 0xa9, 0xc5, 0x5b, + 0x71, 0x57, 0x22, 0x8a, 0x34, 0xc3, 0xcb, 0x24, 0x8e, 0x98, 0x23, 0x4b, 0x86, 0xac, 0xf6, 0xe1, + 0x44, 0x81, 0x0a, 0xe8, 0x82, 0x51, 0x48, 0xaa, 0xc3, 0xe1, 0x1c, 0x91, 0x19, 0x17, 0x8b, 0x40, + 0x1e, 0x25, 0xa5, 0xe8, 0x7a, 0x68, 0x53, 0xeb, 0x70, 0xf3, 0xbe, 0x14, 0x47, 0xcc, 0x95, 0x67, + 0x5c, 0x6d, 0x30, 0x63, 0x24, 0x97, 0xfd, 0x53, 0xb1, 0x17, 0x54, 0x86, 0x23, 0x15, 0x6e, 0xf3, + 0x47, 0xb9, 0x7a, 0x90, 0xd7, 0x29, 0xd1, 0x6f, 0xb8, 0x0a, 0xe7, 0x60, 0x00, 0x8a, 0x49, 0xf6, + 0x5c, 0xe1, 0x44, 0xe5, 0x6c, 0xa1, 0xba, 0xac, 0x41, 0xb2, 0x79, 0xcb, 0x8b, 0x58, 0x6e, 0x82, + 0x53, 0x85, 0x31, 0xbb, 0x91, 0x1d, 0xab, 0xec, 0xc3, 0xc2, 0x88, 0xe4, 0x72, 0xb1, 0x1b, 0xed, + 0xb7, 0xab, 0x30, 0x30, 0x0b, 0xec, 0x25, 0x43, 0xfe, 0x77, 0x68, 0xb2, 0xe7, 0xfa, 0x3a, 0x36, + 0x2f, 0x23, 0x1b, 0x55, 0xc2, 0x3b, 0x2a, 0xce, 0x87, 0x3c, 0xd3, 0xc6, 0x09, 0xee, 0x5b, 0xfd, + 0x5d, 0xf4, 0xf7, 0x5b, 0x7d, 0xde, 0x0e, 0x8d, 0xb1, 0x21, 0x95, 0xd1, 0x75, 0x77, 0xc9, 0x1e, + 0xde, 0x48, 0xcc, 0x77, 0x9b, 0x83, 0x60, 0x2d, 0xa7, 0xa4, 0x16, 0xcc, 0x46, 0xef, 0x9a, 0x5d, + 0x88, 0x31, 0x59, 0xfd, 0xe5, 0xed, 0x46, 0xf4, 0x1a, 0xfc, 0x6e, 0x7f, 0xed, 0x82, 0xfa, 0x98, + 0x62, 0xa7, 0xc1, 0xe8, 0x06, 0xc1, 0x26, 0x90, 0x57, 0xaf, 0x03, 0x60, 0x36, 0x82, 0xf2, 0x0a, + 0xf6, 0xf7, 0xc6, 0xd0, 0x9f, 0x0f, 0x16, 0x53, 0x50, 0x1e, 0xd4, 0x4f, 0xc0, 0x25, 0xb9, 0x5b, + 0xe5, 0x35, 0x2b, 0x7d, 0x51, 0x58, 0xcc, 0xc9, 0x2f, 0x67, 0x4e, 0x2b, 0x61, 0xfe, 0x14, 0xde, + 0xa4, 0x5d, 0x92, 0xa6, 0xa3, 0xc8, 0xdd, 0x27, 0x26, 0xaa, 0x30, 0xb1, 0x16, 0x2a, 0xe1, 0x2e, + 0x77, 0xdf, 0xb7, 0x34, 0x4d, 0x49, 0xad, 0x49, 0x44, 0x7e, 0xb1, 0xbc, 0xea, 0x50, 0x60, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXMoveIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x15, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x17, 0xa5, 0x96, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x01, 0x2f, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0xb5, 0x95, 0x31, 0x4e, 0x03, 0x41, 0x0c, 0x45, 0x87, 0x40, 0xfa, 0x88, 0x13, 0xa4, 0xa1, 0xe2, 0x0e, 0x88, 0x94, 0xd4, 0x1c, 0x21, 0x1d, 0x07, 0x80, 0x33, 0x40, 0x49, 0x41, 0xc7, 0x11, 0xe8, 0x22, 0xa1, 0x54, 0x41, 0x94, 0xf4, 0x14, 0x11, 0x12, 0xe4, 0x04, 0x5c, 0x00, 0x09, 0x78, 0x4f, 0x9a, 0x41, 0x93, 0xdd, 0xcd, 0x32, 0xcb, 0x86, 0x2f, 0x7d, 0xd9, 0xe3, 0xb1, 0x7f, 0x2c, 0xaf, 0x47, 0x09, 0xa1, 0x0c, 0xfb, 0xa4, 0xcd, 0xa0, 0x76, 0x2b, 0x18, 0xa2, 0xb2, 0x80, 0x5f, 0xd1, 0x7a, 0xee, 0x8d, 0x5b, 0x14, 0x14, 0x4c, 0xf4, 0xdc, 0x0b, 0xe7, 0x54, 0x27, 0xb1, 0xdc, 0x1a, 0xdf, 0x88, 0xdd, 0x8d, 0x37, 0x21, 0x1c, 0x70, 0x77, 0x06, 0x5f, 0xa1, 0x79, 0x23, 0xb8, 0x82, 0x4f, 0x70, 0x1c, 0xed, 0x3b, 0xf6, 0xcf, 0xb8, 0xa1, 0xd2, 0x4e, 0xb5, 0xbf, 0x62, 0xd0, 0x90, 0x61, 0x87, 0x5d, 0x50, 0xcb, 0xaf, 0x8a, 0x3a, 0xab, 0xeb, 0x2e, 0x8a, 0x31, 0x7f, 0x6d, 0xc6, 0x49, 0xd4, 0x35, 0xf1, 0xab, 0x5e, 0xc2, 0x14, 0xc3, 0x2d, 0x82, 0xf9, 0xd6, 0x59, 0xaf, 0x4e, 0xd8, 0x81, 0x2e, 0xf4, 0x1d, 0x3c, 0x86, 0x62, 0x05, 0xef, 0x75, 0x32, 0x1c, 0xe1, 0x1f, 0xc2, 0x67, 0xf8, 0x98, 0xc5, 0x75, 0x4f, 0xe0, 0x58, 0x07, 0x3c, 0xc0, 0x53, 0x1d, 0x5f, 0x4a, 0xbe, 0x2e, 0x7d, 0xfd, 0xd9, 0xbf, 0x75, 0x6a, 0xb7, 0x69, 0xa6, 0x76, 0x39, 0x37, 0x50, 0x41, 0xdb, 0x4a, 0x99, 0x6f, 0xdd, 0xcf, 0x4c, 0xf7, 0x62, 0xf1, 0x07, 0x76, 0x0a, 0x97, 0x70, 0x12, 0x63, 0xa5, 0xe6, 0x93, 0xc4, 0x0b, 0x78, 0xd5, 0x56, 0x50, 0xdb, 0x3b, 0x92, 0xdb, 0x3a, 0xad, 0xe5, 0x37, 0xad, 0xcf, 0x4b, 0xdb, 0x2f, 0x36, 0xdc, 0x75, 0xca, 0xb7, 0x03, 0x57, 0xcb, 0x99, 0xbd, 0x41, 0xe7, 0xa6, 0xf5, 0x6c, 0xbc, 0xd6, 0x21, 0xb1, 0x22, 0xf8, 0x52, 0x14, 0xab, 0x72, 0xed, 0x05, 0x15, 0x29, 0x55, 0x92, 0xfc, 0xaa, 0xb9, 0xa8, 0xe7, 0xde, 0x18, 0xa2, 0xb0, 0x80, 0x0a, 0x6b, 0x3d, 0x6f, 0x05, 0x9d, 0xfe, 0xa3, 0xbe, 0x01, 0xe4, 0xf1, 0x5c, 0xce, 0x72, 0x04, 0x22, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXGlobalsIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x26, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa8, 0x3d, 0xe9, + 0xae, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x84, 0xf2, 0x20, 0x5b, 0x00, 0x00, + 0x03, 0x06, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xcd, 0x98, 0xc9, 0x6b, 0x14, 0x41, 0x14, 0x87, + 0x33, 0x31, 0x8a, 0x22, 0x44, 0x24, 0x0b, 0x6a, 0xc0, 0x10, 0x24, 0x2e, 0x88, 0x42, 0x84, 0x88, + 0x10, 0x24, 0x44, 0x3d, 0x84, 0x78, 0x50, 0x10, 0xd4, 0xa3, 0x20, 0xb8, 0xfc, 0x05, 0x1e, 0x24, + 0x10, 0x15, 0x0f, 0x41, 0x51, 0x24, 0x9e, 0x3d, 0xe8, 0xc1, 0x8b, 0x22, 0xb8, 0x5d, 0x3c, 0x0c, + 0x2a, 0xc4, 0x25, 0x68, 0x04, 0x15, 0xcd, 0x41, 0xdc, 0x0e, 0x8a, 0x5b, 0xa2, 0x12, 0xa2, 0x66, + 0x99, 0x7c, 0x6f, 0x98, 0x32, 0x8f, 0xb2, 0x6b, 0xba, 0x27, 0xa9, 0x6a, 0xfc, 0xc1, 0x47, 0xbd, + 0xae, 0xaa, 0x79, 0xef, 0x37, 0xd3, 0xdd, 0xd5, 0xd5, 0x53, 0x56, 0xf6, 0x9f, 0x2a, 0x13, 0xda, + 0x57, 0x2e, 0x97, 0xab, 0xa7, 0xc6, 0x36, 0x58, 0x05, 0x2b, 0x61, 0x3e, 0xf4, 0xc1, 0x03, 0xb8, + 0x9d, 0xc9, 0x64, 0xde, 0xd2, 0xa6, 0x27, 0x0c, 0xcd, 0x86, 0x43, 0x30, 0x0c, 0x2e, 0xfd, 0x61, + 0xa0, 0x13, 0x2a, 0x52, 0x71, 0x46, 0xa1, 0x3a, 0x78, 0x06, 0x49, 0xf5, 0x88, 0x89, 0x2b, 0x82, + 0x9a, 0xa3, 0xc0, 0x3c, 0xe8, 0x4b, 0xea, 0x48, 0xcd, 0x7b, 0x43, 0xbc, 0x30, 0x98, 0x39, 0x92, + 0x77, 0xab, 0x62, 0x71, 0xe1, 0x20, 0x13, 0x2e, 0xc3, 0x41, 0x68, 0x0c, 0x69, 0xaa, 0x92, 0x02, + 0xdf, 0xa1, 0x98, 0xc6, 0x18, 0x3c, 0x0b, 0xeb, 0xa1, 0x3c, 0x98, 0x19, 0x9d, 0x98, 0x42, 0x3b, + 0x21, 0x4e, 0x27, 0xf4, 0x67, 0x5c, 0xb1, 0x6f, 0xc7, 0xcd, 0xae, 0x42, 0xaa, 0xff, 0x9d, 0x8a, + 0x9d, 0xa1, 0x6f, 0x63, 0x4b, 0x9d, 0x95, 0xa6, 0x06, 0xaa, 0xa6, 0x42, 0x77, 0xe4, 0xdb, 0x58, + 0x75, 0x44, 0xa9, 0x51, 0xfa, 0x1e, 0xc2, 0x58, 0x61, 0xac, 0x3d, 0x62, 0x4e, 0xd8, 0x2e, 0x2e, + 0xae, 0xe7, 0xea, 0x02, 0xbb, 0x44, 0xdc, 0x01, 0xab, 0x61, 0x2f, 0xfc, 0x04, 0xd1, 0x38, 0xfc, + 0xf3, 0x05, 0xe8, 0x6b, 0x80, 0x7d, 0x70, 0x01, 0xca, 0x7d, 0xaf, 0xb8, 0x8b, 0xd5, 0x57, 0xaf, + 0x23, 0x3e, 0x03, 0xf2, 0x08, 0xba, 0x05, 0xf2, 0x18, 0x6a, 0x03, 0x39, 0x4b, 0xed, 0x14, 0xff, + 0x40, 0x2b, 0x8f, 0xa8, 0x35, 0xb0, 0x05, 0x96, 0x81, 0x28, 0xcb, 0x63, 0x6a, 0xc2, 0x9b, 0x31, + 0x0a, 0xcd, 0x25, 0xa9, 0x5e, 0x20, 0xe7, 0x70, 0xbc, 0x1b, 0x16, 0xc0, 0x66, 0x68, 0x05, 0xa3, + 0x0e, 0x82, 0x5e, 0xe8, 0x31, 0x1d, 0xaa, 0xcd, 0xaa, 0x78, 0xe6, 0x21, 0xc6, 0x5a, 0x41, 0x6b, + 0x82, 0x83, 0x1f, 0xd0, 0x0b, 0x47, 0x61, 0x0f, 0x18, 0x7d, 0x25, 0x68, 0x34, 0x07, 0xaa, 0xfd, + 0x48, 0x5c, 0x33, 0x73, 0x37, 0x2a, 0x03, 0x09, 0xcf, 0xab, 0x02, 0x26, 0xdc, 0x4e, 0x20, 0xd7, + 0xd7, 0x45, 0xf8, 0x64, 0x3a, 0x0b, 0x6d, 0x0b, 0xed, 0x0b, 0xab, 0x4f, 0x7e, 0x49, 0x7f, 0x22, + 0xf9, 0x56, 0x90, 0x5f, 0xa8, 0x14, 0x1d, 0x67, 0xf2, 0x49, 0xf5, 0x81, 0x63, 0xfe, 0x1c, 0x91, + 0x89, 0xc4, 0x1b, 0x40, 0x4e, 0x4d, 0xa9, 0xea, 0xe7, 0x03, 0x6d, 0x30, 0x04, 0x3b, 0x7c, 0x9b, + 0xda, 0x45, 0xd2, 0x11, 0x98, 0x8e, 0xe4, 0xcb, 0xd4, 0x40, 0x43, 0x94, 0xa9, 0x69, 0xef, 0x60, + 0x49, 0xd8, 0x49, 0xc2, 0x23, 0x10, 0x97, 0xe3, 0x31, 0x73, 0xee, 0xc1, 0x53, 0x18, 0x84, 0x61, + 0x18, 0x80, 0x57, 0x2c, 0x0b, 0x39, 0x5a, 0x3f, 0xc2, 0x50, 0x35, 0x5c, 0x81, 0x38, 0x7d, 0x61, + 0x82, 0xdf, 0x8b, 0xd9, 0xf5, 0x15, 0x28, 0x94, 0x5f, 0x18, 0xe3, 0x1c, 0x31, 0xfe, 0x19, 0x96, + 0xbb, 0xf2, 0x78, 0xeb, 0xa7, 0x88, 0xec, 0x4a, 0x7b, 0x20, 0x89, 0x7e, 0x31, 0xa9, 0xc5, 0x5b, + 0x71, 0x57, 0x22, 0x8a, 0x34, 0xc3, 0xcb, 0x24, 0x8e, 0x98, 0x23, 0x4b, 0x86, 0xac, 0xf6, 0xe1, + 0x44, 0x81, 0x0a, 0xe8, 0x82, 0x51, 0x48, 0xaa, 0xc3, 0xe1, 0x1c, 0x91, 0x19, 0x17, 0x8b, 0x40, + 0x1e, 0x25, 0xa5, 0xe8, 0x7a, 0x68, 0x53, 0xeb, 0x70, 0xf3, 0xbe, 0x14, 0x47, 0xcc, 0x95, 0x67, + 0x5c, 0x6d, 0x30, 0x63, 0x24, 0x97, 0xfd, 0x53, 0xb1, 0x17, 0x54, 0x86, 0x23, 0x15, 0x6e, 0xf3, + 0x47, 0xb9, 0x7a, 0x90, 0xd7, 0x29, 0xd1, 0x6f, 0xb8, 0x0a, 0xe7, 0x60, 0x00, 0x8a, 0x49, 0xf6, + 0x5c, 0xe1, 0x44, 0xe5, 0x6c, 0xa1, 0xba, 0xac, 0x41, 0xb2, 0x79, 0xcb, 0x8b, 0x58, 0x6e, 0x82, + 0x53, 0x85, 0x31, 0xbb, 0x91, 0x1d, 0xab, 0xec, 0xc3, 0xc2, 0x88, 0xe4, 0x72, 0xb1, 0x1b, 0xed, + 0xb7, 0xab, 0x30, 0x30, 0x0b, 0xec, 0x25, 0x43, 0xfe, 0x77, 0x68, 0xb2, 0xe7, 0xfa, 0x3a, 0x36, + 0x2f, 0x23, 0x1b, 0x55, 0xc2, 0x3b, 0x2a, 0xce, 0x87, 0x3c, 0xd3, 0xc6, 0x09, 0xee, 0x5b, 0xfd, + 0x5d, 0xf4, 0xf7, 0x5b, 0x7d, 0xde, 0x0e, 0x8d, 0xb1, 0x21, 0x95, 0xd1, 0x75, 0x77, 0xc9, 0x1e, + 0xde, 0x48, 0xcc, 0x77, 0x9b, 0x83, 0x60, 0x2d, 0xa7, 0xa4, 0x16, 0xcc, 0x46, 0xef, 0x9a, 0x5d, + 0x88, 0x31, 0x59, 0xfd, 0xe5, 0xed, 0x46, 0xf4, 0x1a, 0xfc, 0x6e, 0x7f, 0xed, 0x82, 0xfa, 0x98, + 0x62, 0xa7, 0xc1, 0xe8, 0x06, 0xc1, 0x26, 0x90, 0x57, 0xaf, 0x03, 0x60, 0x36, 0x82, 0xf2, 0x0a, + 0xf6, 0xf7, 0xc6, 0xd0, 0x9f, 0x0f, 0x16, 0x53, 0x50, 0x1e, 0xd4, 0x4f, 0xc0, 0x25, 0xb9, 0x5b, + 0xe5, 0x35, 0x2b, 0x7d, 0x51, 0x58, 0xcc, 0xc9, 0x2f, 0x67, 0x4e, 0x2b, 0x61, 0xfe, 0x14, 0xde, + 0xa4, 0x5d, 0x92, 0xa6, 0xa3, 0xc8, 0xdd, 0x27, 0x26, 0xaa, 0x30, 0xb1, 0x16, 0x2a, 0xe1, 0x2e, + 0x77, 0xdf, 0xb7, 0x34, 0x4d, 0x49, 0xad, 0x49, 0x44, 0x7e, 0xb1, 0xbc, 0xea, 0x50, 0x60, 0xc4, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXMoveIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0xc3, 0xc9, 0x5b, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x02, 0x26, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xdd, 0x99, 0x3b, 0x4e, 0x03, 0x31, 0x14, 0x45, 0x13, 0x84, 0x44, 0x56, 0x00, 0x0b, 0xa0, 0xa5, 0x46, 0x84, 0x0e, 0xaa, 0x6c, 0x01, 0x04, 0x3b, 0x48, 0x07, 0x0b, 0x08, 0x3d, 0xbb, 0xe0, 0xbb, 0x8b, 0x74, 0x04, 0x7a, 0x7a, 0xd2, 0x42, 0x47, 0x47, 0x81, 0x04, 0xf7, 0x84, 0x38, 0x7a, 0x71, 0x66, 0x3c, 0x33, 0x61, 0x26, 0x36, 0x5c, 0xe9, 0xc6, 0x9f, 0x67, 0xbf, 0x77, 0xe5, 0xdf, 0xd8, 0x4a, 0xab, 0x55, 0x3f, 0xfa, 0x72, 0x09, 0x93, 0x46, 0x4f, 0xea, 0x3e, 0xa7, 0x24, 0x9f, 0x24, 0x76, 0xa4, 0xea, 0x5d, 0xfc, 0x9a, 0x92, 0x3c, 0x75, 0x49, 0x61, 0x53, 0x6a, 0xc6, 0xa2, 0x13, 0xe9, 0x52, 0xea, 0xb0, 0x25, 0x81, 0x8e, 0x54, 0x8c, 0x44, 0x27, 0xce, 0x4f, 0xb1, 0xd1, 0x26, 0x3a, 0xee, 0xa4, 0xc0, 0x17, 0xe7, 0x97, 0x69, 0x13, 0x15, 0x03, 0x45, 0xf7, 0x45, 0xe5, 0x95, 0x69, 0x1b, 0x05, 0xc7, 0x8a, 0x9a, 0x27, 0x2a, 0xaf, 0x9e, 0x3e, 0x2b, 0xc5, 0xbe, 0xa2, 0x7d, 0x88, 0x79, 0x82, 0xf2, 0xea, 0xe9, 0x43, 0xdf, 0xca, 0x68, 0x57, 0xee, 0xf1, 0xd3, 0xe1, 0x54, 0x49, 0xd6, 0x6e, 0xbe, 0xf4, 0xfc, 0x9d, 0x7b, 0x65, 0x8a, 0x6f, 0xe2, 0x55, 0x46, 0x7d, 0xb0, 0x6a, 0x59, 0xa1, 0x79, 0x4e, 0x19, 0x49, 0x8b, 0xda, 0xfc, 0xaf, 0x59, 0xaf, 0x29, 0xe7, 0xff, 0x95, 0xd0, 0xae, 0x46, 0x9a, 0x35, 0xd9, 0x14, 0xf0, 0x4d, 0x8c, 0x20, 0x8a, 0x46, 0x94, 0xe3, 0x64, 0x28, 0x66, 0x6d, 0x9c, 0xa0, 0xe3, 0x0a, 0x46, 0x7c, 0x13, 0x23, 0x78, 0x74, 0x85, 0x84, 0x0e, 0xd4, 0xf9, 0x46, 0xdc, 0x10, 0x9b, 0x06, 0x31, 0x88, 0x35, 0xa8, 0x12, 0x88, 0xef, 0xf2, 0xad, 0x68, 0xcf, 0xc2, 0xb3, 0x92, 0x0e, 0x6c, 0x1f, 0xf2, 0x65, 0x80, 0x6f, 0xdb, 0x8f, 0xd8, 0x0b, 0x77, 0x03, 0x7f, 0x44, 0xdd, 0x34, 0x1c, 0x95, 0x89, 0xd0, 0x50, 0x1b, 0x62, 0x0f, 0xc5, 0xb9, 0xe5, 0x66, 0x85, 0x72, 0x77, 0x7c, 0x12, 0xf7, 0xc4, 0xd8, 0x40, 0x03, 0x5a, 0x16, 0xee, 0xb3, 0x3d, 0x55, 0xda, 0x4b, 0xaf, 0x9d, 0x8a, 0x98, 0x79, 0x34, 0xa1, 0x6d, 0x82, 0xbe, 0x7e, 0x79, 0x3e, 0xc4, 0x14, 0x14, 0x8a, 0x8d, 0xb6, 0xbe, 0x9d, 0xfa, 0x89, 0xea, 0xd4, 0x7f, 0xfe, 0xc4, 0xd4, 0xbb, 0x41, 0x64, 0xe1, 0x8e, 0xc5, 0xac, 0x69, 0x58, 0xe5, 0xf1, 0xe4, 0xe2, 0xa3, 0x65, 0xb6, 0x99, 0xec, 0xd4, 0x3f, 0xcb, 0xb0, 0x2b, 0x3e, 0x8a, 0xb1, 0x81, 0x06, 0xb4, 0xa0, 0x69, 0x02, 0x2b, 0x94, 0x0a, 0xee, 0x8a, 0x07, 0xe2, 0x3d, 0x85, 0x48, 0x20, 0x36, 0x1a, 0xd0, 0x32, 0x83, 0x2f, 0x14, 0x03, 0xb7, 0x70, 0x0e, 0xdd, 0x0b, 0x0a, 0x2b, 0x06, 0x31, 0x89, 0x8d, 0x86, 0x4a, 0xe0, 0xa2, 0x40, 0xa7, 0xa6, 0xd7, 0x28, 0x31, 0x82, 0x97, 0x92, 0xf5, 0x02, 0xd9, 0x7c, 0x77, 0xc7, 0xe2, 0x76, 0x41, 0xbb, 0xdf, 0x98, 0x99, 0xe2, 0x43, 0xf1, 0x21, 0xe4, 0xa4, 0x1d, 0x32, 0x2e, 0x61, 0x63, 0xc7, 0x5a, 0xd4, 0xe6, 0x3f, 0x6b, 0x8d, 0xda, 0x40, 0xc9, 0xe4, 0xff, 0x8c, 0xd0, 0xa2, 0x35, 0x9a, 0x37, 0xa2, 0x27, 0x32, 0x6c, 0xe5, 0x19, 0x4d, 0x7d, 0xd6, 0x26, 0x7c, 0x95, 0xfd, 0xda, 0xb4, 0x69, 0x34, 0xdb, 0x95, 0x77, 0x76, 0xaa, 0xfb, 0x8a, 0x94, 0x4d, 0xe9, 0x43, 0xdf, 0x95, 0x82, 0xe3, 0xa4, 0xac, 0x40, 0xd7, 0x2e, 0x78, 0x04, 0x35, 0xa9, 0x7e, 0x50, 0x41, 0x2c, 0x6d, 0xa3, 0xc2, 0x7f, 0x5f, 0xb9, 0xd1, 0xb3, 0x29, 0x6d, 0xa2, 0xa3, 0x23, 0x05, 0x23, 0xd1, 0x0a, 0xb3, 0x79, 0x6c, 0xb4, 0x49, 0x02, 0x3c, 0xc4, 0x5e, 0x44, 0x2b, 0x90, 0x3c, 0x75, 0x73, 0x8f, 0x34, 0x95, 0xa3, 0x83, 0xbb, 0xa3, 0x7d, 0x77, 0x25, 0xf9, 0x67, 0x83, 0x1b, 0xa5, 0x9e, 0x32, 0xc9, 0xff, 0x7d, 0xe3, 0xc4, 0xf2, 0x58, 0x84, 0xb5, 0xe2, 0x1b, 0xb0, 0x4b, 0x43, 0x5f, 0xe1, 0x68, 0x89, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXGlobalsIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8c, 0x18, 0x83, + 0x85, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x91, 0x8a, 0xa0, 0x00, 0x00, + 0x04, 0xf1, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xe5, 0x9a, 0x6b, 0x88, 0x16, 0x55, 0x1c, 0xc6, + 0xf7, 0xf5, 0xb2, 0xa2, 0x82, 0x4a, 0x79, 0x43, 0x51, 0x89, 0x4c, 0x45, 0x83, 0x0c, 0x51, 0x04, + 0x2f, 0xa9, 0x6c, 0x45, 0x42, 0x5e, 0x82, 0x54, 0xf0, 0x83, 0x20, 0xa8, 0x81, 0x81, 0x10, 0x42, + 0x20, 0x91, 0x90, 0x12, 0x7d, 0x49, 0x08, 0xfa, 0x20, 0xda, 0x07, 0x05, 0xf1, 0x82, 0x60, 0x18, + 0x4a, 0x65, 0x42, 0xfa, 0x41, 0xb7, 0x22, 0x96, 0x50, 0x50, 0x5c, 0xf2, 0xb2, 0x25, 0xab, 0x99, + 0xe5, 0xad, 0x52, 0x33, 0x77, 0xfb, 0x3d, 0xaf, 0x33, 0xcb, 0xd9, 0xd3, 0xcc, 0xbc, 0xaf, 0x67, + 0xe6, 0x9d, 0x39, 0x2f, 0xfd, 0xe1, 0xc7, 0x9c, 0xf3, 0x9f, 0x73, 0xe6, 0x3c, 0xcf, 0xcc, 0xce, + 0x7b, 0xce, 0xcc, 0x6c, 0x43, 0xc3, 0xff, 0x20, 0x4a, 0x3e, 0x7b, 0xec, 0xec, 0xec, 0x1c, 0x88, + 0xbe, 0x51, 0x30, 0x08, 0x1a, 0xe1, 0x67, 0x51, 0x2a, 0x95, 0xee, 0xb1, 0xad, 0xdf, 0xc0, 0xd8, + 0x28, 0x78, 0x1f, 0xbe, 0x87, 0x87, 0x60, 0x47, 0x07, 0x89, 0x66, 0x78, 0x1b, 0x46, 0xd7, 0x95, + 0x53, 0x04, 0x3f, 0x09, 0x9f, 0xc0, 0xdf, 0x50, 0x6d, 0xdc, 0xa7, 0xe1, 0x47, 0x30, 0xc4, 0x7b, + 0xb3, 0x88, 0x9c, 0x06, 0x6d, 0xe0, 0x1a, 0xd7, 0xe8, 0x38, 0xdb, 0x5b, 0xa3, 0x88, 0x9b, 0x05, + 0xba, 0x22, 0x69, 0x43, 0x7f, 0x01, 0x2b, 0xbc, 0x33, 0x8a, 0xa8, 0x31, 0xa0, 0xab, 0x90, 0x55, + 0x3c, 0xe0, 0x40, 0x73, 0x6c, 0xa3, 0x3d, 0xec, 0x44, 0x5e, 0x75, 0xc4, 0xf4, 0x65, 0xac, 0x83, + 0x90, 0xd5, 0xfd, 0xf4, 0x90, 0x63, 0xb5, 0xc0, 0x64, 0xe8, 0x16, 0xbd, 0xba, 0xd5, 0xf2, 0xad, + 0xac, 0x62, 0xb8, 0xe7, 0x52, 0x0e, 0xd9, 0x4a, 0xff, 0xa3, 0x01, 0x5f, 0x33, 0xb5, 0xdc, 0x4c, + 0x79, 0xbc, 0xec, 0xba, 0x73, 0x15, 0x7b, 0xc2, 0x45, 0x70, 0x89, 0xe3, 0x74, 0x5a, 0x09, 0x7e, + 0x4f, 0x1f, 0x08, 0x5c, 0xe4, 0xe0, 0x4e, 0x73, 0xe6, 0x62, 0x97, 0x53, 0x5d, 0xd4, 0x3d, 0xf9, + 0x82, 0x83, 0xd8, 0x5d, 0xfc, 0x39, 0x7e, 0xea, 0xd0, 0xaf, 0xa1, 0x28, 0x93, 0x53, 0x1d, 0xc4, + 0x9e, 0x76, 0xe8, 0x53, 0xee, 0x52, 0x94, 0xc9, 0x49, 0x0e, 0x82, 0xb5, 0x86, 0x75, 0x8a, 0xdc, + 0x4d, 0x72, 0x5f, 0xe9, 0x17, 0x5d, 0x0b, 0xee, 0xc7, 0x0d, 0xe7, 0x15, 0x4d, 0xee, 0x26, 0x71, + 0xf6, 0xc4, 0xe3, 0xba, 0x0b, 0xda, 0x4f, 0xe6, 0x04, 0x8d, 0x70, 0xe9, 0x5b, 0x84, 0xc9, 0xa4, + 0xab, 0x78, 0x09, 0x13, 0xdb, 0x61, 0x29, 0xc8, 0xd0, 0x31, 0x30, 0x63, 0xbe, 0x59, 0x49, 0x2a, + 0x73, 0x42, 0x7a, 0xc0, 0xb0, 0xa4, 0x36, 0x35, 0xdb, 0xc7, 0xc0, 0x53, 0xc0, 0x8e, 0x8f, 0x49, + 0x3c, 0xad, 0x41, 0xd9, 0x8e, 0x06, 0xcd, 0x83, 0xbb, 0xc1, 0x7e, 0x22, 0x39, 0x90, 0x24, 0x8c, + 0xf6, 0x4f, 0xc1, 0x6a, 0xd8, 0x0f, 0xbf, 0xc1, 0x7b, 0x6a, 0x5f, 0xc4, 0x8a, 0x27, 0xea, 0x4a, + 0x4e, 0x44, 0xcb, 0x5b, 0x88, 0x6a, 0x62, 0x3b, 0x4e, 0xc2, 0x88, 0x36, 0xb8, 0x08, 0x61, 0x5d, + 0xb9, 0x26, 0xda, 0xf4, 0x66, 0x2b, 0xee, 0xc2, 0x50, 0x98, 0x09, 0xea, 0xf7, 0x22, 0x94, 0x4f, + 0x14, 0xdb, 0x30, 0xce, 0x85, 0x85, 0x5c, 0xb7, 0x88, 0x5c, 0x05, 0x51, 0x71, 0x8b, 0xe4, 0x41, + 0x58, 0x0b, 0x65, 0x63, 0x6c, 0xa7, 0x83, 0x1d, 0xf3, 0x48, 0x2c, 0x87, 0x7f, 0xec, 0x1d, 0x56, + 0x5d, 0xfb, 0x75, 0x12, 0x0a, 0x99, 0x27, 0x9f, 0x89, 0x38, 0xab, 0xbf, 0x92, 0x1b, 0x0e, 0x7a, + 0x54, 0x6a, 0x87, 0x75, 0x08, 0xd4, 0x55, 0x68, 0x06, 0x3b, 0x74, 0x5f, 0x7e, 0x01, 0x95, 0x5e, + 0xdd, 0x7c, 0xc5, 0xe2, 0xe1, 0x9a, 0xdd, 0x39, 0x97, 0x3a, 0xe2, 0xf5, 0xea, 0x22, 0x2a, 0x7e, + 0x24, 0x19, 0x5e, 0x9d, 0xdb, 0x94, 0x3f, 0x03, 0x99, 0x3d, 0x0c, 0x66, 0x9c, 0x95, 0x50, 0x12, + 0x27, 0xcc, 0x64, 0x44, 0x79, 0x56, 0x2e, 0x86, 0xec, 0x41, 0x10, 0x32, 0x2e, 0x42, 0x4c, 0x98, + 0xfa, 0x89, 0xc2, 0x46, 0x98, 0x01, 0xbd, 0x60, 0x10, 0x2c, 0x86, 0x56, 0xb0, 0x43, 0x3f, 0x30, + 0x1b, 0xec, 0xa4, 0x51, 0xdf, 0x67, 0x8f, 0x9d, 0x5b, 0x1d, 0x11, 0x5b, 0x0c, 0x21, 0x76, 0x71, + 0x27, 0x89, 0xb9, 0xb0, 0x09, 0xbe, 0x81, 0xf0, 0xaa, 0x52, 0xfc, 0x4f, 0xe8, 0xbe, 0xd5, 0xbc, + 0x19, 0x15, 0xe7, 0x49, 0x0e, 0xce, 0xcd, 0x94, 0x39, 0x10, 0x03, 0xcb, 0x40, 0xd4, 0xdb, 0xb7, + 0x28, 0xa1, 0x95, 0x72, 0x87, 0x75, 0x6c, 0x1a, 0x5d, 0xb6, 0x1a, 0xfe, 0x4e, 0x7d, 0x82, 0x39, + 0x6e, 0x6e, 0x65, 0x06, 0x1e, 0x06, 0x57, 0x2c, 0x41, 0x69, 0xaa, 0x7f, 0xd1, 0xb9, 0x2f, 0x6c, + 0x33, 0x0e, 0x72, 0x81, 0x72, 0x61, 0x06, 0xc7, 0x32, 0xf8, 0x39, 0x43, 0x4c, 0x56, 0xc5, 0x57, + 0x38, 0xd0, 0xc2, 0xe0, 0x60, 0x5f, 0xb2, 0x2d, 0x4f, 0x17, 0xb9, 0x5d, 0xb9, 0x70, 0x20, 0x06, + 0x9e, 0x0d, 0xd7, 0x03, 0x21, 0x59, 0x6f, 0xb4, 0x4a, 0xea, 0x0f, 0xcb, 0xc2, 0xf1, 0xe2, 0xb6, + 0x95, 0xe6, 0x9a, 0xb8, 0x7e, 0x15, 0xf3, 0x0c, 0xae, 0x39, 0x6f, 0x1b, 0x34, 0x56, 0x6c, 0x5c, + 0xb9, 0x41, 0x07, 0x4d, 0xb4, 0xc2, 0xb9, 0x01, 0x5a, 0x05, 0x7d, 0x07, 0x07, 0x98, 0x07, 0x4f, + 0xb2, 0xad, 0x18, 0x99, 0x9b, 0xc4, 0x9c, 0x8e, 0xb9, 0x19, 0x36, 0x54, 0x1c, 0x3d, 0xba, 0x81, + 0x16, 0x00, 0x7a, 0x39, 0xf5, 0x43, 0x40, 0x3b, 0x66, 0xfc, 0xf9, 0xf6, 0x81, 0xc1, 0xa1, 0x70, + 0x08, 0x5c, 0xa2, 0x8d, 0x4e, 0x2f, 0x45, 0xfb, 0xf6, 0x24, 0x8b, 0xc0, 0x57, 0xe1, 0x17, 0x17, + 0x77, 0xf4, 0xd1, 0xea, 0xa5, 0x98, 0x1f, 0x8e, 0x6a, 0xce, 0x1f, 0xe2, 0x74, 0xf3, 0x6f, 0x05, + 0xd7, 0x38, 0x45, 0xc7, 0x01, 0xd5, 0x8c, 0x55, 0x48, 0x1b, 0xc4, 0x4d, 0x85, 0x34, 0xd3, 0x43, + 0x3b, 0xfd, 0x9d, 0xdf, 0xdd, 0xd4, 0xd4, 0x34, 0xc2, 0xb4, 0xb6, 0xdc, 0x08, 0x0f, 0xc0, 0x35, + 0xfe, 0xa0, 0xe3, 0x94, 0x9a, 0x0a, 0x75, 0x3d, 0x38, 0xc2, 0xc6, 0xc3, 0xb7, 0xae, 0xce, 0x82, + 0x7e, 0x5a, 0xde, 0x2d, 0x70, 0xd5, 0x50, 0xb3, 0x7e, 0x88, 0x2a, 0xc1, 0x9b, 0xa0, 0x25, 0x55, + 0xda, 0x58, 0x57, 0x33, 0xa1, 0xae, 0x07, 0xc6, 0xd1, 0x48, 0x38, 0x92, 0xd6, 0x59, 0xd0, 0x5f, + 0x0b, 0x04, 0xbf, 0x02, 0x61, 0x4d, 0x90, 0xd5, 0x37, 0xc4, 0xb3, 0x1c, 0xab, 0x9f, 0x57, 0x0e, + 0x11, 0xa4, 0x07, 0xd3, 0xac, 0x1e, 0x8f, 0xf4, 0x35, 0xf9, 0x79, 0x6f, 0x0c, 0x22, 0x46, 0x9f, + 0xd6, 0xcc, 0xc7, 0x18, 0xaa, 0xa9, 0x63, 0xbd, 0x37, 0x06, 0x25, 0x04, 0x3b, 0x7b, 0x52, 0x5b, + 0xea, 0x7e, 0x80, 0xa3, 0x54, 0x33, 0x5f, 0x27, 0x3b, 0x9f, 0x34, 0xc4, 0xbc, 0xd1, 0x5d, 0x5f, + 0x57, 0x4d, 0x0f, 0xbd, 0x77, 0xba, 0x6a, 0xd5, 0x17, 0xf4, 0xa8, 0xa5, 0xb7, 0xe1, 0x7e, 0x04, + 0x62, 0x26, 0x81, 0x39, 0x45, 0xe8, 0x7e, 0xfc, 0x10, 0xf4, 0xba, 0x50, 0x57, 0x58, 0xd3, 0xc8, + 0xb3, 0xf0, 0x39, 0x54, 0x1b, 0xaf, 0xf9, 0xe1, 0x2e, 0x50, 0x81, 0xea, 0x66, 0x4b, 0xf9, 0xf2, + 0x38, 0x81, 0xb4, 0x4b, 0x7a, 0x29, 0x15, 0x1e, 0x66, 0x47, 0x5c, 0xff, 0x42, 0xf2, 0xa8, 0x1a, + 0x0c, 0x1d, 0xa1, 0x3a, 0xb6, 0x87, 0x92, 0x84, 0xb0, 0xbf, 0x0f, 0x24, 0xad, 0x5b, 0x2f, 0xb1, + 0xdf, 0x8b, 0x85, 0xb7, 0xf9, 0x55, 0x6b, 0x2e, 0xa6, 0xcc, 0x1f, 0x87, 0xbd, 0x49, 0x26, 0x79, + 0x90, 0xbd, 0xcf, 0xfe, 0xf2, 0x5b, 0xb3, 0x88, 0x76, 0x7a, 0x92, 0x5f, 0x41, 0x9b, 0xdb, 0x11, + 0xfb, 0x72, 0x4f, 0x99, 0x26, 0xa7, 0x5b, 0xa3, 0x97, 0xdf, 0x54, 0x5b, 0x39, 0xbb, 0xda, 0x6a, + 0x27, 0x82, 0xfa, 0x16, 0x0c, 0x1e, 0x8f, 0xd9, 0x97, 0x7b, 0xda, 0x34, 0xa9, 0x6f, 0x10, 0x66, + 0x8c, 0x31, 0x2b, 0x31, 0xe5, 0xb1, 0x11, 0xf9, 0x53, 0xe4, 0xde, 0x89, 0xc8, 0x17, 0x96, 0x32, + 0x4d, 0x4a, 0x9c, 0x19, 0xfa, 0x14, 0x16, 0x1b, 0xdc, 0x6f, 0x3d, 0xd9, 0xf9, 0xb2, 0xd5, 0xe0, + 0x0e, 0xf5, 0x25, 0xc1, 0x9f, 0xb2, 0xb5, 0xcb, 0x83, 0x2a, 0xa2, 0x87, 0x80, 0xf9, 0x6a, 0x5e, + 0xd3, 0xc7, 0x8c, 0x38, 0x69, 0xec, 0x5b, 0x0f, 0x76, 0xbc, 0x1e, 0xd7, 0xde, 0x9b, 0x3c, 0x8a, + 0xf5, 0x1d, 0xc2, 0x8c, 0x9b, 0x54, 0xd6, 0x40, 0xd7, 0x0f, 0x12, 0x65, 0xfd, 0xaa, 0x7e, 0x00, + 0xe6, 0x09, 0xa1, 0xfa, 0xe8, 0xab, 0xae, 0x37, 0x66, 0xe2, 0x84, 0x20, 0xb4, 0x37, 0xb4, 0x48, + 0xb1, 0x15, 0xfa, 0xc6, 0x70, 0x0c, 0x4e, 0xc2, 0x9f, 0xd6, 0x3e, 0x55, 0xf5, 0x9d, 0xbf, 0x7e, + 0x02, 0xc1, 0x5a, 0xf5, 0x5c, 0x95, 0xf2, 0x2a, 0x42, 0x57, 0xf3, 0x5d, 0x30, 0xef, 0xed, 0xfa, + 0x30, 0x8b, 0x68, 0x2d, 0x0c, 0xf6, 0x43, 0x52, 0x68, 0xb2, 0x8f, 0xbd, 0x67, 0xeb, 0xc3, 0x29, + 0x2a, 0x31, 0xb1, 0x04, 0xf6, 0xc1, 0x19, 0xd0, 0x4b, 0x2b, 0x3d, 0x3c, 0xef, 0x05, 0xfd, 0x87, + 0xc5, 0xc0, 0xba, 0x31, 0x52, 0xad, 0x50, 0x4c, 0x35, 0x42, 0xd7, 0x0f, 0x50, 0xb5, 0xfd, 0x7c, + 0x68, 0xf7, 0x2f, 0xa6, 0x49, 0x6c, 0x47, 0x4c, 0x46, 0x1e, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXSelectIcon[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x11, 0x08, 0x06, 0x00, 0x00, 0x00, 0xed, 0xc8, 0x9d, 0x9f, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x00, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x95, 0x92, 0xc1, 0x0a, 0x01, 0x61, 0x14, 0x85, 0x27, 0x45, 0x64, 0xa3, 0x94, 0x2c, 0xac, 0xa4, 0x44, 0x51, 0x16, 0xd6, 0xf6, 0xca, 0xc6, 0x23, 0x78, 0x02, 0x25, 0x2f, 0x61, 0xc9, 0xc6, 0xde, 0x0b, 0xd8, 0x51, 0xbc, 0x82, 0xc8, 0x4e, 0xa1, 0xa4, 0xac, 0x94, 0x6c, 0x88, 0x14, 0xdf, 0xd5, 0xdc, 0xfa, 0x1b, 0x33, 0x98, 0x53, 0xdf, 0xdc, 0xeb, 0xfe, 0xe7, 0x5c, 0x63, 0x8c, 0x65, 0x59, 0x56, 0x17, 0x72, 0xe0, 0x4b, 0x01, 0xdb, 0xbd, 0xa4, 0xf6, 0x20, 0xee, 0x27, 0x5d, 0xc5, 0xfc, 0xb4, 0x39, 0x51, 0x9b, 0x10, 0x84, 0x9f, 0x8a, 0xe0, 0xb8, 0x82, 0x86, 0xa5, 0xae, 0xa0, 0x06, 0x3f, 0x35, 0xc6, 0x61, 0x06, 0xb5, 0x9f, 0x32, 0x2f, 0x7c, 0x4b, 0xcb, 0xed, 0xa9, 0xd9, 0x59, 0x1f, 0x9c, 0xf5, 0x21, 0xe1, 0xb6, 0x20, 0xfb, 0x25, 0xa8, 0x8b, 0xce, 0x78, 0xda, 0x10, 0x72, 0x2e, 0xd8, 0xfe, 0x11, 0x96, 0x25, 0x1b, 0xa8, 0xeb, 0xdf, 0x21, 0x4b, 0x46, 0x72, 0xf9, 0x43, 0x49, 0x3c, 0x61, 0xd3, 0x27, 0x4f, 0x51, 0x6f, 0xcb, 0xab, 0xae, 0xf1, 0x14, 0xcd, 0x90, 0xf4, 0x51, 0xb8, 0x81, 0x57, 0x68, 0xc6, 0x59, 0x0c, 0x5c, 0x35, 0x61, 0xea, 0x15, 0xbc, 0x70, 0x56, 0x76, 0x4d, 0x31, 0x6c, 0x39, 0x82, 0xf2, 0x26, 0xed, 0x8d, 0xd9, 0x81, 0x3e, 0x05, 0x1f, 0xca, 0x33, 0xd1, 0x6f, 0x5c, 0xd0, 0xa7, 0x21, 0x03, 0x47, 0x63, 0x3e, 0xa7, 0x97, 0x9f, 0xf5, 0xa1, 0x1d, 0x93, 0x01, 0xc8, 0xab, 0xa8, 0xaa, 0xd0, 0xdc, 0x41, 0x97, 0x0e, 0xf5, 0xc0, 0xac, 0x25, 0xf3, 0x83, 0xd1, 0x37, 0xe8, 0x35, 0x28, 0xd5, 0x97, 0x3a, 0xb8, 0xdf, 0xe1, 0x17, 0xaf, 0x54, 0x62, 0xf7, 0x88, 0x7e, 0xaa, 0x27, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXHierarchyIcon[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x50, 0x21, 0x2b, + 0x21, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xeb, 0x6b, 0x49, 0x00, 0x00, + 0x01, 0xe9, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x98, 0xbf, 0x2f, 0x04, 0x41, 0x14, 0xc7, + 0x77, 0xb9, 0x82, 0x88, 0x82, 0x56, 0x4f, 0x68, 0x88, 0x48, 0x88, 0x6b, 0x2e, 0x21, 0x41, 0xe9, + 0x3f, 0x50, 0x88, 0x46, 0xc5, 0x3f, 0xa0, 0xd2, 0x8a, 0x44, 0xab, 0xf0, 0x0f, 0xe8, 0x28, 0x50, + 0x9f, 0x46, 0xa3, 0x11, 0x09, 0x11, 0xc5, 0x35, 0x2a, 0x91, 0x08, 0x22, 0x7e, 0x9c, 0xcf, 0x3b, + 0x7b, 0xc9, 0x4e, 0x76, 0x2e, 0xe6, 0xe6, 0x47, 0xf6, 0x24, 0xfb, 0x92, 0x6f, 0x76, 0xe6, 0xcd, + 0x7b, 0xdf, 0x79, 0x6f, 0xde, 0xde, 0xcc, 0xec, 0xc5, 0xf5, 0x7a, 0x3d, 0x8e, 0xa2, 0x68, 0x0b, + 0x2c, 0x83, 0x21, 0xe0, 0x2a, 0x6f, 0x10, 0x9c, 0x80, 0xed, 0x38, 0x8e, 0xef, 0x5d, 0xc9, 0x8c, + 0xfd, 0x49, 0xa4, 0x0c, 0x42, 0xc8, 0x8e, 0x71, 0x10, 0x1e, 0x0c, 0x4b, 0x70, 0x2c, 0x79, 0xe0, + 0xd1, 0x51, 0x2c, 0xa2, 0xdc, 0xd4, 0x0d, 0xa4, 0x75, 0xac, 0xe0, 0x00, 0xfd, 0xf1, 0xb4, 0xce, + 0xb0, 0x5d, 0xa3, 0xe2, 0x77, 0x4d, 0x5b, 0x49, 0xa4, 0xa7, 0xd9, 0xf1, 0xfc, 0xfc, 0x93, 0x97, + 0x24, 0x76, 0x99, 0x73, 0x1d, 0x48, 0x1c, 0x6d, 0x0b, 0xfe, 0x97, 0x38, 0xcd, 0x90, 0xd0, 0x7b, + 0x57, 0xdb, 0xde, 0x9e, 0x1c, 0x08, 0xa2, 0x0f, 0xaa, 0x35, 0x60, 0x95, 0x44, 0x12, 0xc6, 0x04, + 0xcf, 0x05, 0x69, 0xe7, 0x96, 0x08, 0x73, 0x8f, 0x81, 0x5e, 0x09, 0xc2, 0x51, 0xa6, 0xc4, 0x3f, + 0xcf, 0x44, 0x1c, 0xe3, 0x57, 0xdd, 0x8b, 0x44, 0xd4, 0xf5, 0xc8, 0xbf, 0x57, 0x54, 0x24, 0xff, + 0x1a, 0xa8, 0x11, 0x48, 0x45, 0x5e, 0x54, 0x95, 0xb7, 0x5e, 0x28, 0x5e, 0x6d, 0x80, 0x92, 0xc8, + 0x91, 0x76, 0xc4, 0x5d, 0x79, 0xec, 0x4e, 0x61, 0xce, 0x50, 0xe2, 0x54, 0xbc, 0xe0, 0x70, 0xda, + 0xc0, 0xc5, 0xd7, 0xa5, 0xf1, 0x15, 0x2e, 0xb9, 0x34, 0xee, 0x99, 0x87, 0xe1, 0x6e, 0xd9, 0x38, + 0x55, 0x49, 0x46, 0xae, 0x0a, 0x82, 0x7f, 0x2b, 0xc5, 0xae, 0xd5, 0x69, 0xa5, 0x2b, 0x2a, 0xd2, + 0x69, 0x15, 0xd1, 0x5e, 0xa1, 0xd9, 0xc5, 0x46, 0x09, 0x74, 0x15, 0x94, 0x41, 0xb7, 0x65, 0xd0, + 0x5f, 0xf8, 0x55, 0xc1, 0x3e, 0x9b, 0xc9, 0xb5, 0x25, 0x87, 0xb1, 0x9b, 0x36, 0x11, 0xbc, 0x65, + 0xeb, 0x9c, 0x33, 0x66, 0x69, 0x6d, 0x38, 0xcd, 0x90, 0x7c, 0xfd, 0xcd, 0xb7, 0x36, 0xf1, 0x33, + 0x92, 0xf9, 0x8d, 0x50, 0x8d, 0x7e, 0xa8, 0x2b, 0x7e, 0xe8, 0x1b, 0x2c, 0x95, 0x84, 0xd3, 0x23, + 0x65, 0x96, 0x2a, 0x93, 0x08, 0x26, 0xf2, 0xe5, 0x66, 0xfb, 0x3a, 0x65, 0x67, 0xf8, 0xe5, 0x12, + 0xce, 0xa0, 0xa2, 0x4b, 0x24, 0xe8, 0x84, 0xa1, 0xc8, 0x8b, 0x44, 0x42, 0xad, 0xac, 0x2d, 0x6f, + 0x9e, 0x15, 0xb9, 0x25, 0xe8, 0x0f, 0xdb, 0xc0, 0x53, 0x7e, 0x57, 0xd2, 0xce, 0x2d, 0x11, 0xce, + 0x96, 0x27, 0xe6, 0x3f, 0x4c, 0x05, 0x64, 0xd3, 0x7c, 0xc0, 0xa9, 0xf1, 0x19, 0x22, 0xff, 0xfb, + 0x2a, 0x92, 0x6c, 0x95, 0x8f, 0x28, 0x5b, 0x9d, 0x31, 0x8a, 0xbd, 0x41, 0xe7, 0x13, 0x9b, 0x41, + 0x02, 0x7f, 0xd6, 0xd9, 0x32, 0xdf, 0x08, 0xfa, 0x49, 0x90, 0x89, 0x45, 0x67, 0x9f, 0xd2, 0xd5, + 0x68, 0x57, 0xe1, 0xfd, 0x4e, 0xe9, 0xd4, 0x26, 0xe4, 0x67, 0xc0, 0x97, 0x9c, 0xaa, 0xec, 0x61, + 0x7a, 0xda, 0x55, 0x20, 0x83, 0x61, 0xa6, 0x5b, 0x01, 0xb3, 0xc0, 0xf6, 0x4c, 0x91, 0x2b, 0xca, + 0x39, 0x38, 0x60, 0xd5, 0x6e, 0x78, 0x16, 0x62, 0xb2, 0x02, 0x3f, 0xb2, 0x15, 0xf7, 0xb1, 0x2c, + 0xc1, 0x90, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXSelectIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x22, 0x08, 0x06, 0x00, 0x00, 0x00, 0x4c, 0x7d, 0xb9, 0x49, 0x00, 0x00, 0x0c, 0x45, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0xad, 0x57, 0x77, 0x58, 0x53, 0xd7, 0x1b, 0xfe, 0xee, 0x48, 0x02, 0x21, 0x09, 0x23, 0x10, 0x01, 0x19, 0x61, 0x2f, 0x51, 0xf6, 0x94, 0xbd, 0x05, 0x05, 0x99, 0x42, 0x1d, 0x84, 0x24, 0x90, 0x30, 0x62, 0x08, 0x04, 0x15, 0xf7, 0x28, 0xad, 0x60, 0x1d, 0xa8, 0x38, 0x70, 0x54, 0xb4, 0x2a, 0xe2, 0xaa, 0x03, 0x90, 0x3a, 0x10, 0x71, 0x5b, 0x14, 0xb7, 0x75, 0x14, 0xb5, 0x28, 0x28, 0xb5, 0x38, 0x70, 0xa1, 0xf2, 0x3b, 0x37, 0x0c, 0xfb, 0xf4, 0x69, 0xff, 0xfb, 0xdd, 0xe7, 0x39, 0xe7, 0xbe, 0x79, 0xbf, 0xef, 0x7c, 0xf7, 0xfd, 0xbe, 0x7b, 0xee, 0xc9, 0x39, 0x00, 0x9a, 0xb6, 0x02, 0xb9, 0x3c, 0x17, 0xd7, 0x02, 0xc8, 0x93, 0x15, 0x2a, 0xe2, 0x23, 0x82, 0xf9, 0x13, 0x52, 0xd3, 0xf8, 0x8c, 0x07, 0x80, 0x83, 0x01, 0x70, 0xc0, 0x0d, 0x48, 0x81, 0xb0, 0x40, 0x1e, 0x14, 0x17, 0x17, 0x03, 0xff, 0x79, 0xbd, 0xbd, 0x09, 0x18, 0x65, 0xbc, 0xe6, 0x48, 0xc5, 0xfa, 0x4f, 0xb7, 0x7f, 0x37, 0x68, 0x8b, 0xc4, 0x05, 0x42, 0x00, 0x2c, 0x0e, 0x99, 0x33, 0x44, 0x05, 0xc2, 0x3c, 0x84, 0x0f, 0x01, 0x90, 0x1c, 0xa1, 0x5c, 0x51, 0x08, 0x40, 0x6b, 0x46, 0xbc, 0xc5, 0xb4, 0x42, 0x39, 0x85, 0x3b, 0x10, 0xd6, 0x55, 0x20, 0x81, 0x08, 0x7f, 0xa2, 0x70, 0x96, 0x0a, 0xd3, 0x91, 0x7a, 0xd0, 0xcd, 0xe8, 0xc7, 0x96, 0x2a, 0x9f, 0xc4, 0xf8, 0x10, 0x00, 0xba, 0x17, 0x80, 0x1a, 0x4b, 0x20, 0x50, 0x64, 0x01, 0x70, 0x42, 0x11, 0xcf, 0x2f, 0x12, 0x66, 0xa1, 0x38, 0x1c, 0x11, 0xc2, 0x4e, 0x32, 0x91, 0x54, 0x86, 0xf0, 0x2a, 0x84, 0xfd, 0x85, 0x12, 0x01, 0xe2, 0x38, 0xd7, 0x11, 0x1e, 0x91, 0x97, 0x37, 0x15, 0x61, 0x4d, 0x04, 0xc1, 0x36, 0xe3, 0x6f, 0x71, 0xb2, 0xfe, 0x86, 0x05, 0x82, 0x8c, 0xa1, 0x98, 0x02, 0x41, 0xd6, 0x10, 0xee, 0xcf, 0x85, 0x1a, 0x0a, 0x6a, 0xa1, 0xd2, 0x02, 0x79, 0xae, 0x60, 0x86, 0xea, 0xc7, 0xff, 0xb3, 0xcb, 0xcb, 0x55, 0xa2, 0x7a, 0xa9, 0x2e, 0x33, 0xd4, 0xb3, 0x24, 0x8a, 0xc8, 0x78, 0x74, 0xd7, 0x45, 0x75, 0xdb, 0x90, 0x33, 0x35, 0x9a, 0xc2, 0x2c, 0x84, 0xf7, 0xcb, 0x32, 0xc6, 0xc5, 0x22, 0xac, 0x83, 0xf0, 0x51, 0x29, 0x95, 0x71, 0x3f, 0x6e, 0x91, 0x28, 0x23, 0x93, 0x10, 0xa6, 0xfc, 0xdb, 0x84, 0x05, 0x21, 0xa8, 0x96, 0xc0, 0x43, 0xf8, 0x8d, 0x48, 0x10, 0x1a, 0x8d, 0xb0, 0x11, 0x00, 0xce, 0x54, 0xe6, 0x24, 0x05, 0x0d, 0x60, 0x6b, 0x81, 0x02, 0x21, 0x95, 0x3f, 0x1e, 0x2c, 0x2d, 0x8c, 0x4a, 0x1c, 0xc0, 0xc9, 0x8a, 0xa9, 0xf1, 0x03, 0xf1, 0xf1, 0x6c, 0x59, 0xee, 0x38, 0x6a, 0x7e, 0xa0, 0x38, 0xf8, 0x2c, 0x89, 0x38, 0x6a, 0x10, 0x97, 0x8b, 0x0b, 0xc2, 0x12, 0x10, 0x8f, 0x34, 0xe0, 0xd9, 0x99, 0xd2, 0xf0, 0x28, 0x84, 0xd1, 0xbb, 0xc2, 0x77, 0x16, 0x4b, 0x12, 0x53, 0x10, 0x46, 0x3a, 0xf1, 0xfa, 0x22, 0x69, 0xf2, 0x38, 0x84, 0x39, 0x08, 0x37, 0x17, 0xe4, 0x24, 0x50, 0x1a, 0xa8, 0x38, 0x57, 0x8b, 0x25, 0x21, 0x14, 0xaf, 0xf2, 0x51, 0x28, 0xe3, 0x29, 0xcd, 0x96, 0x88, 0xef, 0xc8, 0x54, 0x84, 0x53, 0x39, 0x22, 0x1f, 0x82, 0x95, 0x57, 0x80, 0x90, 0x2a, 0x3e, 0x61, 0x2e, 0x14, 0xa8, 0x9e, 0xa5, 0x8f, 0x78, 0xb7, 0x42, 0x49, 0x62, 0x24, 0xe2, 0xd1, 0x58, 0x22, 0x46, 0x24, 0x0e, 0x0d, 0x43, 0x18, 0x3d, 0x97, 0x98, 0x20, 0x96, 0x25, 0x0d, 0xe8, 0x21, 0x24, 0xf2, 0xc2, 0x60, 0x2a, 0x0e, 0xe5, 0x5f, 0x2c, 0xcf, 0x55, 0xcd, 0x6f, 0xa4, 0x93, 0x28, 0x17, 0xe7, 0x46, 0x50, 0xbc, 0x39, 0xc2, 0xdb, 0x0a, 0x8a, 0x12, 0x06, 0xc7, 0x9e, 0x29, 0x54, 0x24, 0x52, 0x3c, 0xaa, 0x1b, 0x71, 0x33, 0x5b, 0x30, 0x86, 0x9a, 0xaf, 0x48, 0x33, 0xf1, 0x4c, 0x5e, 0x18, 0x47, 0xd5, 0x84, 0xd2, 0xf3, 0x1e, 0x62, 0x20, 0x04, 0x42, 0x81, 0x0f, 0x4a, 0xd4, 0x32, 0x60, 0x2a, 0x64, 0x83, 0xb4, 0xa5, 0xab, 0xae, 0x0b, 0xfd, 0xea, 0xb7, 0x84, 0x83, 0x00, 0x14, 0x90, 0x05, 0x62, 0x70, 0x1c, 0x60, 0x06, 0x47, 0xa4, 0xa8, 0x2c, 0x32, 0xd4, 0x27, 0x40, 0x31, 0xfc, 0x09, 0x32, 0xe4, 0x53, 0x30, 0x34, 0x2e, 0x58, 0x65, 0x15, 0x43, 0x11, 0xe2, 0x3f, 0x0f, 0xb1, 0xfd, 0x63, 0x1d, 0x21, 0x53, 0x65, 0x2d, 0x52, 0x8d, 0xc8, 0x81, 0x27, 0xe8, 0x09, 0x79, 0xa4, 0x21, 0xe9, 0x4f, 0xfa, 0x92, 0x31, 0xa8, 0x0f, 0x44, 0xcd, 0x85, 0xf4, 0x22, 0xbd, 0x07, 0xc7, 0xf1, 0x35, 0x07, 0x75, 0xd2, 0xc3, 0xe8, 0xa1, 0xf4, 0x48, 0x7a, 0x38, 0xdd, 0x6e, 0x90, 0x01, 0x21, 0x52, 0x9d, 0x8b, 0x9a, 0x02, 0xa4, 0xff, 0xc2, 0x45, 0x23, 0x9b, 0x18, 0x65, 0xa7, 0x40, 0xbd, 0x6c, 0x30, 0x87, 0xaf, 0xf1, 0x68, 0x4f, 0x68, 0xad, 0xb4, 0x47, 0xb4, 0x1b, 0xb4, 0x36, 0xda, 0x1d, 0x48, 0x86, 0x3f, 0x54, 0x51, 0x06, 0x32, 0x9d, 0x22, 0x5d, 0xa0, 0x18, 0x54, 0x30, 0x14, 0x79, 0x2c, 0xb4, 0xa1, 0x68, 0xfd, 0x55, 0x11, 0xa3, 0x8a, 0xc9, 0xa0, 0x73, 0xd0, 0x87, 0xb4, 0x46, 0xaa, 0xdd, 0xc9, 0x60, 0xd2, 0x0f, 0xe9, 0x47, 0xda, 0x49, 0x1e, 0x69, 0x08, 0x8e, 0xa4, 0x1b, 0xca, 0x24, 0x88, 0x0c, 0x40, 0xb9, 0xb9, 0x23, 0x76, 0xb0, 0x7a, 0x94, 0x6a, 0xe5, 0x90, 0xb6, 0xaf, 0xb5, 0x1c, 0xac, 0xfb, 0xa0, 0x1f, 0xa5, 0x9a, 0xff, 0xb7, 0x1c, 0x07, 0x78, 0x8e, 0x3d, 0xc7, 0x7d, 0x40, 0x45, 0xc6, 0x60, 0x56, 0xe8, 0x4d, 0x0e, 0x56, 0xe2, 0x9f, 0x51, 0xbe, 0x5a, 0xa4, 0x20, 0x42, 0x5e, 0xd1, 0xff, 0xf4, 0x24, 0xbe, 0x27, 0x0e, 0x12, 0x67, 0x89, 0x93, 0xc4, 0x79, 0xe2, 0x28, 0x51, 0x07, 0x7c, 0xe2, 0x04, 0x51, 0x4f, 0x5c, 0x22, 0x8e, 0x51, 0x78, 0x40, 0x73, 0xb8, 0xaa, 0x3a, 0x59, 0x43, 0x4f, 0x8b, 0x57, 0x55, 0x34, 0x07, 0xe5, 0x20, 0x1d, 0xf4, 0x71, 0xaa, 0x71, 0xea, 0x74, 0xfa, 0x34, 0xf8, 0x6b, 0x28, 0x57, 0x01, 0x62, 0x28, 0x05, 0xd4, 0x3b, 0x40, 0xf3, 0xbf, 0x50, 0x3c, 0xbd, 0x10, 0xcd, 0x3f, 0x08, 0x99, 0x2a, 0x9f, 0xa1, 0x90, 0x66, 0x49, 0x0a, 0xf9, 0x41, 0x68, 0x15, 0x16, 0xf3, 0xa3, 0x64, 0xc2, 0x91, 0x23, 0xf8, 0x2e, 0x4e, 0xce, 0x6e, 0x00, 0xd4, 0x9a, 0x4e, 0xf9, 0x00, 0xbc, 0xe6, 0xa9, 0xd6, 0x6a, 0x8c, 0x77, 0xe1, 0x2b, 0x97, 0xdf, 0x08, 0xe0, 0x5d, 0x8a, 0xd6, 0x00, 0x6a, 0x39, 0xe5, 0x53, 0x5e, 0x00, 0x02, 0x0b, 0x80, 0x23, 0x4f, 0x00, 0xb8, 0x6f, 0xbf, 0x72, 0x16, 0xaf, 0xd0, 0x27, 0xb5, 0x1c, 0xe0, 0xd8, 0x15, 0xa1, 0x52, 0x51, 0xd4, 0xef, 0x47, 0x52, 0x37, 0x1a, 0x30, 0xd1, 0x82, 0xa9, 0x8b, 0xfe, 0x31, 0x4c, 0xc0, 0x02, 0x6c, 0x51, 0x4e, 0x2e, 0xe0, 0x01, 0xbe, 0x10, 0x08, 0x61, 0x30, 0x06, 0x62, 0x21, 0x11, 0x52, 0x61, 0x32, 0xaa, 0xba, 0x04, 0xf2, 0x90, 0xea, 0x69, 0x30, 0x0b, 0xe6, 0x43, 0x09, 0x94, 0xc1, 0x72, 0x58, 0x0d, 0xeb, 0x61, 0x33, 0x6c, 0x85, 0x9d, 0xb0, 0x07, 0x0e, 0x40, 0x1d, 0x1c, 0x85, 0x93, 0x70, 0x06, 0x2e, 0xc2, 0x15, 0xb8, 0x01, 0x77, 0xd1, 0xdc, 0x68, 0x87, 0xe7, 0xd0, 0x0d, 0x6f, 0xa1, 0x17, 0xc3, 0x30, 0x06, 0xc6, 0xc6, 0xb8, 0x98, 0x01, 0x66, 0x8a, 0x59, 0x61, 0x0e, 0x98, 0x0b, 0xe6, 0x85, 0xf9, 0x63, 0x61, 0x58, 0x0c, 0x16, 0x8f, 0xa5, 0x62, 0xe9, 0x58, 0x16, 0x26, 0xc3, 0x94, 0xd8, 0x2c, 0x6c, 0x21, 0x56, 0x86, 0x95, 0x63, 0xeb, 0xb1, 0x2d, 0x58, 0x35, 0xf6, 0x33, 0x76, 0x04, 0x3b, 0x89, 0x9d, 0xc7, 0x5a, 0xb1, 0x3b, 0xd8, 0x43, 0xac, 0x13, 0x7b, 0x85, 0x7d, 0xc4, 0x09, 0x9c, 0x85, 0xeb, 0xe2, 0xc6, 0xb8, 0x35, 0x3e, 0x0a, 0xf7, 0xc2, 0x83, 0xf0, 0x68, 0x3c, 0x11, 0x9f, 0x84, 0x67, 0xe1, 0xf9, 0x78, 0x31, 0xbe, 0x08, 0x5f, 0x8a, 0xaf, 0xc5, 0xab, 0xf0, 0xdd, 0x78, 0x2d, 0x7e, 0x12, 0xbf, 0x88, 0xdf, 0xc0, 0xdb, 0xf0, 0xe7, 0x78, 0x0f, 0x01, 0x84, 0x06, 0xc1, 0x23, 0xcc, 0x08, 0x47, 0xc2, 0x8b, 0x08, 0x21, 0x62, 0x89, 0x34, 0x22, 0x93, 0x50, 0x10, 0x73, 0x88, 0x52, 0xa2, 0x82, 0xa8, 0x22, 0xf6, 0x12, 0x0d, 0xe8, 0x5d, 0x5f, 0x23, 0xda, 0x88, 0x2e, 0xe2, 0x03, 0x49, 0x27, 0xb9, 0x24, 0x9f, 0x74, 0x44, 0xf3, 0x33, 0x92, 0x4c, 0x22, 0x85, 0x64, 0x3e, 0x39, 0x87, 0x5c, 0x42, 0xae, 0x27, 0x77, 0x92, 0xb5, 0x64, 0x33, 0x79, 0x8d, 0x7c, 0x48, 0x76, 0x93, 0x5f, 0x68, 0x6c, 0x9a, 0x11, 0xcd, 0x81, 0xe6, 0x43, 0x8b, 0xa2, 0x4d, 0xa0, 0x65, 0xd1, 0xa6, 0xd1, 0x4a, 0x68, 0x15, 0xb4, 0xed, 0xb4, 0xc3, 0xb4, 0xd3, 0xe8, 0xdb, 0x69, 0xa7, 0xbd, 0xa5, 0xd3, 0xe9, 0x3c, 0xba, 0x0d, 0xdd, 0x13, 0x7d, 0x9b, 0xa9, 0xf4, 0x6c, 0xfa, 0x4c, 0xfa, 0x12, 0xfa, 0x46, 0xfa, 0x3e, 0x7a, 0x23, 0xbd, 0x95, 0xfe, 0x98, 0xde, 0xc3, 0x60, 0x30, 0x0c, 0x18, 0x0e, 0x0c, 0x3f, 0x46, 0x2c, 0x43, 0xc0, 0x28, 0x64, 0x94, 0x30, 0xd6, 0x31, 0x76, 0x33, 0x4e, 0x30, 0xae, 0x32, 0xda, 0x19, 0xef, 0xd5, 0x34, 0xd4, 0x4c, 0xd5, 0x5c, 0xd4, 0xc2, 0xd5, 0xd2, 0xd4, 0x64, 0x6a, 0x0b, 0xd4, 0x2a, 0xd4, 0x76, 0xa9, 0x1d, 0x57, 0xbb, 0xaa, 0xf6, 0x54, 0xad, 0x57, 0x5d, 0x4b, 0xdd, 0x4a, 0xdd, 0x47, 0x3d, 0x56, 0x5d, 0xa4, 0x3e, 0x43, 0x7d, 0x99, 0xfa, 0x36, 0xf5, 0x06, 0xf5, 0xcb, 0xea, 0xed, 0xea, 0xbd, 0x4c, 0x6d, 0xa6, 0x0d, 0xd3, 0x8f, 0x99, 0xc8, 0xcc, 0x66, 0xce, 0x67, 0xae, 0x65, 0xee, 0x65, 0x9e, 0x66, 0xde, 0x63, 0xbe, 0xd6, 0xd0, 0xd0, 0x30, 0xd7, 0xf0, 0xd6, 0x18, 0xaf, 0x21, 0xd5, 0x98, 0xa7, 0xb1, 0x56, 0x63, 0xbf, 0xc6, 0x39, 0x8d, 0x87, 0x1a, 0x1f, 0x58, 0x3a, 0x2c, 0x7b, 0x56, 0x08, 0x6b, 0x22, 0x4b, 0xc9, 0x5a, 0xca, 0xda, 0xc1, 0x6a, 0x64, 0xdd, 0x61, 0xbd, 0x66, 0xb3, 0xd9, 0xd6, 0xec, 0x40, 0x76, 0x1a, 0xbb, 0x90, 0xbd, 0x94, 0x5d, 0xcd, 0x3e, 0xc5, 0x7e, 0xc0, 0x7e, 0xcf, 0xe1, 0x72, 0x46, 0x72, 0xa2, 0x38, 0x22, 0xce, 0x5c, 0x4e, 0x25, 0xa7, 0x96, 0x73, 0x95, 0xf3, 0x42, 0x53, 0x5d, 0xd3, 0x4a, 0x33, 0x48, 0x73, 0xb2, 0x66, 0xb1, 0x66, 0x85, 0xe6, 0x41, 0xcd, 0xcb, 0x9a, 0x5d, 0x5a, 0xea, 0x5a, 0xd6, 0x5a, 0x21, 0x5a, 0x02, 0xad, 0x39, 0x5a, 0x95, 0x5a, 0x47, 0xb4, 0x6e, 0x69, 0xf5, 0x68, 0x73, 0xb5, 0x9d, 0xb5, 0x63, 0xb5, 0xf3, 0xb4, 0x97, 0x68, 0xef, 0xd2, 0x3e, 0xaf, 0xdd, 0xa1, 0xc3, 0xd0, 0xb1, 0xd6, 0x09, 0xd3, 0x11, 0xe9, 0x2c, 0xd2, 0xd9, 0xaa, 0x73, 0x4a, 0xe7, 0x31, 0x97, 0xe0, 0x5a, 0x70, 0x43, 0xb8, 0x42, 0xee, 0x42, 0xee, 0x36, 0xee, 0x69, 0x6e, 0xbb, 0x2e, 0x5d, 0xd7, 0x46, 0x37, 0x4a, 0x37, 0x5b, 0xb7, 0x4c, 0x77, 0x8f, 0x6e, 0x8b, 0x6e, 0xb7, 0x9e, 0x8e, 0x9e, 0x9b, 0x5e, 0xb2, 0xde, 0x74, 0xbd, 0x4a, 0xbd, 0x63, 0x7a, 0x6d, 0x3c, 0x82, 0x67, 0xcd, 0x8b, 0xe2, 0xe5, 0xf2, 0x96, 0xf1, 0x0e, 0xf0, 0x6e, 0xf2, 0x3e, 0x0e, 0x33, 0x1e, 0x16, 0x34, 0x4c, 0x3c, 0x6c, 0xf1, 0xb0, 0xbd, 0xc3, 0xae, 0x0e, 0x7b, 0xa7, 0x3f, 0x5c, 0x3f, 0x50, 0x5f, 0xac, 0x5f, 0xaa, 0xbf, 0x4f, 0xff, 0x86, 0xfe, 0x47, 0x03, 0xbe, 0x41, 0x98, 0x41, 0x8e, 0xc1, 0x0a, 0x83, 0x3a, 0x83, 0xfb, 0x86, 0xa4, 0xa1, 0xbd, 0xe1, 0x78, 0xc3, 0x69, 0x86, 0x9b, 0x0c, 0x4f, 0x1b, 0x76, 0x0d, 0xd7, 0x1d, 0xee, 0x3b, 0x5c, 0x38, 0xbc, 0x74, 0xf8, 0x81, 0xe1, 0xbf, 0x19, 0xe1, 0x46, 0xf6, 0x46, 0xf1, 0x46, 0x33, 0x8d, 0xb6, 0x1a, 0x5d, 0x32, 0xea, 0x31, 0x36, 0x31, 0x8e, 0x30, 0x96, 0x1b, 0xaf, 0x33, 0x3e, 0x65, 0xdc, 0x65, 0xc2, 0x33, 0x09, 0x34, 0xc9, 0x36, 0x59, 0x65, 0x72, 0xdc, 0xa4, 0xd3, 0x94, 0x6b, 0xea, 0x6f, 0x2a, 0x35, 0x5d, 0x65, 0x7a, 0xc2, 0xf4, 0x19, 0x5f, 0x8f, 0x1f, 0xc4, 0xcf, 0xe5, 0xaf, 0xe5, 0x37, 0xf3, 0xbb, 0xcd, 0x8c, 0xcc, 0x22, 0xcd, 0x94, 0x66, 0x5b, 0xcc, 0x5a, 0xcc, 0x7a, 0xcd, 0x6d, 0xcc, 0x93, 0xcc, 0x17, 0x98, 0xef, 0x33, 0xbf, 0x6f, 0xc1, 0xb4, 0xf0, 0xb2, 0xc8, 0xb4, 0x58, 0x65, 0xd1, 0x64, 0xd1, 0x6d, 0x69, 0x6a, 0x39, 0xd6, 0x72, 0x96, 0x65, 0x8d, 0xe5, 0x6f, 0x56, 0xea, 0x56, 0x5e, 0x56, 0x12, 0xab, 0x35, 0x56, 0x67, 0xad, 0xde, 0x59, 0xdb, 0x58, 0xa7, 0x58, 0x7f, 0x67, 0x5d, 0x67, 0xdd, 0x61, 0xa3, 0x6f, 0x13, 0x65, 0x53, 0x6c, 0x53, 0x63, 0x73, 0xcf, 0x96, 0x6d, 0x1b, 0x60, 0x9b, 0x6f, 0x5b, 0x65, 0x7b, 0xdd, 0x8e, 0x6e, 0xe7, 0x65, 0x97, 0x63, 0xb7, 0xd1, 0xee, 0x8a, 0x3d, 0x6e, 0xef, 0x6e, 0x2f, 0xb1, 0xaf, 0xb4, 0xbf, 0xec, 0x80, 0x3b, 0x78, 0x38, 0x48, 0x1d, 0x36, 0x3a, 0xb4, 0x8e, 0xa0, 0x8d, 0xf0, 0x1e, 0x21, 0x1b, 0x51, 0x35, 0xe2, 0x96, 0x23, 0xcb, 0x31, 0xc8, 0xb1, 0xc8, 0xb1, 0xc6, 0xf1, 0xe1, 0x48, 0xde, 0xc8, 0x98, 0x91, 0x0b, 0x46, 0xd6, 0x8d, 0x7c, 0x31, 0xca, 0x72, 0x54, 0xda, 0xa8, 0x15, 0xa3, 0xce, 0x8e, 0xfa, 0xe2, 0xe4, 0xee, 0x94, 0xeb, 0xb4, 0xcd, 0xe9, 0xae, 0xb3, 0x8e, 0xf3, 0x18, 0xe7, 0x05, 0xce, 0x0d, 0xce, 0xaf, 0x5c, 0xec, 0x5d, 0x84, 0x2e, 0x95, 0x2e, 0xd7, 0x5d, 0xd9, 0xae, 0xe1, 0xae, 0x73, 0x5d, 0xeb, 0x5d, 0x5f, 0xba, 0x39, 0xb8, 0x89, 0xdd, 0x36, 0xb9, 0xdd, 0x76, 0xe7, 0xba, 0x8f, 0x75, 0xff, 0xce, 0xbd, 0xc9, 0xfd, 0xb3, 0x87, 0xa7, 0x87, 0xc2, 0x63, 0xaf, 0x47, 0xa7, 0xa7, 0xa5, 0x67, 0xba, 0xe7, 0x06, 0xcf, 0x5b, 0x5e, 0xba, 0x5e, 0x71, 0x5e, 0x4b, 0xbc, 0xce, 0x79, 0xd3, 0xbc, 0x83, 0xbd, 0xe7, 0x7a, 0x1f, 0xf5, 0xfe, 0xe0, 0xe3, 0xe1, 0x53, 0xe8, 0x73, 0xc0, 0xe7, 0x2f, 0x5f, 0x47, 0xdf, 0x1c, 0xdf, 0x5d, 0xbe, 0x1d, 0xa3, 0x6d, 0x46, 0x8b, 0x47, 0x6f, 0x1b, 0xfd, 0xd8, 0xcf, 0xdc, 0x4f, 0xe0, 0xb7, 0xc5, 0xaf, 0xcd, 0x9f, 0xef, 0x9f, 0xee, 0xff, 0xa3, 0x7f, 0x5b, 0x80, 0x59, 0x80, 0x20, 0xa0, 0x2a, 0xe0, 0x51, 0xa0, 0x45, 0xa0, 0x28, 0x70, 0x7b, 0xe0, 0xd3, 0x20, 0xbb, 0xa0, 0xec, 0xa0, 0xdd, 0x41, 0x2f, 0x82, 0x9d, 0x82, 0x15, 0xc1, 0x87, 0x83, 0xdf, 0x85, 0xf8, 0x84, 0xcc, 0x0e, 0x69, 0x0c, 0x25, 0x42, 0x23, 0x42, 0x4b, 0x43, 0x5b, 0xc2, 0x74, 0xc2, 0x92, 0xc2, 0xd6, 0x87, 0x3d, 0x08, 0x37, 0x0f, 0xcf, 0x0a, 0xaf, 0x09, 0xef, 0x8e, 0x70, 0x8f, 0x98, 0x19, 0xd1, 0x18, 0x49, 0x8b, 0x8c, 0x8e, 0x5c, 0x11, 0x79, 0x2b, 0xca, 0x38, 0x4a, 0x18, 0x55, 0x1d, 0xd5, 0x3d, 0xc6, 0x73, 0xcc, 0xec, 0x31, 0xcd, 0xd1, 0xac, 0xe8, 0x84, 0xe8, 0xf5, 0xd1, 0x8f, 0x62, 0xec, 0x63, 0x14, 0x31, 0x0d, 0x63, 0xf1, 0xb1, 0x63, 0xc6, 0xae, 0x1c, 0x7b, 0x6f, 0x9c, 0xd5, 0x38, 0xd9, 0xb8, 0xba, 0x58, 0x88, 0x8d, 0x8a, 0x5d, 0x19, 0x7b, 0x3f, 0xce, 0x26, 0x2e, 0x3f, 0xee, 0x97, 0xf1, 0xf4, 0xf1, 0x71, 0xe3, 0x2b, 0xc7, 0x3f, 0x89, 0x77, 0x8e, 0x9f, 0x15, 0x7f, 0x36, 0x81, 0x9b, 0x30, 0x25, 0x61, 0x57, 0xc2, 0xdb, 0xc4, 0xe0, 0xc4, 0x65, 0x89, 0x77, 0x93, 0x6c, 0x93, 0x94, 0x49, 0x4d, 0xc9, 0x9a, 0xc9, 0x13, 0x93, 0xab, 0x93, 0xdf, 0xa5, 0x84, 0xa6, 0x94, 0xa7, 0xb4, 0x4d, 0x18, 0x35, 0x61, 0xf6, 0x84, 0x8b, 0xa9, 0x86, 0xa9, 0xd2, 0xd4, 0xfa, 0x34, 0x46, 0x5a, 0x72, 0xda, 0xf6, 0xb4, 0x9e, 0x6f, 0xc2, 0xbe, 0x59, 0xfd, 0x4d, 0xfb, 0x44, 0xf7, 0x89, 0x25, 0x13, 0x6f, 0x4e, 0xb2, 0x99, 0x34, 0x7d, 0xd2, 0xf9, 0xc9, 0x86, 0x93, 0x73, 0x27, 0x1f, 0x9b, 0xa2, 0x39, 0x45, 0x30, 0xe5, 0x60, 0x3a, 0x2d, 0x3d, 0x25, 0x7d, 0x57, 0xfa, 0x27, 0x41, 0xac, 0xa0, 0x4a, 0xd0, 0x93, 0x11, 0x95, 0xb1, 0x21, 0xa3, 0x5b, 0x18, 0x22, 0x5c, 0x23, 0x7c, 0x2e, 0x0a, 0x14, 0xad, 0x12, 0x75, 0x8a, 0xfd, 0xc4, 0xe5, 0xe2, 0xa7, 0x99, 0x7e, 0x99, 0xe5, 0x99, 0x1d, 0x59, 0x7e, 0x59, 0x2b, 0xb3, 0x3a, 0x25, 0x01, 0x92, 0x0a, 0x49, 0x97, 0x34, 0x44, 0xba, 0x5e, 0xfa, 0x32, 0x3b, 0x32, 0x7b, 0x73, 0xf6, 0xbb, 0x9c, 0xd8, 0x9c, 0x1d, 0x39, 0x7d, 0xb9, 0x29, 0xb9, 0xfb, 0xf2, 0xd4, 0xf2, 0xd2, 0xf3, 0x8e, 0xc8, 0x74, 0x64, 0x39, 0xb2, 0xe6, 0xa9, 0x26, 0x53, 0xa7, 0x4f, 0x6d, 0x95, 0x3b, 0xc8, 0x4b, 0xe4, 0x6d, 0xf9, 0x3e, 0xf9, 0xab, 0xf3, 0xbb, 0x15, 0xd1, 0x8a, 0xed, 0x05, 0x58, 0xc1, 0xa4, 0x82, 0xfa, 0x42, 0x5d, 0xb4, 0x79, 0xbe, 0xa4, 0xb4, 0x55, 0x7e, 0xab, 0x7c, 0x58, 0xe4, 0x5f, 0x54, 0x59, 0xf4, 0x7e, 0x5a, 0xf2, 0xb4, 0x83, 0xd3, 0xb5, 0xa7, 0xcb, 0xa6, 0x5f, 0x9a, 0x61, 0x3f, 0x63, 0xf1, 0x8c, 0xa7, 0xc5, 0xe1, 0xc5, 0x3f, 0xcd, 0x24, 0x67, 0x0a, 0x67, 0x36, 0xcd, 0x32, 0x9b, 0x35, 0x7f, 0xd6, 0xc3, 0xd9, 0x41, 0xb3, 0xb7, 0xcc, 0xc1, 0xe6, 0x64, 0xcc, 0x69, 0x9a, 0x6b, 0x31, 0x77, 0xd1, 0xdc, 0xf6, 0x79, 0x11, 0xf3, 0x76, 0xce, 0x67, 0xce, 0xcf, 0x99, 0xff, 0xeb, 0x02, 0xa7, 0x05, 0xe5, 0x0b, 0xde, 0x2c, 0x4c, 0x59, 0xd8, 0xb0, 0xc8, 0x78, 0xd1, 0xbc, 0x45, 0x8f, 0xbf, 0x8d, 0xf8, 0xb6, 0xa6, 0x84, 0x53, 0xa2, 0x28, 0xb9, 0xf5, 0x9d, 0xef, 0x77, 0x9b, 0xbf, 0x27, 0xbf, 0x97, 0x7e, 0xdf, 0xb2, 0xd8, 0x75, 0xf1, 0xba, 0xc5, 0x5f, 0x4a, 0x45, 0xa5, 0x17, 0xca, 0x9c, 0xca, 0x2a, 0xca, 0x3e, 0x2d, 0x11, 0x2e, 0xb9, 0xf0, 0x83, 0xf3, 0x0f, 0x6b, 0x7f, 0xe8, 0x5b, 0x9a, 0xb9, 0xb4, 0x65, 0x99, 0xc7, 0xb2, 0x4d, 0xcb, 0xe9, 0xcb, 0x65, 0xcb, 0x6f, 0xae, 0x08, 0x58, 0xb1, 0xb3, 0x5c, 0xbb, 0xbc, 0xb8, 0xfc, 0xf1, 0xca, 0xb1, 0x2b, 0x6b, 0x57, 0xf1, 0x57, 0x95, 0xae, 0x7a, 0xb3, 0x7a, 0xca, 0xea, 0xf3, 0x15, 0x6e, 0x15, 0x9b, 0xd7, 0x30, 0xd7, 0x28, 0xd7, 0xb4, 0xad, 0x8d, 0x59, 0x5b, 0xbf, 0xce, 0x72, 0xdd, 0xf2, 0x75, 0x9f, 0xd6, 0x4b, 0xd6, 0xdf, 0xa8, 0x0c, 0xae, 0xdc, 0xb7, 0xc1, 0x68, 0xc3, 0xe2, 0x0d, 0xef, 0x36, 0x8a, 0x36, 0x5e, 0xdd, 0x14, 0xb8, 0x69, 0xef, 0x66, 0xe3, 0xcd, 0x65, 0x9b, 0x3f, 0xfe, 0x28, 0xfd, 0xf1, 0xf6, 0x96, 0x88, 0x2d, 0xb5, 0x55, 0xd6, 0x55, 0x15, 0x5b, 0xe9, 0x5b, 0x8b, 0xb6, 0x3e, 0xd9, 0x96, 0xbc, 0xed, 0xec, 0x4f, 0x5e, 0x3f, 0x55, 0x6f, 0x37, 0xdc, 0x5e, 0xb6, 0xfd, 0xf3, 0x0e, 0xd9, 0x8e, 0xb6, 0x9d, 0xf1, 0x3b, 0x9b, 0xab, 0x3d, 0xab, 0xab, 0x77, 0x19, 0xed, 0x5a, 0x56, 0x83, 0xd7, 0x28, 0x6b, 0x3a, 0x77, 0x4f, 0xdc, 0x7d, 0x65, 0x4f, 0xe8, 0x9e, 0xfa, 0xbd, 0x8e, 0x7b, 0xb7, 0xec, 0xe3, 0xed, 0x2b, 0xdb, 0x0f, 0xfb, 0x95, 0xfb, 0x9f, 0xfd, 0x9c, 0xfe, 0xf3, 0xcd, 0x03, 0xd1, 0x07, 0x9a, 0x0e, 0x7a, 0x1d, 0xdc, 0x7b, 0xc8, 0xea, 0xd0, 0x86, 0xc3, 0xdc, 0xc3, 0xa5, 0xb5, 0x58, 0xed, 0x8c, 0xda, 0xee, 0x3a, 0x49, 0x5d, 0x5b, 0x7d, 0x6a, 0x7d, 0xeb, 0x91, 0x31, 0x47, 0x9a, 0x1a, 0x7c, 0x1b, 0x0e, 0xff, 0x32, 0xf2, 0x97, 0x1d, 0x47, 0xcd, 0x8e, 0x56, 0x1e, 0xd3, 0x3b, 0xb6, 0xec, 0x38, 0xf3, 0xf8, 0xa2, 0xe3, 0x7d, 0x27, 0x8a, 0x4f, 0xf4, 0x34, 0xca, 0x1b, 0xbb, 0x4e, 0x66, 0x9d, 0x7c, 0xdc, 0x34, 0xa5, 0xe9, 0xee, 0xa9, 0x09, 0xa7, 0xae, 0x37, 0x8f, 0x6f, 0x6e, 0x39, 0x1d, 0x7d, 0xfa, 0xdc, 0x99, 0xf0, 0x33, 0xa7, 0xce, 0x06, 0x9d, 0x3d, 0x71, 0xce, 0xef, 0xdc, 0xd1, 0xf3, 0x3e, 0xe7, 0x8f, 0x5c, 0xf0, 0xba, 0x50, 0x77, 0xd1, 0xe3, 0x62, 0xed, 0x25, 0xf7, 0x4b, 0x87, 0x7f, 0x75, 0xff, 0xf5, 0x70, 0x8b, 0x47, 0x4b, 0xed, 0x65, 0xcf, 0xcb, 0xf5, 0x57, 0xbc, 0xaf, 0x34, 0xb4, 0x8e, 0x6e, 0x3d, 0x7e, 0x35, 0xe0, 0xea, 0xc9, 0x6b, 0xa1, 0xd7, 0xce, 0x5c, 0x8f, 0xba, 0x7e, 0xf1, 0xc6, 0xb8, 0x1b, 0xad, 0x37, 0x93, 0x6e, 0xde, 0xbe, 0x35, 0xf1, 0x56, 0xdb, 0x6d, 0xd1, 0xed, 0x8e, 0x3b, 0xb9, 0x77, 0x5e, 0xfe, 0x56, 0xf4, 0x5b, 0xef, 0xdd, 0x79, 0xf7, 0x68, 0xf7, 0x4a, 0xef, 0x6b, 0xdd, 0xaf, 0x78, 0x60, 0xf4, 0xa0, 0xea, 0x77, 0xbb, 0xdf, 0xf7, 0xb5, 0x79, 0xb4, 0x1d, 0x7b, 0x18, 0xfa, 0xf0, 0xd2, 0xa3, 0x84, 0x47, 0x77, 0x1f, 0x0b, 0x1f, 0x3f, 0xff, 0xa3, 0xe0, 0x8f, 0x4f, 0xed, 0x8b, 0x9e, 0xb0, 0x9f, 0x54, 0x3c, 0x35, 0x7d, 0x5a, 0xdd, 0xe1, 0xd2, 0x71, 0xb4, 0x33, 0xbc, 0xf3, 0xca, 0xb3, 0x6f, 0x9e, 0xb5, 0x3f, 0x97, 0x3f, 0xef, 0xed, 0x2a, 0xf9, 0x53, 0xfb, 0xcf, 0x0d, 0x2f, 0x6c, 0x5f, 0x1c, 0xfa, 0x2b, 0xf0, 0xaf, 0x4b, 0xdd, 0x13, 0xba, 0xdb, 0x5f, 0x2a, 0x5e, 0xf6, 0xbd, 0x5a, 0xf2, 0xda, 0xe0, 0xf5, 0x8e, 0x37, 0x6e, 0x6f, 0x9a, 0x7a, 0xe2, 0x7a, 0x1e, 0xbc, 0xcd, 0x7b, 0xdb, 0xfb, 0xae, 0xf4, 0xbd, 0xc1, 0xfb, 0x9d, 0x1f, 0xbc, 0x3e, 0x9c, 0xfd, 0x98, 0xf2, 0xf1, 0x69, 0xef, 0xb4, 0x4f, 0x8c, 0x4f, 0x6b, 0x3f, 0xdb, 0x7d, 0x6e, 0xf8, 0x12, 0xfd, 0xe5, 0x5e, 0x5f, 0x5e, 0x5f, 0x9f, 0x5c, 0xa0, 0x10, 0xa8, 0xf6, 0x02, 0x04, 0xea, 0xf1, 0xcc, 0x4c, 0x80, 0x57, 0x3b, 0x00, 0xd8, 0xa9, 0x68, 0xef, 0x70, 0x05, 0x80, 0xc9, 0xe9, 0x3f, 0x73, 0xa9, 0x3c, 0xb0, 0xfe, 0x73, 0x22, 0xc2, 0xd8, 0x40, 0xa3, 0xe8, 0x7f, 0xe0, 0xfe, 0x73, 0x19, 0x65, 0x40, 0x7b, 0x08, 0xd8, 0x11, 0x08, 0x90, 0x34, 0x0f, 0x20, 0xa6, 0x11, 0x60, 0x13, 0x6a, 0x56, 0x08, 0xb3, 0xd0, 0x9d, 0xda, 0x7e, 0x27, 0x06, 0x02, 0xee, 0xea, 0x3a, 0xd4, 0x10, 0x43, 0x5d, 0x05, 0x99, 0xae, 0x2e, 0x2a, 0x80, 0xb1, 0x14, 0x68, 0x6b, 0xf2, 0xbe, 0xaf, 0xef, 0xb5, 0x31, 0x00, 0xa3, 0x01, 0xe0, 0xb3, 0xa2, 0xaf, 0xaf, 0x77, 0x63, 0x5f, 0xdf, 0xe7, 0x6d, 0x68, 0xaf, 0x7e, 0x07, 0xa0, 0x31, 0xbf, 0xff, 0xac, 0x47, 0x79, 0x53, 0x67, 0xc8, 0x1f, 0xd1, 0x7e, 0x1e, 0xe0, 0x7c, 0xcb, 0x92, 0x79, 0xd4, 0xfd, 0xef, 0xd7, 0xff, 0x00, 0x53, 0x9d, 0x6a, 0xc0, 0x3e, 0x1f, 0x78, 0xfa, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01, 0x49, 0x52, 0x24, 0xf0, 0x00, 0x00, 0x01, 0x9c, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x39, 0x30, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc1, 0xe2, 0xd2, 0xc6, 0x00, 0x00, 0x02, 0x01, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xbd, 0x96, 0xcf, 0x2b, 0x05, 0x51, 0x14, 0xc7, 0x1f, 0x3d, 0xf2, 0x33, 0x0b, 0x85, 0x52, 0xb6, 0x42, 0xc4, 0x42, 0xd6, 0x96, 0x8a, 0x12, 0x0b, 0xca, 0x1f, 0x41, 0x42, 0xb1, 0x61, 0x85, 0x35, 0x29, 0x85, 0x94, 0x8d, 0x62, 0x69, 0x23, 0x24, 0x29, 0x65, 0x4b, 0x51, 0x16, 0x44, 0x84, 0x2c, 0x94, 0x84, 0xfc, 0xf6, 0x39, 0xf5, 0x4e, 0x6e, 0xd3, 0x1b, 0xef, 0xde, 0x37, 0x33, 0x4e, 0x7d, 0x3b, 0x77, 0xe6, 0x9e, 0x73, 0x3e, 0x77, 0xee, 0xcc, 0xdc, 0x7b, 0x63, 0xb1, 0x58, 0x6c, 0x0a, 0x55, 0xa1, 0x7f, 0xb1, 0xcc, 0x04, 0xe5, 0x10, 0x3f, 0x8d, 0x8a, 0xff, 0x83, 0xda, 0x02, 0xe4, 0x3b, 0xa1, 0x7b, 0x7c, 0x1f, 0xca, 0x42, 0x91, 0x59, 0x2e, 0x95, 0x5f, 0x90, 0x42, 0xc5, 0x9f, 0xa0, 0x36, 0x14, 0x99, 0xad, 0x53, 0xd9, 0x04, 0x6a, 0x7b, 0x8b, 0xfb, 0xb5, 0x51, 0x50, 0x7b, 0x7d, 0x80, 0x02, 0xfe, 0x40, 0xb3, 0xa8, 0x04, 0x85, 0x66, 0x95, 0x54, 0xd2, 0xa7, 0xf2, 0xf3, 0x0f, 0xc4, 0x0c, 0xa2, 0xec, 0xb0, 0xa8, 0x67, 0x16, 0x50, 0x19, 0xcc, 0x29, 0xea, 0x08, 0x03, 0x3a, 0x63, 0x09, 0xd4, 0x19, 0xd8, 0x21, 0xbe, 0x21, 0x08, 0x58, 0xbe, 0x4a, 0x2d, 0x66, 0xeb, 0x3f, 0xc9, 0x59, 0x40, 0x65, 0xe9, 0x80, 0xf3, 0x49, 0x7a, 0x45, 0xb6, 0x30, 0x33, 0xee, 0x91, 0xbc, 0x11, 0x94, 0x83, 0x9c, 0x6c, 0x93, 0x68, 0xb3, 0x90, 0x6b, 0xfb, 0x9c, 0xfc, 0x2e, 0x17, 0x62, 0x7f, 0x40, 0xa0, 0x0e, 0x70, 0x8f, 0x3a, 0x8d, 0x36, 0xe0, 0xea, 0x90, 0x80, 0x02, 0xfe, 0x42, 0x4b, 0xa8, 0x1c, 0xfd, 0x69, 0x17, 0xf4, 0xea, 0x48, 0xc3, 0xf0, 0x4f, 0xd4, 0x1b, 0x45, 0x79, 0x7e, 0x54, 0x59, 0x55, 0xc2, 0x00, 0x79, 0x6b, 0x5c, 0x52, 0xb7, 0x47, 0xb7, 0x27, 0x13, 0x2e, 0xeb, 0x6a, 0x14, 0x56, 0x44, 0xd1, 0xe7, 0x64, 0x85, 0x0b, 0xb9, 0xf9, 0x86, 0xbc, 0x23, 0x0c, 0x72, 0x7d, 0x4c, 0x3d, 0x59, 0x3e, 0x7d, 0x6d, 0x9b, 0x9e, 0x20, 0x00, 0x33, 0x77, 0x95, 0x5a, 0x05, 0xbe, 0xa4, 0x44, 0xc7, 0x50, 0x08, 0x40, 0xd9, 0x65, 0x64, 0xb1, 0xb7, 0x32, 0xd9, 0x03, 0xcd, 0x51, 0xba, 0xb6, 0xef, 0xc8, 0x6f, 0xb6, 0x22, 0x19, 0x41, 0x57, 0x69, 0x42, 0xe5, 0xf4, 0x50, 0x63, 0xd4, 0xb1, 0x6e, 0xce, 0xa7, 0x09, 0x94, 0xd9, 0x90, 0x6f, 0xc0, 0xf9, 0x5c, 0xd4, 0x19, 0x00, 0x28, 0xd0, 0x39, 0xe4, 0x64, 0xf2, 0xdf, 0xbc, 0x23, 0xd7, 0xf7, 0x67, 0xc6, 0xcb, 0xda, 0xec, 0x64, 0xbb, 0x44, 0x9b, 0x05, 0xbc, 0xed, 0x0d, 0xfa, 0xff, 0xda, 0xb8, 0x65, 0xbf, 0x6c, 0x75, 0x21, 0x0e, 0xfb, 0x00, 0x65, 0x61, 0x1e, 0x47, 0xb2, 0x52, 0x89, 0xd6, 0x90, 0x77, 0x30, 0x7a, 0x2d, 0x7b, 0x65, 0x1d, 0xb2, 0xb2, 0x7a, 0xa2, 0x34, 0x51, 0xbd, 0x1c, 0xa6, 0xda, 0x3d, 0xd9, 0xf2, 0x63, 0x1f, 0x24, 0x89, 0xd5, 0x1c, 0xd9, 0x10, 0x4a, 0x3d, 0x39, 0x49, 0x2f, 0x33, 0xb8, 0x7b, 0x8d, 0x34, 0xf1, 0x88, 0xb6, 0xdf, 0x12, 0x55, 0x41, 0xdf, 0xad, 0x11, 0xab, 0x39, 0xea, 0xf7, 0xe9, 0xb3, 0x3a, 0x11, 0x2c, 0x26, 0x8a, 0xac, 0xe0, 0x53, 0x2d, 0x51, 0x4d, 0xc4, 0xc8, 0x7f, 0xa8, 0x10, 0xaf, 0x9f, 0xa0, 0x2f, 0xa5, 0xc9, 0x91, 0x70, 0x20, 0x65, 0xd4, 0x6f, 0x40, 0x37, 0x4d, 0x2f, 0x48, 0xaf, 0x6f, 0x7e, 0xc3, 0xc2, 0x6d, 0x8d, 0xf9, 0x40, 0x65, 0xca, 0x23, 0x31, 0x79, 0xf7, 0xcb, 0x48, 0x9f, 0x4c, 0xbd, 0xd5, 0x94, 0xa6, 0x3b, 0xa2, 0x38, 0x89, 0x93, 0x48, 0x9e, 0x4a, 0xa6, 0x52, 0x60, 0xf1, 0x1f, 0x65, 0x5c, 0x9e, 0x8b, 0x0f, 0xbf, 0xa0, 0x23, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXHierarchyIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x50, 0x21, 0x2b, + 0x21, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xeb, 0x6b, 0x49, 0x00, 0x00, + 0x01, 0xe9, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x98, 0xbf, 0x2f, 0x04, 0x41, 0x14, 0xc7, + 0x77, 0xb9, 0x82, 0x88, 0x82, 0x56, 0x4f, 0x68, 0x88, 0x48, 0x88, 0x6b, 0x2e, 0x21, 0x41, 0xe9, + 0x3f, 0x50, 0x88, 0x46, 0xc5, 0x3f, 0xa0, 0xd2, 0x8a, 0x44, 0xab, 0xf0, 0x0f, 0xe8, 0x28, 0x50, + 0x9f, 0x46, 0xa3, 0x11, 0x09, 0x11, 0xc5, 0x35, 0x2a, 0x91, 0x08, 0x22, 0x7e, 0x9c, 0xcf, 0x3b, + 0x7b, 0xc9, 0x4e, 0x76, 0x2e, 0xe6, 0xe6, 0x47, 0xf6, 0x24, 0xfb, 0x92, 0x6f, 0x76, 0xe6, 0xcd, + 0x7b, 0xdf, 0x79, 0x6f, 0xde, 0xde, 0xcc, 0xec, 0xc5, 0xf5, 0x7a, 0x3d, 0x8e, 0xa2, 0x68, 0x0b, + 0x2c, 0x83, 0x21, 0xe0, 0x2a, 0x6f, 0x10, 0x9c, 0x80, 0xed, 0x38, 0x8e, 0xef, 0x5d, 0xc9, 0x8c, + 0xfd, 0x49, 0xa4, 0x0c, 0x42, 0xc8, 0x8e, 0x71, 0x10, 0x1e, 0x0c, 0x4b, 0x70, 0x2c, 0x79, 0xe0, + 0xd1, 0x51, 0x2c, 0xa2, 0xdc, 0xd4, 0x0d, 0xa4, 0x75, 0xac, 0xe0, 0x00, 0xfd, 0xf1, 0xb4, 0xce, + 0xb0, 0x5d, 0xa3, 0xe2, 0x77, 0x4d, 0x5b, 0x49, 0xa4, 0xa7, 0xd9, 0xf1, 0xfc, 0xfc, 0x93, 0x97, + 0x24, 0x76, 0x99, 0x73, 0x1d, 0x48, 0x1c, 0x6d, 0x0b, 0xfe, 0x97, 0x38, 0xcd, 0x90, 0xd0, 0x7b, + 0x57, 0xdb, 0xde, 0x9e, 0x1c, 0x08, 0xa2, 0x0f, 0xaa, 0x35, 0x60, 0x95, 0x44, 0x12, 0xc6, 0x04, + 0xcf, 0x05, 0x69, 0xe7, 0x96, 0x08, 0x73, 0x8f, 0x81, 0x5e, 0x09, 0xc2, 0x51, 0xa6, 0xc4, 0x3f, + 0xcf, 0x44, 0x1c, 0xe3, 0x57, 0xdd, 0x8b, 0x44, 0xd4, 0xf5, 0xc8, 0xbf, 0x57, 0x54, 0x24, 0xff, + 0x1a, 0xa8, 0x11, 0x48, 0x45, 0x5e, 0x54, 0x95, 0xb7, 0x5e, 0x28, 0x5e, 0x6d, 0x80, 0x92, 0xc8, + 0x91, 0x76, 0xc4, 0x5d, 0x79, 0xec, 0x4e, 0x61, 0xce, 0x50, 0xe2, 0x54, 0xbc, 0xe0, 0x70, 0xda, + 0xc0, 0xc5, 0xd7, 0xa5, 0xf1, 0x15, 0x2e, 0xb9, 0x34, 0xee, 0x99, 0x87, 0xe1, 0x6e, 0xd9, 0x38, + 0x55, 0x49, 0x46, 0xae, 0x0a, 0x82, 0x7f, 0x2b, 0xc5, 0xae, 0xd5, 0x69, 0xa5, 0x2b, 0x2a, 0xd2, + 0x69, 0x15, 0xd1, 0x5e, 0xa1, 0xd9, 0xc5, 0x46, 0x09, 0x74, 0x15, 0x94, 0x41, 0xb7, 0x65, 0xd0, + 0x5f, 0xf8, 0x55, 0xc1, 0x3e, 0x9b, 0xc9, 0xb5, 0x25, 0x87, 0xb1, 0x9b, 0x36, 0x11, 0xbc, 0x65, + 0xeb, 0x9c, 0x33, 0x66, 0x69, 0x6d, 0x38, 0xcd, 0x90, 0x7c, 0xfd, 0xcd, 0xb7, 0x36, 0xf1, 0x33, + 0x92, 0xf9, 0x8d, 0x50, 0x8d, 0x7e, 0xa8, 0x2b, 0x7e, 0xe8, 0x1b, 0x2c, 0x95, 0x84, 0xd3, 0x23, + 0x65, 0x96, 0x2a, 0x93, 0x08, 0x26, 0xf2, 0xe5, 0x66, 0xfb, 0x3a, 0x65, 0x67, 0xf8, 0xe5, 0x12, + 0xce, 0xa0, 0xa2, 0x4b, 0x24, 0xe8, 0x84, 0xa1, 0xc8, 0x8b, 0x44, 0x42, 0xad, 0xac, 0x2d, 0x6f, + 0x9e, 0x15, 0xb9, 0x25, 0xe8, 0x0f, 0xdb, 0xc0, 0x53, 0x7e, 0x57, 0xd2, 0xce, 0x2d, 0x11, 0xce, + 0x96, 0x27, 0xe6, 0x3f, 0x4c, 0x05, 0x64, 0xd3, 0x7c, 0xc0, 0xa9, 0xf1, 0x19, 0x22, 0xff, 0xfb, + 0x2a, 0x92, 0x6c, 0x95, 0x8f, 0x28, 0x5b, 0x9d, 0x31, 0x8a, 0xbd, 0x41, 0xe7, 0x13, 0x9b, 0x41, + 0x02, 0x7f, 0xd6, 0xd9, 0x32, 0xdf, 0x08, 0xfa, 0x49, 0x90, 0x89, 0x45, 0x67, 0x9f, 0xd2, 0xd5, + 0x68, 0x57, 0xe1, 0xfd, 0x4e, 0xe9, 0xd4, 0x26, 0xe4, 0x67, 0xc0, 0x97, 0x9c, 0xaa, 0xec, 0x61, + 0x7a, 0xda, 0x55, 0x20, 0x83, 0x61, 0xa6, 0x5b, 0x01, 0xb3, 0xc0, 0xf6, 0x4c, 0x91, 0x2b, 0xca, + 0x39, 0x38, 0x60, 0xd5, 0x6e, 0x78, 0x16, 0x62, 0xb2, 0x02, 0x3f, 0xb2, 0x15, 0xf7, 0xb1, 0x2c, + 0xc1, 0x90, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXCheckerPattern[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x03, 0x00, 0x00, 0x00, 0x6c, 0xbb, 0xce, 0xa4, 0x00, 0x00, 0x00, - 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00, 0x00, 0x01, 0x73, - 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0x1a, 0x18, - 0x18, 0xff, 0xff, 0xfd, 0x2c, 0xa7, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x74, 0x52, 0x4e, 0x53, 0x80, 0x80, - 0xa0, 0xa8, 0xd6, 0x53, 0x00, 0x00, 0x00, 0x11, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0xfe, 0xc0, - 0x80, 0x86, 0xfe, 0x30, 0xa0, 0x21, 0x00, 0xcf, 0x3f, 0x0b, 0x9b, 0xd8, 0xd3, 0xac, 0x83, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +static const u_int8_t FLEXHierarchyIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x59, 0xab, 0x87, + 0xe8, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x09, 0xb6, 0x65, 0x00, 0x00, + 0x02, 0x81, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9b, 0x3d, 0x4b, 0xc4, 0x40, 0x10, 0x86, + 0x8d, 0x1f, 0xa0, 0x88, 0x82, 0x95, 0x36, 0x5a, 0x9c, 0x82, 0xf8, 0x07, 0x2c, 0xc5, 0x4a, 0x2c, + 0xac, 0x6c, 0xfc, 0x05, 0x5a, 0x9d, 0x56, 0x76, 0x36, 0xd7, 0x58, 0xc8, 0x29, 0x36, 0xfe, 0x03, + 0x7b, 0xc5, 0x4a, 0x0b, 0x11, 0x3c, 0x6b, 0x41, 0xad, 0x04, 0x3f, 0x8a, 0x03, 0xf1, 0xaa, 0x43, + 0x94, 0x13, 0x44, 0x24, 0xbe, 0x03, 0x6e, 0x8a, 0x80, 0xbb, 0x99, 0x4b, 0x76, 0xb3, 0xe1, 0x66, + 0x60, 0x88, 0x31, 0xb3, 0xf3, 0xce, 0x3c, 0x6e, 0x72, 0xd9, 0xe4, 0x0c, 0xba, 0x60, 0x61, 0x18, + 0x8e, 0x60, 0xb3, 0x05, 0x9f, 0x83, 0x8f, 0xc1, 0x03, 0xb8, 0x6d, 0x0b, 0x21, 0xd0, 0x80, 0x5f, + 0xc2, 0xb7, 0x83, 0x20, 0x78, 0xb3, 0x2d, 0x98, 0x49, 0x7e, 0xc0, 0xba, 0x80, 0xe7, 0x69, 0xe7, + 0x99, 0x34, 0x62, 0x39, 0x49, 0x00, 0x42, 0xd3, 0xd0, 0xb8, 0xb7, 0xac, 0x93, 0x24, 0xfd, 0x14, + 0x66, 0xd7, 0x53, 0x92, 0xc0, 0xbc, 0x62, 0xba, 0x21, 0x3c, 0x99, 0x97, 0x78, 0x4c, 0xb7, 0x14, + 0xdb, 0xf7, 0x6e, 0xb7, 0x17, 0x15, 0xf5, 0x7b, 0x52, 0x15, 0xbb, 0x0e, 0x9c, 0x15, 0x8b, 0xa8, + 0x7d, 0x03, 0x4e, 0xa0, 0x07, 0x32, 0xec, 0xa3, 0x85, 0x5c, 0x0f, 0xf0, 0x3d, 0xcc, 0xf6, 0x9a, + 0xca, 0x4b, 0xb0, 0x0a, 0x69, 0x00, 0x35, 0x8f, 0xc2, 0x4f, 0x2d, 0x16, 0x3f, 0x83, 0xdc, 0x4b, + 0xd0, 0x99, 0x05, 0xb0, 0x6b, 0xd2, 0xa1, 0xd3, 0xb0, 0xa8, 0xb6, 0xe6, 0xa0, 0x70, 0xe2, 0xb3, + 0xaa, 0x74, 0x8a, 0x0c, 0xab, 0xa4, 0x9a, 0xb0, 0xbc, 0x8d, 0xae, 0xe9, 0x45, 0x86, 0xc5, 0xbe, + 0xc6, 0xb5, 0x09, 0x35, 0xd2, 0x29, 0x32, 0xac, 0x36, 0x7b, 0x6f, 0x7f, 0x98, 0xc0, 0x62, 0xb0, + 0x13, 0x58, 0x02, 0x8b, 0x41, 0x80, 0x11, 0x2a, 0x33, 0x4b, 0x60, 0x31, 0x08, 0x30, 0x42, 0x65, + 0x66, 0x09, 0x2c, 0x06, 0x01, 0x46, 0x28, 0xcd, 0x2c, 0x5a, 0x34, 0xfa, 0x60, 0xbe, 0xd4, 0xf1, + 0x2f, 0x0b, 0x82, 0x45, 0xab, 0x6b, 0x1f, 0xec, 0xd1, 0x87, 0x22, 0x74, 0x35, 0x74, 0x63, 0x45, + 0xfd, 0x8c, 0x80, 0x13, 0x5d, 0x90, 0x83, 0x63, 0x47, 0xa8, 0xa3, 0xee, 0x40, 0x27, 0x95, 0x84, + 0x7a, 0x44, 0xb3, 0x82, 0x2c, 0xeb, 0x70, 0x7a, 0x06, 0x3f, 0x0a, 0x77, 0xf9, 0x0c, 0xbe, 0x06, + 0xbd, 0x03, 0xb8, 0x98, 0x2d, 0x02, 0x78, 0xce, 0x74, 0x03, 0x77, 0x61, 0x57, 0xaa, 0x07, 0xba, + 0x66, 0x89, 0x25, 0x24, 0x20, 0xb0, 0x12, 0x82, 0xa2, 0x30, 0x81, 0x25, 0xb0, 0x18, 0x04, 0x18, + 0xa1, 0x32, 0xb3, 0x04, 0x16, 0x83, 0x00, 0x23, 0x54, 0xdd, 0x67, 0x69, 0x87, 0xe0, 0xf3, 0xb9, + 0x0f, 0x01, 0x13, 0xf0, 0x61, 0x6d, 0x60, 0xba, 0x83, 0xef, 0x18, 0x5e, 0xc7, 0xcd, 0xe9, 0x77, + 0xba, 0x34, 0xf6, 0x46, 0x1b, 0x61, 0x01, 0xd4, 0x26, 0xe4, 0x2b, 0xf0, 0x41, 0x7b, 0x65, 0x44, + 0x99, 0x5b, 0xd0, 0xab, 0x00, 0xd8, 0x6e, 0xf4, 0x1b, 0x8f, 0x7e, 0xd0, 0x5e, 0xb3, 0x50, 0x38, + 0xdd, 0xd1, 0x57, 0xe1, 0x2e, 0x40, 0x11, 0x16, 0xd2, 0xa9, 0xfe, 0xe9, 0xd2, 0xbe, 0x57, 0xa6, + 0x85, 0x85, 0x4a, 0x17, 0x72, 0xaa, 0x36, 0x2f, 0x5d, 0x6d, 0xbb, 0x26, 0x58, 0xe3, 0xda, 0xd1, + 0xf6, 0x0e, 0xe6, 0xa5, 0xab, 0xed, 0xc8, 0x04, 0xab, 0x47, 0x3b, 0xda, 0xde, 0xc1, 0xbc, 0x74, + 0xb5, 0x1d, 0x99, 0x60, 0x69, 0x07, 0x77, 0xda, 0x41, 0x81, 0xc5, 0xf8, 0x8b, 0x0b, 0x2c, 0x81, + 0xc5, 0x20, 0xc0, 0x08, 0x95, 0x99, 0xd5, 0x21, 0xb0, 0x9a, 0x8c, 0x3e, 0xd3, 0x84, 0x46, 0x3a, + 0x45, 0x9e, 0x59, 0x77, 0x69, 0x08, 0x30, 0xc6, 0xde, 0xaa, 0xd8, 0x22, 0xc3, 0xda, 0x41, 0x13, + 0x2f, 0xaa, 0x11, 0x4b, 0x5b, 0xfa, 0xaa, 0xf9, 0xbe, 0xca, 0x6d, 0x5a, 0x48, 0xff, 0xa8, 0x40, + 0xc7, 0x5b, 0xa3, 0x2e, 0x16, 0xdb, 0xaf, 0x58, 0x43, 0xd2, 0x77, 0xf8, 0x97, 0xe1, 0x25, 0x78, + 0xf4, 0x0d, 0xbd, 0x0c, 0x6a, 0xfd, 0x44, 0x0e, 0x7a, 0x9f, 0x7a, 0x0c, 0x9d, 0x2f, 0x95, 0xcf, + 0x04, 0xab, 0xae, 0x02, 0x1d, 0x6f, 0x13, 0xe9, 0xa2, 0x11, 0x7a, 0x8b, 0x7d, 0xe8, 0xaa, 0x36, + 0xd3, 0x69, 0x78, 0xe6, 0xaa, 0x90, 0x98, 0x4e, 0x5e, 0xba, 0xb1, 0x32, 0x98, 0xbb, 0x98, 0xea, + 0x65, 0x78, 0x13, 0xee, 0xc2, 0x48, 0xa7, 0xcc, 0x2c, 0xd1, 0x59, 0x78, 0xe2, 0x37, 0xcf, 0x68, + 0x82, 0xfe, 0x5b, 0x6c, 0xc8, 0x62, 0x65, 0x1f, 0x38, 0xad, 0x1a, 0x16, 0xf3, 0x4b, 0x6a, 0x97, + 0x04, 0x7e, 0x01, 0x1e, 0xdc, 0xbb, 0x6b, 0x41, 0x9a, 0x28, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRecentTabIcon[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x28, 0x08, 0x06, 0x00, 0x00, 0x00, 0x9b, 0xdc, 0x28, + 0xa4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x48, 0xca, 0xb9, 0xf5, 0x00, 0x00, + 0x02, 0x99, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xdd, 0x98, 0xcf, 0x6f, 0x0d, 0x51, 0x14, 0xc7, + 0x67, 0x8a, 0x60, 0x41, 0xfc, 0x4a, 0x10, 0x45, 0x35, 0x84, 0x26, 0x24, 0x62, 0x61, 0x41, 0xf0, + 0x22, 0x12, 0x1b, 0x61, 0x53, 0xec, 0x24, 0x76, 0x36, 0xfe, 0x00, 0x6b, 0x89, 0xa5, 0x85, 0xb5, + 0xb4, 0x76, 0x92, 0xb2, 0x22, 0xd6, 0x15, 0x0b, 0x56, 0x7e, 0x84, 0x1d, 0x41, 0xc2, 0x13, 0x21, + 0x0d, 0x0b, 0x91, 0x94, 0xb4, 0x9e, 0xcf, 0xf7, 0x71, 0xd3, 0xd3, 0xd7, 0x3b, 0xbd, 0xf7, 0xcd, + 0x9b, 0x3b, 0x1a, 0x27, 0xf9, 0x66, 0xce, 0x3d, 0x73, 0xee, 0xf7, 0x7c, 0xdf, 0xbd, 0xa7, 0x77, + 0x66, 0x9a, 0x65, 0x7f, 0xad, 0xd5, 0x6a, 0x9d, 0x01, 0xf7, 0xc1, 0x47, 0xd0, 0x8b, 0x4d, 0x33, + 0xf9, 0x2d, 0xb8, 0x07, 0x0e, 0x38, 0xfe, 0xa8, 0x2b, 0x13, 0xae, 0x82, 0x14, 0xf6, 0x0b, 0xd2, + 0x73, 0x31, 0x22, 0x72, 0x12, 0x77, 0x93, 0xf8, 0x0c, 0x2c, 0x32, 0x13, 0xbe, 0xe0, 0x4f, 0x9b, + 0x71, 0x37, 0xee, 0x52, 0x92, 0x57, 0x9a, 0x09, 0x13, 0xf8, 0x83, 0x79, 0x9e, 0x7f, 0x33, 0xb1, + 0xb9, 0x2e, 0x42, 0x2e, 0x9a, 0xa5, 0x78, 0x82, 0xbf, 0x69, 0x6e, 0x56, 0x77, 0x11, 0x38, 0xf6, + 0x82, 0x09, 0xc3, 0x7b, 0x28, 0xc4, 0xd0, 0x47, 0xc2, 0x76, 0x93, 0x74, 0x0d, 0xe5, 0x1f, 0xcc, + 0xb8, 0x94, 0x0b, 0x87, 0x56, 0xf8, 0xa6, 0x99, 0x6c, 0x6b, 0x98, 0xf0, 0x8c, 0x2b, 0x21, 0x2b, + 0x66, 0x86, 0x99, 0x96, 0xb1, 0x2a, 0xb3, 0x5c, 0xb6, 0x86, 0x97, 0x5f, 0x42, 0x16, 0x84, 0x2d, + 0x8e, 0x55, 0xc1, 0x7e, 0xef, 0x27, 0x77, 0x08, 0xa8, 0x87, 0x62, 0x7e, 0xc0, 0x61, 0xc3, 0x7d, + 0x9c, 0xf9, 0x6a, 0xe0, 0x16, 0xf8, 0x04, 0x5e, 0x82, 0x87, 0x6c, 0xe1, 0x14, 0xd7, 0x3f, 0x46, + 0xc2, 0x88, 0x69, 0xaa, 0x13, 0x2e, 0xee, 0xae, 0xdc, 0x1b, 0x00, 0xe3, 0x26, 0xa7, 0x2a, 0xf7, + 0x39, 0x44, 0xfb, 0x5c, 0x9d, 0x98, 0x5f, 0x76, 0x83, 0xe4, 0x86, 0x9b, 0x50, 0xe1, 0x75, 0x0f, + 0x5c, 0xb7, 0x11, 0xb3, 0x4c, 0x9c, 0xf3, 0x0a, 0x21, 0x49, 0x27, 0xe3, 0x11, 0x25, 0x26, 0xb2, + 0x6d, 0xf0, 0x9e, 0x15, 0xf7, 0xbc, 0x42, 0xb8, 0xaf, 0x9e, 0x48, 0x6d, 0xbb, 0x54, 0x20, 0x24, + 0x64, 0x4b, 0x6a, 0x15, 0xf0, 0x6f, 0x8e, 0x11, 0x12, 0x12, 0x5a, 0x85, 0xce, 0xf6, 0xa3, 0x25, + 0xfa, 0xcf, 0xd7, 0x53, 0xf1, 0x2e, 0xb1, 0xd8, 0x53, 0x78, 0x15, 0xb9, 0xc3, 0xa0, 0xb0, 0x5e, + 0xe1, 0x0d, 0x4f, 0x61, 0x1b, 0x6a, 0x72, 0x06, 0x9c, 0xb4, 0x81, 0x90, 0x4f, 0xe3, 0x6f, 0x20, + 0xa7, 0x51, 0x94, 0x57, 0x56, 0x48, 0x3f, 0xc4, 0x63, 0x90, 0xbe, 0x2b, 0x22, 0xee, 0x88, 0xaf, + 0x61, 0x7c, 0xb0, 0x23, 0x36, 0x6b, 0x58, 0x56, 0x88, 0x48, 0x4e, 0xcf, 0x62, 0xea, 0x71, 0x50, + 0x47, 0x33, 0x46, 0x49, 0xec, 0x65, 0x45, 0xee, 0x50, 0xa1, 0x19, 0x55, 0x25, 0xcb, 0x56, 0x93, + 0xa7, 0x66, 0x5d, 0x52, 0x94, 0x5f, 0x56, 0x88, 0x9a, 0xf5, 0x54, 0x11, 0xa9, 0x2f, 0x4e, 0x4f, + 0x6d, 0x24, 0xde, 0xf0, 0xdd, 0x53, 0xac, 0xac, 0x10, 0x35, 0xeb, 0x2d, 0xe6, 0xbf, 0x2f, 0x22, + 0xee, 0x88, 0x27, 0x6d, 0x56, 0x2d, 0x75, 0x65, 0xf6, 0xdf, 0x34, 0xab, 0x6f, 0x6b, 0x8e, 0xb2, + 0x4c, 0x5d, 0x3f, 0x2c, 0xcb, 0xf6, 0x48, 0x61, 0xb3, 0xd2, 0x3b, 0x0d, 0x84, 0x8c, 0x77, 0xbb, + 0x67, 0x12, 0xa2, 0xd7, 0x37, 0x67, 0xb9, 0x73, 0x02, 0x57, 0xd7, 0xac, 0x4d, 0x4f, 0xde, 0x31, + 0x4f, 0x2c, 0x18, 0x92, 0x90, 0xcf, 0x26, 0x6b, 0x87, 0xf1, 0x43, 0x6e, 0xa5, 0xcd, 0x2a, 0x21, + 0xaf, 0x4c, 0xc5, 0x4b, 0x2c, 0xad, 0xbe, 0xf2, 0x5e, 0x00, 0xbd, 0xd8, 0xae, 0x37, 0xf7, 0x92, + 0xba, 0x12, 0xa2, 0x13, 0xf2, 0x2b, 0xd0, 0xe9, 0xb7, 0x0e, 0x8c, 0x82, 0xda, 0xad, 0x8f, 0x13, + 0x52, 0x1f, 0x42, 0x17, 0xc0, 0xf7, 0xda, 0xab, 0x9b, 0x82, 0x5a, 0x91, 0x0c, 0x31, 0x63, 0x6c, + 0xc9, 0x23, 0xdc, 0xf3, 0x60, 0x27, 0xd0, 0xbb, 0x83, 0x1a, 0x77, 0x10, 0x6c, 0x05, 0xff, 0xd6, + 0x10, 0x77, 0x19, 0xa4, 0xb6, 0xf6, 0x37, 0xf2, 0x82, 0x39, 0x59, 0x43, 0x42, 0x7e, 0xd6, 0xb0, + 0x27, 0xed, 0x1a, 0x21, 0x21, 0x6f, 0x6a, 0x10, 0xd2, 0xae, 0x11, 0x12, 0xf2, 0x14, 0x21, 0xf6, + 0xe4, 0x4d, 0xa1, 0xeb, 0x71, 0x14, 0x29, 0x9d, 0x3a, 0x9a, 0xb0, 0x5b, 0x1f, 0x44, 0x89, 0x50, + 0x12, 0x22, 0x96, 0x83, 0x2b, 0x60, 0xb2, 0x42, 0x41, 0x53, 0x70, 0x5d, 0x07, 0x6b, 0x9d, 0x90, + 0xd8, 0x87, 0x9c, 0x04, 0xe9, 0xcc, 0x19, 0x00, 0xfd, 0x20, 0xb4, 0xa5, 0xa4, 0x78, 0x4d, 0xdb, + 0xac, 0xff, 0x8f, 0xbc, 0xe6, 0xec, 0xfa, 0x61, 0x33, 0x7e, 0x03, 0xf9, 0x2d, 0xce, 0xa7, 0xa9, + 0x35, 0x85, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRecentTabIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x28, 0x08, 0x06, 0x00, 0x00, 0x00, 0x9b, 0xdc, 0x28, + 0xa4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x48, 0xca, 0xb9, 0xf5, 0x00, 0x00, + 0x02, 0x99, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xdd, 0x98, 0xcf, 0x6f, 0x0d, 0x51, 0x14, 0xc7, + 0x67, 0x8a, 0x60, 0x41, 0xfc, 0x4a, 0x10, 0x45, 0x35, 0x84, 0x26, 0x24, 0x62, 0x61, 0x41, 0xf0, + 0x22, 0x12, 0x1b, 0x61, 0x53, 0xec, 0x24, 0x76, 0x36, 0xfe, 0x00, 0x6b, 0x89, 0xa5, 0x85, 0xb5, + 0xb4, 0x76, 0x92, 0xb2, 0x22, 0xd6, 0x15, 0x0b, 0x56, 0x7e, 0x84, 0x1d, 0x41, 0xc2, 0x13, 0x21, + 0x0d, 0x0b, 0x91, 0x94, 0xb4, 0x9e, 0xcf, 0xf7, 0x71, 0xd3, 0xd3, 0xd7, 0x3b, 0xbd, 0xf7, 0xcd, + 0x9b, 0x3b, 0x1a, 0x27, 0xf9, 0x66, 0xce, 0x3d, 0x73, 0xee, 0xf7, 0x7c, 0xdf, 0xbd, 0xa7, 0x77, + 0x66, 0x9a, 0x65, 0x7f, 0xad, 0xd5, 0x6a, 0x9d, 0x01, 0xf7, 0xc1, 0x47, 0xd0, 0x8b, 0x4d, 0x33, + 0xf9, 0x2d, 0xb8, 0x07, 0x0e, 0x38, 0xfe, 0xa8, 0x2b, 0x13, 0xae, 0x82, 0x14, 0xf6, 0x0b, 0xd2, + 0x73, 0x31, 0x22, 0x72, 0x12, 0x77, 0x93, 0xf8, 0x0c, 0x2c, 0x32, 0x13, 0xbe, 0xe0, 0x4f, 0x9b, + 0x71, 0x37, 0xee, 0x52, 0x92, 0x57, 0x9a, 0x09, 0x13, 0xf8, 0x83, 0x79, 0x9e, 0x7f, 0x33, 0xb1, + 0xb9, 0x2e, 0x42, 0x2e, 0x9a, 0xa5, 0x78, 0x82, 0xbf, 0x69, 0x6e, 0x56, 0x77, 0x11, 0x38, 0xf6, + 0x82, 0x09, 0xc3, 0x7b, 0x28, 0xc4, 0xd0, 0x47, 0xc2, 0x76, 0x93, 0x74, 0x0d, 0xe5, 0x1f, 0xcc, + 0xb8, 0x94, 0x0b, 0x87, 0x56, 0xf8, 0xa6, 0x99, 0x6c, 0x6b, 0x98, 0xf0, 0x8c, 0x2b, 0x21, 0x2b, + 0x66, 0x86, 0x99, 0x96, 0xb1, 0x2a, 0xb3, 0x5c, 0xb6, 0x86, 0x97, 0x5f, 0x42, 0x16, 0x84, 0x2d, + 0x8e, 0x55, 0xc1, 0x7e, 0xef, 0x27, 0x77, 0x08, 0xa8, 0x87, 0x62, 0x7e, 0xc0, 0x61, 0xc3, 0x7d, + 0x9c, 0xf9, 0x6a, 0xe0, 0x16, 0xf8, 0x04, 0x5e, 0x82, 0x87, 0x6c, 0xe1, 0x14, 0xd7, 0x3f, 0x46, + 0xc2, 0x88, 0x69, 0xaa, 0x13, 0x2e, 0xee, 0xae, 0xdc, 0x1b, 0x00, 0xe3, 0x26, 0xa7, 0x2a, 0xf7, + 0x39, 0x44, 0xfb, 0x5c, 0x9d, 0x98, 0x5f, 0x76, 0x83, 0xe4, 0x86, 0x9b, 0x50, 0xe1, 0x75, 0x0f, + 0x5c, 0xb7, 0x11, 0xb3, 0x4c, 0x9c, 0xf3, 0x0a, 0x21, 0x49, 0x27, 0xe3, 0x11, 0x25, 0x26, 0xb2, + 0x6d, 0xf0, 0x9e, 0x15, 0xf7, 0xbc, 0x42, 0xb8, 0xaf, 0x9e, 0x48, 0x6d, 0xbb, 0x54, 0x20, 0x24, + 0x64, 0x4b, 0x6a, 0x15, 0xf0, 0x6f, 0x8e, 0x11, 0x12, 0x12, 0x5a, 0x85, 0xce, 0xf6, 0xa3, 0x25, + 0xfa, 0xcf, 0xd7, 0x53, 0xf1, 0x2e, 0xb1, 0xd8, 0x53, 0x78, 0x15, 0xb9, 0xc3, 0xa0, 0xb0, 0x5e, + 0xe1, 0x0d, 0x4f, 0x61, 0x1b, 0x6a, 0x72, 0x06, 0x9c, 0xb4, 0x81, 0x90, 0x4f, 0xe3, 0x6f, 0x20, + 0xa7, 0x51, 0x94, 0x57, 0x56, 0x48, 0x3f, 0xc4, 0x63, 0x90, 0xbe, 0x2b, 0x22, 0xee, 0x88, 0xaf, + 0x61, 0x7c, 0xb0, 0x23, 0x36, 0x6b, 0x58, 0x56, 0x88, 0x48, 0x4e, 0xcf, 0x62, 0xea, 0x71, 0x50, + 0x47, 0x33, 0x46, 0x49, 0xec, 0x65, 0x45, 0xee, 0x50, 0xa1, 0x19, 0x55, 0x25, 0xcb, 0x56, 0x93, + 0xa7, 0x66, 0x5d, 0x52, 0x94, 0x5f, 0x56, 0x88, 0x9a, 0xf5, 0x54, 0x11, 0xa9, 0x2f, 0x4e, 0x4f, + 0x6d, 0x24, 0xde, 0xf0, 0xdd, 0x53, 0xac, 0xac, 0x10, 0x35, 0xeb, 0x2d, 0xe6, 0xbf, 0x2f, 0x22, + 0xee, 0x88, 0x27, 0x6d, 0x56, 0x2d, 0x75, 0x65, 0xf6, 0xdf, 0x34, 0xab, 0x6f, 0x6b, 0x8e, 0xb2, + 0x4c, 0x5d, 0x3f, 0x2c, 0xcb, 0xf6, 0x48, 0x61, 0xb3, 0xd2, 0x3b, 0x0d, 0x84, 0x8c, 0x77, 0xbb, + 0x67, 0x12, 0xa2, 0xd7, 0x37, 0x67, 0xb9, 0x73, 0x02, 0x57, 0xd7, 0xac, 0x4d, 0x4f, 0xde, 0x31, + 0x4f, 0x2c, 0x18, 0x92, 0x90, 0xcf, 0x26, 0x6b, 0x87, 0xf1, 0x43, 0x6e, 0xa5, 0xcd, 0x2a, 0x21, + 0xaf, 0x4c, 0xc5, 0x4b, 0x2c, 0xad, 0xbe, 0xf2, 0x5e, 0x00, 0xbd, 0xd8, 0xae, 0x37, 0xf7, 0x92, + 0xba, 0x12, 0xa2, 0x13, 0xf2, 0x2b, 0xd0, 0xe9, 0xb7, 0x0e, 0x8c, 0x82, 0xda, 0xad, 0x8f, 0x13, + 0x52, 0x1f, 0x42, 0x17, 0xc0, 0xf7, 0xda, 0xab, 0x9b, 0x82, 0x5a, 0x91, 0x0c, 0x31, 0x63, 0x6c, + 0xc9, 0x23, 0xdc, 0xf3, 0x60, 0x27, 0xd0, 0xbb, 0x83, 0x1a, 0x77, 0x10, 0x6c, 0x05, 0xff, 0xd6, + 0x10, 0x77, 0x19, 0xa4, 0xb6, 0xf6, 0x37, 0xf2, 0x82, 0x39, 0x59, 0x43, 0x42, 0x7e, 0xd6, 0xb0, + 0x27, 0xed, 0x1a, 0x21, 0x21, 0x6f, 0x6a, 0x10, 0xd2, 0xae, 0x11, 0x12, 0xf2, 0x14, 0x21, 0xf6, + 0xe4, 0x4d, 0xa1, 0xeb, 0x71, 0x14, 0x29, 0x9d, 0x3a, 0x9a, 0xb0, 0x5b, 0x1f, 0x44, 0x89, 0x50, + 0x12, 0x22, 0x96, 0x83, 0x2b, 0x60, 0xb2, 0x42, 0x41, 0x53, 0x70, 0x5d, 0x07, 0x6b, 0x9d, 0x90, + 0xd8, 0x87, 0x9c, 0x04, 0xe9, 0xcc, 0x19, 0x00, 0xfd, 0x20, 0xb4, 0xa5, 0xa4, 0x78, 0x4d, 0xdb, + 0xac, 0xff, 0x8f, 0xbc, 0xe6, 0xec, 0xfa, 0x61, 0x33, 0x7e, 0x03, 0xf9, 0x2d, 0xce, 0xa7, 0xa9, + 0x35, 0x85, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRecentTabIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x3c, 0x08, 0x06, 0x00, 0x00, 0x00, 0xcb, 0xf7, 0x82, + 0xff, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x5d, 0xda, 0x89, 0x00, 0x00, + 0x04, 0x11, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9a, 0xcb, 0x6f, 0x0d, 0x51, 0x1c, 0xc7, + 0x5d, 0x55, 0xb4, 0x44, 0x3c, 0x42, 0xbc, 0x42, 0x51, 0x8f, 0xa8, 0x56, 0xda, 0x84, 0x90, 0xc6, + 0x42, 0x54, 0x22, 0xc1, 0x86, 0x58, 0x49, 0x2c, 0x88, 0x34, 0x22, 0x65, 0xc3, 0xdf, 0x80, 0xa5, + 0xc4, 0x63, 0xd9, 0x74, 0x69, 0x61, 0x63, 0xd3, 0x04, 0xf1, 0x08, 0xb1, 0x13, 0x89, 0x54, 0x82, + 0xa6, 0x08, 0x8a, 0x8d, 0x44, 0x28, 0x25, 0x15, 0xd7, 0xe7, 0x7b, 0x73, 0x67, 0x32, 0x3d, 0x9d, + 0xa9, 0x39, 0x73, 0xe7, 0xdc, 0x19, 0xe5, 0x97, 0x7c, 0x73, 0xe6, 0x9c, 0x39, 0xbf, 0xdf, 0xf9, + 0x7e, 0xe7, 0xbc, 0xe6, 0xdc, 0xb9, 0x85, 0x49, 0x01, 0x2b, 0x16, 0x8b, 0xb5, 0x64, 0x8f, 0x81, + 0x6d, 0x60, 0x0d, 0x68, 0x04, 0xf5, 0xc0, 0x95, 0x7d, 0x24, 0xf0, 0xf3, 0x32, 0xae, 0x14, 0x0a, + 0x85, 0xde, 0x54, 0x1a, 0x42, 0x48, 0x3b, 0x78, 0x02, 0xb2, 0xb4, 0xab, 0x34, 0xbe, 0x28, 0xa9, + 0xa0, 0x82, 0x1c, 0x09, 0x30, 0x9f, 0x44, 0x4f, 0x68, 0xb6, 0xf2, 0x19, 0xdb, 0x4d, 0x7a, 0x68, + 0x67, 0x12, 0x0e, 0x93, 0xcb, 0x4e, 0xe7, 0x48, 0xf3, 0x20, 0x44, 0x74, 0x3a, 0x78, 0xb8, 0x07, + 0xca, 0xbc, 0xac, 0x92, 0x02, 0x8e, 0x75, 0x78, 0x7c, 0x05, 0xa5, 0x5e, 0x0a, 0x78, 0xdf, 0xe2, + 0xfa, 0x3a, 0xf8, 0x10, 0x28, 0x4b, 0xf3, 0xb2, 0x86, 0x60, 0x0d, 0xe0, 0x20, 0x58, 0x09, 0x82, + 0x76, 0x87, 0xde, 0xd9, 0x1e, 0x2c, 0x88, 0x75, 0x8d, 0x98, 0x66, 0x60, 0xda, 0xf9, 0x58, 0xce, + 0x29, 0x54, 0xa2, 0xe1, 0x3a, 0xd0, 0x67, 0x10, 0x18, 0x4c, 0x14, 0x9a, 0x20, 0xfb, 0x8c, 0x40, + 0xca, 0x2e, 0x4e, 0x14, 0x2c, 0xa1, 0x13, 0xed, 0x75, 0x86, 0x70, 0x98, 0x61, 0x1b, 0x4e, 0x73, + 0xc6, 0x24, 0x3e, 0x4c, 0x17, 0xbf, 0xb3, 0x0d, 0x54, 0x61, 0xfd, 0x81, 0x10, 0x7f, 0xeb, 0x55, + 0x4d, 0x62, 0xcc, 0xb9, 0xf2, 0x33, 0x24, 0xb0, 0xeb, 0xa2, 0x91, 0x90, 0x06, 0x4c, 0x5e, 0x21, + 0x55, 0x46, 0x17, 0x79, 0xab, 0xd9, 0xe8, 0xd2, 0xbf, 0x34, 0x37, 0xa1, 0xc4, 0x4c, 0x49, 0xda, + 0x09, 0x4c, 0x58, 0x0d, 0x03, 0x6d, 0x6e, 0x1b, 0x80, 0x5e, 0x7d, 0x96, 0x03, 0x2d, 0xb7, 0x49, + 0x6c, 0x4e, 0x88, 0x53, 0x37, 0x6d, 0x7c, 0x2b, 0x97, 0x17, 0x49, 0xdf, 0x03, 0x6d, 0xec, 0xcf, + 0x40, 0x2f, 0xf3, 0xda, 0xbb, 0x47, 0xb6, 0x6c, 0x38, 0x74, 0x81, 0xa0, 0x7d, 0xf6, 0xee, 0x45, + 0xa5, 0x54, 0x6e, 0x01, 0x0f, 0x82, 0x4e, 0x55, 0xbe, 0x7e, 0x45, 0x7b, 0x7b, 0x4d, 0x7e, 0xd6, + 0xc3, 0x8c, 0x20, 0x6d, 0x04, 0x79, 0x08, 0xb6, 0x9a, 0xc1, 0xaa, 0x98, 0xd7, 0x28, 0xb8, 0x06, + 0x97, 0xa3, 0xc1, 0x36, 0xad, 0xc4, 0xe0, 0xac, 0xa1, 0x75, 0x11, 0x24, 0x1e, 0x9e, 0xc1, 0xc6, + 0x53, 0xb8, 0x3e, 0x03, 0xa7, 0x79, 0x5e, 0x1c, 0x2b, 0x31, 0x38, 0xed, 0x06, 0x5b, 0x3c, 0xe7, + 0x1c, 0xa4, 0x12, 0x72, 0xd2, 0xe3, 0x61, 0x2b, 0xa6, 0xd9, 0x73, 0xcc, 0x51, 0xda, 0xe2, 0x71, + 0xb1, 0x15, 0xb3, 0xda, 0x73, 0xcc, 0x51, 0xea, 0x73, 0xb2, 0x15, 0xb3, 0x22, 0x47, 0x22, 0x3c, + 0x2a, 0x0d, 0xde, 0x85, 0xad, 0x98, 0x5a, 0xcf, 0x31, 0x47, 0xa9, 0xcf, 0xc9, 0x56, 0x4c, 0x8e, + 0x34, 0x8c, 0xa5, 0xe2, 0x6a, 0x89, 0xd5, 0x8e, 0x3d, 0x08, 0x94, 0x26, 0x35, 0x1d, 0xe5, 0xa7, + 0xdb, 0x38, 0xbb, 0x10, 0xa3, 0x37, 0x88, 0x56, 0x5e, 0x37, 0x5e, 0xd8, 0x10, 0x31, 0xeb, 0xb2, + 0x7f, 0xe8, 0x18, 0xaf, 0x93, 0xee, 0x26, 0xf3, 0x5e, 0x54, 0xde, 0xc5, 0x30, 0x1b, 0xa8, 0x54, + 0x88, 0xc8, 0x12, 0xe3, 0x13, 0x89, 0xde, 0x34, 0x62, 0x9b, 0x6d, 0xcf, 0xc4, 0x39, 0x63, 0xb4, + 0xf2, 0x54, 0x2f, 0xc0, 0xe0, 0x76, 0x6c, 0x16, 0xe1, 0x15, 0xd7, 0x51, 0xac, 0xdf, 0x07, 0x62, + 0x9b, 0xad, 0x98, 0xb8, 0x73, 0xe0, 0x38, 0x0c, 0x84, 0xaa, 0x9a, 0x8b, 0x61, 0x56, 0x55, 0x01, + 0xc1, 0xc6, 0xfe, 0x8b, 0x09, 0x3e, 0x8d, 0x3c, 0x5d, 0xdb, 0xce, 0x99, 0xb8, 0xdc, 0xbb, 0xa9, + 0x78, 0x0f, 0xc4, 0x9d, 0x63, 0x61, 0x71, 0x75, 0x7a, 0x3d, 0x01, 0x62, 0xff, 0xe4, 0xe4, 0x42, + 0xcc, 0x23, 0x96, 0xd5, 0xc3, 0x61, 0xec, 0x6c, 0xcb, 0x58, 0x15, 0xe7, 0xe2, 0xd3, 0x19, 0xd7, + 0xcf, 0xc5, 0x9c, 0x59, 0x05, 0x89, 0x25, 0x71, 0x09, 0x44, 0xd5, 0x23, 0x86, 0x7a, 0xa4, 0x35, + 0xea, 0x7e, 0x58, 0xb9, 0x8b, 0x9e, 0x99, 0x45, 0x43, 0x3a, 0xa3, 0xeb, 0xc7, 0x87, 0x4a, 0x6c, + 0x29, 0xce, 0x8a, 0x15, 0xdb, 0x5c, 0x88, 0x51, 0xe3, 0x8a, 0xbb, 0x3e, 0x36, 0x8b, 0x94, 0x2a, + 0xba, 0x18, 0x66, 0x29, 0x51, 0xb3, 0x0f, 0x33, 0xa1, 0xc4, 0xb8, 0x1a, 0x66, 0xbf, 0x78, 0xae, + 0xaf, 0x41, 0xd4, 0xd2, 0xac, 0x77, 0xbc, 0x65, 0x20, 0xd5, 0x87, 0xe9, 0x42, 0xcc, 0x17, 0x48, + 0x6e, 0x64, 0x79, 0x7e, 0x49, 0x1a, 0x69, 0x2c, 0x10, 0x3a, 0xbb, 0x3f, 0x06, 0x56, 0x67, 0x96, + 0xc8, 0x80, 0xdc, 0x48, 0xf5, 0xc9, 0x94, 0x1b, 0xea, 0xff, 0x93, 0x10, 0xd5, 0xa3, 0x4e, 0x3f, + 0x89, 0x7a, 0x2f, 0x35, 0x73, 0xd1, 0x33, 0x6d, 0x3c, 0xf5, 0x4b, 0x30, 0xbc, 0x0b, 0xc6, 0x1b, + 0x66, 0x1d, 0xdc, 0xd7, 0x2e, 0x9f, 0x9a, 0x49, 0xcc, 0x77, 0x23, 0x5a, 0x3d, 0x64, 0x6a, 0x79, + 0x72, 0x95, 0x7c, 0x33, 0xd1, 0x7f, 0x09, 0x84, 0xaa, 0x9a, 0x86, 0x99, 0xf9, 0xd5, 0x4a, 0xbf, + 0xe4, 0x6f, 0x8e, 0x60, 0x11, 0xf5, 0xa4, 0x23, 0xaa, 0x57, 0xb7, 0x58, 0x62, 0x34, 0x76, 0x4d, + 0xbb, 0x4c, 0xef, 0xac, 0x35, 0x0b, 0xf3, 0x9e, 0xd7, 0xa7, 0x73, 0x2d, 0x93, 0xfa, 0x86, 0xb9, + 0xd0, 0x20, 0xeb, 0x2d, 0xaf, 0xc1, 0x4f, 0xe7, 0xfa, 0x16, 0x33, 0xd3, 0xa8, 0x97, 0x75, 0x76, + 0x84, 0x29, 0x31, 0x55, 0x24, 0x4a, 0x67, 0x7a, 0x04, 0x1d, 0xe2, 0xba, 0x27, 0x6b, 0x56, 0x09, + 0xdb, 0x1f, 0x23, 0x46, 0xa2, 0x6e, 0x80, 0x1d, 0x09, 0x03, 0x66, 0xe9, 0xe6, 0x8b, 0x29, 0xed, + 0x33, 0x74, 0x93, 0x26, 0xf6, 0x2e, 0x70, 0x0a, 0x0c, 0x65, 0xc9, 0xac, 0x92, 0xb6, 0x4b, 0xc3, + 0x2c, 0x18, 0x80, 0x21, 0xa7, 0x5f, 0x12, 0xf5, 0x75, 0x4c, 0x7b, 0x80, 0x76, 0xe9, 0xe0, 0x49, + 0x6f, 0x0f, 0xf9, 0x05, 0x20, 0x4f, 0xe6, 0xf7, 0xcc, 0x18, 0x31, 0xe3, 0xb1, 0x44, 0xe8, 0x7d, + 0xee, 0xb7, 0x8f, 0x57, 0x27, 0x83, 0x7b, 0xbe, 0x98, 0xd2, 0x30, 0xcb, 0x80, 0x80, 0x93, 0x26, + 0xff, 0x69, 0x31, 0xda, 0x7b, 0xf2, 0x66, 0x3e, 0x27, 0xdb, 0x9e, 0x79, 0x93, 0x37, 0x25, 0xf0, + 0xf1, 0x39, 0xd9, 0x8a, 0xa9, 0xf4, 0x47, 0x0a, 0x17, 0xcf, 0xc2, 0xe7, 0x64, 0x2b, 0xe6, 0xa9, + 0x0b, 0x36, 0x15, 0xc6, 0xf4, 0x39, 0xd9, 0x2e, 0xcd, 0xd3, 0x68, 0xb8, 0x0f, 0x34, 0x56, 0x48, + 0x20, 0x2d, 0xf7, 0x61, 0x02, 0x35, 0xb1, 0xe9, 0x97, 0x4e, 0xb5, 0x56, 0x3d, 0x83, 0xd3, 0x0f, + 0x9c, 0xbb, 0xd2, 0x62, 0x92, 0x42, 0x9c, 0xb3, 0x9e, 0x90, 0xc4, 0xb1, 0xd8, 0x3c, 0xf7, 0x83, + 0xb7, 0x20, 0x2b, 0x1b, 0xa2, 0xe1, 0xd3, 0x40, 0x87, 0x4b, 0xdf, 0xac, 0x86, 0x99, 0xef, 0xc5, + 0x05, 0x81, 0x74, 0x14, 0x38, 0x02, 0x9a, 0x80, 0x5e, 0x7d, 0x1a, 0x40, 0x0d, 0x70, 0x61, 0x7a, + 0x77, 0xd4, 0x5f, 0xb4, 0xf4, 0xf7, 0x2c, 0x4d, 0xf8, 0x1e, 0x7a, 0xc4, 0x5f, 0xc5, 0xc8, 0x4f, + 0x3c, 0xfb, 0x0d, 0x29, 0x80, 0xc0, 0x68, 0xf7, 0x99, 0xb2, 0x13, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXMoveIcon[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x7a, 0x91, 0xda, + 0x8e, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x8e, 0x45, 0x3c, 0x00, 0x00, + 0x02, 0xa9, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x97, 0x3b, 0x68, 0x14, 0x51, 0x14, 0x86, + 0x77, 0x4c, 0x14, 0x1f, 0x60, 0x20, 0x22, 0x82, 0x8f, 0x80, 0x10, 0xd1, 0xa8, 0x08, 0x0a, 0x42, + 0x8a, 0x58, 0x18, 0x11, 0x8c, 0xa0, 0x95, 0x85, 0x69, 0xd2, 0x89, 0xa0, 0x8d, 0xd8, 0x58, 0x58, + 0x2b, 0xd8, 0x89, 0x95, 0x85, 0xd8, 0x68, 0x21, 0xd8, 0x88, 0x92, 0x20, 0x5a, 0xd9, 0x58, 0x85, + 0x24, 0x45, 0x50, 0x41, 0xc4, 0x80, 0x0a, 0xd1, 0x90, 0xd7, 0x82, 0x12, 0x0c, 0x71, 0xfd, 0x4e, + 0x9c, 0xbb, 0x9c, 0x3d, 0xf7, 0xcc, 0xce, 0xce, 0x82, 0x58, 0xb8, 0x17, 0x7e, 0xce, 0xeb, 0xff, + 0xcf, 0xbd, 0x73, 0x77, 0x76, 0xe6, 0x4e, 0xa9, 0xf4, 0x0f, 0x46, 0xa5, 0x52, 0x59, 0x03, 0x8e, + 0x8b, 0x6d, 0x7a, 0x7a, 0xc4, 0x9d, 0xe0, 0x04, 0x38, 0x07, 0xba, 0x41, 0xd2, 0x4c, 0x33, 0x74, + 0xb2, 0x98, 0xe7, 0x40, 0xc6, 0x30, 0x28, 0xd6, 0x07, 0xc1, 0x25, 0x30, 0x05, 0xec, 0x58, 0x24, + 0xf1, 0x00, 0x74, 0x16, 0x59, 0x18, 0xfc, 0x6b, 0xa6, 0xd1, 0xd5, 0x86, 0xf4, 0x88, 0xb6, 0x01, + 0xb9, 0x82, 0xbc, 0xf1, 0x05, 0xc2, 0xc9, 0x46, 0x9a, 0xc2, 0x3b, 0x02, 0x7e, 0x9a, 0x86, 0x4b, + 0xc4, 0x87, 0x72, 0xf5, 0x90, 0x5e, 0x19, 0x61, 0xbd, 0x50, 0x26, 0xd9, 0x57, 0xaf, 0x29, 0xf5, + 0x8d, 0xe0, 0x5d, 0x46, 0x93, 0x49, 0xf2, 0xeb, 0x33, 0xf5, 0x14, 0x07, 0x8d, 0x70, 0x8e, 0x58, + 0x7e, 0xba, 0x03, 0x60, 0x3b, 0x38, 0x0d, 0xec, 0x82, 0x5f, 0x66, 0x36, 0xa4, 0x00, 0xff, 0x2e, + 0xa8, 0x37, 0xee, 0xb8, 0x7a, 0x14, 0x6b, 0xc1, 0x67, 0xa5, 0xfc, 0x86, 0xbf, 0xcb, 0x92, 0xc9, + 0xc9, 0xcd, 0x79, 0x4f, 0xf1, 0xc4, 0x3d, 0x6b, 0x79, 0x12, 0x4b, 0xde, 0xf0, 0xb2, 0xc2, 0x53, + 0x91, 0x1e, 0x66, 0x8f, 0x61, 0x5f, 0x88, 0x48, 0x69, 0x02, 0x5e, 0x07, 0xf8, 0xaa, 0xf8, 0xb7, + 0x2d, 0x97, 0x5a, 0x3b, 0xf8, 0xa4, 0x38, 0xf5, 0xdc, 0x8f, 0xde, 0x73, 0x60, 0xbf, 0x69, 0xfa, + 0xd8, 0xc4, 0xd5, 0x30, 0x49, 0x92, 0x45, 0x82, 0x17, 0xd5, 0x44, 0xa9, 0x64, 0xb5, 0x52, 0x92, + 0xbf, 0xf5, 0xa4, 0xe2, 0xd4, 0x73, 0xdf, 0xb4, 0x3b, 0xd5, 0x1e, 0x95, 0x9b, 0x66, 0xd2, 0x05, + 0x15, 0x7b, 0xee, 0x5b, 0x95, 0x8c, 0x16, 0x84, 0x7e, 0x99, 0xfa, 0x00, 0xdb, 0xb2, 0x19, 0xdb, + 0x06, 0x7a, 0xc1, 0x08, 0x08, 0xa3, 0x1f, 0x67, 0x02, 0xac, 0xc0, 0x2d, 0x7b, 0x0b, 0xda, 0x19, + 0x98, 0xd8, 0x39, 0xe5, 0x67, 0xb9, 0xb3, 0xaa, 0xb0, 0x83, 0x89, 0xe9, 0x9b, 0x54, 0x54, 0x6e, + 0xd5, 0x95, 0xc9, 0xc4, 0xa1, 0xbe, 0x6a, 0x55, 0xbd, 0x4c, 0x6d, 0x3e, 0xc4, 0xde, 0x4f, 0x16, + 0x6a, 0xcd, 0xda, 0x62, 0x4f, 0x5e, 0x33, 0xcb, 0xdf, 0x58, 0x90, 0x99, 0xa2, 0x58, 0xd8, 0x5a, + 0x50, 0xde, 0x7e, 0xb5, 0x76, 0xa8, 0xb5, 0x43, 0x79, 0x3b, 0x90, 0x57, 0x6f, 0xdd, 0x43, 0xff, + 0xe5, 0x0e, 0x55, 0xdf, 0x43, 0xe9, 0xd5, 0x6f, 0xc8, 0xd9, 0x05, 0x5b, 0xaf, 0x7d, 0x5f, 0xf2, + 0xb2, 0xdb, 0x03, 0x9e, 0x80, 0x0f, 0x29, 0xca, 0xd8, 0x30, 0xe4, 0x68, 0x1a, 0xf2, 0xaf, 0xf1, + 0xfb, 0xed, 0x64, 0xe4, 0x0e, 0x06, 0x72, 0x6a, 0x0f, 0x5b, 0x8e, 0x8e, 0xe1, 0xc8, 0xc9, 0x33, + 0x8c, 0x1f, 0x38, 0xb5, 0xf7, 0x31, 0x89, 0xf3, 0xa1, 0xda, 0x80, 0x8d, 0x8e, 0x99, 0x68, 0xd6, + 0x81, 0x65, 0xa5, 0xbd, 0xa2, 0x17, 0x60, 0x7d, 0x78, 0x8f, 0x14, 0x77, 0xdc, 0xd6, 0xe5, 0x38, + 0x20, 0x47, 0xd6, 0x51, 0x45, 0xca, 0x72, 0x17, 0x28, 0x74, 0x45, 0x0d, 0x48, 0x90, 0x9f, 0x50, + 0xa2, 0x59, 0xfc, 0x2d, 0x19, 0xbc, 0x5e, 0x6a, 0xbf, 0x14, 0xf7, 0xbe, 0xc7, 0x93, 0x86, 0x7b, + 0xc1, 0x77, 0x45, 0xf4, 0xdc, 0x41, 0x57, 0xfc, 0x67, 0x41, 0x67, 0x8c, 0xe0, 0x3d, 0x71, 0x5f, + 0xe0, 0xe3, 0xb7, 0x01, 0xf9, 0x25, 0xe6, 0x41, 0x18, 0x4b, 0x38, 0xdd, 0x81, 0x13, 0x59, 0x8a, + 0x17, 0x03, 0xd3, 0xb1, 0x0f, 0x23, 0x81, 0x49, 0xa0, 0x79, 0xe6, 0xe8, 0xe4, 0x6b, 0x65, 0x0c, + 0x78, 0x17, 0x7b, 0xc3, 0xb4, 0x88, 0x43, 0x84, 0x4f, 0x9d, 0xa6, 0x53, 0xe4, 0x3a, 0x62, 0x76, + 0x6d, 0x06, 0x4e, 0x17, 0x18, 0x77, 0xf4, 0x5e, 0x6a, 0x84, 0xe4, 0xa6, 0xda, 0x0e, 0x4e, 0x04, + 0x69, 0x2b, 0x98, 0x56, 0x1d, 0x56, 0xf0, 0x8f, 0x39, 0x54, 0x37, 0x05, 0x57, 0x6e, 0xf0, 0x5b, + 0x40, 0x74, 0xde, 0x90, 0x7f, 0xd5, 0x65, 0x57, 0x9c, 0x26, 0xa3, 0xe3, 0x26, 0x82, 0x01, 0x6a, + 0xc3, 0x40, 0x6a, 0x37, 0x39, 0xef, 0x5e, 0x4f, 0xb9, 0x0d, 0x1b, 0x7a, 0xc8, 0x77, 0xdc, 0x51, + 0x20, 0x8f, 0x80, 0xdd, 0x40, 0x3e, 0x04, 0xc6, 0xc0, 0x28, 0xfd, 0x66, 0xb0, 0xc5, 0x06, 0x0d, + 0xfb, 0xc0, 0x10, 0x88, 0x16, 0x5c, 0xac, 0x53, 0x71, 0xf6, 0x6f, 0x9b, 0x02, 0x54, 0xeb, 0x7d, + 0xaa, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXMoveIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x7a, 0x91, 0xda, + 0x8e, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x8e, 0x45, 0x3c, 0x00, 0x00, + 0x02, 0xa9, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x97, 0x3b, 0x68, 0x14, 0x51, 0x14, 0x86, + 0x77, 0x4c, 0x14, 0x1f, 0x60, 0x20, 0x22, 0x82, 0x8f, 0x80, 0x10, 0xd1, 0xa8, 0x08, 0x0a, 0x42, + 0x8a, 0x58, 0x18, 0x11, 0x8c, 0xa0, 0x95, 0x85, 0x69, 0xd2, 0x89, 0xa0, 0x8d, 0xd8, 0x58, 0x58, + 0x2b, 0xd8, 0x89, 0x95, 0x85, 0xd8, 0x68, 0x21, 0xd8, 0x88, 0x92, 0x20, 0x5a, 0xd9, 0x58, 0x85, + 0x24, 0x45, 0x50, 0x41, 0xc4, 0x80, 0x0a, 0xd1, 0x90, 0xd7, 0x82, 0x12, 0x0c, 0x71, 0xfd, 0x4e, + 0x9c, 0xbb, 0x9c, 0x3d, 0xf7, 0xcc, 0xce, 0xce, 0x82, 0x58, 0xb8, 0x17, 0x7e, 0xce, 0xeb, 0xff, + 0xcf, 0xbd, 0x73, 0x77, 0x76, 0xe6, 0x4e, 0xa9, 0xf4, 0x0f, 0x46, 0xa5, 0x52, 0x59, 0x03, 0x8e, + 0x8b, 0x6d, 0x7a, 0x7a, 0xc4, 0x9d, 0xe0, 0x04, 0x38, 0x07, 0xba, 0x41, 0xd2, 0x4c, 0x33, 0x74, + 0xb2, 0x98, 0xe7, 0x40, 0xc6, 0x30, 0x28, 0xd6, 0x07, 0xc1, 0x25, 0x30, 0x05, 0xec, 0x58, 0x24, + 0xf1, 0x00, 0x74, 0x16, 0x59, 0x18, 0xfc, 0x6b, 0xa6, 0xd1, 0xd5, 0x86, 0xf4, 0x88, 0xb6, 0x01, + 0xb9, 0x82, 0xbc, 0xf1, 0x05, 0xc2, 0xc9, 0x46, 0x9a, 0xc2, 0x3b, 0x02, 0x7e, 0x9a, 0x86, 0x4b, + 0xc4, 0x87, 0x72, 0xf5, 0x90, 0x5e, 0x19, 0x61, 0xbd, 0x50, 0x26, 0xd9, 0x57, 0xaf, 0x29, 0xf5, + 0x8d, 0xe0, 0x5d, 0x46, 0x93, 0x49, 0xf2, 0xeb, 0x33, 0xf5, 0x14, 0x07, 0x8d, 0x70, 0x8e, 0x58, + 0x7e, 0xba, 0x03, 0x60, 0x3b, 0x38, 0x0d, 0xec, 0x82, 0x5f, 0x66, 0x36, 0xa4, 0x00, 0xff, 0x2e, + 0xa8, 0x37, 0xee, 0xb8, 0x7a, 0x14, 0x6b, 0xc1, 0x67, 0xa5, 0xfc, 0x86, 0xbf, 0xcb, 0x92, 0xc9, + 0xc9, 0xcd, 0x79, 0x4f, 0xf1, 0xc4, 0x3d, 0x6b, 0x79, 0x12, 0x4b, 0xde, 0xf0, 0xb2, 0xc2, 0x53, + 0x91, 0x1e, 0x66, 0x8f, 0x61, 0x5f, 0x88, 0x48, 0x69, 0x02, 0x5e, 0x07, 0xf8, 0xaa, 0xf8, 0xb7, + 0x2d, 0x97, 0x5a, 0x3b, 0xf8, 0xa4, 0x38, 0xf5, 0xdc, 0x8f, 0xde, 0x73, 0x60, 0xbf, 0x69, 0xfa, + 0xd8, 0xc4, 0xd5, 0x30, 0x49, 0x92, 0x45, 0x82, 0x17, 0xd5, 0x44, 0xa9, 0x64, 0xb5, 0x52, 0x92, + 0xbf, 0xf5, 0xa4, 0xe2, 0xd4, 0x73, 0xdf, 0xb4, 0x3b, 0xd5, 0x1e, 0x95, 0x9b, 0x66, 0xd2, 0x05, + 0x15, 0x7b, 0xee, 0x5b, 0x95, 0x8c, 0x16, 0x84, 0x7e, 0x99, 0xfa, 0x00, 0xdb, 0xb2, 0x19, 0xdb, + 0x06, 0x7a, 0xc1, 0x08, 0x08, 0xa3, 0x1f, 0x67, 0x02, 0xac, 0xc0, 0x2d, 0x7b, 0x0b, 0xda, 0x19, + 0x98, 0xd8, 0x39, 0xe5, 0x67, 0xb9, 0xb3, 0xaa, 0xb0, 0x83, 0x89, 0xe9, 0x9b, 0x54, 0x54, 0x6e, + 0xd5, 0x95, 0xc9, 0xc4, 0xa1, 0xbe, 0x6a, 0x55, 0xbd, 0x4c, 0x6d, 0x3e, 0xc4, 0xde, 0x4f, 0x16, + 0x6a, 0xcd, 0xda, 0x62, 0x4f, 0x5e, 0x33, 0xcb, 0xdf, 0x58, 0x90, 0x99, 0xa2, 0x58, 0xd8, 0x5a, + 0x50, 0xde, 0x7e, 0xb5, 0x76, 0xa8, 0xb5, 0x43, 0x79, 0x3b, 0x90, 0x57, 0x6f, 0xdd, 0x43, 0xff, + 0xe5, 0x0e, 0x55, 0xdf, 0x43, 0xe9, 0xd5, 0x6f, 0xc8, 0xd9, 0x05, 0x5b, 0xaf, 0x7d, 0x5f, 0xf2, + 0xb2, 0xdb, 0x03, 0x9e, 0x80, 0x0f, 0x29, 0xca, 0xd8, 0x30, 0xe4, 0x68, 0x1a, 0xf2, 0xaf, 0xf1, + 0xfb, 0xed, 0x64, 0xe4, 0x0e, 0x06, 0x72, 0x6a, 0x0f, 0x5b, 0x8e, 0x8e, 0xe1, 0xc8, 0xc9, 0x33, + 0x8c, 0x1f, 0x38, 0xb5, 0xf7, 0x31, 0x89, 0xf3, 0xa1, 0xda, 0x80, 0x8d, 0x8e, 0x99, 0x68, 0xd6, + 0x81, 0x65, 0xa5, 0xbd, 0xa2, 0x17, 0x60, 0x7d, 0x78, 0x8f, 0x14, 0x77, 0xdc, 0xd6, 0xe5, 0x38, + 0x20, 0x47, 0xd6, 0x51, 0x45, 0xca, 0x72, 0x17, 0x28, 0x74, 0x45, 0x0d, 0x48, 0x90, 0x9f, 0x50, + 0xa2, 0x59, 0xfc, 0x2d, 0x19, 0xbc, 0x5e, 0x6a, 0xbf, 0x14, 0xf7, 0xbe, 0xc7, 0x93, 0x86, 0x7b, + 0xc1, 0x77, 0x45, 0xf4, 0xdc, 0x41, 0x57, 0xfc, 0x67, 0x41, 0x67, 0x8c, 0xe0, 0x3d, 0x71, 0x5f, + 0xe0, 0xe3, 0xb7, 0x01, 0xf9, 0x25, 0xe6, 0x41, 0x18, 0x4b, 0x38, 0xdd, 0x81, 0x13, 0x59, 0x8a, + 0x17, 0x03, 0xd3, 0xb1, 0x0f, 0x23, 0x81, 0x49, 0xa0, 0x79, 0xe6, 0xe8, 0xe4, 0x6b, 0x65, 0x0c, + 0x78, 0x17, 0x7b, 0xc3, 0xb4, 0x88, 0x43, 0x84, 0x4f, 0x9d, 0xa6, 0x53, 0xe4, 0x3a, 0x62, 0x76, + 0x6d, 0x06, 0x4e, 0x17, 0x18, 0x77, 0xf4, 0x5e, 0x6a, 0x84, 0xe4, 0xa6, 0xda, 0x0e, 0x4e, 0x04, + 0x69, 0x2b, 0x98, 0x56, 0x1d, 0x56, 0xf0, 0x8f, 0x39, 0x54, 0x37, 0x05, 0x57, 0x6e, 0xf0, 0x5b, + 0x40, 0x74, 0xde, 0x90, 0x7f, 0xd5, 0x65, 0x57, 0x9c, 0x26, 0xa3, 0xe3, 0x26, 0x82, 0x01, 0x6a, + 0xc3, 0x40, 0x6a, 0x37, 0x39, 0xef, 0x5e, 0x4f, 0xb9, 0x0d, 0x1b, 0x7a, 0xc8, 0x77, 0xdc, 0x51, + 0x20, 0x8f, 0x80, 0xdd, 0x40, 0x3e, 0x04, 0xc6, 0xc0, 0x28, 0xfd, 0x66, 0xb0, 0xc5, 0x06, 0x0d, + 0xfb, 0xc0, 0x10, 0x88, 0x16, 0x5c, 0xac, 0x53, 0x71, 0xf6, 0x6f, 0x9b, 0x02, 0x54, 0xeb, 0x7d, + 0xaa, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXMoveIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5a, 0x1c, 0x89, + 0xc0, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x03, 0xdb, 0x04, 0x00, 0x00, + 0x04, 0x37, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9a, 0x5b, 0x88, 0x8d, 0x51, 0x14, 0xc7, + 0xcf, 0x71, 0x8b, 0x71, 0x9b, 0xdc, 0x72, 0x8f, 0x22, 0x11, 0x73, 0x49, 0x4a, 0xb9, 0x24, 0x45, + 0xd2, 0x24, 0x25, 0xc2, 0x8b, 0xbc, 0xe0, 0x49, 0x52, 0xca, 0x25, 0xa4, 0xa6, 0x14, 0x4f, 0xca, + 0x93, 0xa4, 0x10, 0x29, 0xb7, 0x21, 0x2f, 0xf2, 0xe4, 0x49, 0x79, 0x10, 0xc6, 0x25, 0xa2, 0x91, + 0x72, 0x1d, 0x63, 0x34, 0xc8, 0x8c, 0xdb, 0xf8, 0xad, 0xa9, 0x73, 0x7c, 0xdf, 0x3e, 0x6b, 0xed, + 0xfd, 0x7d, 0xc7, 0xd0, 0x51, 0x67, 0xd5, 0xbf, 0xd9, 0xfb, 0xbf, 0xd6, 0xfa, 0xaf, 0xfd, 0x7d, + 0xfb, 0x3b, 0xfb, 0x7c, 0xb3, 0xf7, 0xc9, 0x64, 0xfe, 0x43, 0xeb, 0xec, 0xec, 0xac, 0xf8, 0x0f, + 0x87, 0xed, 0x1f, 0x32, 0x17, 0xb5, 0x13, 0x7c, 0x03, 0xf7, 0xc0, 0x18, 0x2b, 0x3a, 0x6b, 0x39, + 0x42, 0x3c, 0xa2, 0x7d, 0x88, 0x99, 0x0f, 0xa6, 0x82, 0x91, 0x60, 0x00, 0x78, 0x03, 0x5e, 0x82, + 0xeb, 0xd9, 0x6c, 0xb6, 0x89, 0xbf, 0xdd, 0x6a, 0xd4, 0x5c, 0x8e, 0xe0, 0xc5, 0x88, 0xe8, 0x0d, + 0xda, 0xf3, 0xa8, 0xf5, 0x23, 0xc2, 0x15, 0xd7, 0x44, 0x7c, 0x22, 0x38, 0x0e, 0xda, 0x80, 0xcf, + 0xe4, 0x8e, 0x6e, 0x00, 0x3d, 0x8b, 0xab, 0x14, 0xcf, 0x42, 0x67, 0x14, 0x78, 0x07, 0x5c, 0xdb, + 0x13, 0x8f, 0x4c, 0xd9, 0x43, 0x2d, 0x0b, 0xf6, 0x82, 0x76, 0x90, 0xc6, 0xee, 0x13, 0x5c, 0x9d, + 0xb2, 0x5c, 0x2c, 0x9c, 0x7c, 0xa9, 0x7d, 0xd5, 0x28, 0x2a, 0x8f, 0xe5, 0xec, 0x58, 0x42, 0xd2, + 0x0e, 0x89, 0x7d, 0xc0, 0x29, 0x43, 0x38, 0x09, 0x2d, 0xb3, 0xbb, 0x38, 0x69, 0x3d, 0x37, 0x8e, + 0xdc, 0x2d, 0x81, 0x22, 0x4f, 0xf0, 0xcb, 0x47, 0x21, 0x9d, 0x91, 0xb4, 0x3b, 0x20, 0x9c, 0xc4, + 0x2d, 0x17, 0x37, 0x3a, 0x5d, 0xe5, 0x4c, 0x86, 0x9c, 0x2a, 0x90, 0xe4, 0x29, 0x39, 0x96, 0x4a, + 0x1b, 0xd1, 0xf1, 0xe0, 0x33, 0xb0, 0xec, 0x15, 0x8e, 0x2b, 0xe0, 0x28, 0xb8, 0x09, 0xbe, 0x00, + 0xcb, 0x4e, 0xa7, 0x29, 0x8e, 0x48, 0x5f, 0xd0, 0x68, 0x89, 0x29, 0xfc, 0x8a, 0xc4, 0xfa, 0x24, + 0x9f, 0x55, 0x04, 0x84, 0x7a, 0x04, 0x66, 0xb9, 0x42, 0x70, 0xbd, 0xc0, 0x76, 0xf0, 0x15, 0x68, + 0xb6, 0xc0, 0xcd, 0xb1, 0xfa, 0x24, 0x1f, 0xd2, 0x04, 0x3c, 0x5c, 0x0b, 0xbe, 0xf0, 0x53, 0x41, + 0xd0, 0x42, 0x43, 0xa4, 0x01, 0xde, 0xfb, 0x25, 0x89, 0xbf, 0x16, 0x48, 0x21, 0xd7, 0x64, 0xb5, + 0xec, 0x65, 0x5d, 0x4c, 0x8e, 0x27, 0x66, 0x09, 0xf8, 0xe9, 0x26, 0x27, 0xe8, 0x5f, 0x23, 0xc6, + 0xff, 0x35, 0x46, 0xc0, 0x39, 0x45, 0xe8, 0x03, 0xdc, 0x88, 0xdc, 0x00, 0x7c, 0x7f, 0x89, 0xdb, + 0xa4, 0xe4, 0x0b, 0xb5, 0x28, 0x90, 0x57, 0x49, 0x8c, 0x3c, 0xe2, 0xc5, 0xda, 0x66, 0x53, 0x1f, + 0x45, 0x59, 0x62, 0x9b, 0x15, 0xe5, 0xad, 0x66, 0x92, 0xe3, 0x20, 0xb7, 0x07, 0xb8, 0xa5, 0x68, + 0xec, 0x77, 0x42, 0x63, 0x5d, 0xe2, 0x77, 0x28, 0x39, 0x69, 0xa8, 0xb7, 0x3d, 0x62, 0x8a, 0xf1, + 0xce, 0x14, 0xba, 0xc3, 0xe2, 0x54, 0x57, 0xaf, 0x41, 0xe1, 0x54, 0x8a, 0x37, 0x82, 0x9f, 0x38, + 0x2e, 0x29, 0xce, 0x79, 0x0a, 0x17, 0xa5, 0xbc, 0x8f, 0x79, 0x34, 0xd0, 0x68, 0x57, 0xf8, 0x9e, + 0xf5, 0x51, 0x4a, 0x52, 0x3b, 0xdc, 0x33, 0x85, 0xf7, 0x51, 0x0f, 0x15, 0x67, 0xe8, 0x03, 0x5e, + 0x4f, 0x4e, 0x33, 0x90, 0xd7, 0xb5, 0xe8, 0x9b, 0xcb, 0x2a, 0xfa, 0x83, 0x41, 0xd4, 0xae, 0xd2, + 0x79, 0x1e, 0x21, 0x5a, 0x68, 0x9f, 0x8b, 0xf4, 0xe3, 0x4d, 0xe6, 0x7d, 0xa5, 0x32, 0xf7, 0x77, + 0xe2, 0x51, 0xe1, 0x1e, 0x1a, 0xd3, 0x15, 0x9d, 0xb6, 0x70, 0x66, 0x61, 0x04, 0x3a, 0xb2, 0x12, + 0xbb, 0x56, 0x57, 0x18, 0x99, 0xc9, 0xf8, 0x1e, 0x45, 0xf7, 0xce, 0x48, 0x7e, 0xab, 0x26, 0x12, + 0xe0, 0xb4, 0x9c, 0x81, 0x8c, 0xce, 0x57, 0x3b, 0x20, 0x19, 0x76, 0xfb, 0xc4, 0xfd, 0x4b, 0x66, + 0x58, 0x3b, 0x14, 0xf1, 0x57, 0xf5, 0x7d, 0x17, 0x16, 0x1a, 0x58, 0x49, 0xfb, 0xcb, 0x17, 0x56, + 0xd2, 0xd3, 0xa3, 0x0c, 0xae, 0x3c, 0x63, 0xca, 0x4d, 0x29, 0x69, 0xaa, 0x3c, 0x63, 0x25, 0x3d, + 0x3d, 0xca, 0xe0, 0xca, 0x33, 0xa6, 0xdc, 0x94, 0x92, 0xa6, 0xca, 0x33, 0x56, 0xd2, 0xd3, 0xa3, + 0x0c, 0xae, 0x3c, 0x63, 0xca, 0x4d, 0x29, 0x69, 0xaa, 0x3c, 0x63, 0x25, 0x3d, 0x3d, 0xca, 0xe0, + 0xca, 0x33, 0xa6, 0xdc, 0x94, 0xa4, 0x54, 0x87, 0x11, 0xe8, 0xdb, 0x6f, 0x31, 0x52, 0x32, 0xbd, + 0x15, 0x87, 0xec, 0xc3, 0x14, 0x58, 0x97, 0x38, 0xff, 0xa6, 0xf7, 0xc7, 0x53, 0x0b, 0x2a, 0x23, + 0x11, 0x55, 0x91, 0x76, 0xae, 0x39, 0x94, 0xd8, 0xe8, 0x1e, 0xc3, 0x37, 0x1c, 0x8d, 0xec, 0x46, + 0xc9, 0x99, 0x98, 0x65, 0xef, 0x71, 0xc8, 0x6e, 0x95, 0xfb, 0x74, 0x4c, 0x82, 0xbb, 0x6f, 0x25, + 0xb9, 0x3c, 0x75, 0xe5, 0xa2, 0xc6, 0xb9, 0x3c, 0x7d, 0xd9, 0xbc, 0x29, 0x34, 0x12, 0x06, 0x80, + 0x26, 0x50, 0xac, 0x7d, 0x27, 0x31, 0xb4, 0x01, 0xaa, 0xed, 0x4f, 0xae, 0x2c, 0x1c, 0x8d, 0xcd, + 0x50, 0x63, 0x9a, 0x31, 0xc0, 0xb1, 0x5a, 0x96, 0xdc, 0x45, 0x99, 0xa5, 0x09, 0x9a, 0x33, 0x21, + 0x27, 0xdb, 0x63, 0x33, 0x02, 0xb1, 0xda, 0xee, 0xd6, 0xcc, 0x40, 0x8e, 0xeb, 0xd6, 0xe2, 0xe5, + 0x69, 0x78, 0xe1, 0x06, 0xe6, 0xfb, 0xdc, 0x09, 0x39, 0x2d, 0x29, 0xd6, 0xe4, 0x24, 0x46, 0xdb, + 0x83, 0x8c, 0xea, 0xcb, 0xb9, 0xb1, 0x6b, 0x1f, 0x21, 0x42, 0xfb, 0x8b, 0x5d, 0x1a, 0xc4, 0xc9, + 0xf9, 0xdc, 0x63, 0x57, 0x80, 0xfe, 0x85, 0x7c, 0x11, 0xad, 0x41, 0xc0, 0x38, 0xd0, 0xaa, 0x24, + 0x26, 0xa1, 0x36, 0x69, 0x9a, 0x51, 0x0e, 0x11, 0xd9, 0x5b, 0xfc, 0xa1, 0x88, 0x9d, 0x89, 0xc6, + 0x59, 0x6d, 0xf2, 0xe4, 0xf4, 0x46, 0xb3, 0x75, 0x56, 0x4e, 0x9e, 0x27, 0x6b, 0xb5, 0x96, 0x19, + 0xe0, 0x2e, 0xe7, 0x05, 0x02, 0x0d, 0x74, 0x8e, 0x18, 0x5a, 0xe7, 0xe1, 0x87, 0x6a, 0xe9, 0xf0, + 0x32, 0x53, 0x07, 0x80, 0x76, 0xea, 0x22, 0x67, 0x02, 0xee, 0x82, 0xa4, 0xc9, 0x74, 0x9d, 0x1e, + 0x9e, 0x24, 0x38, 0xa9, 0xbd, 0x26, 0x70, 0xb8, 0xae, 0x54, 0xc8, 0x12, 0x2b, 0x2b, 0xaa, 0x76, + 0xac, 0x24, 0xf5, 0xe4, 0x64, 0xe5, 0x20, 0x58, 0x0b, 0x6a, 0xc0, 0x32, 0xb0, 0x0f, 0xdc, 0x05, + 0x96, 0xcd, 0x29, 0xac, 0x62, 0x30, 0x28, 0x0c, 0x02, 0x4d, 0x96, 0x92, 0xc3, 0x2f, 0x35, 0x64, + 0x4c, 0x9a, 0xfc, 0x8d, 0x8e, 0x46, 0xb1, 0xdd, 0x13, 0x66, 0x11, 0xcb, 0x41, 0xa5, 0xb9, 0x40, + 0x96, 0x70, 0x9f, 0x1d, 0xb6, 0xf2, 0x7d, 0x3c, 0x82, 0x72, 0xac, 0x24, 0x07, 0x73, 0x7f, 0x62, + 0xcf, 0x49, 0xf6, 0x2e, 0x56, 0xe6, 0x18, 0x48, 0xac, 0xf7, 0x54, 0x7e, 0x80, 0xaf, 0x9f, 0x99, + 0x1c, 0x70, 0x90, 0xfb, 0x27, 0xbf, 0x40, 0xb8, 0x4d, 0x7e, 0xa2, 0x95, 0x54, 0x1d, 0x06, 0xc9, + 0x72, 0x8e, 0x2c, 0x07, 0xe5, 0xae, 0x75, 0x40, 0xd4, 0xa8, 0x49, 0x29, 0x49, 0x74, 0x56, 0x81, + 0xa7, 0x6e, 0x01, 0xa3, 0x2f, 0xbf, 0x38, 0xd8, 0x05, 0x8a, 0xbe, 0xa1, 0xf9, 0xe1, 0x21, 0x32, + 0x19, 0x7c, 0x02, 0x51, 0xdb, 0x96, 0x0f, 0xe8, 0x86, 0x06, 0xc2, 0x32, 0x7b, 0x75, 0x40, 0x56, + 0x4c, 0xf9, 0xa1, 0x4b, 0xee, 0x2b, 0x47, 0xbe, 0x1b, 0xe5, 0xa2, 0x2f, 0x80, 0xf5, 0x60, 0x48, + 0x37, 0x94, 0xfb, 0x2d, 0x81, 0xe0, 0x1a, 0x90, 0xfb, 0xbc, 0x35, 0xd0, 0xfe, 0xab, 0x27, 0x24, + 0x52, 0x99, 0x1a, 0xc5, 0xbc, 0x1c, 0xff, 0x1e, 0x74, 0xd2, 0x16, 0x85, 0xaa, 0x81, 0x2c, 0xbf, + 0xda, 0x9b, 0x75, 0x52, 0x99, 0x7f, 0x1e, 0xf7, 0x0b, 0x20, 0xe5, 0xc9, 0x35, 0x1c, 0xb8, 0x12, + 0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXSelectIcon[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x33, 0x17, 0x79, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xd7, 0xce, 0x93, 0x00, 0x00, + 0x04, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x99, 0x5b, 0x88, 0x0e, 0x61, 0x18, 0xc7, + 0x7d, 0xd6, 0x3a, 0x6c, 0x12, 0x42, 0x24, 0x17, 0x48, 0xb1, 0x21, 0x09, 0x37, 0x5c, 0x2d, 0xe5, + 0x74, 0x23, 0x11, 0x39, 0xad, 0xc3, 0x86, 0x12, 0x17, 0x8b, 0x52, 0xd2, 0xda, 0xa4, 0xb4, 0x29, + 0xa7, 0x24, 0xe4, 0xc2, 0x31, 0x57, 0x12, 0x52, 0x88, 0x1b, 0x09, 0xed, 0x0d, 0xc9, 0x46, 0x88, + 0x9c, 0x6e, 0x24, 0xe7, 0x8d, 0x65, 0xf7, 0xf3, 0x7b, 0x3e, 0x33, 0xdb, 0xe3, 0x6d, 0x66, 0xbe, + 0x99, 0xf9, 0xde, 0xd9, 0xa1, 0xe6, 0xa9, 0xff, 0xf7, 0x3e, 0xef, 0x73, 0x7e, 0xde, 0x99, 0xf9, + 0x66, 0xe6, 0x9d, 0x4e, 0x9d, 0x32, 0xca, 0x56, 0x20, 0x5b, 0x81, 0x6c, 0x05, 0xb2, 0x15, 0xc8, + 0x56, 0x20, 0xd9, 0x15, 0xc8, 0xe7, 0xf3, 0xd3, 0xc1, 0x33, 0xb0, 0x3d, 0xd9, 0x4c, 0x29, 0x45, + 0xa7, 0xb1, 0x8b, 0x40, 0xe8, 0x07, 0x28, 0x4b, 0xa9, 0x0c, 0xcf, 0xb4, 0x9d, 0x3d, 0xa5, 0xd1, + 0x85, 0xdd, 0x1d, 0x97, 0xae, 0x8c, 0xb6, 0x62, 0x46, 0xaf, 0xc2, 0xc3, 0xe3, 0x9f, 0x2a, 0xc6, + 0xa3, 0xbe, 0x92, 0x45, 0xbe, 0x0d, 0x72, 0xaa, 0x55, 0x80, 0x31, 0x25, 0x67, 0xf0, 0x08, 0x40, + 0xdc, 0xc1, 0x60, 0x88, 0x87, 0xaa, 0x63, 0x44, 0x24, 0xcf, 0x81, 0xc7, 0x40, 0xe8, 0x04, 0x08, + 0xbc, 0xae, 0xd0, 0x5f, 0x13, 0x43, 0x87, 0xca, 0x83, 0xaa, 0xc4, 0xa6, 0x1a, 0xfc, 0x04, 0xbf, + 0xc0, 0xc8, 0x20, 0xdb, 0xc4, 0x74, 0x24, 0xee, 0x02, 0xde, 0x02, 0x97, 0x4e, 0xc3, 0xf8, 0x36, + 0x89, 0xae, 0xce, 0x31, 0xbc, 0x1b, 0x54, 0x14, 0x36, 0xcb, 0x41, 0xab, 0x63, 0x2b, 0xc3, 0xc4, + 0x20, 0xfb, 0x44, 0x75, 0x24, 0x9f, 0x06, 0x9a, 0xa5, 0x0a, 0x87, 0xce, 0x30, 0x7a, 0x36, 0x89, + 0x5c, 0x8e, 0xf8, 0x44, 0xd0, 0xc3, 0xaf, 0x28, 0x74, 0x2b, 0x41, 0x1b, 0x70, 0x69, 0xa7, 0x9f, + 0x6d, 0x87, 0xc9, 0xa9, 0x64, 0x2a, 0xd0, 0x4d, 0x36, 0xc4, 0x49, 0x4e, 0x8c, 0x2a, 0xa0, 0x9b, + 0xdb, 0x11, 0x27, 0x4e, 0x22, 0x3e, 0x4e, 0x71, 0xdf, 0x18, 0x85, 0x6e, 0xc7, 0x49, 0x82, 0xdf, + 0xb6, 0x82, 0xf7, 0x9f, 0x9f, 0xfa, 0x38, 0x31, 0x12, 0xf5, 0xa1, 0xae, 0xf1, 0x60, 0x8f, 0x8c, + 0x71, 0x12, 0xe1, 0xd7, 0x0f, 0xec, 0x02, 0x0b, 0xe2, 0xf8, 0x67, 0x3e, 0xd9, 0x0a, 0x64, 0x2b, + 0xf0, 0xff, 0xae, 0x40, 0x4e, 0x97, 0xce, 0x9f, 0xc0, 0x5f, 0xf3, 0x5c, 0x2e, 0x97, 0xd7, 0x7a, + 0x3f, 0xde, 0xf1, 0x9b, 0x89, 0xbe, 0x15, 0x9f, 0x2b, 0x7e, 0x76, 0x5a, 0x6e, 0xe6, 0x12, 0x5d, + 0xd8, 0x7c, 0x3a, 0x4e, 0x28, 0x9e, 0x64, 0x4b, 0xc0, 0x47, 0x60, 0x92, 0xbc, 0xe3, 0x55, 0x16, + 0x0b, 0x82, 0xcd, 0x71, 0xe5, 0x78, 0x28, 0xc8, 0x1e, 0xbb, 0x32, 0x70, 0x55, 0xd9, 0xbb, 0xac, + 0x3c, 0xba, 0x1d, 0x0e, 0xf2, 0x8d, 0xad, 0x23, 0xf0, 0x05, 0x37, 0x8b, 0xc7, 0xb8, 0xbe, 0x58, + 0x60, 0x7c, 0xe4, 0x3d, 0x50, 0xd3, 0x58, 0x3f, 0x1f, 0x8c, 0x86, 0x6b, 0x43, 0x83, 0x97, 0x87, + 0x0a, 0x79, 0xe5, 0xb2, 0x46, 0x5d, 0x9c, 0x48, 0x75, 0x8c, 0xdf, 0x41, 0x6f, 0x23, 0xf2, 0x53, + 0xe6, 0xa7, 0x0d, 0x99, 0xd7, 0xb4, 0x09, 0xe1, 0x38, 0xa5, 0xa8, 0x85, 0x5f, 0xae, 0xe6, 0xed, + 0x2c, 0xa7, 0xa1, 0x9c, 0x15, 0x9b, 0x10, 0x4c, 0x6f, 0x17, 0xfe, 0x61, 0x5a, 0x19, 0x4e, 0xa2, + 0x6f, 0x31, 0xe4, 0xe9, 0x4f, 0x29, 0x78, 0xb5, 0x71, 0x24, 0xe4, 0x88, 0x0e, 0x4a, 0xbf, 0x32, + 0x4b, 0x15, 0xd0, 0x4c, 0x77, 0xf0, 0xce, 0x68, 0x32, 0xfd, 0x87, 0x69, 0x4b, 0xfd, 0x15, 0xc2, + 0xd0, 0xdc, 0x76, 0xa3, 0xc1, 0xf7, 0xcc, 0x2b, 0x6c, 0xe6, 0x48, 0x35, 0x16, 0xcd, 0x0c, 0x00, + 0xdf, 0x8d, 0x26, 0xd7, 0x15, 0x2b, 0x0a, 0xfb, 0x51, 0x60, 0x26, 0xe8, 0xeb, 0xda, 0xc2, 0xcb, + 0xdb, 0xc7, 0x26, 0x90, 0xde, 0xfb, 0xa2, 0x5b, 0x8c, 0x1e, 0x29, 0xe8, 0x28, 0xd0, 0xf4, 0x84, + 0x49, 0x67, 0x50, 0x0e, 0xe4, 0x56, 0xf2, 0x09, 0x3c, 0x00, 0x53, 0xc4, 0x8f, 0x71, 0x3e, 0x70, + 0x49, 0x8e, 0xb8, 0x2b, 0x77, 0x77, 0x13, 0x44, 0x77, 0x04, 0xf8, 0x6e, 0xad, 0xe8, 0xfc, 0xb1, + 0x79, 0x12, 0x6c, 0x00, 0x4d, 0x60, 0x45, 0x50, 0x10, 0xf4, 0x95, 0x40, 0xbf, 0xf7, 0x31, 0xcd, + 0xcf, 0x01, 0x3d, 0x81, 0xdc, 0xe7, 0x5c, 0xfa, 0x00, 0x33, 0x10, 0xc8, 0x91, 0xd3, 0xf4, 0x82, + 0x89, 0x5c, 0xcf, 0x9b, 0xb5, 0x10, 0x7e, 0x77, 0x50, 0xde, 0x92, 0x74, 0x04, 0xaf, 0x53, 0xc9, + 0x1a, 0x8b, 0x05, 0xc3, 0xf6, 0xb2, 0xb2, 0x17, 0xf6, 0xa6, 0xf8, 0x30, 0x9e, 0x35, 0xe4, 0xfb, + 0x99, 0xcb, 0x4e, 0xc0, 0x23, 0x43, 0xbe, 0x91, 0xb9, 0x9c, 0xa2, 0x9a, 0x7e, 0x32, 0xb1, 0xbf, + 0x01, 0x46, 0xd0, 0x7a, 0x95, 0x45, 0x8e, 0xcc, 0xa2, 0x10, 0x0d, 0xca, 0x2e, 0x80, 0x49, 0xb2, + 0x9d, 0x31, 0xc9, 0x10, 0x7e, 0x61, 0x2e, 0xd7, 0x6d, 0x83, 0x21, 0x97, 0x3d, 0x1b, 0xf3, 0x5a, + 0x16, 0x93, 0xf3, 0xc5, 0x72, 0x47, 0xd2, 0x13, 0x70, 0xab, 0x44, 0x75, 0x48, 0x9a, 0xab, 0x09, + 0x1b, 0x00, 0xdb, 0x7b, 0xae, 0xa3, 0x33, 0x9e, 0x15, 0x5f, 0xf8, 0x9b, 0x86, 0xfc, 0x29, 0x73, + 0xf3, 0xf6, 0x62, 0x98, 0xb4, 0x4f, 0xa5, 0xf1, 0x11, 0x61, 0x6b, 0x08, 0xb4, 0x23, 0x50, 0x57, + 0xd0, 0xec, 0x84, 0x96, 0xe6, 0x56, 0x05, 0x3a, 0x18, 0x4a, 0xec, 0x97, 0x39, 0xbe, 0xee, 0x20, + 0xd7, 0xdf, 0x50, 0xb0, 0xc6, 0x15, 0xc4, 0x1c, 0x0f, 0x1a, 0xa9, 0xe2, 0x4f, 0x29, 0xe0, 0x18, + 0x90, 0xad, 0xc3, 0xa5, 0x51, 0xa3, 0xe0, 0x23, 0xff, 0x9a, 0x6f, 0x80, 0x26, 0xf9, 0xf7, 0x6c, + 0xd4, 0x82, 0x18, 0xfc, 0x57, 0x7c, 0x7a, 0x46, 0xad, 0x27, 0x11, 0x7b, 0x0a, 0xd9, 0x12, 0xa3, + 0x81, 0x30, 0x2e, 0xd5, 0x89, 0x14, 0xec, 0x15, 0x94, 0x6a, 0xe4, 0x1e, 0x57, 0x0b, 0xe4, 0x1e, + 0x57, 0xa5, 0x6d, 0x98, 0xf7, 0x01, 0xb2, 0xe2, 0xb6, 0xe9, 0xba, 0xce, 0x93, 0x28, 0x4f, 0xe5, + 0x35, 0xaa, 0x7a, 0xb9, 0x56, 0x37, 0xe8, 0x84, 0xcc, 0x0f, 0x28, 0xbd, 0x2d, 0xb6, 0x85, 0x40, + 0xdd, 0x74, 0x9e, 0x20, 0xbe, 0xd4, 0x27, 0x84, 0xe1, 0x2a, 0xb8, 0xec, 0x06, 0xec, 0x23, 0x79, + 0xbd, 0x92, 0xed, 0x85, 0x6f, 0x53, 0x73, 0x1b, 0x6c, 0x39, 0x41, 0x46, 0xdb, 0x08, 0x54, 0x34, + 0x06, 0xcd, 0x8c, 0x01, 0xe6, 0xcb, 0x2e, 0xa2, 0xc2, 0x91, 0x2b, 0x6c, 0x7f, 0xc0, 0x9f, 0x13, + 0x81, 0x65, 0xea, 0xd0, 0xeb, 0x70, 0x2e, 0xc5, 0xcb, 0x93, 0x86, 0x49, 0xf2, 0xc1, 0x46, 0x3e, + 0xe2, 0x4c, 0x36, 0x15, 0x16, 0xe6, 0x6b, 0x8a, 0xae, 0xbe, 0x4d, 0x03, 0x0a, 0x96, 0x87, 0x66, + 0xfd, 0xac, 0xe9, 0xf6, 0x70, 0x09, 0xa6, 0x07, 0x68, 0x72, 0x05, 0x96, 0xc6, 0xb5, 0x36, 0xeb, + 0x0f, 0x15, 0x8b, 0xc2, 0x17, 0x02, 0xaf, 0x26, 0x5f, 0x22, 0x97, 0x3f, 0x06, 0x9b, 0x34, 0x2b, + 0x54, 0x51, 0xb6, 0x8d, 0xe8, 0x60, 0x31, 0x90, 0x47, 0xaa, 0xa4, 0xa9, 0xbf, 0xed, 0xda, 0x43, + 0xc7, 0xa3, 0xb3, 0x6a, 0x90, 0x64, 0x93, 0x77, 0x42, 0x17, 0x93, 0x94, 0x21, 0x0d, 0xae, 0x04, + 0x72, 0x5f, 0x4c, 0x82, 0xe6, 0x26, 0x55, 0x77, 0xa4, 0xb8, 0x74, 0x26, 0x3b, 0x6d, 0xb6, 0x9b, + 0xbc, 0x41, 0xcc, 0x52, 0xef, 0xdd, 0x91, 0xfa, 0x08, 0x34, 0xa6, 0x18, 0xb9, 0x26, 0xbd, 0x6e, + 0x21, 0x88, 0x23, 0xd3, 0x2b, 0x3c, 0x06, 0x04, 0x26, 0x4c, 0x43, 0x49, 0x51, 0xb3, 0x81, 0xd7, + 0x67, 0x81, 0x28, 0x1d, 0x3e, 0xc4, 0x58, 0x3f, 0x35, 0xa5, 0xd1, 0x8a, 0x7f, 0x4e, 0x8a, 0x93, + 0x77, 0xc1, 0xbb, 0x51, 0x3a, 0x72, 0x6c, 0xe5, 0x14, 0x3f, 0x05, 0x7a, 0xf9, 0x47, 0xff, 0x47, + 0x34, 0x14, 0x59, 0x06, 0x56, 0x81, 0xd7, 0xa0, 0x18, 0x49, 0x63, 0xd7, 0xc0, 0x84, 0x52, 0xcb, + 0x2f, 0x3c, 0x2f, 0x96, 0x1a, 0x24, 0x8a, 0x3f, 0x45, 0xcb, 0xc7, 0x95, 0x19, 0x60, 0x1e, 0x90, + 0xef, 0x19, 0xc3, 0x80, 0x7c, 0xa6, 0xfb, 0x0c, 0xee, 0x83, 0x5b, 0xe0, 0x0c, 0xdf, 0x28, 0x9e, + 0x33, 0x66, 0x94, 0xad, 0x40, 0xb6, 0x02, 0xd9, 0x0a, 0x64, 0x2b, 0x90, 0xea, 0x0a, 0xfc, 0x06, + 0x2b, 0x3f, 0x89, 0x0a, 0x68, 0xdb, 0xdf, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXSelectIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x33, 0x17, 0x79, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xd7, 0xce, 0x93, 0x00, 0x00, + 0x04, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x99, 0x5b, 0x88, 0x0e, 0x61, 0x18, 0xc7, + 0x7d, 0xd6, 0x3a, 0x6c, 0x12, 0x42, 0x24, 0x17, 0x48, 0xb1, 0x21, 0x09, 0x37, 0x5c, 0x2d, 0xe5, + 0x74, 0x23, 0x11, 0x39, 0xad, 0xc3, 0x86, 0x12, 0x17, 0x8b, 0x52, 0xd2, 0xda, 0xa4, 0xb4, 0x29, + 0xa7, 0x24, 0xe4, 0xc2, 0x31, 0x57, 0x12, 0x52, 0x88, 0x1b, 0x09, 0xed, 0x0d, 0xc9, 0x46, 0x88, + 0x9c, 0x6e, 0x24, 0xe7, 0x8d, 0x65, 0xf7, 0xf3, 0x7b, 0x3e, 0x33, 0xdb, 0xe3, 0x6d, 0x66, 0xbe, + 0x99, 0xf9, 0xde, 0xd9, 0xa1, 0xe6, 0xa9, 0xff, 0xf7, 0x3e, 0xef, 0x73, 0x7e, 0xde, 0x99, 0xf9, + 0x66, 0xe6, 0x9d, 0x4e, 0x9d, 0x32, 0xca, 0x56, 0x20, 0x5b, 0x81, 0x6c, 0x05, 0xb2, 0x15, 0xc8, + 0x56, 0x20, 0xd9, 0x15, 0xc8, 0xe7, 0xf3, 0xd3, 0xc1, 0x33, 0xb0, 0x3d, 0xd9, 0x4c, 0x29, 0x45, + 0xa7, 0xb1, 0x8b, 0x40, 0xe8, 0x07, 0x28, 0x4b, 0xa9, 0x0c, 0xcf, 0xb4, 0x9d, 0x3d, 0xa5, 0xd1, + 0x85, 0xdd, 0x1d, 0x97, 0xae, 0x8c, 0xb6, 0x62, 0x46, 0xaf, 0xc2, 0xc3, 0xe3, 0x9f, 0x2a, 0xc6, + 0xa3, 0xbe, 0x92, 0x45, 0xbe, 0x0d, 0x72, 0xaa, 0x55, 0x80, 0x31, 0x25, 0x67, 0xf0, 0x08, 0x40, + 0xdc, 0xc1, 0x60, 0x88, 0x87, 0xaa, 0x63, 0x44, 0x24, 0xcf, 0x81, 0xc7, 0x40, 0xe8, 0x04, 0x08, + 0xbc, 0xae, 0xd0, 0x5f, 0x13, 0x43, 0x87, 0xca, 0x83, 0xaa, 0xc4, 0xa6, 0x1a, 0xfc, 0x04, 0xbf, + 0xc0, 0xc8, 0x20, 0xdb, 0xc4, 0x74, 0x24, 0xee, 0x02, 0xde, 0x02, 0x97, 0x4e, 0xc3, 0xf8, 0x36, + 0x89, 0xae, 0xce, 0x31, 0xbc, 0x1b, 0x54, 0x14, 0x36, 0xcb, 0x41, 0xab, 0x63, 0x2b, 0xc3, 0xc4, + 0x20, 0xfb, 0x44, 0x75, 0x24, 0x9f, 0x06, 0x9a, 0xa5, 0x0a, 0x87, 0xce, 0x30, 0x7a, 0x36, 0x89, + 0x5c, 0x8e, 0xf8, 0x44, 0xd0, 0xc3, 0xaf, 0x28, 0x74, 0x2b, 0x41, 0x1b, 0x70, 0x69, 0xa7, 0x9f, + 0x6d, 0x87, 0xc9, 0xa9, 0x64, 0x2a, 0xd0, 0x4d, 0x36, 0xc4, 0x49, 0x4e, 0x8c, 0x2a, 0xa0, 0x9b, + 0xdb, 0x11, 0x27, 0x4e, 0x22, 0x3e, 0x4e, 0x71, 0xdf, 0x18, 0x85, 0x6e, 0xc7, 0x49, 0x82, 0xdf, + 0xb6, 0x82, 0xf7, 0x9f, 0x9f, 0xfa, 0x38, 0x31, 0x12, 0xf5, 0xa1, 0xae, 0xf1, 0x60, 0x8f, 0x8c, + 0x71, 0x12, 0xe1, 0xd7, 0x0f, 0xec, 0x02, 0x0b, 0xe2, 0xf8, 0x67, 0x3e, 0xd9, 0x0a, 0x64, 0x2b, + 0xf0, 0xff, 0xae, 0x40, 0x4e, 0x97, 0xce, 0x9f, 0xc0, 0x5f, 0xf3, 0x5c, 0x2e, 0x97, 0xd7, 0x7a, + 0x3f, 0xde, 0xf1, 0x9b, 0x89, 0xbe, 0x15, 0x9f, 0x2b, 0x7e, 0x76, 0x5a, 0x6e, 0xe6, 0x12, 0x5d, + 0xd8, 0x7c, 0x3a, 0x4e, 0x28, 0x9e, 0x64, 0x4b, 0xc0, 0x47, 0x60, 0x92, 0xbc, 0xe3, 0x55, 0x16, + 0x0b, 0x82, 0xcd, 0x71, 0xe5, 0x78, 0x28, 0xc8, 0x1e, 0xbb, 0x32, 0x70, 0x55, 0xd9, 0xbb, 0xac, + 0x3c, 0xba, 0x1d, 0x0e, 0xf2, 0x8d, 0xad, 0x23, 0xf0, 0x05, 0x37, 0x8b, 0xc7, 0xb8, 0xbe, 0x58, + 0x60, 0x7c, 0xe4, 0x3d, 0x50, 0xd3, 0x58, 0x3f, 0x1f, 0x8c, 0x86, 0x6b, 0x43, 0x83, 0x97, 0x87, + 0x0a, 0x79, 0xe5, 0xb2, 0x46, 0x5d, 0x9c, 0x48, 0x75, 0x8c, 0xdf, 0x41, 0x6f, 0x23, 0xf2, 0x53, + 0xe6, 0xa7, 0x0d, 0x99, 0xd7, 0xb4, 0x09, 0xe1, 0x38, 0xa5, 0xa8, 0x85, 0x5f, 0xae, 0xe6, 0xed, + 0x2c, 0xa7, 0xa1, 0x9c, 0x15, 0x9b, 0x10, 0x4c, 0x6f, 0x17, 0xfe, 0x61, 0x5a, 0x19, 0x4e, 0xa2, + 0x6f, 0x31, 0xe4, 0xe9, 0x4f, 0x29, 0x78, 0xb5, 0x71, 0x24, 0xe4, 0x88, 0x0e, 0x4a, 0xbf, 0x32, + 0x4b, 0x15, 0xd0, 0x4c, 0x77, 0xf0, 0xce, 0x68, 0x32, 0xfd, 0x87, 0x69, 0x4b, 0xfd, 0x15, 0xc2, + 0xd0, 0xdc, 0x76, 0xa3, 0xc1, 0xf7, 0xcc, 0x2b, 0x6c, 0xe6, 0x48, 0x35, 0x16, 0xcd, 0x0c, 0x00, + 0xdf, 0x8d, 0x26, 0xd7, 0x15, 0x2b, 0x0a, 0xfb, 0x51, 0x60, 0x26, 0xe8, 0xeb, 0xda, 0xc2, 0xcb, + 0xdb, 0xc7, 0x26, 0x90, 0xde, 0xfb, 0xa2, 0x5b, 0x8c, 0x1e, 0x29, 0xe8, 0x28, 0xd0, 0xf4, 0x84, + 0x49, 0x67, 0x50, 0x0e, 0xe4, 0x56, 0xf2, 0x09, 0x3c, 0x00, 0x53, 0xc4, 0x8f, 0x71, 0x3e, 0x70, + 0x49, 0x8e, 0xb8, 0x2b, 0x77, 0x77, 0x13, 0x44, 0x77, 0x04, 0xf8, 0x6e, 0xad, 0xe8, 0xfc, 0xb1, + 0x79, 0x12, 0x6c, 0x00, 0x4d, 0x60, 0x45, 0x50, 0x10, 0xf4, 0x95, 0x40, 0xbf, 0xf7, 0x31, 0xcd, + 0xcf, 0x01, 0x3d, 0x81, 0xdc, 0xe7, 0x5c, 0xfa, 0x00, 0x33, 0x10, 0xc8, 0x91, 0xd3, 0xf4, 0x82, + 0x89, 0x5c, 0xcf, 0x9b, 0xb5, 0x10, 0x7e, 0x77, 0x50, 0xde, 0x92, 0x74, 0x04, 0xaf, 0x53, 0xc9, + 0x1a, 0x8b, 0x05, 0xc3, 0xf6, 0xb2, 0xb2, 0x17, 0xf6, 0xa6, 0xf8, 0x30, 0x9e, 0x35, 0xe4, 0xfb, + 0x99, 0xcb, 0x4e, 0xc0, 0x23, 0x43, 0xbe, 0x91, 0xb9, 0x9c, 0xa2, 0x9a, 0x7e, 0x32, 0xb1, 0xbf, + 0x01, 0x46, 0xd0, 0x7a, 0x95, 0x45, 0x8e, 0xcc, 0xa2, 0x10, 0x0d, 0xca, 0x2e, 0x80, 0x49, 0xb2, + 0x9d, 0x31, 0xc9, 0x10, 0x7e, 0x61, 0x2e, 0xd7, 0x6d, 0x83, 0x21, 0x97, 0x3d, 0x1b, 0xf3, 0x5a, + 0x16, 0x93, 0xf3, 0xc5, 0x72, 0x47, 0xd2, 0x13, 0x70, 0xab, 0x44, 0x75, 0x48, 0x9a, 0xab, 0x09, + 0x1b, 0x00, 0xdb, 0x7b, 0xae, 0xa3, 0x33, 0x9e, 0x15, 0x5f, 0xf8, 0x9b, 0x86, 0xfc, 0x29, 0x73, + 0xf3, 0xf6, 0x62, 0x98, 0xb4, 0x4f, 0xa5, 0xf1, 0x11, 0x61, 0x6b, 0x08, 0xb4, 0x23, 0x50, 0x57, + 0xd0, 0xec, 0x84, 0x96, 0xe6, 0x56, 0x05, 0x3a, 0x18, 0x4a, 0xec, 0x97, 0x39, 0xbe, 0xee, 0x20, + 0xd7, 0xdf, 0x50, 0xb0, 0xc6, 0x15, 0xc4, 0x1c, 0x0f, 0x1a, 0xa9, 0xe2, 0x4f, 0x29, 0xe0, 0x18, + 0x90, 0xad, 0xc3, 0xa5, 0x51, 0xa3, 0xe0, 0x23, 0xff, 0x9a, 0x6f, 0x80, 0x26, 0xf9, 0xf7, 0x6c, + 0xd4, 0x82, 0x18, 0xfc, 0x57, 0x7c, 0x7a, 0x46, 0xad, 0x27, 0x11, 0x7b, 0x0a, 0xd9, 0x12, 0xa3, + 0x81, 0x30, 0x2e, 0xd5, 0x89, 0x14, 0xec, 0x15, 0x94, 0x6a, 0xe4, 0x1e, 0x57, 0x0b, 0xe4, 0x1e, + 0x57, 0xa5, 0x6d, 0x98, 0xf7, 0x01, 0xb2, 0xe2, 0xb6, 0xe9, 0xba, 0xce, 0x93, 0x28, 0x4f, 0xe5, + 0x35, 0xaa, 0x7a, 0xb9, 0x56, 0x37, 0xe8, 0x84, 0xcc, 0x0f, 0x28, 0xbd, 0x2d, 0xb6, 0x85, 0x40, + 0xdd, 0x74, 0x9e, 0x20, 0xbe, 0xd4, 0x27, 0x84, 0xe1, 0x2a, 0xb8, 0xec, 0x06, 0xec, 0x23, 0x79, + 0xbd, 0x92, 0xed, 0x85, 0x6f, 0x53, 0x73, 0x1b, 0x6c, 0x39, 0x41, 0x46, 0xdb, 0x08, 0x54, 0x34, + 0x06, 0xcd, 0x8c, 0x01, 0xe6, 0xcb, 0x2e, 0xa2, 0xc2, 0x91, 0x2b, 0x6c, 0x7f, 0xc0, 0x9f, 0x13, + 0x81, 0x65, 0xea, 0xd0, 0xeb, 0x70, 0x2e, 0xc5, 0xcb, 0x93, 0x86, 0x49, 0xf2, 0xc1, 0x46, 0x3e, + 0xe2, 0x4c, 0x36, 0x15, 0x16, 0xe6, 0x6b, 0x8a, 0xae, 0xbe, 0x4d, 0x03, 0x0a, 0x96, 0x87, 0x66, + 0xfd, 0xac, 0xe9, 0xf6, 0x70, 0x09, 0xa6, 0x07, 0x68, 0x72, 0x05, 0x96, 0xc6, 0xb5, 0x36, 0xeb, + 0x0f, 0x15, 0x8b, 0xc2, 0x17, 0x02, 0xaf, 0x26, 0x5f, 0x22, 0x97, 0x3f, 0x06, 0x9b, 0x34, 0x2b, + 0x54, 0x51, 0xb6, 0x8d, 0xe8, 0x60, 0x31, 0x90, 0x47, 0xaa, 0xa4, 0xa9, 0xbf, 0xed, 0xda, 0x43, + 0xc7, 0xa3, 0xb3, 0x6a, 0x90, 0x64, 0x93, 0x77, 0x42, 0x17, 0x93, 0x94, 0x21, 0x0d, 0xae, 0x04, + 0x72, 0x5f, 0x4c, 0x82, 0xe6, 0x26, 0x55, 0x77, 0xa4, 0xb8, 0x74, 0x26, 0x3b, 0x6d, 0xb6, 0x9b, + 0xbc, 0x41, 0xcc, 0x52, 0xef, 0xdd, 0x91, 0xfa, 0x08, 0x34, 0xa6, 0x18, 0xb9, 0x26, 0xbd, 0x6e, + 0x21, 0x88, 0x23, 0xd3, 0x2b, 0x3c, 0x06, 0x04, 0x26, 0x4c, 0x43, 0x49, 0x51, 0xb3, 0x81, 0xd7, + 0x67, 0x81, 0x28, 0x1d, 0x3e, 0xc4, 0x58, 0x3f, 0x35, 0xa5, 0xd1, 0x8a, 0x7f, 0x4e, 0x8a, 0x93, + 0x77, 0xc1, 0xbb, 0x51, 0x3a, 0x72, 0x6c, 0xe5, 0x14, 0x3f, 0x05, 0x7a, 0xf9, 0x47, 0xff, 0x47, + 0x34, 0x14, 0x59, 0x06, 0x56, 0x81, 0xd7, 0xa0, 0x18, 0x49, 0x63, 0xd7, 0xc0, 0x84, 0x52, 0xcb, + 0x2f, 0x3c, 0x2f, 0x96, 0x1a, 0x24, 0x8a, 0x3f, 0x45, 0xcb, 0xc7, 0x95, 0x19, 0x60, 0x1e, 0x90, + 0xef, 0x19, 0xc3, 0x80, 0x7c, 0xa6, 0xfb, 0x0c, 0xee, 0x83, 0x5b, 0xe0, 0x0c, 0xdf, 0x28, 0x9e, + 0x33, 0x66, 0x94, 0xad, 0x40, 0xb6, 0x02, 0xd9, 0x0a, 0x64, 0x2b, 0x90, 0xea, 0x0a, 0xfc, 0x06, + 0x2b, 0x3f, 0x89, 0x0a, 0x68, 0xdb, 0xdf, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXSelectIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x5a, 0x08, 0x06, 0x00, 0x00, 0x00, 0x26, 0x61, 0x71, + 0xb1, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x08, 0x58, 0x73, 0x21, 0x00, 0x00, + 0x07, 0x8e, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x6b, 0xa8, 0x55, 0x45, 0x14, 0xc7, + 0xbd, 0xbe, 0x25, 0x95, 0xac, 0x30, 0x0d, 0xba, 0xbe, 0xa2, 0xf2, 0x55, 0x64, 0xd0, 0x4b, 0x0a, + 0xa2, 0xd0, 0xa2, 0x07, 0x81, 0x2f, 0x34, 0x84, 0x08, 0xb5, 0x8c, 0x88, 0x50, 0xa8, 0x88, 0xca, + 0x0f, 0x41, 0x51, 0x91, 0x19, 0x29, 0x96, 0x50, 0xe0, 0x87, 0x50, 0x22, 0xf1, 0x59, 0x4a, 0x85, + 0xa9, 0x65, 0x65, 0x24, 0xa6, 0xe0, 0x07, 0x2b, 0xbc, 0x5a, 0x99, 0xa8, 0x44, 0xa5, 0x99, 0xe5, + 0xeb, 0xf6, 0xfb, 0x5f, 0xce, 0x3e, 0xcc, 0x9d, 0x3b, 0xfb, 0x38, 0xfb, 0x9c, 0xfd, 0xb8, 0xf7, + 0x38, 0x0b, 0xfe, 0xcc, 0xcc, 0x9a, 0x35, 0x6b, 0xd6, 0xfa, 0x9f, 0x73, 0xe6, 0xce, 0x9e, 0xbd, + 0xf7, 0xed, 0xd4, 0x29, 0x48, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, + 0x81, 0x81, 0xc0, 0x40, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0c, 0xb4, 0x66, 0xa0, 0xa1, 0x75, + 0x33, 0xbb, 0x56, 0x73, 0x73, 0x73, 0x0f, 0xbc, 0x4f, 0x06, 0xa7, 0xc0, 0x87, 0x0d, 0x0d, 0x0d, + 0xa7, 0xb3, 0x9b, 0xed, 0x3c, 0xf0, 0x0c, 0xa1, 0x1b, 0x40, 0x24, 0xcb, 0xce, 0x83, 0x94, 0xb3, + 0x4b, 0x11, 0x16, 0x2f, 0x8c, 0x98, 0x2c, 0x95, 0xa7, 0x28, 0xbb, 0x66, 0x37, 0x63, 0x71, 0x9e, + 0x3b, 0xe7, 0x34, 0x75, 0x2f, 0x6b, 0x1e, 0x91, 0x19, 0x08, 0xb5, 0x48, 0x09, 0x4d, 0x07, 0x03, + 0x79, 0x7d, 0x43, 0x1d, 0x53, 0xd7, 0xa7, 0x2a, 0x10, 0x9a, 0xf2, 0xe7, 0xea, 0xb5, 0x8e, 0xf1, + 0x07, 0xa4, 0x27, 0xf3, 0x4e, 0x02, 0xc7, 0xc0, 0x6a, 0xb6, 0x3c, 0xcd, 0x29, 0xc7, 0xe1, 0xe5, + 0x8e, 0x38, 0xba, 0x60, 0x38, 0x01, 0xa8, 0xd4, 0xd6, 0x4b, 0x5b, 0xb0, 0x8e, 0x27, 0x24, 0xb2, + 0x05, 0x44, 0xb2, 0x9a, 0x4a, 0xf7, 0x24, 0x59, 0x60, 0x3f, 0x30, 0x1a, 0x6c, 0x94, 0xfa, 0x90, + 0xbc, 0x85, 0x71, 0x17, 0x80, 0x8d, 0xc6, 0xf8, 0x35, 0xde, 0x83, 0xdb, 0x93, 0x21, 0x09, 0xb8, + 0xc8, 0x58, 0x87, 0x5e, 0x1b, 0x75, 0x2f, 0xc1, 0xb6, 0x9f, 0x41, 0x84, 0xaa, 0x89, 0xb6, 0x4d, + 0xd8, 0x8b, 0xcc, 0xcd, 0x1a, 0x68, 0x89, 0xbd, 0x7b, 0xf0, 0x8a, 0xa7, 0x50, 0x23, 0x12, 0xe8, + 0x02, 0xf6, 0x5a, 0x89, 0xa8, 0xf9, 0x31, 0x48, 0x42, 0xea, 0xa7, 0x86, 0x8f, 0x0f, 0x7c, 0x93, + 0x62, 0x4c, 0x6f, 0x60, 0xfe, 0x42, 0x22, 0x37, 0x3b, 0x7d, 0x7d, 0xb4, 0x3b, 0x3b, 0x32, 0xb8, + 0x06, 0x1c, 0x89, 0x32, 0x31, 0xca, 0xf5, 0xd4, 0xbd, 0x48, 0xc5, 0xae, 0x27, 0x78, 0x18, 0x4c, + 0x07, 0xdd, 0x7c, 0x92, 0xc4, 0x4e, 0x64, 0x7e, 0x01, 0x6c, 0xf9, 0x05, 0xc5, 0x15, 0x3e, 0x3e, + 0xda, 0xad, 0x0d, 0x09, 0x8c, 0x06, 0x87, 0xed, 0xcc, 0x68, 0xeb, 0x92, 0x32, 0xd1, 0x7a, 0xe8, + 0x93, 0x24, 0x3e, 0xfb, 0x80, 0x2f, 0x81, 0x2d, 0x22, 0x73, 0x98, 0x8f, 0x8f, 0x76, 0x6f, 0x43, + 0x22, 0xa3, 0xc0, 0x21, 0x3b, 0x43, 0xda, 0x0b, 0xd2, 0x0e, 0x1e, 0x9f, 0x4b, 0x1d, 0xf3, 0xfc, + 0x8c, 0x6e, 0x68, 0xda, 0x73, 0x15, 0xea, 0x8f, 0x84, 0x46, 0x02, 0x9b, 0xd4, 0xed, 0x69, 0x07, + 0xc5, 0x1c, 0xf6, 0xba, 0xbd, 0x1f, 0xdd, 0x90, 0xb4, 0xe7, 0x69, 0x17, 0xfe, 0x48, 0x6c, 0x04, + 0x38, 0x08, 0x22, 0x99, 0x97, 0x76, 0x60, 0x38, 0x5e, 0x10, 0x39, 0xa7, 0x6c, 0x02, 0xf5, 0x49, + 0x66, 0x44, 0x1c, 0x09, 0xf6, 0x07, 0x4f, 0x80, 0x07, 0x22, 0x5d, 0x9a, 0x25, 0x7e, 0x3b, 0x83, + 0x29, 0xe0, 0x71, 0xd0, 0x2f, 0x4d, 0xdf, 0xc1, 0x57, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0c, + 0x04, 0x06, 0x02, 0x03, 0x81, 0x81, 0x0e, 0xc0, 0x00, 0x5b, 0xa0, 0x3e, 0x1d, 0x20, 0xcc, 0xaa, + 0x43, 0x2c, 0xdf, 0x97, 0x27, 0xd1, 0x8b, 0xf1, 0x32, 0x1d, 0x5c, 0x14, 0xe3, 0x4d, 0x87, 0xca, + 0x3b, 0x38, 0xd4, 0x5d, 0x15, 0xd3, 0x5f, 0x51, 0x8d, 0xff, 0x7b, 0x31, 0x58, 0x08, 0x06, 0x81, + 0x9f, 0xc0, 0x4c, 0x7c, 0x6d, 0xa2, 0xf4, 0x16, 0x7c, 0x28, 0x5e, 0xdd, 0xdb, 0x1f, 0x59, 0x61, + 0xd0, 0x11, 0xfa, 0x96, 0xe2, 0xfb, 0x68, 0x05, 0x9b, 0x6c, 0xbb, 0x08, 0xb4, 0x1b, 0xd8, 0x03, + 0x7c, 0xe4, 0xe9, 0xa4, 0xd1, 0xe0, 0xf4, 0x6a, 0x70, 0xd2, 0x72, 0xfe, 0x37, 0xed, 0x44, 0x57, + 0x3f, 0xd8, 0xbf, 0x6c, 0xf9, 0x88, 0x6b, 0x6e, 0xa7, 0xa3, 0xfc, 0x65, 0x49, 0x1a, 0x6f, 0xcd, + 0xf6, 0x4c, 0xae, 0x4b, 0x49, 0x5f, 0xd9, 0x92, 0x74, 0x42, 0x1c, 0xcf, 0x89, 0x71, 0xbe, 0x2c, + 0x89, 0x2f, 0x7c, 0xec, 0x8a, 0xf1, 0xe3, 0x52, 0x0f, 0x4c, 0xe2, 0x3b, 0x2d, 0xdb, 0xe8, 0x26, + 0xdd, 0x5e, 0x1c, 0xfe, 0xea, 0xe9, 0x74, 0xb3, 0xa7, 0x9d, 0x69, 0x76, 0xd2, 0x6c, 0x18, 0xf5, + 0x89, 0x30, 0xd1, 0x68, 0xb4, 0xcf, 0x55, 0xf5, 0xfd, 0x30, 0xf7, 0xe0, 0xe8, 0xd0, 0xb9, 0x9c, + 0x65, 0xd1, 0x5f, 0xfe, 0x59, 0x90, 0x98, 0xd6, 0xb6, 0x47, 0x40, 0xdc, 0x1a, 0x7a, 0x96, 0xbe, + 0x1d, 0xe0, 0x3d, 0xd6, 0xa7, 0x33, 0x94, 0xde, 0x82, 0x6f, 0x1d, 0x06, 0xff, 0x00, 0xca, 0xf3, + 0x19, 0x83, 0xe7, 0xe3, 0x6f, 0xae, 0xd1, 0x8e, 0xad, 0xe2, 0x47, 0xf7, 0xb2, 0x66, 0x01, 0xad, + 0xa1, 0x2e, 0x5f, 0x1a, 0x7b, 0x18, 0x2c, 0xc6, 0xe7, 0x41, 0x35, 0xea, 0x56, 0x20, 0x43, 0xb7, + 0x4c, 0x5c, 0xf2, 0x17, 0xca, 0xbe, 0x75, 0x9b, 0x78, 0x56, 0x89, 0x41, 0xda, 0x1d, 0x2e, 0x36, + 0x4b, 0xba, 0x39, 0x59, 0xcd, 0x5b, 0xd7, 0x7e, 0x21, 0xef, 0xfb, 0x18, 0x52, 0xf7, 0xa1, 0xd7, + 0xbd, 0xf6, 0x20, 0x49, 0x18, 0x80, 0x34, 0xdd, 0xa0, 0x8b, 0x93, 0x29, 0x49, 0x7c, 0x05, 0x5b, + 0x18, 0x80, 0xc9, 0xee, 0xe0, 0x40, 0x0c, 0xa3, 0xdf, 0x06, 0x92, 0xaa, 0x60, 0x00, 0x32, 0x9f, + 0x89, 0x21, 0x54, 0xea, 0x5b, 0x93, 0xba, 0x64, 0xcc, 0xb5, 0x40, 0xa7, 0xfa, 0xb3, 0xc1, 0x70, + 0x73, 0x3c, 0xed, 0xbe, 0x60, 0x21, 0xd0, 0x7d, 0xfd, 0x65, 0xe0, 0x1e, 0xb3, 0xbf, 0x2e, 0xea, + 0x24, 0xa5, 0xa7, 0x48, 0x74, 0x95, 0xe4, 0x92, 0x95, 0x66, 0x92, 0x18, 0xe8, 0x3e, 0xbe, 0x6e, + 0x25, 0xcb, 0x7e, 0x27, 0x98, 0x61, 0xf5, 0xcf, 0x43, 0x67, 0xca, 0x69, 0x1a, 0x2f, 0x46, 0x36, + 0xd4, 0x75, 0x0b, 0xc5, 0x96, 0x95, 0x28, 0xda, 0xdf, 0x79, 0x02, 0x41, 0xe9, 0x21, 0x84, 0xa9, + 0x60, 0x6c, 0x94, 0x80, 0x6f, 0xc9, 0x98, 0xb7, 0x80, 0x4b, 0xce, 0xa0, 0x6c, 0x79, 0x80, 0x81, + 0x32, 0xee, 0xea, 0xed, 0x95, 0x68, 0x1e, 0x6c, 0xd6, 0xb9, 0x9c, 0xa0, 0x9b, 0x29, 0x1b, 0x4a, + 0x3d, 0x39, 0x7d, 0xcc, 0x61, 0xb3, 0x09, 0x5d, 0x8f, 0xc8, 0x4f, 0xe1, 0x25, 0xc1, 0x34, 0x82, + 0x1f, 0x8d, 0x40, 0x9f, 0x4c, 0x12, 0x14, 0xe3, 0x86, 0x01, 0x91, 0xe7, 0x92, 0x45, 0xf2, 0x45, + 0x87, 0xc8, 0x38, 0xe1, 0x30, 0xd0, 0xb8, 0x1b, 0x4b, 0x36, 0x93, 0x1d, 0xfd, 0x52, 0x69, 0x6f, + 0xab, 0xc3, 0x1e, 0xf9, 0x89, 0xfb, 0xf0, 0x5e, 0x50, 0x7f, 0xe1, 0x42, 0x80, 0x83, 0x40, 0x13, + 0x30, 0xe5, 0xbb, 0xa4, 0x81, 0x31, 0x78, 0x85, 0xe9, 0xc0, 0xa8, 0x1f, 0xa7, 0xde, 0x72, 0xb5, + 0x46, 0xf9, 0x8e, 0xa1, 0x37, 0xab, 0x1b, 0x35, 0x1f, 0x8a, 0x2e, 0xa0, 0xc9, 0xec, 0x30, 0xea, + 0xcf, 0x97, 0x6c, 0x26, 0x1a, 0x3a, 0xb3, 0xfa, 0x0f, 0x8d, 0x21, 0x49, 0xe3, 0x4e, 0xd5, 0x9e, + 0x00, 0x06, 0x83, 0x26, 0x60, 0xcb, 0x92, 0xa4, 0x13, 0xe1, 0x60, 0xac, 0xed, 0xc4, 0x68, 0x3f, + 0x5b, 0x22, 0x43, 0xa7, 0x54, 0x67, 0x0d, 0xbd, 0x59, 0xbd, 0xae, 0x64, 0xf3, 0x94, 0xa9, 0x34, + 0xea, 0x5a, 0x77, 0xe7, 0x82, 0xcf, 0x0c, 0x9d, 0x5d, 0x5d, 0x91, 0x34, 0xee, 0xd4, 0xec, 0x89, + 0x64, 0x08, 0xd8, 0x67, 0x47, 0x44, 0xfb, 0x6b, 0x50, 0xd5, 0xa5, 0x23, 0xe3, 0xbe, 0x71, 0xf8, + 0x93, 0xea, 0x37, 0xd0, 0xf2, 0x0c, 0x2a, 0x65, 0xdc, 0x3a, 0xd9, 0x72, 0x2e, 0x4b, 0xff, 0x38, + 0x50, 0xad, 0xe8, 0xc3, 0xba, 0x2a, 0x35, 0x92, 0x7c, 0x1d, 0x31, 0xe9, 0x50, 0xa0, 0x47, 0x61, + 0x6c, 0xf9, 0x0a, 0x45, 0x55, 0x64, 0x6a, 0x6e, 0xc6, 0x4e, 0xb2, 0x1d, 0x1a, 0xed, 0x87, 0x4a, + 0x36, 0xb7, 0x1b, 0x3a, 0xbb, 0xba, 0x0a, 0x45, 0x92, 0x23, 0x3d, 0x7b, 0xbc, 0xda, 0x6f, 0x6b, + 0x9e, 0xdc, 0x84, 0x09, 0xf5, 0x04, 0xc7, 0x6e, 0xcd, 0x6c, 0xc9, 0x56, 0xda, 0x35, 0x6d, 0x3f, + 0x18, 0x5f, 0x69, 0x0d, 0xdc, 0x15, 0x25, 0x89, 0xdd, 0x0e, 0x6b, 0xee, 0x34, 0x9b, 0x5a, 0x4b, + 0x2f, 0x89, 0xe6, 0xaa, 0xb5, 0x8c, 0xce, 0x43, 0x2b, 0xf9, 0x19, 0x40, 0xe7, 0x08, 0xcb, 0x60, + 0x2b, 0xed, 0xbb, 0x38, 0x22, 0x3b, 0x66, 0xe9, 0x13, 0x35, 0x4b, 0xc7, 0x80, 0x6f, 0xc6, 0x0c, + 0xd2, 0xe3, 0x93, 0x77, 0x97, 0xfa, 0x3e, 0x8f, 0xb1, 0x49, 0x43, 0xdd, 0x0b, 0x27, 0xb3, 0xd3, + 0x70, 0xe4, 0xe5, 0x83, 0xa4, 0x1a, 0x80, 0x79, 0xa8, 0xa1, 0xab, 0x8e, 0xde, 0x5e, 0x83, 0x3d, + 0x8c, 0xf0, 0xa5, 0xe7, 0x40, 0xff, 0x04, 0x2e, 0xd1, 0x03, 0x69, 0x33, 0x80, 0xef, 0xed, 0x19, + 0x97, 0x0f, 0x1f, 0x9d, 0xd6, 0xec, 0xfc, 0x0e, 0x67, 0x98, 0x4c, 0x7b, 0x42, 0xdd, 0xc6, 0x98, + 0x05, 0x12, 0xbd, 0xb0, 0xe0, 0xc1, 0xa9, 0xd6, 0xd2, 0xd7, 0x40, 0xd1, 0x12, 0xfd, 0x1a, 0x7c, + 0x42, 0x8e, 0xb5, 0x89, 0x3b, 0xf5, 0x8e, 0x1d, 0x90, 0x45, 0x07, 0x4c, 0x5e, 0x8e, 0xdf, 0xbd, + 0xa0, 0x6b, 0x16, 0xfe, 0x3d, 0x7d, 0x2e, 0x67, 0x09, 0x9a, 0xea, 0x69, 0x1b, 0x6b, 0x96, 0x39, + 0xa1, 0x90, 0xd5, 0xc8, 0xec, 0x13, 0x80, 0xde, 0x29, 0x5a, 0x49, 0xd0, 0x07, 0x5c, 0xd1, 0x60, + 0xf7, 0x3e, 0xfa, 0x69, 0xae, 0xbe, 0x9c, 0x74, 0x27, 0x98, 0x67, 0x00, 0xf1, 0x1d, 0xcd, 0x69, + 0xbe, 0xe4, 0xd3, 0x40, 0xd2, 0x18, 0xa0, 0xcb, 0xc0, 0x48, 0x54, 0xd7, 0x7d, 0xf5, 0x36, 0x82, + 0xfe, 0xfa, 0xc8, 0xa8, 0xc0, 0xb2, 0xc8, 0x0f, 0xb4, 0x0d, 0x27, 0x6d, 0x14, 0x10, 0xf3, 0x91, + 0x83, 0x1c, 0x5d, 0x8b, 0x3f, 0xd6, 0xc6, 0x18, 0x05, 0xfa, 0x4d, 0x0e, 0xfb, 0x3c, 0x55, 0xf3, + 0x5d, 0x71, 0x25, 0xd1, 0xf9, 0x6c, 0x9b, 0x92, 0xf8, 0xb3, 0x6d, 0x5d, 0xd7, 0xca, 0x9a, 0x73, + 0x11, 0x2c, 0x3d, 0x67, 0x1b, 0xd3, 0x7e, 0xdd, 0xa1, 0xcb, 0x53, 0x35, 0x26, 0xcf, 0xc9, 0x12, + 0xcf, 0x05, 0x69, 0x4b, 0xcf, 0xf1, 0xf5, 0x7a, 0x83, 0xfe, 0xf2, 0x3a, 0xae, 0x3a, 0xc8, 0x7a, + 0x8b, 0x54, 0x29, 0x24, 0x2d, 0x49, 0xe5, 0x78, 0x12, 0x27, 0x9c, 0xf5, 0x00, 0x82, 0x6b, 0x04, + 0x71, 0x7b, 0xcc, 0x28, 0x31, 0x91, 0x5e, 0xfe, 0xeb, 0x4e, 0xfd, 0xd1, 0xa8, 0xa3, 0xa0, 0xf2, + 0xd2, 0xac, 0x79, 0xa9, 0xc9, 0x3f, 0xa4, 0xdc, 0x06, 0x74, 0xf2, 0x53, 0x49, 0x56, 0xd3, 0xd9, + 0xf2, 0xf2, 0x18, 0x65, 0x2f, 0xe0, 0x7a, 0x6b, 0xaf, 0xd2, 0xf8, 0x34, 0xfb, 0x2e, 0xab, 0x25, + 0xe1, 0xac, 0xd7, 0xd0, 0x4e, 0x6c, 0x43, 0xb6, 0x10, 0xe0, 0x7d, 0x40, 0xdb, 0x92, 0x38, 0xb9, + 0x9f, 0x0e, 0xbd, 0x91, 0xd7, 0x17, 0x7b, 0xd9, 0x2d, 0x8e, 0x33, 0xcc, 0x41, 0x9f, 0x39, 0x27, + 0xa9, 0xe4, 0x00, 0x59, 0x77, 0x02, 0xd7, 0x09, 0xbc, 0xf9, 0xed, 0xd2, 0x53, 0x73, 0xfd, 0x81, + 0xde, 0x2d, 0x2d, 0x4a, 0x74, 0x91, 0x51, 0xb5, 0xe4, 0xba, 0x00, 0xc3, 0xd0, 0x38, 0x22, 0x5d, + 0x03, 0x2a, 0xdd, 0xcf, 0x39, 0x44, 0xff, 0x7e, 0x70, 0x03, 0xc8, 0x5b, 0xfe, 0x65, 0x42, 0xfd, + 0x4a, 0xaa, 0xfe, 0xc7, 0x06, 0xb9, 0x12, 0x2a, 0x76, 0x20, 0x55, 0xd7, 0xcc, 0x3a, 0x1c, 0x4e, + 0xfd, 0x4c, 0x40, 0xfe, 0x6b, 0x94, 0x6d, 0x90, 0x79, 0x53, 0x2d, 0x3e, 0x72, 0x5f, 0x2f, 0x08, + 0x78, 0x3d, 0x01, 0x4f, 0x04, 0x27, 0x6b, 0x09, 0x3c, 0xa3, 0xb1, 0x35, 0x3f, 0x6c, 0x91, 0x3b, + 0xa1, 0x22, 0x02, 0x52, 0xd7, 0x52, 0x4c, 0x01, 0x55, 0xff, 0xb4, 0xe4, 0x27, 0x03, 0xd9, 0x50, + 0xab, 0xcf, 0xdc, 0x7f, 0xf2, 0x66, 0xc0, 0xfc, 0xfc, 0x75, 0x68, 0xb2, 0x1c, 0x94, 0xf7, 0xa1, + 0x66, 0x7f, 0xce, 0xf5, 0xdd, 0xcc, 0x37, 0x9a, 0x0f, 0x5b, 0xef, 0x12, 0x54, 0x2d, 0x85, 0x7c, + 0x43, 0xa3, 0x68, 0x09, 0x5e, 0x77, 0x1d, 0x1f, 0x04, 0x67, 0x22, 0x5d, 0x81, 0xe5, 0xab, 0xb5, + 0x92, 0x59, 0x60, 0xec, 0xad, 0xa7, 0xe6, 0x9b, 0x3a, 0x0d, 0xe8, 0x31, 0x9a, 0xa2, 0x44, 0xdb, + 0xb5, 0x6e, 0xad, 0xa3, 0xea, 0xe0, 0x2d, 0x12, 0x9a, 0x0c, 0xec, 0x37, 0x45, 0xf2, 0x20, 0xf8, + 0x77, 0x26, 0x19, 0xdc, 0xc1, 0xe9, 0x73, 0x87, 0x4f, 0x62, 0xe3, 0xc1, 0xf1, 0x3c, 0x58, 0x2c, + 0xcd, 0xa1, 0xa3, 0xc4, 0xf1, 0xee, 0x68, 0xea, 0x44, 0x4b, 0x82, 0xb7, 0x00, 0x7d, 0x6b, 0xb2, + 0x16, 0x3d, 0x44, 0xa6, 0x4b, 0xde, 0xfa, 0x17, 0x12, 0xd5, 0x29, 0x95, 0xee, 0xfb, 0x67, 0x25, + 0x4d, 0x38, 0x1e, 0x5d, 0xff, 0x4c, 0x1a, 0x19, 0x92, 0x70, 0x57, 0xf0, 0x12, 0x88, 0x7b, 0x4a, + 0x8f, 0xae, 0xc4, 0x22, 0x5f, 0xef, 0x82, 0xd4, 0x1e, 0x6c, 0x30, 0x42, 0xee, 0x18, 0x55, 0x92, + 0xd7, 0x13, 0xca, 0x3a, 0x89, 0xaa, 0x55, 0x74, 0x3b, 0x66, 0x54, 0xc7, 0xc8, 0x3a, 0x87, 0x28, + 0x21, 0x43, 0xaf, 0xe5, 0xac, 0x01, 0x49, 0x76, 0x02, 0x7f, 0x60, 0xbf, 0x04, 0xdc, 0x9c, 0x43, + 0x88, 0x2d, 0x53, 0x14, 0x7a, 0xa5, 0x54, 0x4d, 0x92, 0x90, 0xa3, 0xff, 0x90, 0xa3, 0x2b, 0x2c, + 0x91, 0x34, 0x1c, 0x5c, 0x09, 0x74, 0xd0, 0xf2, 0x1f, 0xd0, 0x59, 0xaa, 0xae, 0x78, 0xb6, 0x83, + 0x6d, 0xe0, 0x13, 0x36, 0xeb, 0xd2, 0x07, 0x09, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x81, 0x81, 0xc0, + 0x40, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0xfe, 0x0c, 0xfc, 0x0f, + 0x72, 0x11, 0x0f, 0x81, 0x42, 0xe0, 0xea, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + + +#pragma mark - Toolbar Icons + +static const u_int8_t FLEXBookmarksIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x79, 0x47, 0xd8, + 0x15, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x6e, 0xd2, 0xbe, 0x00, 0x00, + 0x03, 0x25, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x99, 0xdb, 0x8b, 0x4d, 0x71, 0x14, 0xc7, + 0xcf, 0x76, 0xab, 0x51, 0x4a, 0x52, 0x2e, 0x45, 0xa9, 0xe3, 0xf2, 0x40, 0x8a, 0x29, 0x3c, 0x32, + 0x63, 0xf2, 0x36, 0x4a, 0x22, 0x49, 0x4a, 0x4a, 0x09, 0x85, 0x47, 0x5e, 0xa6, 0x3c, 0x69, 0x22, + 0xb9, 0x65, 0x5c, 0x1a, 0xe1, 0xd1, 0xcb, 0x78, 0x51, 0xfe, 0x01, 0xf7, 0x4b, 0x29, 0x22, 0x79, + 0xa3, 0x63, 0xcc, 0x18, 0x42, 0x53, 0x72, 0x7c, 0xd6, 0x99, 0xdf, 0xda, 0x2d, 0xbf, 0xdf, 0xde, + 0x67, 0x66, 0xef, 0x39, 0x73, 0x92, 0xf6, 0xaa, 0xef, 0xac, 0xcb, 0x5e, 0xbf, 0xb5, 0xbe, 0x7b, + 0xfd, 0x7e, 0xe7, 0x9c, 0xf6, 0x9e, 0x52, 0xe9, 0x1f, 0x93, 0x28, 0x89, 0x4f, 0xb5, 0x5a, 0x5d, + 0x42, 0x7c, 0x19, 0x58, 0x0c, 0xe6, 0x80, 0xc4, 0x3c, 0xe2, 0x79, 0xa4, 0xca, 0xa2, 0x0a, 0x78, + 0x03, 0x5e, 0x47, 0x51, 0xf4, 0x2a, 0xb5, 0x08, 0x44, 0x16, 0x82, 0xdb, 0xa0, 0x99, 0xd2, 0x47, + 0xb3, 0x45, 0x4a, 0x2a, 0xbe, 0x73, 0x82, 0x0b, 0x08, 0xbe, 0x04, 0x33, 0xf4, 0x62, 0x13, 0xf5, + 0x0f, 0x7a, 0xad, 0x60, 0x5a, 0xef, 0xa6, 0x98, 0xa6, 0xdd, 0xd8, 0x3e, 0x19, 0x19, 0xef, 0x00, + 0xf8, 0x6d, 0xf2, 0xc6, 0x6b, 0x4e, 0xa2, 0xc0, 0x2c, 0x10, 0x0f, 0x03, 0x7b, 0x3a, 0x38, 0x05, + 0x3a, 0x41, 0xa9, 0x24, 0x23, 0xf3, 0xf6, 0xa8, 0x1f, 0x7f, 0x3b, 0x90, 0xc4, 0x86, 0x0b, 0x75, + 0x5b, 0xc0, 0x56, 0x50, 0x01, 0x56, 0xe4, 0xdc, 0xd6, 0x08, 0x6d, 0xb2, 0x51, 0xec, 0x1d, 0x0d, + 0x67, 0x91, 0x50, 0x90, 0x3e, 0x5b, 0xbc, 0xbe, 0x9b, 0x65, 0x7c, 0x22, 0xe5, 0x11, 0x15, 0xff, + 0xed, 0x8b, 0xad, 0x89, 0x35, 0xee, 0x50, 0xde, 0x1e, 0x87, 0xb2, 0x12, 0x9a, 0x67, 0xfa, 0x7e, + 0xe5, 0x70, 0x7d, 0x33, 0xfe, 0x84, 0x99, 0xf4, 0x19, 0xa6, 0x78, 0xbf, 0x69, 0x30, 0x57, 0x09, + 0x99, 0x58, 0x49, 0x0e, 0x72, 0x33, 0xc5, 0xf6, 0x8b, 0x92, 0x08, 0x35, 0x93, 0x4c, 0xd0, 0xab, + 0x20, 0x14, 0x8c, 0xc4, 0x0b, 0x14, 0x13, 0xf2, 0x06, 0x12, 0xb8, 0xc5, 0x84, 0x82, 0x91, 0x78, + 0x81, 0x62, 0x42, 0xde, 0x40, 0x02, 0xb7, 0x98, 0x50, 0x30, 0x12, 0x2f, 0x50, 0x4c, 0xc8, 0x1b, + 0x48, 0xe0, 0x16, 0x13, 0x0a, 0x46, 0xe2, 0x05, 0x8a, 0x09, 0x79, 0x03, 0x09, 0xdc, 0x62, 0x42, + 0xc1, 0x48, 0xbc, 0xc0, 0xff, 0x39, 0x21, 0x9e, 0xad, 0x8e, 0x81, 0x4f, 0xa0, 0xcb, 0xbb, 0xe1, + 0xcc, 0xae, 0x7d, 0x94, 0xce, 0xbc, 0x58, 0x16, 0x40, 0xe2, 0x24, 0xea, 0xa8, 0x5b, 0x7c, 0x1c, + 0x7f, 0x26, 0x8f, 0x37, 0x07, 0x9d, 0x9f, 0x59, 0x8d, 0x6b, 0xcb, 0x68, 0x2e, 0xef, 0x03, 0x94, + 0x8c, 0x36, 0x3f, 0x40, 0xfc, 0x2c, 0xb0, 0xcf, 0xee, 0x7a, 0x6d, 0x54, 0x9d, 0x9b, 0x10, 0x0d, + 0x4f, 0x53, 0xfd, 0x70, 0x4a, 0x87, 0xfd, 0xc4, 0xcf, 0xe7, 0x21, 0x95, 0x8b, 0x10, 0x8d, 0xce, + 0xd0, 0xf0, 0x90, 0x21, 0x23, 0x4f, 0xba, 0x47, 0xc0, 0x17, 0x13, 0xdb, 0x87, 0x7d, 0x31, 0x0f, + 0x29, 0x39, 0x07, 0x27, 0x80, 0x8a, 0x2d, 0x6a, 0xea, 0xd7, 0xce, 0x4b, 0x44, 0xd2, 0x39, 0x4d, + 0x74, 0x7a, 0x08, 0xbd, 0x4e, 0x12, 0xd1, 0xad, 0x60, 0xc0, 0xc5, 0x55, 0x5d, 0xc6, 0x48, 0xdd, + 0x3e, 0xae, 0x7d, 0xd4, 0x44, 0xb4, 0x1c, 0x81, 0x5a, 0xa1, 0x51, 0x09, 0x49, 0x51, 0x70, 0xc1, + 0x2c, 0x16, 0x53, 0xc8, 0xac, 0xad, 0x15, 0x71, 0x7f, 0xf0, 0x57, 0x03, 0x9f, 0xd4, 0x55, 0x62, + 0x89, 0xbb, 0x41, 0x3c, 0x3b, 0x21, 0x16, 0x09, 0x99, 0x4b, 0xc0, 0x8a, 0x90, 0x59, 0x63, 0xc9, + 0xa8, 0x4d, 0x7c, 0x15, 0xf0, 0x49, 0xf5, 0x12, 0x0b, 0x48, 0x11, 0xfb, 0x8b, 0x50, 0x90, 0xa0, + 0x45, 0x55, 0xbb, 0x22, 0x3d, 0xf8, 0x7b, 0x35, 0x86, 0x1e, 0x02, 0x1d, 0x7c, 0xbc, 0xef, 0x9b, + 0x58, 0x6c, 0x12, 0x7f, 0x82, 0xd3, 0x0e, 0xe4, 0xed, 0x9b, 0xca, 0x2e, 0x0c, 0x21, 0x35, 0x59, + 0x03, 0x49, 0xba, 0x2e, 0x21, 0x47, 0xe6, 0x0a, 0x0b, 0xf7, 0x98, 0xc5, 0x75, 0xc9, 0x68, 0x5e, + 0x0a, 0xa9, 0x9d, 0x5c, 0xbf, 0x5e, 0x8f, 0x54, 0x2a, 0x21, 0x47, 0xe6, 0x1a, 0x05, 0x76, 0x6b, + 0x13, 0xb4, 0x1c, 0xf8, 0x8d, 0x34, 0x7b, 0x60, 0x62, 0xa9, 0x26, 0x79, 0x4f, 0xb9, 0xd8, 0x06, + 0x3e, 0x9b, 0x24, 0x79, 0x3b, 0x77, 0x93, 0xfa, 0x89, 0x5f, 0xca, 0x89, 0x84, 0xdc, 0x1d, 0xf4, + 0xb2, 0x50, 0xc6, 0xac, 0xa2, 0x64, 0x1e, 0x6a, 0x60, 0x2c, 0x1a, 0x52, 0xcf, 0xc8, 0x93, 0xed, + 0xb3, 0xa4, 0xb6, 0xe1, 0xdf, 0x4a, 0x23, 0xe5, 0x7f, 0xec, 0x7f, 0x91, 0x78, 0x17, 0x58, 0x19, + 0xc4, 0x69, 0x1d, 0x0b, 0x81, 0xb4, 0x1c, 0xd6, 0xaf, 0x04, 0xf2, 0x32, 0xd5, 0xca, 0x3d, 0x9c, + 0x61, 0x13, 0xe8, 0x4e, 0x9a, 0x90, 0x1c, 0xba, 0x0e, 0x53, 0x78, 0x10, 0xbb, 0x9d, 0x3b, 0x7d, + 0x64, 0x62, 0x99, 0x4d, 0xd6, 0x3f, 0x67, 0xd1, 0x06, 0x60, 0x5f, 0xe1, 0xc9, 0x76, 0x4e, 0xb3, + 0xc5, 0x94, 0x90, 0x7d, 0xad, 0x66, 0xaf, 0x2b, 0x99, 0xc7, 0x36, 0x98, 0xd7, 0x86, 0xd4, 0x0b, + 0xd6, 0x0a, 0x09, 0x4b, 0xca, 0x96, 0x8b, 0xbf, 0x17, 0x3e, 0xd8, 0xa8, 0xb3, 0x65, 0xcf, 0xdb, + 0x28, 0x22, 0x1f, 0xe1, 0x86, 0x89, 0x23, 0xb5, 0x9e, 0x82, 0xf2, 0xff, 0x0e, 0x5f, 0x46, 0x78, + 0xb0, 0x87, 0xf2, 0x3f, 0x8e, 0xef, 0x66, 0x2f, 0xdf, 0x63, 0x2f, 0xf7, 0xb3, 0x1b, 0xe9, 0x53, + 0x7f, 0x29, 0x78, 0x6b, 0x7a, 0xfe, 0xc4, 0x2e, 0xc7, 0xbf, 0x31, 0x38, 0xb3, 0x69, 0x28, 0xdf, + 0x13, 0x53, 0x41, 0x0f, 0x77, 0x92, 0xfa, 0x9b, 0xd6, 0x28, 0x62, 0xf4, 0x6c, 0xa1, 0x56, 0x27, + 0x98, 0x0f, 0x6e, 0xd0, 0xb3, 0xf2, 0x07, 0x6f, 0x8f, 0xd6, 0x17, 0xd8, 0x01, 0xed, 0x4d, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; -unsigned char FLEXCheckerPattern2x[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x01, 0x03, 0x00, 0x00, 0x00, 0xda, 0xb9, 0xaf, 0xbb, 0x00, 0x00, 0x00, - 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00, 0x00, 0x01, 0x73, - 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0x1a, 0x18, - 0x18, 0xff, 0xff, 0xfd, 0x2c, 0xa7, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x02, 0x74, 0x52, 0x4e, 0x53, 0x80, 0x80, - 0xa0, 0xa8, 0xd6, 0x53, 0x00, 0x00, 0x00, 0x14, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0xe0, 0xff, - 0xcf, 0x40, 0x0a, 0xfe, 0xff, 0x81, 0x81, 0x14, 0x0c, 0x00, 0xbc, 0xcb, 0x23, 0xdd, 0xc8, 0xaf, 0xa2, 0x74, +static const u_int8_t FLEXBookmarksIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x48, 0x08, 0x06, 0x00, 0x00, 0x00, 0xbd, 0x6d, 0x06, + 0x6c, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xa1, 0x70, 0x0a, 0x00, 0x00, + 0x04, 0xb4, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9b, 0x7b, 0x48, 0x64, 0x55, 0x1c, 0xc7, + 0x1d, 0xd3, 0xde, 0x9b, 0xab, 0x59, 0xd0, 0x03, 0x42, 0xd6, 0x30, 0xf6, 0x8f, 0x36, 0x42, 0x7a, + 0x10, 0x25, 0x15, 0x12, 0x11, 0x49, 0x84, 0x2c, 0x44, 0xd4, 0x2e, 0x19, 0x44, 0xd0, 0x2e, 0x58, + 0x4a, 0xd9, 0x53, 0x2b, 0xcb, 0xa0, 0xa4, 0x88, 0x10, 0xa2, 0xa2, 0x07, 0x14, 0xc5, 0xe2, 0xb2, + 0x1a, 0xed, 0x56, 0xbb, 0x20, 0xd5, 0x1f, 0x51, 0x54, 0x94, 0xb4, 0x3d, 0x76, 0x33, 0x22, 0x7a, + 0x48, 0x41, 0x14, 0xd1, 0xc3, 0x34, 0xfb, 0xfc, 0xe4, 0xce, 0xcc, 0x99, 0xd3, 0x39, 0x73, 0xef, + 0x3d, 0x33, 0xe3, 0xb9, 0xc2, 0x39, 0xf0, 0x65, 0xce, 0xf9, 0x3d, 0xbf, 0xdf, 0x73, 0xee, 0x0c, + 0x83, 0x73, 0xac, 0xab, 0x0b, 0x63, 0x6d, 0xed, 0x40, 0xae, 0x1c, 0xdd, 0xe5, 0xe5, 0xe5, 0x26, + 0xfc, 0xe7, 0x80, 0x53, 0x15, 0x9c, 0xc0, 0xbc, 0x6c, 0x1e, 0xfe, 0x5a, 0x8d, 0xbf, 0x28, 0xfc, + 0x15, 0x38, 0x10, 0x61, 0x7f, 0x2e, 0x97, 0xfb, 0x28, 0x71, 0x33, 0x04, 0xe5, 0xc0, 0x16, 0x30, + 0x0f, 0xb2, 0x3e, 0x5e, 0x85, 0x60, 0x5b, 0xac, 0x38, 0x09, 0x02, 0x6f, 0x65, 0x5d, 0x8d, 0xc6, + 0xef, 0x0f, 0xd6, 0x43, 0xaa, 0xb8, 0xff, 0x3d, 0x52, 0x04, 0xcc, 0x10, 0xd0, 0xa5, 0x06, 0xad, + 0xa1, 0x79, 0x0f, 0x8f, 0xe6, 0xb4, 0xf0, 0x2d, 0x11, 0x86, 0xa8, 0xab, 0xb0, 0xbd, 0xb8, 0x86, + 0x84, 0xe8, 0x54, 0xe7, 0x30, 0x6c, 0x44, 0xdc, 0xdf, 0x05, 0x61, 0x88, 0x3a, 0x0a, 0xe3, 0x17, + 0xe0, 0x24, 0x3d, 0x9a, 0xf5, 0x22, 0x90, 0x9d, 0xd8, 0x0f, 0xbe, 0x8e, 0xd6, 0xbc, 0xac, 0xfa, + 0x58, 0x4f, 0xc7, 0x0e, 0x70, 0x21, 0x38, 0xcd, 0xd2, 0xfd, 0x4e, 0x84, 0x8d, 0x16, 0x7c, 0x08, + 0xeb, 0x02, 0xa6, 0x31, 0x8b, 0xf1, 0xf4, 0x42, 0x60, 0x06, 0x26, 0xf0, 0x69, 0x00, 0x83, 0x26, + 0xb2, 0xd8, 0xde, 0x2f, 0xa1, 0x88, 0xa1, 0xcf, 0x10, 0xb8, 0x88, 0x6d, 0x53, 0x49, 0x60, 0x86, + 0x16, 0x70, 0x7b, 0xce, 0xc0, 0xf9, 0x97, 0x12, 0x8a, 0x04, 0x8c, 0x19, 0x82, 0xa6, 0x4a, 0x82, + 0x32, 0xb6, 0x80, 0x6f, 0x87, 0x81, 0xb3, 0x98, 0x5a, 0xeb, 0x15, 0xae, 0xed, 0xca, 0x3c, 0x3f, + 0xfd, 0x2c, 0x3f, 0xc9, 0xe8, 0xeb, 0x41, 0x78, 0x2d, 0x18, 0xb8, 0xb5, 0xab, 0xc2, 0x4c, 0x1f, + 0x1a, 0xdf, 0x18, 0x92, 0x32, 0x63, 0xe2, 0x43, 0x62, 0x09, 0x32, 0xdf, 0x19, 0x08, 0x9d, 0xa8, + 0x0a, 0x2b, 0x7c, 0x42, 0x2a, 0x81, 0xff, 0x2a, 0xf3, 0xac, 0x4e, 0x4d, 0x1c, 0xeb, 0x55, 0x61, + 0x59, 0x25, 0xee, 0xc4, 0x2b, 0x08, 0x73, 0xda, 0x36, 0x8f, 0x49, 0xe1, 0xc4, 0x3c, 0x6e, 0xbe, + 0x53, 0xeb, 0x70, 0x62, 0x4e, 0xdb, 0xe6, 0x31, 0x29, 0x9c, 0x98, 0xc7, 0xcd, 0x77, 0x6a, 0x1d, + 0x4e, 0xcc, 0x69, 0xdb, 0x3c, 0x26, 0x85, 0x13, 0xf3, 0xb8, 0xf9, 0x4e, 0xad, 0xc3, 0x89, 0x39, + 0x6d, 0x9b, 0xc7, 0xa4, 0x70, 0x62, 0x1e, 0x37, 0xdf, 0xa9, 0x75, 0x38, 0x31, 0xa7, 0x6d, 0xf3, + 0x98, 0x14, 0x4e, 0xcc, 0xe3, 0xe6, 0x3b, 0xb5, 0x0e, 0x27, 0xe6, 0xb4, 0x6d, 0x1e, 0x93, 0xc2, + 0x89, 0x79, 0xdc, 0x7c, 0xa7, 0xd6, 0xe1, 0xc4, 0x9c, 0xb6, 0xcd, 0x63, 0x52, 0x38, 0x31, 0x8f, + 0x9b, 0xef, 0xd4, 0x3a, 0x9c, 0x98, 0xd3, 0xb6, 0x79, 0x4c, 0x5a, 0xb5, 0x13, 0xe3, 0xe7, 0xd3, + 0x7e, 0xf0, 0x2d, 0x98, 0x01, 0xf2, 0xcb, 0x7f, 0x4d, 0xc7, 0xaa, 0x08, 0x43, 0xc8, 0x38, 0x2a, + 0x04, 0x27, 0x03, 0xb9, 0x1c, 0xf3, 0x0e, 0xb6, 0x9a, 0xfe, 0x68, 0x5f, 0x73, 0x61, 0x08, 0x78, + 0x0c, 0x21, 0xfd, 0x40, 0x1d, 0xad, 0x2c, 0xf6, 0xe1, 0x3b, 0x43, 0x35, 0x56, 0x73, 0x5e, 0x33, + 0x61, 0x90, 0x96, 0x8b, 0x66, 0x8f, 0x43, 0x76, 0xbb, 0x85, 0xf0, 0xb1, 0xd8, 0x45, 0xdc, 0x99, + 0x16, 0x7f, 0x45, 0xe6, 0x9a, 0x08, 0x13, 0x51, 0xb0, 0x7a, 0x02, 0xdc, 0x14, 0xc3, 0xae, 0x05, + 0xff, 0x5e, 0xe2, 0x3b, 0x63, 0xe2, 0x52, 0xbb, 0xab, 0x2e, 0x2c, 0x12, 0x35, 0x01, 0x93, 0x1b, + 0x13, 0xb2, 0x69, 0x26, 0xee, 0x4d, 0xf2, 0xce, 0x4a, 0x18, 0x9f, 0x28, 0xac, 0xaa, 0xc2, 0x22, + 0x51, 0x4f, 0xd2, 0xf9, 0x06, 0x4b, 0xf7, 0x17, 0xb0, 0xcb, 0x45, 0x2e, 0x7d, 0xc8, 0x1d, 0xa9, + 0x37, 0xc8, 0x3f, 0x5b, 0x77, 0xb8, 0xae, 0xab, 0x26, 0x0c, 0x52, 0x52, 0xeb, 0x29, 0x70, 0xbd, + 0x85, 0xcc, 0x08, 0xf7, 0x32, 0xae, 0xc5, 0x77, 0x01, 0xf8, 0xd2, 0x10, 0xd3, 0x84, 0x4d, 0xc4, + 0x9d, 0x6b, 0xf0, 0xa5, 0x36, 0x55, 0x45, 0x58, 0x24, 0xea, 0x69, 0xba, 0x5f, 0x67, 0x61, 0x30, + 0x8c, 0xa8, 0x61, 0xf1, 0xf1, 0x2a, 0x17, 0x4e, 0xe4, 0xf6, 0x9a, 0x49, 0xdc, 0x31, 0xd8, 0x5f, + 0xa7, 0xde, 0x79, 0xbc, 0x56, 0x34, 0x2a, 0x16, 0x16, 0x89, 0x7a, 0x16, 0x16, 0x5b, 0x2d, 0x4c, + 0xee, 0x41, 0xcc, 0x88, 0xea, 0x63, 0xfd, 0x3d, 0x6b, 0x11, 0x27, 0xd7, 0x08, 0xf5, 0xb1, 0x0e, + 0xc3, 0x1e, 0xea, 0x9e, 0xaf, 0x3b, 0xd2, 0xac, 0x2b, 0x12, 0x46, 0xf3, 0x43, 0x68, 0xf6, 0x3c, + 0xb8, 0xc6, 0xd2, 0xf4, 0x6e, 0x44, 0xdc, 0x6b, 0xf2, 0xc5, 0x88, 0x3b, 0x9a, 0x9c, 0xdd, 0xd4, + 0x77, 0xbe, 0xe9, 0xea, 0x2c, 0x2c, 0x12, 0x25, 0x1f, 0x06, 0x57, 0x9b, 0x88, 0x63, 0xbb, 0x0b, + 0xf2, 0xf7, 0x59, 0x7c, 0x2b, 0x66, 0xfc, 0x3f, 0x30, 0x91, 0x93, 0xfb, 0xdc, 0x10, 0x27, 0x17, + 0x43, 0x5f, 0xa3, 0x8f, 0xf8, 0x53, 0x0f, 0x27, 0x61, 0x34, 0x6b, 0xa0, 0x93, 0x5c, 0xb1, 0x95, + 0xab, 0xb6, 0xa6, 0x21, 0xb7, 0x3c, 0xef, 0x37, 0x39, 0x74, 0x5b, 0x8c, 0xb8, 0x23, 0x89, 0x97, + 0x5b, 0xda, 0x17, 0xeb, 0x79, 0x71, 0xeb, 0xd4, 0xc2, 0x22, 0x51, 0x2f, 0x51, 0x78, 0xb3, 0xa5, + 0xf8, 0x1d, 0x90, 0x2d, 0x5e, 0x5d, 0xb5, 0x04, 0xa9, 0x66, 0xe2, 0x7f, 0x64, 0x2d, 0x27, 0x63, + 0xba, 0x46, 0x28, 0xe2, 0xa6, 0xe9, 0xdb, 0xad, 0xe6, 0xc4, 0xcd, 0x53, 0x09, 0xa3, 0x78, 0x23, + 0x05, 0x5f, 0x06, 0xbd, 0x96, 0xc2, 0xb7, 0x43, 0xf2, 0x01, 0x8b, 0xaf, 0xac, 0x39, 0x46, 0xdc, + 0x11, 0x24, 0x4f, 0xd1, 0xff, 0x92, 0xb2, 0x45, 0x14, 0x67, 0x62, 0x61, 0x91, 0xa8, 0x57, 0xc8, + 0xbd, 0x52, 0xc9, 0x57, 0xa7, 0x43, 0x90, 0x7b, 0x50, 0x35, 0xa4, 0x9d, 0x93, 0x3f, 0x4f, 0x8e, + 0x9c, 0x9c, 0x5c, 0xaa, 0xd6, 0xc7, 0xe1, 0x18, 0x76, 0xc1, 0xe3, 0x52, 0xdd, 0x61, 0x5a, 0x27, + 0x12, 0x46, 0xb1, 0x43, 0x49, 0xde, 0x01, 0xae, 0x30, 0x15, 0xc1, 0x76, 0x1b, 0xa4, 0xc6, 0x2c, + 0xbe, 0x54, 0xe6, 0x48, 0xdc, 0x45, 0x24, 0x7d, 0x6a, 0x48, 0x3c, 0x0c, 0xdb, 0x4e, 0xf8, 0x5c, + 0x66, 0xf0, 0x95, 0x98, 0x62, 0x85, 0x51, 0x44, 0x8a, 0x4d, 0x82, 0x9e, 0x92, 0xcc, 0xe2, 0xe2, + 0x56, 0xc8, 0x3c, 0x54, 0x5c, 0x56, 0x3e, 0x4b, 0x20, 0x6e, 0x12, 0x5e, 0x97, 0x27, 0xea, 0x44, + 0xe0, 0xbb, 0x40, 0x1f, 0xcf, 0x60, 0x90, 0x6f, 0x02, 0xb6, 0x31, 0x98, 0xa8, 0xb8, 0x63, 0x10, + 0x4d, 0x8f, 0x07, 0x72, 0x3d, 0xde, 0x34, 0x16, 0x30, 0x6e, 0x03, 0xbf, 0x1a, 0x9c, 0xc5, 0xcf, + 0x00, 0x9c, 0x26, 0x61, 0x86, 0x9c, 0x82, 0x69, 0xc0, 0x91, 0x6f, 0xaa, 0x34, 0xba, 0x1d, 0x07, + 0x6c, 0xe2, 0x0a, 0x64, 0xb4, 0x49, 0x6f, 0xec, 0xa3, 0x68, 0x61, 0x31, 0xc0, 0xe3, 0xf2, 0xb0, + 0xc5, 0x57, 0x55, 0x33, 0x7d, 0x7e, 0xa2, 0xa0, 0xbc, 0xe7, 0x66, 0xd3, 0x14, 0x76, 0x11, 0x76, + 0x0b, 0xcd, 0x1e, 0x49, 0xd3, 0xa4, 0xd2, 0x58, 0x45, 0xdc, 0x27, 0x49, 0x6b, 0xa9, 0xc2, 0x7e, + 0x4f, 0x90, 0x74, 0x33, 0x4d, 0xc6, 0x13, 0xc4, 0x55, 0x3d, 0x84, 0xbe, 0x3f, 0x53, 0x54, 0xbe, + 0x81, 0x7c, 0x9c, 0xa0, 0x78, 0x51, 0x0b, 0xcf, 0xe8, 0x84, 0xf6, 0x9c, 0xea, 0xcb, 0x6d, 0x09, + 0x0a, 0xd6, 0x3c, 0x04, 0x52, 0x2d, 0xe0, 0x03, 0x9d, 0x9c, 0xb6, 0xde, 0x50, 0x20, 0x82, 0xa3, + 0x5b, 0x73, 0xe6, 0x97, 0xff, 0x30, 0xe9, 0x2b, 0x04, 0x66, 0x60, 0x02, 0x9f, 0x66, 0x20, 0x7f, + 0x9f, 0x34, 0x8d, 0x0f, 0x31, 0xaa, 0x4f, 0x62, 0x5d, 0x1d, 0x86, 0x51, 0xb0, 0xa4, 0x44, 0xcf, + 0x31, 0x97, 0x37, 0x6e, 0xe6, 0x06, 0xbc, 0x1a, 0xc1, 0xa3, 0x40, 0x36, 0x3e, 0x3f, 0x84, 0xef, + 0xca, 0x9f, 0xf4, 0x72, 0x3a, 0x63, 0x1c, 0x6d, 0xd8, 0xc4, 0xf9, 0x1b, 0x78, 0x9b, 0x67, 0xdb, + 0xf4, 0xbf, 0x23, 0x7a, 0x9a, 0xb7, 0x35, 0x7c, 0x4f, 0xa1, 0x79, 0x27, 0x90, 0xf7, 0xe0, 0x7b, + 0xf0, 0xfd, 0x53, 0xc8, 0xfc, 0x07, 0x76, 0x76, 0x93, 0xea, 0x76, 0xb7, 0x97, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXOpenTabsIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x53, 0xf7, 0x29, + 0xba, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0b, 0xfc, 0xcb, 0x00, 0x00, + 0x03, 0x6e, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9a, 0xcb, 0x6b, 0x53, 0x41, 0x14, 0xc6, + 0x13, 0xab, 0xf8, 0x40, 0xeb, 0x03, 0xc4, 0x17, 0x5a, 0xc5, 0xfa, 0x40, 0x4a, 0xbb, 0x71, 0x55, + 0x50, 0xa4, 0x05, 0xa1, 0x6e, 0xdd, 0xd5, 0x22, 0x2e, 0xdc, 0xb8, 0xf3, 0x0f, 0x10, 0x77, 0x5d, + 0x09, 0x2e, 0x2c, 0x28, 0xb8, 0x75, 0x21, 0xba, 0xb3, 0x08, 0x42, 0xf1, 0x01, 0xae, 0x74, 0x21, + 0x56, 0xb1, 0x52, 0xad, 0x20, 0x54, 0xad, 0xf8, 0x02, 0x4b, 0x11, 0xd4, 0xda, 0xc6, 0xdf, 0xb9, + 0xcd, 0xa4, 0x5f, 0x6f, 0xd2, 0x90, 0xcc, 0xcd, 0xcd, 0x4d, 0x4a, 0x0e, 0x7c, 0xdc, 0x73, 0x26, + 0x33, 0xdf, 0x77, 0xce, 0x9d, 0xb9, 0x93, 0xe9, 0x4d, 0x53, 0xa9, 0x25, 0x62, 0xe9, 0x70, 0x1d, + 0x99, 0x4c, 0x66, 0x0d, 0x6d, 0x7d, 0xe0, 0x20, 0x68, 0x05, 0xdb, 0x41, 0x5e, 0x3f, 0xda, 0x2a, + 0x61, 0x53, 0x90, 0xbc, 0xcb, 0x62, 0x30, 0x9d, 0x4e, 0xbf, 0xae, 0x04, 0x69, 0x8a, 0x22, 0x4e, + 0x82, 0x71, 0x90, 0x84, 0x4d, 0x23, 0x7a, 0x19, 0xac, 0x8d, 0x54, 0x0c, 0x04, 0x9d, 0x60, 0x16, + 0x24, 0x6d, 0xd7, 0x7d, 0x0a, 0x09, 0x96, 0x0c, 0x99, 0x37, 0x31, 0xf8, 0x19, 0xe8, 0x10, 0x92, + 0xdf, 0xf8, 0xcf, 0xc1, 0x07, 0x90, 0x91, 0xf6, 0x4a, 0xba, 0x1b, 0x20, 0x6b, 0x07, 0xdb, 0x84, + 0xd4, 0xb4, 0x3a, 0x59, 0x66, 0x4f, 0xa4, 0xad, 0x34, 0x97, 0x42, 0xda, 0x43, 0xd3, 0xf0, 0x82, + 0xb8, 0xa5, 0xb4, 0xd1, 0xd1, 0x7a, 0xa1, 0xb3, 0x02, 0x5c, 0x0a, 0xe9, 0x5f, 0xf1, 0x62, 0x85, + 0xc4, 0x9e, 0x0d, 0xb5, 0xa3, 0x5e, 0x44, 0x9e, 0x83, 0x10, 0x6e, 0x02, 0xa3, 0x92, 0xc0, 0xbd, + 0x72, 0xa9, 0x96, 0x65, 0x07, 0xd8, 0xee, 0xe4, 0x6c, 0x16, 0xe7, 0xa9, 0x0b, 0xaa, 0x71, 0x65, + 0x19, 0xcd, 0xa0, 0xa3, 0x4b, 0x69, 0x5f, 0xb9, 0xba, 0xae, 0x90, 0x66, 0x19, 0x38, 0x05, 0xf1, + 0x1f, 0x89, 0xab, 0xe5, 0x7e, 0x13, 0x21, 0xcd, 0x47, 0x9a, 0x17, 0x77, 0x5d, 0x21, 0x8b, 0xf7, + 0xa8, 0x93, 0x4f, 0x96, 0x4c, 0x21, 0xcb, 0xa3, 0xdc, 0x70, 0x1e, 0xce, 0x75, 0x8c, 0xef, 0x06, + 0xf6, 0x8c, 0x19, 0x36, 0x02, 0x5f, 0xd3, 0xad, 0xbf, 0x19, 0xee, 0x5b, 0x42, 0x64, 0x5b, 0xf2, + 0x57, 0x60, 0xa7, 0x80, 0xb7, 0xe0, 0x3e, 0xcb, 0xff, 0x1f, 0xd7, 0x85, 0xc6, 0xa0, 0x7e, 0xd9, + 0x31, 0x7e, 0x2e, 0xfc, 0x34, 0x3f, 0xa2, 0x6f, 0x1a, 0xf4, 0x81, 0x09, 0x19, 0x57, 0x4d, 0x77, + 0x04, 0xb1, 0x2e, 0xcd, 0xcc, 0x77, 0x69, 0x9d, 0x83, 0xe4, 0x06, 0xd0, 0x2f, 0x32, 0xe5, 0x8d, + 0xdb, 0x3f, 0x84, 0xc0, 0x03, 0x8a, 0x39, 0xe6, 0x84, 0xca, 0x5e, 0x5a, 0x0c, 0xde, 0xc2, 0xe0, + 0x7e, 0x47, 0x90, 0xbd, 0xda, 0x96, 0x6d, 0x27, 0x80, 0xef, 0xa1, 0xf6, 0x4a, 0x85, 0x76, 0x02, + 0xd9, 0x0a, 0xec, 0x00, 0xab, 0x76, 0x95, 0x7c, 0x3a, 0x58, 0x66, 0xd3, 0x41, 0x23, 0x41, 0xc9, + 0x4b, 0x8b, 0xbe, 0xe7, 0x81, 0xda, 0x10, 0xc1, 0x0e, 0x65, 0x8f, 0xcb, 0x47, 0xa7, 0x0d, 0xbc, + 0x54, 0x71, 0xfc, 0xe3, 0xa6, 0xe7, 0xb3, 0xb4, 0xf4, 0xcb, 0xca, 0x8e, 0xe1, 0xbd, 0xdc, 0x91, + 0x4f, 0x71, 0x25, 0xaf, 0xbc, 0xe8, 0xbc, 0x22, 0x3e, 0xad, 0x6d, 0xf8, 0x41, 0x3e, 0x3e, 0x85, + 0xec, 0x17, 0xa2, 0x61, 0xc8, 0xe3, 0x5a, 0x4e, 0x22, 0x33, 0xef, 0xa2, 0x37, 0x4c, 0xf4, 0x63, + 0xbe, 0x25, 0x15, 0xe4, 0xe3, 0x53, 0xc8, 0x26, 0x21, 0xf9, 0x2c, 0x7e, 0x35, 0x5d, 0xd5, 0x0d, + 0xf2, 0xf1, 0x29, 0x44, 0x13, 0x8e, 0xeb, 0x78, 0xaf, 0x1a, 0x85, 0xfc, 0x3c, 0xdd, 0xa8, 0x85, + 0x14, 0x12, 0x49, 0xa4, 0xad, 0x51, 0x48, 0x22, 0xb7, 0xbd, 0x88, 0x68, 0x63, 0x46, 0x8a, 0xdc, + 0x9c, 0x44, 0x3e, 0x6a, 0xcc, 0x48, 0x22, 0xb7, 0xbd, 0x88, 0x68, 0x63, 0x46, 0x8a, 0xdc, 0x9c, + 0x44, 0x3e, 0x5a, 0x72, 0x33, 0x32, 0x77, 0x9e, 0x9f, 0xbb, 0x97, 0xab, 0x38, 0x1a, 0xc7, 0xf5, + 0xd2, 0x3a, 0xb6, 0xd9, 0x72, 0x33, 0xf2, 0x5e, 0x14, 0x56, 0xe2, 0xef, 0x96, 0xb8, 0x2e, 0x5c, + 0x57, 0xc8, 0x58, 0x28, 0xdb, 0x8b, 0xa1, 0xb8, 0xe6, 0x43, 0xf7, 0xa7, 0xee, 0x08, 0x99, 0x4e, + 0x82, 0xf5, 0xd9, 0x8c, 0xcf, 0xb0, 0xbc, 0xf6, 0xe2, 0xdf, 0x01, 0x1f, 0x81, 0x9e, 0x36, 0xa3, + 0xbc, 0x29, 0xc9, 0xd2, 0x57, 0xfe, 0x12, 0x14, 0xc2, 0x1f, 0x2b, 0x93, 0x24, 0x7e, 0x01, 0xfa, + 0x01, 0x91, 0x38, 0x82, 0x6f, 0xa8, 0x0b, 0x73, 0x4b, 0xcb, 0x92, 0xbd, 0x06, 0x6e, 0xd6, 0x45, + 0xd6, 0x05, 0x92, 0xcc, 0x15, 0xc2, 0xac, 0xcc, 0x80, 0x5e, 0xfa, 0x74, 0x81, 0x21, 0x30, 0x0e, + 0xec, 0xed, 0x48, 0x5d, 0x98, 0x7b, 0x46, 0x72, 0xc9, 0x52, 0xcc, 0x23, 0x02, 0x83, 0xfd, 0x14, + 0x67, 0x3b, 0x98, 0xbd, 0xfe, 0xd1, 0xed, 0xf8, 0x2e, 0x71, 0x1b, 0xa8, 0x29, 0xcb, 0x2b, 0x44, + 0xb3, 0xa3, 0x28, 0x7b, 0x2b, 0x6f, 0x33, 0x93, 0x33, 0x8a, 0xfb, 0x9b, 0x0b, 0x6a, 0xc8, 0xc9, + 0x2d, 0xad, 0x1a, 0xca, 0xc9, 0x2b, 0x15, 0x9f, 0x42, 0x74, 0x2b, 0x6e, 0xf2, 0x52, 0x8d, 0x3e, + 0x48, 0x75, 0x83, 0x7c, 0x7c, 0x0a, 0xd1, 0x57, 0x31, 0x2d, 0xd1, 0x73, 0xf2, 0x62, 0xd8, 0x25, + 0xa3, 0x82, 0x7c, 0x7c, 0x0a, 0xd1, 0x53, 0x40, 0x07, 0xcf, 0xcc, 0x01, 0x21, 0x8d, 0xdd, 0x45, + 0xaf, 0x07, 0x11, 0xfd, 0x2d, 0x5e, 0xf3, 0x29, 0x5d, 0x1f, 0xa2, 0xb3, 0x40, 0xed, 0x0d, 0x41, + 0x0f, 0x70, 0xa7, 0x82, 0xd2, 0xc9, 0xca, 0xe8, 0x09, 0xff, 0x66, 0x70, 0x0a, 0x7c, 0x01, 0x6a, + 0x9d, 0x46, 0xa3, 0xdb, 0x6a, 0x49, 0xb4, 0x30, 0xac, 0xa6, 0xa3, 0x1d, 0x69, 0xf6, 0x14, 0x18, + 0x90, 0xff, 0xe3, 0x4b, 0x81, 0x4e, 0x1e, 0x4d, 0x96, 0xa7, 0x3e, 0x17, 0x8e, 0xe2, 0x21, 0x3b, + 0x6b, 0xb7, 0x05, 0x65, 0x17, 0x62, 0x83, 0x28, 0xe6, 0x04, 0x97, 0x41, 0x50, 0x88, 0xdc, 0xba, + 0x54, 0xc3, 0x7e, 0x21, 0x72, 0x98, 0x42, 0x46, 0x23, 0x89, 0x51, 0x8c, 0xfd, 0x93, 0xc1, 0x63, + 0x90, 0x84, 0xdd, 0x46, 0x74, 0xa7, 0x16, 0xe0, 0x35, 0x23, 0x4a, 0x00, 0xa1, 0x2d, 0xb1, 0xd6, + 0x2c, 0xec, 0x5f, 0x32, 0xe2, 0x32, 0xf7, 0x1b, 0xe2, 0x18, 0xb3, 0x30, 0x11, 0x16, 0xf9, 0x0f, + 0xa4, 0x99, 0x6b, 0x25, 0x92, 0x4d, 0xbc, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXOpenTabsIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x48, 0x08, 0x06, 0x00, 0x00, 0x00, 0xbe, 0xda, 0x08, + 0x44, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xab, 0x1d, 0x6b, 0x00, 0x00, + 0x05, 0x20, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x4d, 0x68, 0x15, 0x57, 0x14, 0xc7, + 0xf3, 0xaa, 0x6d, 0xb0, 0x9f, 0xba, 0x88, 0xa8, 0xad, 0xb6, 0x09, 0x7e, 0xa1, 0x50, 0x50, 0xbb, + 0xb1, 0x10, 0x25, 0xdd, 0x14, 0xd2, 0xd2, 0x2c, 0xda, 0x2e, 0x0a, 0x0d, 0x85, 0xfa, 0x81, 0x0a, + 0xe2, 0x22, 0x94, 0xe2, 0xc2, 0x4d, 0x05, 0x45, 0xe8, 0xa2, 0x50, 0xaa, 0x60, 0x57, 0x51, 0xdc, + 0xb8, 0x71, 0x91, 0xda, 0x95, 0xe9, 0xa6, 0x1f, 0xf4, 0x0b, 0x1a, 0xda, 0xb4, 0xd0, 0x54, 0xda, + 0x2e, 0x8c, 0x69, 0xd1, 0x95, 0x28, 0x56, 0xa2, 0x8d, 0xbf, 0x23, 0x93, 0x77, 0x6f, 0xee, 0x3b, + 0xf3, 0x6e, 0xe6, 0x71, 0x27, 0x99, 0xc9, 0xdc, 0x03, 0x7f, 0xe6, 0xde, 0x33, 0xe7, 0xde, 0x73, + 0xce, 0x7f, 0xe6, 0xde, 0x99, 0xb9, 0x6f, 0xe6, 0xb5, 0xb5, 0x45, 0x99, 0x35, 0x03, 0xb5, 0x59, + 0x5b, 0x62, 0x38, 0x35, 0x35, 0xd5, 0xc1, 0xe6, 0x19, 0xf0, 0x50, 0x96, 0x76, 0x39, 0xd9, 0x4e, + 0xd1, 0xef, 0xd5, 0x5a, 0xad, 0xf6, 0x4f, 0x4e, 0xfd, 0x37, 0x74, 0xdb, 0x94, 0x2c, 0xc8, 0x79, + 0x93, 0x16, 0xaf, 0x83, 0xb5, 0x09, 0x9e, 0x6a, 0xe8, 0x61, 0xfe, 0x15, 0x37, 0x09, 0xe1, 0x72, + 0x82, 0x21, 0xb6, 0x67, 0x21, 0x50, 0x88, 0x9c, 0x1b, 0x81, 0xa4, 0x4d, 0x60, 0x18, 0x94, 0x51, + 0xbe, 0x21, 0xe8, 0xad, 0x73, 0xc2, 0x14, 0x8e, 0xde, 0x02, 0x93, 0x65, 0x64, 0xc9, 0x8a, 0xf9, + 0x1e, 0xe5, 0x7d, 0xa1, 0x09, 0x9b, 0x31, 0x0c, 0x71, 0xb0, 0x0c, 0x07, 0xbf, 0x03, 0x99, 0x9b, + 0xca, 0x2e, 0x32, 0x3c, 0x37, 0x32, 0x24, 0xc7, 0x43, 0x25, 0xb2, 0xd8, 0xe9, 0xe8, 0x18, 0x75, + 0x1f, 0x51, 0xff, 0x63, 0x33, 0x77, 0x73, 0x82, 0x13, 0xa0, 0x55, 0x95, 0x03, 0xdd, 0xec, 0x42, + 0xf3, 0x38, 0xfb, 0x3f, 0x02, 0x32, 0xef, 0x86, 0x15, 0xce, 0xaa, 0x4e, 0x20, 0xa7, 0xaf, 0x26, + 0x32, 0x0f, 0xf4, 0x82, 0x67, 0x41, 0xb3, 0x00, 0xc3, 0x06, 0xd5, 0xa4, 0x37, 0xe2, 0xa8, 0x81, + 0xd5, 0xe0, 0x65, 0xf0, 0x05, 0x48, 0x93, 0x17, 0x9a, 0x74, 0xd3, 0xda, 0x2e, 0x3c, 0xbd, 0x96, + 0xe2, 0xed, 0x14, 0xfa, 0x19, 0xc3, 0xb5, 0x35, 0x0f, 0xf9, 0xb6, 0x22, 0xc6, 0xe3, 0x29, 0xf1, + 0xef, 0x0e, 0xee, 0x19, 0x47, 0x03, 0x8a, 0xb3, 0x09, 0x74, 0x4f, 0x06, 0x77, 0x96, 0x43, 0x87, + 0xc4, 0xd9, 0x0e, 0xc6, 0x94, 0x1c, 0x4e, 0x84, 0x72, 0x67, 0x0f, 0xa9, 0x75, 0x4a, 0xa7, 0x97, + 0x98, 0x20, 0x6f, 0x28, 0xfa, 0xc2, 0xa9, 0x88, 0xf3, 0x0e, 0x41, 0x7d, 0xa6, 0x04, 0xb6, 0x5e, + 0xd1, 0xb5, 0xa4, 0xb2, 0xc9, 0x92, 0x1b, 0x4f, 0x57, 0xc6, 0x5c, 0x45, 0xc1, 0xeb, 0x72, 0x25, + 0x77, 0x45, 0x3b, 0x09, 0x5c, 0x9b, 0x59, 0xd5, 0x6d, 0xb2, 0xe4, 0xea, 0xe1, 0xca, 0x35, 0x57, + 0x51, 0xf0, 0xfa, 0xbf, 0x4a, 0x7c, 0x8f, 0x29, 0xba, 0x96, 0x54, 0x36, 0x59, 0x2d, 0x75, 0x50, + 0xa5, 0x46, 0x91, 0xac, 0x0c, 0x47, 0x3b, 0x92, 0x15, 0xc9, 0xca, 0xc0, 0x40, 0x06, 0x53, 0xf7, + 0x71, 0x27, 0x43, 0x53, 0xbf, 0x29, 0xf7, 0x3c, 0xab, 0xb1, 0xb2, 0x97, 0x78, 0xe4, 0x8a, 0xbb, + 0x06, 0x2c, 0xf2, 0xb7, 0x6e, 0xc9, 0x42, 0xbb, 0x79, 0x7e, 0x8e, 0x38, 0xee, 0xa5, 0xf4, 0x26, + 0x6b, 0x61, 0xb2, 0xbc, 0xf3, 0x47, 0xb2, 0x1d, 0xe6, 0x16, 0xe4, 0x87, 0x14, 0xdb, 0xb6, 0x5c, + 0xc8, 0x22, 0xb8, 0x76, 0x1c, 0xbe, 0x07, 0x0e, 0x83, 0x47, 0xd3, 0x9c, 0xcf, 0xa1, 0x3e, 0x6d, + 0xba, 0x59, 0x45, 0x0c, 0x82, 0x1d, 0x49, 0x2c, 0x72, 0x4f, 0x7b, 0x86, 0xf2, 0xfb, 0x90, 0xd6, + 0x70, 0x65, 0x4d, 0xeb, 0x24, 0x69, 0x9b, 0x7d, 0x83, 0xb3, 0xcd, 0xb4, 0xfa, 0x0d, 0x1c, 0x05, + 0x45, 0x20, 0x2a, 0x4b, 0x12, 0x72, 0x66, 0xbe, 0x03, 0xe4, 0x49, 0xe0, 0x0d, 0xb7, 0x61, 0x50, + 0xb2, 0x70, 0x20, 0xce, 0x4e, 0x83, 0x2e, 0xd7, 0x51, 0xc9, 0xea, 0xf2, 0x88, 0xf7, 0x29, 0xf9, + 0x2c, 0xb7, 0xe3, 0x0e, 0x4a, 0x16, 0x1d, 0xbf, 0x0b, 0x5e, 0xb4, 0x1d, 0x94, 0xb8, 0xbc, 0x94, + 0xd8, 0x3f, 0xb4, 0xe3, 0x0f, 0x36, 0x67, 0x71, 0x14, 0x64, 0xc8, 0xa5, 0x3d, 0xb4, 0xca, 0xf3, + 0xe5, 0x49, 0xf0, 0x33, 0xf8, 0x13, 0x4c, 0x82, 0xf9, 0x16, 0x19, 0x05, 0x4f, 0x83, 0x0d, 0x60, + 0x0f, 0xd0, 0x1e, 0x8b, 0xfa, 0xc9, 0xeb, 0x13, 0xe6, 0xaf, 0xef, 0xd8, 0x6f, 0x04, 0xe5, 0xb7, + 0xc0, 0x95, 0x59, 0x2f, 0xcd, 0xd2, 0x70, 0xab, 0xdb, 0x38, 0xa9, 0x7f, 0xcf, 0x76, 0xa5, 0xf1, + 0x54, 0xbc, 0x12, 0xf1, 0xc9, 0x8a, 0xc5, 0xe9, 0x24, 0x5e, 0x77, 0x33, 0x30, 0x1d, 0x71, 0xc8, + 0x61, 0xa8, 0x1d, 0x99, 0xbb, 0x38, 0xda, 0xc5, 0x91, 0x99, 0x98, 0x76, 0x58, 0xc4, 0x2d, 0xf1, + 0xc9, 0x8a, 0xc5, 0x21, 0xf0, 0x97, 0x12, 0x5f, 0x3d, 0xaf, 0xbc, 0xc9, 0xfa, 0x9a, 0x40, 0x7e, + 0x51, 0x02, 0x28, 0x9c, 0x8a, 0x38, 0x6f, 0x13, 0xd4, 0xa0, 0x12, 0x58, 0x2e, 0x64, 0x69, 0xeb, + 0x46, 0x63, 0x8a, 0xf3, 0x22, 0xab, 0xb4, 0x78, 0xeb, 0x79, 0x85, 0x3c, 0xb3, 0xe4, 0x97, 0x21, + 0x57, 0xae, 0xb8, 0x8a, 0x82, 0xd7, 0xb5, 0x78, 0xeb, 0x79, 0x85, 0x24, 0x4b, 0xe3, 0x41, 0x7e, + 0x09, 0x2a, 0x93, 0x34, 0x8d, 0x37, 0x6f, 0xb2, 0xca, 0x44, 0x94, 0x37, 0xd6, 0x48, 0x96, 0x97, + 0x22, 0x63, 0x10, 0xc9, 0x32, 0x5c, 0x78, 0x4b, 0x91, 0x2c, 0x2f, 0x45, 0xc6, 0x20, 0x92, 0x65, + 0xb8, 0xf0, 0x96, 0x22, 0x59, 0x5e, 0x8a, 0x8c, 0x41, 0x24, 0xcb, 0x70, 0xe1, 0x2d, 0x45, 0xb2, + 0xbc, 0x14, 0x19, 0x83, 0x48, 0x96, 0xe1, 0xc2, 0x5b, 0x8a, 0x64, 0x79, 0x29, 0x32, 0x06, 0x91, + 0x2c, 0xc3, 0x85, 0xb7, 0x14, 0xc9, 0xf2, 0x52, 0x64, 0x0c, 0x22, 0x59, 0x86, 0x0b, 0x6f, 0x29, + 0x92, 0xe5, 0xa5, 0xc8, 0x18, 0x44, 0xb2, 0x0c, 0x17, 0xde, 0x52, 0x24, 0xcb, 0x4b, 0x91, 0x31, + 0xb0, 0xc9, 0xd2, 0x16, 0xbe, 0x1e, 0x31, 0xa6, 0xb1, 0x64, 0x93, 0x35, 0xae, 0xd0, 0xd1, 0xa5, + 0xe8, 0x2a, 0xab, 0xb2, 0xc9, 0x92, 0x37, 0x49, 0x5c, 0x79, 0xde, 0x55, 0x54, 0xb9, 0xee, 0x23, + 0xab, 0x87, 0x5f, 0x1c, 0x5f, 0xaa, 0x32, 0x41, 0x76, 0xee, 0x3e, 0xb2, 0xc4, 0x76, 0x10, 0xc2, + 0x7a, 0xed, 0x46, 0x55, 0x2d, 0xdb, 0xef, 0x3a, 0xfc, 0x08, 0x09, 0xf2, 0x1e, 0x42, 0x97, 0x43, + 0x86, 0x7c, 0x8c, 0x79, 0x11, 0xc2, 0x7e, 0x62, 0x2b, 0xaf, 0x12, 0xfd, 0x0d, 0xb4, 0x97, 0xc3, + 0xe4, 0x9d, 0x81, 0x05, 0x2d, 0x75, 0xb2, 0xf8, 0x45, 0xf6, 0x3f, 0x08, 0x39, 0x48, 0xb6, 0x17, + 0x53, 0x32, 0xde, 0x82, 0x5e, 0x50, 0x59, 0xb1, 0x87, 0x61, 0x1b, 0x84, 0x7d, 0x0e, 0x13, 0x17, + 0x2a, 0xcb, 0x86, 0x27, 0xf1, 0x19, 0x64, 0x25, 0xb6, 0x7b, 0xd9, 0x9e, 0xf3, 0xb4, 0xab, 0xe4, + 0xee, 0x06, 0xb2, 0x38, 0xbb, 0xae, 0x83, 0xb7, 0x61, 0xa3, 0x1b, 0x8c, 0x54, 0x92, 0x95, 0x94, + 0xa4, 0xeb, 0x73, 0x96, 0xbb, 0x1f, 0xc2, 0xbe, 0x62, 0x0e, 0xdb, 0x86, 0x5e, 0x26, 0xfc, 0xb5, + 0x16, 0x64, 0xc2, 0x6f, 0x20, 0x19, 0xdd, 0x76, 0xb0, 0x02, 0x2c, 0x58, 0x49, 0x25, 0x4b, 0x32, + 0x86, 0x30, 0x79, 0x04, 0xba, 0x9c, 0x40, 0x54, 0xa9, 0x02, 0xb1, 0x43, 0xec, 0x7c, 0x35, 0xd5, + 0x60, 0x01, 0xec, 0xd0, 0xce, 0x90, 0x05, 0x90, 0x56, 0x3e, 0x29, 0x44, 0xb2, 0x32, 0xf0, 0x1a, + 0xc9, 0x8a, 0x64, 0x65, 0x60, 0x20, 0x83, 0x69, 0xc8, 0x33, 0xeb, 0x96, 0xe2, 0x77, 0xc6, 0x4b, + 0xf7, 0xca, 0xfe, 0xa2, 0xa9, 0x3a, 0x94, 0x80, 0xea, 0x79, 0x85, 0x24, 0x4b, 0xae, 0x9a, 0xae, + 0x94, 0xed, 0x79, 0x51, 0x8b, 0xb7, 0x9e, 0x57, 0x48, 0xb2, 0xb4, 0x97, 0x57, 0xb7, 0x73, 0x4b, + 0x51, 0x8a, 0x7b, 0x2f, 0xe2, 0x94, 0x8f, 0x08, 0xfa, 0xdc, 0xa3, 0x4d, 0xbd, 0x9e, 0x57, 0x48, + 0xb2, 0xb4, 0xc5, 0xc3, 0x27, 0x70, 0xf6, 0x31, 0x81, 0xe4, 0xf5, 0xc9, 0x9c, 0x92, 0x5b, 0xcb, + 0xaa, 0x03, 0xb4, 0x94, 0x1b, 0x6b, 0x57, 0xb4, 0xbc, 0x5c, 0x9b, 0x6c, 0x75, 0x08, 0x59, 0x06, + 0x64, 0xe5, 0x42, 0x93, 0x11, 0x94, 0x7d, 0x40, 0xbe, 0xfd, 0x0b, 0x79, 0x80, 0xb2, 0x05, 0xe9, + 0x58, 0x13, 0x4b, 0x07, 0xe8, 0x06, 0xe7, 0x41, 0x9a, 0xbc, 0x32, 0xdd, 0x4c, 0x4e, 0xbd, 0x60, + 0x82, 0xb7, 0x0f, 0xe8, 0xec, 0x88, 0xa7, 0x43, 0x59, 0x0b, 0xd3, 0xd6, 0xc3, 0x3c, 0xcd, 0x82, + 0xef, 0x96, 0xdc, 0x1f, 0xf6, 0xf4, 0xfa, 0x25, 0xfb, 0x77, 0xf2, 0x24, 0xf3, 0xe0, 0xbf, 0x77, + 0x42, 0x93, 0xb5, 0x84, 0xce, 0x7f, 0x05, 0x9d, 0x9e, 0x20, 0xca, 0xb0, 0xfb, 0x2e, 0x41, 0x6e, + 0x81, 0xa8, 0xd1, 0xe9, 0x60, 0x83, 0x0e, 0x09, 0x3a, 0x96, 0x4f, 0x3a, 0xf6, 0x03, 0xf9, 0x16, + 0xa6, 0xec, 0x72, 0xcc, 0x26, 0x2a, 0xb7, 0x64, 0x18, 0x8e, 0x5d, 0x60, 0x28, 0x6d, 0x12, 0x28, + 0xb8, 0x7e, 0x94, 0xf8, 0x7a, 0x34, 0x72, 0x82, 0x0e, 0x43, 0xd7, 0x01, 0x4e, 0x65, 0x72, 0xec, + 0x07, 0xf2, 0xb1, 0x90, 0x2c, 0xf3, 0x14, 0xf1, 0x4f, 0x80, 0x64, 0x14, 0xc8, 0x6f, 0x0f, 0x72, + 0xd5, 0xbb, 0x04, 0x4e, 0x71, 0x46, 0xc9, 0x10, 0x6c, 0x90, 0x5c, 0xc9, 0x72, 0xbd, 0x41, 0x9e, + 0xdc, 0x21, 0xaf, 0x01, 0x45, 0xb9, 0x95, 0x90, 0xaf, 0xef, 0xaf, 0x40, 0x8e, 0x2c, 0x45, 0x79, + 0xe5, 0x3e, 0xde, 0xb6, 0x6e, 0x62, 0xf2, 0xf1, 0x89, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXMoreIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x0c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x20, 0x4f, 0xee, + 0x6c, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x6b, 0xda, 0xa9, 0x4c, 0x00, 0x00, + 0x01, 0xc4, 0x49, 0x44, 0x41, 0x54, 0x48, 0x0d, 0xdd, 0x95, 0x4f, 0x2b, 0x44, 0x51, 0x18, 0xc6, + 0xe7, 0xfa, 0x5b, 0x14, 0x4d, 0xc4, 0x6a, 0xec, 0xd4, 0xa4, 0xd8, 0x68, 0x90, 0x1a, 0x5f, 0x60, + 0x0a, 0x65, 0xef, 0x23, 0x8c, 0x6c, 0x94, 0xad, 0x9d, 0x95, 0x2f, 0x80, 0xa5, 0x05, 0x45, 0x29, + 0x35, 0x62, 0x41, 0x4a, 0x22, 0xa9, 0x61, 0x35, 0x8c, 0x42, 0xca, 0x9f, 0xd8, 0xa9, 0x99, 0x05, + 0xe3, 0xf7, 0x4e, 0x33, 0x67, 0xee, 0x4c, 0xf7, 0x9c, 0x79, 0x6d, 0xbd, 0xf5, 0x73, 0xcf, 0x79, + 0xdf, 0xe7, 0x79, 0x8e, 0x3b, 0xdd, 0x99, 0x1b, 0x0a, 0xf9, 0xaa, 0x50, 0x28, 0x24, 0x60, 0x07, + 0x1e, 0xe1, 0x01, 0xb6, 0x21, 0xe1, 0x93, 0xa8, 0x97, 0xf8, 0xfa, 0x61, 0x1d, 0x6e, 0xe0, 0x1d, + 0x0e, 0x61, 0x0e, 0x1a, 0xd5, 0x21, 0x25, 0x21, 0x9e, 0x4e, 0x58, 0x86, 0x53, 0xf8, 0x84, 0x73, + 0x58, 0x81, 0xae, 0xaa, 0x2c, 0x1a, 0x1e, 0xac, 0x82, 0xad, 0xd6, 0x18, 0x78, 0x55, 0x26, 0xc7, + 0x06, 0xed, 0x2c, 0x7c, 0x59, 0xc2, 0xce, 0xe8, 0x77, 0x3b, 0xec, 0x55, 0x23, 0xb4, 0x31, 0x78, + 0xb2, 0x64, 0xbd, 0xd2, 0x9f, 0x30, 0x06, 0x36, 0x49, 0x8b, 0xd0, 0xdf, 0x4e, 0x1a, 0x83, 0x63, + 0x81, 0x61, 0x00, 0x72, 0x7e, 0x63, 0xc0, 0x7a, 0xd3, 0x11, 0x61, 0x46, 0xf8, 0xda, 0x21, 0x1b, + 0xe0, 0xf7, 0xb7, 0x9e, 0xd9, 0x84, 0x43, 0xfc, 0x69, 0x01, 0xdb, 0xa7, 0xe7, 0x37, 0x88, 0xa6, + 0xd9, 0x9c, 0x62, 0x59, 0xa0, 0x91, 0x47, 0x53, 0x53, 0x31, 0x4b, 0x84, 0x69, 0x13, 0xb2, 0xa0, + 0x09, 0x42, 0xb3, 0xd4, 0x80, 0x6b, 0x08, 0xda, 0x8c, 0xdb, 0xbe, 0x10, 0xcd, 0xa0, 0x7d, 0x6c, + 0x26, 0x63, 0x66, 0xe5, 0x5e, 0x8c, 0xb8, 0xc7, 0xc5, 0xa9, 0x36, 0x6b, 0x54, 0x6e, 0xa4, 0x4f, + 0x11, 0x58, 0x96, 0x44, 0xca, 0x8b, 0xa0, 0x2b, 0x9f, 0x4c, 0x2b, 0xfd, 0x9e, 0xa0, 0x59, 0x40, + 0x4f, 0x73, 0xae, 0x46, 0x23, 0xd1, 0x11, 0xb9, 0x91, 0xeb, 0x80, 0x43, 0x6c, 0x2d, 0xa7, 0xd6, + 0xf3, 0xbc, 0x3c, 0xc6, 0x8c, 0xcd, 0x5c, 0xd3, 0x4f, 0xd7, 0xec, 0x83, 0xb6, 0x1a, 0x8d, 0xf8, + 0xd2, 0x72, 0x23, 0x77, 0x90, 0x95, 0x5d, 0x9d, 0xca, 0xf0, 0x8f, 0xde, 0xd7, 0xd1, 0xc8, 0x78, + 0x5f, 0xa1, 0xc9, 0xa1, 0x39, 0x56, 0xe8, 0x34, 0x59, 0x12, 0x93, 0x2a, 0x66, 0xf1, 0x48, 0xc4, + 0xe1, 0x1b, 0x6c, 0x25, 0xb3, 0x71, 0xc5, 0xc1, 0xf2, 0xe3, 0xd1, 0x01, 0xf2, 0x0e, 0x72, 0xd5, + 0xbc, 0x26, 0x4b, 0x34, 0x84, 0xec, 0xb9, 0x82, 0x98, 0x1d, 0x40, 0xe5, 0xd5, 0xc0, 0x66, 0x06, + 0xde, 0xa0, 0xb6, 0x5e, 0x68, 0x4c, 0x6b, 0x0f, 0x2e, 0x1d, 0x1e, 0xc5, 0x73, 0x51, 0x1b, 0xc4, + 0x3e, 0x0f, 0x8b, 0x20, 0x4f, 0x82, 0xaa, 0xd0, 0x86, 0x61, 0x03, 0x82, 0x6a, 0x8b, 0x66, 0xf1, + 0xa5, 0x58, 0xb9, 0x13, 0x62, 0x69, 0xca, 0x8b, 0x6a, 0x0a, 0x86, 0xe1, 0x07, 0x2e, 0x61, 0x97, + 0x47, 0xea, 0x83, 0xeb, 0x9f, 0x8a, 0xac, 0x26, 0x0c, 0x93, 0x20, 0xbf, 0x4e, 0xbd, 0x70, 0x05, + 0x29, 0xb2, 0xb4, 0xdf, 0x21, 0xe4, 0x95, 0x22, 0x2f, 0xce, 0x4e, 0x88, 0xc2, 0x2d, 0x9c, 0x90, + 0x75, 0xc4, 0xf5, 0x7f, 0xd5, 0x2f, 0x30, 0x5e, 0xa3, 0xc0, 0xef, 0xd7, 0xce, 0x11, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXMoreIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x12, 0x08, 0x06, 0x00, 0x00, 0x00, 0x13, 0xcf, 0x23, + 0xd5, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4b, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x08, 0xca, 0x01, 0x00, 0x00, + 0x02, 0xc6, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x98, 0x3d, 0x68, 0x15, 0x41, 0x14, 0x85, + 0xb3, 0x2f, 0xd1, 0x48, 0x10, 0x02, 0xa2, 0x21, 0x85, 0x76, 0x16, 0x16, 0x1a, 0x34, 0x2f, 0xa0, + 0xd8, 0xd8, 0x99, 0x68, 0x11, 0x14, 0xb4, 0x10, 0x24, 0xa8, 0x85, 0xd6, 0x5a, 0x06, 0xd4, 0xc6, + 0x46, 0x14, 0x0b, 0x8b, 0x34, 0x4a, 0x8a, 0xa0, 0x36, 0xa9, 0xd2, 0xaa, 0x8d, 0x8d, 0x29, 0x12, + 0x83, 0x29, 0xb4, 0x12, 0x9b, 0x88, 0x8a, 0x81, 0x60, 0x63, 0xfc, 0x21, 0xc9, 0xf3, 0xbb, 0x92, + 0x59, 0x76, 0x33, 0x33, 0x99, 0xbd, 0xf7, 0x3d, 0xbb, 0x5c, 0x38, 0xec, 0xcc, 0xfd, 0x39, 0x67, + 0x77, 0x76, 0x77, 0x66, 0x76, 0xb3, 0xb6, 0x80, 0x35, 0x1a, 0x8d, 0xfd, 0xb8, 0xcf, 0x83, 0x01, + 0x50, 0x07, 0x6b, 0xe0, 0x0d, 0x98, 0x03, 0x93, 0x59, 0x96, 0x7d, 0xe0, 0xd8, 0x52, 0x43, 0xf3, + 0x20, 0x84, 0x67, 0x81, 0x68, 0xf6, 0x83, 0x65, 0xe0, 0x34, 0x9f, 0xa2, 0xf9, 0x85, 0x7e, 0x4b, + 0x0d, 0xcd, 0xe3, 0x10, 0x9e, 0x02, 0x72, 0x8d, 0x47, 0xc0, 0x12, 0x70, 0x9a, 0x13, 0x68, 0x4a, + 0x3f, 0x6c, 0x14, 0xd7, 0xc0, 0x75, 0xb0, 0x0c, 0x62, 0x26, 0xb1, 0x1b, 0xa0, 0x16, 0x66, 0xd1, + 0x79, 0xe1, 0xe9, 0x00, 0x37, 0xc1, 0x1f, 0x10, 0xb3, 0x25, 0x02, 0x17, 0x75, 0xcc, 0xf1, 0x6c, + 0xb8, 0x76, 0x82, 0x31, 0xb0, 0x06, 0x62, 0xf6, 0x95, 0xc0, 0x99, 0x20, 0x0b, 0x81, 0x76, 0xf0, + 0x22, 0x56, 0x19, 0xf0, 0xbf, 0x94, 0x9a, 0x20, 0x59, 0x45, 0x27, 0xf5, 0x9d, 0x60, 0x3a, 0xc0, + 0x1d, 0x73, 0x3d, 0xae, 0x48, 0x1d, 0x4d, 0x83, 0xb8, 0x17, 0x7c, 0x8c, 0x09, 0x04, 0xfc, 0xf7, + 0x3d, 0x32, 0x92, 0x46, 0x03, 0x89, 0x29, 0xd7, 0xa8, 0x47, 0xa4, 0x70, 0x40, 0x7e, 0x37, 0x25, + 0x10, 0x88, 0x9f, 0x53, 0x48, 0x78, 0xa9, 0xf0, 0x4d, 0x05, 0x38, 0x53, 0xae, 0x93, 0x39, 0x11, + 0x99, 0x7d, 0xe0, 0x77, 0xaa, 0x22, 0x10, 0x97, 0x9a, 0x43, 0x39, 0x91, 0xa2, 0x41, 0xdd, 0x31, + 0xb0, 0x12, 0xe0, 0x4c, 0xb9, 0xbe, 0x91, 0xb0, 0x5b, 0x21, 0x95, 0xa7, 0x52, 0x37, 0x92, 0x22, + 0x8f, 0xc4, 0x17, 0xf0, 0x77, 0xbb, 0x79, 0xe7, 0x12, 0x8c, 0xdb, 0x73, 0xd6, 0xea, 0x0d, 0xa9, + 0x19, 0xa9, 0x9e, 0x5e, 0xca, 0xbc, 0x42, 0xcf, 0xf2, 0x1a, 0xef, 0xa1, 0x6e, 0xb8, 0xc4, 0x54, + 0xbd, 0x73, 0xb5, 0x7a, 0x6a, 0x29, 0x73, 0x2f, 0xbd, 0x41, 0x37, 0x58, 0xb2, 0x02, 0x59, 0x4d, + 0x56, 0x12, 0x8b, 0x59, 0xeb, 0x44, 0x4b, 0x5d, 0xcb, 0x93, 0x21, 0x37, 0x46, 0x56, 0x3c, 0xab, + 0xd5, 0x65, 0xf5, 0x93, 0x01, 0x6b, 0x86, 0xa4, 0x1f, 0x8e, 0x4c, 0x73, 0x06, 0xe4, 0x77, 0x92, + 0x6f, 0x7a, 0x7d, 0xd7, 0x75, 0x64, 0x6b, 0xa1, 0xb5, 0x03, 0x14, 0x74, 0x69, 0x8b, 0x0a, 0xf9, + 0x75, 0x19, 0x28, 0xb9, 0x50, 0xf7, 0x84, 0x15, 0x62, 0x95, 0x9b, 0x96, 0x5a, 0xd1, 0x54, 0x0d, + 0xf0, 0x86, 0xb3, 0xb1, 0x68, 0x5a, 0x5e, 0xf9, 0xa2, 0x6c, 0xad, 0xc6, 0xc6, 0x6b, 0x15, 0xcf, + 0xdb, 0xa2, 0x57, 0xd9, 0x9e, 0x83, 0xa3, 0xa1, 0xa9, 0x21, 0xff, 0x17, 0xf9, 0xef, 0x34, 0x35, + 0x1b, 0x72, 0x65, 0xe3, 0xa8, 0xb5, 0xf7, 0x14, 0xfc, 0xd4, 0x16, 0x15, 0xf2, 0x67, 0xdd, 0x1d, + 0x9a, 0x2d, 0x38, 0xb5, 0x4d, 0x6b, 0xad, 0xe5, 0x82, 0xdd, 0xb9, 0xa9, 0x35, 0xb9, 0x41, 0x2b, + 0x14, 0xcf, 0x3b, 0x02, 0xc3, 0x71, 0xe6, 0x5f, 0x0d, 0x73, 0xc8, 0x00, 0xb0, 0x2c, 0xe3, 0xb2, + 0xeb, 0x3e, 0x6c, 0x10, 0x6e, 0xa3, 0xee, 0x04, 0xd8, 0x6c, 0x07, 0x4d, 0x38, 0x68, 0x8b, 0x78, + 0x7b, 0x8c, 0x9a, 0xd7, 0x82, 0x8c, 0x69, 0xe7, 0x27, 0x52, 0xba, 0x73, 0x4d, 0x3a, 0x77, 0xd2, + 0x35, 0x5e, 0xc6, 0xad, 0x9c, 0xc0, 0xd0, 0x80, 0xed, 0xa1, 0xc7, 0x98, 0x76, 0xc8, 0x37, 0xab, + 0xc9, 0xa0, 0xce, 0xc0, 0xf3, 0xb4, 0x84, 0x97, 0x31, 0x54, 0x12, 0x24, 0xbc, 0x0d, 0xbc, 0xf6, + 0xd2, 0xe2, 0x8e, 0x57, 0x84, 0x3a, 0x4a, 0x24, 0xca, 0x0e, 0xf5, 0x5d, 0x60, 0x3e, 0x2e, 0xe1, + 0x45, 0xc6, 0x95, 0x12, 0x5e, 0x3a, 0x8c, 0xfb, 0xc0, 0x67, 0x8f, 0x39, 0xee, 0x78, 0xe0, 0x91, + 0x88, 0x83, 0x7c, 0x19, 0xb0, 0xdb, 0x60, 0xb3, 0x8f, 0x5a, 0xd9, 0xb5, 0xcb, 0xa7, 0x51, 0x53, + 0x03, 0xe5, 0x4e, 0x00, 0x9e, 0x1d, 0xe0, 0x1e, 0x58, 0x05, 0x31, 0xfb, 0x4e, 0xe0, 0xb2, 0xab, + 0x69, 0xf6, 0x08, 0xd7, 0x2e, 0xf0, 0x24, 0x26, 0xb6, 0xee, 0x97, 0xd7, 0xbd, 0xf4, 0x14, 0x07, + 0x97, 0x6f, 0x92, 0xfa, 0x38, 0xa1, 0x0b, 0xc0, 0xfd, 0x2e, 0x71, 0xbf, 0x68, 0x64, 0x52, 0x7e, + 0xc6, 0x64, 0xd9, 0xcc, 0x4a, 0x16, 0xbc, 0x56, 0x34, 0x8f, 0x12, 0x90, 0xef, 0x3e, 0xa7, 0xf9, + 0x83, 0xb6, 0xe8, 0xc9, 0x64, 0x3e, 0x8e, 0xe6, 0x02, 0xc7, 0x96, 0x1a, 0x9a, 0x83, 0x10, 0x9e, + 0x06, 0xb2, 0xc9, 0x95, 0xb9, 0x57, 0x7e, 0xc9, 0x88, 0x9e, 0xe0, 0x11, 0x9a, 0x8b, 0x1c, 0xb7, + 0x6c, 0x6b, 0x04, 0xfe, 0xf3, 0x08, 0xfc, 0x05, 0x85, 0x24, 0x43, 0xa4, 0x3d, 0xeb, 0x6a, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; -static const u_int8_t FLEXJSONIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x03, 0x64, 0xa2, 0xe8, 0x00, 0x00, 0x06, 0x37, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x7b, 0x48, 0x57, 0x57, 0x1c, 0x3f, 0xc7, 0x47, 0x3e, 0xf2, 0x31, 0xc9, 0x50, 0xdb, 0x56, 0x13, 0x73, 0x59, 0x3e, 0x57, 0x46, 0x66, 0xe2, 0x28, 0x1b, 0x51, 0x6a, 0x2a, 0xb1, 0xcd, 0x6a, 0x43, 0xaa, 0x8d, 0x06, 0xe5, 0xa0, 0xac, 0x86, 0x8c, 0xcd, 0xbf, 0x4c, 0xb3, 0x65, 0x81, 0xb4, 0xd2, 0xa6, 0x11, 0xe8, 0x60, 0xb4, 0x2d, 0x96, 0x2e, 0xb6, 0x08, 0x35, 0x62, 0x15, 0x3e, 0x96, 0xda, 0x16, 0xe1, 0x7c, 0xe2, 0x62, 0x51, 0x12, 0xe5, 0x2f, 0xcd, 0xf7, 0xdd, 0xe7, 0xfe, 0xce, 0xe5, 0x78, 0xfb, 0xa9, 0xf7, 0xfe, 0x7e, 0xbf, 0x7b, 0xf6, 0x08, 0x7e, 0x87, 0xb8, 0x7c, 0xcf, 0xf7, 0x7c, 0xce, 0xf7, 0x7d, 0xbe, 0xe7, 0xf4, 0x93, 0x4a, 0x92, 0x44, 0x5e, 0xe4, 0xe1, 0xf4, 0x22, 0x1b, 0x2f, 0xdb, 0xee, 0x70, 0xe0, 0xbf, 0xce, 0xa0, 0x23, 0x03, 0x8e, 0x0c, 0x18, 0x8c, 0x80, 0xa3, 0x84, 0x0c, 0x06, 0xd0, 0xf0, 0x76, 0x17, 0xc3, 0x12, 0x14, 0x01, 0xb5, 0xbf, 0x93, 0xeb, 0x7f, 0x48, 0xa3, 0xe3, 0xf2, 0x34, 0x29, 0x9c, 0xbe, 0xb9, 0xd4, 0x52, 0xf0, 0xe7, 0xdf, 0x2a, 0x37, 0x66, 0xd0, 0x4b, 0xf4, 0x9d, 0x38, 0x32, 0xcf, 0xcb, 0x12, 0x60, 0xdf, 0x5c, 0x8c, 0x03, 0x39, 0x55, 0x52, 0x45, 0xfd, 0xd4, 0x8d, 0xee, 0xe5, 0x3e, 0x83, 0x03, 0x25, 0x3f, 0x73, 0x80, 0xf4, 0xc5, 0x8f, 0xf4, 0xa7, 0x4f, 0x68, 0x68, 0xa0, 0x7d, 0x36, 0x3f, 0xb7, 0x4b, 0xc0, 0x19, 0x68, 0xe8, 0x24, 0x6a, 0xeb, 0x9f, 0x13, 0x3f, 0xcb, 0xe4, 0xd1, 0x53, 0x29, 0xf7, 0x1b, 0xee, 0xcf, 0x2c, 0x20, 0xeb, 0xd8, 0x02, 0x32, 0x00, 0x07, 0xf8, 0x28, 0xc8, 0x74, 0x7a, 0x2b, 0x82, 0xcc, 0xf3, 0xe6, 0x8c, 0x29, 0xe2, 0xd7, 0xc3, 0x4e, 0x4f, 0x86, 0xc8, 0xc7, 0xe7, 0xa4, 0xdb, 0x7d, 0xb2, 0xe9, 0x0d, 0x1d, 0x53, 0x4b, 0x46, 0x28, 0x01, 0x0e, 0x98, 0x9e, 0x29, 0xb1, 0xf4, 0xf5, 0xa4, 0x1f, 0x25, 0xcd, 0x6a, 0x4c, 0xf0, 0x7c, 0x79, 0x69, 0x6b, 0x3c, 0xbd, 0x6d, 0x8e, 0xbd, 0x69, 0x18, 0xbb, 0xe8, 0xac, 0x68, 0xab, 0x17, 0x04, 0x94, 0x10, 0xd7, 0xe5, 0x31, 0x87, 0x93, 0xb3, 0x12, 0xee, 0xae, 0xb3, 0x2e, 0xd9, 0xb7, 0x20, 0xd2, 0x01, 0xfb, 0x2c, 0x30, 0xb8, 0xcb, 0xe1, 0x00, 0x21, 0x8f, 0x06, 0x95, 0x20, 0xba, 0x3a, 0xeb, 0x47, 0x53, 0x8d, 0x79, 0x3c, 0xa4, 0x8f, 0xd7, 0x45, 0x18, 0xcd, 0xc0, 0xfd, 0x27, 0xa4, 0xe6, 0x96, 0xa2, 0x65, 0x49, 0x90, 0xae, 0x3a, 0xb2, 0x64, 0xc1, 0x14, 0xa6, 0xac, 0x76, 0x8a, 0xb6, 0x9b, 0x32, 0xe4, 0x40, 0xf1, 0x25, 0xb2, 0xea, 0x33, 0xe9, 0xfe, 0x63, 0xb9, 0x0b, 0x79, 0xcc, 0xa1, 0x39, 0xc9, 0xfa, 0x5d, 0x25, 0x36, 0x98, 0x6c, 0x8c, 0x56, 0x60, 0x05, 0x3f, 0x4c, 0xae, 0xcb, 0x97, 0x7a, 0xfb, 0xed, 0x36, 0x5e, 0xde, 0x68, 0xc8, 0x81, 0xe6, 0x6e, 0x69, 0xc0, 0xdc, 0x43, 0xfd, 0xbd, 0x69, 0xd9, 0x07, 0x34, 0x6e, 0xb1, 0xbe, 0x29, 0x94, 0x92, 0xb2, 0x0f, 0xe9, 0xa6, 0x18, 0xc5, 0x87, 0x5b, 0x3d, 0xd2, 0xa3, 0xa7, 0xfa, 0xbb, 0x34, 0x10, 0x86, 0x1c, 0x48, 0x8f, 0xa5, 0xe1, 0xaf, 0xc8, 0xa6, 0xf4, 0x9b, 0xa4, 0xf7, 0xbf, 0x9c, 0xfc, 0xae, 0x41, 0x43, 0x91, 0xb2, 0x34, 0x3c, 0x46, 0x36, 0x16, 0x4a, 0x97, 0x5a, 0xe4, 0xa4, 0xb9, 0xb9, 0xd2, 0xf7, 0x12, 0xe8, 0x02, 0x3f, 0xfd, 0x5d, 0x1a, 0x08, 0x43, 0x0e, 0xbc, 0xbd, 0x8a, 0xd4, 0x7e, 0x4a, 0x23, 0x5f, 0x55, 0xc2, 0x79, 0xa6, 0x4e, 0xb9, 0xd1, 0x34, 0xf4, 0x5d, 0x6f, 0x27, 0xbf, 0xfd, 0xa9, 0xc0, 0x4a, 0x77, 0xd1, 0x92, 0x2c, 0x1a, 0xe0, 0xab, 0x01, 0xd7, 0x5f, 0x32, 0xe4, 0x00, 0xc4, 0xcf, 0x71, 0x21, 0x49, 0x11, 0x8a, 0x1a, 0x6b, 0xaa, 0x59, 0x8d, 0xd9, 0x14, 0xa3, 0x6f, 0x9f, 0x2e, 0xc2, 0xa8, 0x03, 0xb2, 0x0f, 0x56, 0x74, 0xcf, 0x19, 0xed, 0x50, 0xb7, 0xd4, 0x19, 0x01, 0xd6, 0x30, 0x05, 0x38, 0x60, 0x8d, 0x9a, 0x7f, 0x0e, 0xe3, 0x70, 0x40, 0x15, 0x5b, 0xd3, 0x33, 0x32, 0xa9, 0x77, 0x8c, 0x85, 0xdc, 0xbe, 0x2a, 0x9d, 0x44, 0xc0, 0x73, 0x7a, 0xbe, 0x0f, 0xba, 0x90, 0x6c, 0xf8, 0xe0, 0x88, 0x94, 0x7d, 0x8e, 0xac, 0x5b, 0x86, 0xde, 0x4a, 0xc2, 0x54, 0x37, 0x2e, 0xd3, 0xf7, 0x7d, 0x23, 0x19, 0x78, 0x46, 0xca, 0x6a, 0x15, 0x17, 0xcd, 0xbb, 0xd4, 0x96, 0xd8, 0x49, 0x0b, 0x70, 0x20, 0x71, 0x29, 0x71, 0x71, 0xa6, 0xe3, 0x13, 0xb2, 0x65, 0x5f, 0xff, 0x22, 0xe1, 0x5f, 0x6e, 0x9a, 0xd3, 0x74, 0x07, 0x76, 0x95, 0x4d, 0xaa, 0x6d, 0x4c, 0x0a, 0x57, 0xcf, 0xec, 0xa7, 0x05, 0x9c, 0x81, 0xd7, 0x03, 0x49, 0xd1, 0x56, 0x8a, 0x5b, 0xc9, 0x7a, 0x2b, 0xde, 0x78, 0x8d, 0x1e, 0x7e, 0xd7, 0x06, 0xbc, 0x86, 0x64, 0x2a, 0xea, 0xe7, 0xf5, 0xbf, 0x1e, 0x93, 0xe6, 0x6e, 0xc2, 0x7e, 0x95, 0x58, 0xf6, 0xf2, 0x0c, 0x25, 0x74, 0xa1, 0x49, 0x31, 0x03, 0x37, 0xd7, 0xea, 0xc5, 0x04, 0x6f, 0x0a, 0x21, 0x43, 0x98, 0x03, 0x42, 0xac, 0xb1, 0x43, 0x88, 0x80, 0x12, 0xb2, 0x43, 0xab, 0xc0, 0x2d, 0x0e, 0x07, 0x04, 0x06, 0xd3, 0x2e, 0x51, 0x8e, 0x0c, 0xd8, 0x15, 0x36, 0x81, 0x9b, 0x6c, 0xcb, 0xc0, 0x57, 0xe6, 0x21, 0x50, 0xbd, 0x71, 0x51, 0x36, 0xb4, 0xd1, 0x91, 0x91, 0x11, 0x4f, 0x4f, 0x4f, 0x67, 0x67, 0xe7, 0xa1, 0xa1, 0x21, 0x17, 0x17, 0x01, 0x57, 0xb8, 0x71, 0xeb, 0x21, 0xc1, 0x36, 0x3b, 0x7c, 0x7d, 0x7d, 0x3d, 0x3c, 0x3c, 0xfe, 0x3f, 0xd6, 0xc3, 0x01, 0x1b, 0x32, 0x00, 0xf4, 0xe4, 0xa4, 0xfc, 0x9e, 0x71, 0x72, 0xd2, 0x2f, 0x3c, 0x20, 0xad, 0x81, 0x41, 0x9a, 0xc1, 0xa1, 0x6f, 0xca, 0xb5, 0x6b, 0xd7, 0xd6, 0xae, 0x5d, 0xbb, 0xca, 0x3c, 0x56, 0x9b, 0xc7, 0xb1, 0x63, 0xc7, 0x2c, 0xb4, 0x56, 0x57, 0x57, 0x67, 0x65, 0x65, 0x05, 0x04, 0x04, 0xa0, 0xc6, 0x56, 0xae, 0x5c, 0x19, 0x15, 0x15, 0xb5, 0x79, 0xf3, 0x66, 0x35, 0xe6, 0xde, 0xbd, 0x7b, 0x3b, 0x76, 0xec, 0x08, 0x0b, 0x0b, 0xf3, 0xf2, 0xf2, 0x8a, 0x89, 0x89, 0x39, 0x74, 0xe8, 0xd0, 0xe0, 0xa0, 0xf2, 0x7b, 0xd8, 0xd9, 0xb3, 0x67, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xea, 0xeb, 0xeb, 0x33, 0x33, 0x33, 0xfd, 0xfc, 0xfc, 0x16, 0x2e, 0x5c, 0x58, 0x5a, 0x5a, 0xaa, 0xde, 0xae, 0x45, 0xe3, 0x2d, 0xa4, 0x3d, 0xf2, 0xf3, 0xf3, 0x2d, 0xf6, 0x6f, 0xdb, 0xb6, 0x4d, 0xbd, 0xe5, 0xca, 0x95, 0x2b, 0x0c, 0xb0, 0x61, 0xc3, 0x86, 0xf5, 0xeb, 0xd7, 0x53, 0xf3, 0x2b, 0x07, 0xb6, 0x72, 0x4c, 0x73, 0x73, 0xb3, 0x8f, 0x8f, 0x8f, 0x85, 0x90, 0xe0, 0xe0, 0xe0, 0xfe, 0xfe, 0x7e, 0x60, 0x52, 0x52, 0x52, 0xd8, 0x12, 0x4c, 0xe7, 0x18, 0x08, 0xb9, 0x73, 0xe7, 0x0e, 0x97, 0xa0, 0x41, 0x10, 0x8d, 0x35, 0xb6, 0x84, 0x23, 0x7b, 0xf9, 0xf2, 0xe5, 0x0b, 0xe6, 0xb1, 0x65, 0xcb, 0x16, 0xe8, 0xb0, 0x70, 0xe0, 0xe0, 0xc1, 0x83, 0x60, 0x86, 0x87, 0x87, 0x33, 0x7c, 0x77, 0x77, 0xf7, 0xce, 0x9d, 0x3b, 0x91, 0x10, 0x36, 0x1d, 0x1b, 0x1b, 0x8b, 0x88, 0x90, 0xff, 0xdb, 0x1f, 0x14, 0x14, 0x74, 0xf2, 0xe4, 0xc9, 0x8e, 0x8e, 0x8e, 0xbc, 0xbc, 0x3c, 0x1c, 0x24, 0x2e, 0xe7, 0xc1, 0x83, 0x07, 0xc8, 0x2b, 0xa6, 0xee, 0xee, 0xee, 0xe5, 0xe5, 0xe5, 0xc8, 0x83, 0xbf, 0xbf, 0x3f, 0xa6, 0x47, 0x8f, 0x1e, 0x65, 0x12, 0xb4, 0xbf, 0xfa, 0x0e, 0xa8, 0xf7, 0xe7, 0xe6, 0xe6, 0x72, 0xc5, 0x9c, 0x7f, 0xfe, 0xfc, 0x79, 0x30, 0x31, 0x50, 0x39, 0xd9, 0xd9, 0xd9, 0x15, 0x15, 0x15, 0x5d, 0x5d, 0x5d, 0x7c, 0xb5, 0xad, 0xad, 0x8d, 0xad, 0x16, 0x17, 0x17, 0x73, 0xe6, 0xf6, 0xed, 0xdb, 0xc1, 0x84, 0xc5, 0xe3, 0xe3, 0xe3, 0x60, 0x66, 0x64, 0x64, 0x60, 0x9a, 0x9c, 0x9c, 0xcc, 0x00, 0xa9, 0xa9, 0xa9, 0x98, 0xee, 0xdb, 0xb7, 0x8f, 0xe3, 0x35, 0x08, 0xfd, 0x33, 0xc0, 0xd4, 0x6b, 0x7c, 0xd3, 0xd3, 0xd3, 0x13, 0x12, 0x12, 0x00, 0x80, 0xad, 0x25, 0x25, 0x25, 0x08, 0x7f, 0x48, 0x48, 0xc8, 0x9e, 0x3d, 0x7b, 0xd8, 0x96, 0xbb, 0x77, 0xef, 0x32, 0x22, 0x2d, 0x2d, 0x8d, 0x0b, 0x61, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x67, 0xae, 0x58, 0xb1, 0x82, 0xd1, 0x8b, 0x16, 0x2d, 0x02, 0x81, 0x55, 0xbe, 0xa4, 0x41, 0x08, 0x70, 0x00, 0x5d, 0x15, 0x35, 0xd6, 0xda, 0xda, 0x8a, 0xa3, 0x99, 0x98, 0x98, 0xe8, 0xea, 0xea, 0x8a, 0x80, 0x9d, 0x3a, 0x75, 0x0a, 0xb5, 0x04, 0xc5, 0xa8, 0x1c, 0xa6, 0xbe, 0xb1, 0xb1, 0x91, 0xdb, 0xc1, 0x68, 0x14, 0x7a, 0x60, 0xe0, 0xd4, 0x1f, 0xfa, 0x78, 0xd7, 0x62, 0xa7, 0x88, 0x83, 0xb5, 0x09, 0x01, 0x0e, 0xa0, 0x36, 0xd0, 0x37, 0x70, 0x54, 0x8e, 0x1c, 0x39, 0x72, 0xf5, 0xea, 0xd5, 0xce, 0xce, 0x4e, 0xd4, 0x06, 0x7c, 0xa8, 0xab, 0xab, 0x83, 0x6e, 0xd4, 0x95, 0xb7, 0xb7, 0xfc, 0x37, 0x33, 0x24, 0xa7, 0xaf, 0xaf, 0x0f, 0x44, 0x4b, 0x4b, 0x4b, 0x55, 0x55, 0x15, 0x08, 0xb4, 0xa3, 0xb9, 0x73, 0xe7, 0x82, 0x00, 0x18, 0x5f, 0xd6, 0xa3, 0x39, 0xc1, 0x98, 0x98, 0xea, 0x0c, 0xe0, 0xac, 0x1f, 0x33, 0x9e, 0x81, 0xbd, 0x7b, 0xf7, 0x42, 0x87, 0x9b, 0x9b, 0x1b, 0xaa, 0xb6, 0xb2, 0xb2, 0xf2, 0xc0, 0x81, 0x03, 0x98, 0x22, 0x9c, 0xa8, 0x28, 0x26, 0xf9, 0xf4, 0xe9, 0xd3, 0xcc, 0x08, 0xe4, 0x2a, 0x3a, 0x3a, 0x9a, 0xd1, 0xb8, 0xd1, 0x6f, 0xdc, 0xb8, 0x01, 0xc0, 0xfe, 0xfd, 0xfb, 0x39, 0x07, 0x87, 0xb8, 0xa8, 0xa8, 0x88, 0xa5, 0x02, 0x79, 0x28, 0x2c, 0x2c, 0xd4, 0xb5, 0xcd, 0xb6, 0x9b, 0x78, 0xc6, 0xba, 0x44, 0x8b, 0x84, 0x32, 0x18, 0x77, 0xfc, 0xf8, 0x71, 0x66, 0x0a, 0xda, 0x48, 0x41, 0x41, 0x41, 0x64, 0x64, 0x24, 0x9b, 0xee, 0xde, 0xbd, 0x1b, 0x18, 0x38, 0xdf, 0xdb, 0xdb, 0x8b, 0x4a, 0x03, 0x13, 0xe5, 0x7e, 0xe2, 0xc4, 0x09, 0xf4, 0x7e, 0xd0, 0xf0, 0x04, 0x63, 0x62, 0x62, 0x02, 0xb5, 0x07, 0x39, 0xb0, 0x1e, 0xa2, 0x46, 0x47, 0x47, 0xf1, 0xb5, 0xaa, 0x96, 0x74, 0x5d, 0x54, 0x03, 0x58, 0xbb, 0xc8, 0xc9, 0xc9, 0x51, 0x33, 0x4d, 0x26, 0x13, 0x9a, 0x23, 0xfa, 0x49, 0x7b, 0x7b, 0xfb, 0xcd, 0x9b, 0x37, 0xf1, 0xc5, 0xab, 0x49, 0x0d, 0xe0, 0xf4, 0xc3, 0x87, 0x0f, 0x91, 0x96, 0x81, 0x81, 0x01, 0xce, 0x31, 0x4e, 0xe8, 0x67, 0xe0, 0xe2, 0xc5, 0x8b, 0x4d, 0x4d, 0x4d, 0xb8, 0x65, 0x1b, 0x1a, 0x1a, 0x6a, 0x6a, 0x6a, 0x10, 0xb3, 0x35, 0x6b, 0xd6, 0xb0, 0xd0, 0xb2, 0x2f, 0x2e, 0x57, 0x0c, 0xd0, 0xa1, 0xa1, 0xa1, 0x6a, 0xfe, 0x74, 0x1a, 0x99, 0xc1, 0x98, 0xce, 0x37, 0xc4, 0xd1, 0x8d, 0x81, 0xc5, 0xa3, 0x80, 0xdf, 0x50, 0xba, 0x1b, 0xff, 0x1d, 0x80, 0xfe, 0x63, 0x0e, 0x37, 0x25, 0xfa, 0x09, 0x1a, 0x36, 0xae, 0xfa, 0xd8, 0xd8, 0xd8, 0xe5, 0xcb, 0x97, 0x1b, 0x0a, 0x98, 0xe8, 0xcd, 0xfa, 0x0e, 0x88, 0xd6, 0x28, 0x58, 0x9e, 0x80, 0x7b, 0x40, 0xb0, 0x45, 0x36, 0x8a, 0x73, 0x38, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x1d, 0x19, 0x10, 0x1e, 0x52, 0x1b, 0x05, 0x3a, 0x32, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x5f, 0xf8, 0x0c, 0xfc, 0x0d, 0x80, 0x98, 0xbd, 0xed, 0xf7, 0x50, 0xda, 0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXGearIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0x02, 0xf9, + 0x87, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x37, 0x6c, 0x0c, 0x00, 0x00, + 0x06, 0x6a, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xd5, 0x98, 0x7b, 0x88, 0x55, 0x55, 0x14, 0x87, + 0x67, 0xd4, 0xd1, 0xc9, 0x4c, 0x2d, 0xcb, 0x34, 0x8a, 0x91, 0x1c, 0x2b, 0x31, 0xc9, 0x71, 0x8a, + 0x4c, 0x1c, 0x2a, 0xc8, 0x30, 0xc5, 0xcc, 0xc2, 0x12, 0x13, 0x24, 0xe9, 0x45, 0xd0, 0x04, 0xa6, + 0xf5, 0xc7, 0x64, 0x91, 0x14, 0x61, 0x6f, 0xb4, 0x18, 0x2a, 0x04, 0x4b, 0x7b, 0x3f, 0xa0, 0x07, + 0x21, 0xf6, 0x18, 0x32, 0x8a, 0x2c, 0x19, 0x4b, 0x53, 0x62, 0x6a, 0xd0, 0x2c, 0x1b, 0xf3, 0x91, + 0x39, 0x96, 0xe9, 0xa4, 0x4d, 0xdf, 0x6f, 0xe6, 0x9e, 0x7b, 0xd7, 0xdd, 0x77, 0xdf, 0x73, 0xcf, + 0x9e, 0x07, 0x53, 0x0b, 0xbe, 0x7b, 0xd6, 0x5a, 0x7b, 0xad, 0xb5, 0xf7, 0x3d, 0x8f, 0xbd, 0xf7, + 0x39, 0x45, 0x45, 0x5d, 0x28, 0xad, 0xad, 0xad, 0x63, 0xa0, 0xcc, 0x57, 0x12, 0x7f, 0x29, 0x54, + 0x41, 0x89, 0xaf, 0xbd, 0xc7, 0x7d, 0x0c, 0xac, 0x02, 0x24, 0xcd, 0x30, 0xc2, 0x1d, 0x10, 0xbe, + 0x57, 0xd5, 0x88, 0xd4, 0xba, 0x6d, 0xff, 0x09, 0x9b, 0x81, 0xdd, 0xde, 0x36, 0xbc, 0xf6, 0x9f, + 0xe7, 0xed, 0xa0, 0x70, 0x4d, 0x30, 0x6d, 0x5b, 0x6c, 0x5b, 0x67, 0xf5, 0x3e, 0x21, 0x05, 0x18, + 0xc4, 0x60, 0xe2, 0x1f, 0x85, 0xaf, 0x8b, 0x8b, 0x8b, 0x9f, 0x72, 0x72, 0xcb, 0x8d, 0x3d, 0x97, + 0xd8, 0xed, 0xd8, 0xbd, 0xa0, 0x05, 0x66, 0x40, 0x24, 0x67, 0xd2, 0x46, 0x7a, 0x71, 0x6b, 0xe4, + 0xc0, 0x3e, 0x0f, 0x7d, 0x11, 0xac, 0xc6, 0xbf, 0x26, 0xf2, 0x77, 0xf9, 0x91, 0x8e, 0xe6, 0x43, + 0x24, 0x2b, 0x50, 0xfa, 0xc0, 0x28, 0x58, 0x02, 0xbb, 0x21, 0xa9, 0xbc, 0x4c, 0xe0, 0x15, 0xa0, + 0xfc, 0xc9, 0xa0, 0xdb, 0x4e, 0xf2, 0x55, 0x97, 0x0f, 0xda, 0x16, 0xa4, 0x03, 0x75, 0x66, 0x65, + 0xa7, 0x35, 0x3a, 0xa0, 0xff, 0x4a, 0x4e, 0x8b, 0xc9, 0x7b, 0xcb, 0xf6, 0x97, 0x44, 0xd7, 0x25, + 0x0e, 0x91, 0x0d, 0x4e, 0xf0, 0x69, 0x8e, 0x6d, 0xcd, 0x63, 0x18, 0x4d, 0xd0, 0x6c, 0x9d, 0x8e, + 0x3e, 0x14, 0xdb, 0xce, 0x4a, 0xc1, 0x57, 0x20, 0xe8, 0x19, 0xa0, 0xb3, 0x8b, 0x41, 0x03, 0xeb, + 0x0d, 0xae, 0xd4, 0xe3, 0x78, 0x09, 0x3e, 0x83, 0x9f, 0xa1, 0x89, 0xfb, 0x59, 0xb1, 0x45, 0x9c, + 0xe1, 0xe3, 0x38, 0x0c, 0x87, 0x0b, 0x61, 0x1a, 0x4c, 0x81, 0x21, 0xe0, 0x4a, 0x25, 0xb1, 0xa5, + 0xe4, 0x1d, 0x76, 0x1b, 0x82, 0x6c, 0x8a, 0x94, 0x80, 0xa6, 0xbd, 0x35, 0x30, 0x07, 0x34, 0x87, + 0xd7, 0xc0, 0x3f, 0xe0, 0x4a, 0x03, 0x8e, 0xb3, 0x42, 0x3a, 0x20, 0xbe, 0x37, 0xcc, 0x83, 0x46, + 0x70, 0x65, 0x3d, 0x8e, 0xe1, 0x30, 0x0e, 0x6a, 0xe1, 0x0b, 0xb8, 0x28, 0xa4, 0xbe, 0xce, 0xd8, + 0x78, 0xb0, 0xf2, 0xa7, 0x35, 0x3c, 0xfa, 0xc4, 0xa0, 0x0e, 0x52, 0xc1, 0xd4, 0xd1, 0x89, 0xaa, + 0x86, 0xc3, 0x4e, 0xcd, 0x43, 0x8e, 0xfd, 0x5c, 0x50, 0x7d, 0x92, 0x7b, 0xc1, 0x97, 0x4e, 0x11, + 0x6b, 0x2e, 0xc6, 0x78, 0xdb, 0x38, 0x36, 0xa0, 0x87, 0x3e, 0x4f, 0xe9, 0x31, 0x91, 0x7b, 0x3e, + 0x6c, 0x37, 0xf5, 0xac, 0x7a, 0x0c, 0x43, 0xb7, 0x5e, 0x98, 0x90, 0xa4, 0x4b, 0xf8, 0xb7, 0xad, + 0x84, 0xae, 0x5b, 0xa8, 0x5a, 0x95, 0x38, 0x6a, 0x3e, 0xb7, 0x67, 0xee, 0xc6, 0xb0, 0x1e, 0xb2, + 0xa3, 0xa9, 0x75, 0x32, 0x6c, 0x05, 0x57, 0xdc, 0xf5, 0x26, 0x3b, 0x31, 0x9f, 0x45, 0x95, 0x41, + 0xf0, 0x9b, 0x53, 0xed, 0x26, 0x1b, 0x4f, 0xdb, 0x03, 0xa6, 0x5d, 0xeb, 0xc0, 0x20, 0xdb, 0x1e, + 0xaa, 0x93, 0x5f, 0x06, 0xbf, 0x80, 0x95, 0x9b, 0x43, 0xeb, 0xb4, 0xc5, 0x53, 0xe1, 0x11, 0x5b, + 0x05, 0xfd, 0x75, 0xb7, 0x10, 0xbe, 0xfe, 0xb0, 0xc3, 0xc4, 0x3d, 0xe1, 0xc6, 0x84, 0xda, 0xd4, + 0xd2, 0x4c, 0x64, 0xaf, 0x7c, 0x13, 0xf6, 0x80, 0x82, 0x75, 0x08, 0x3a, 0x15, 0xa6, 0xc2, 0xa5, + 0x30, 0x05, 0x8e, 0x40, 0x24, 0x7b, 0x51, 0x34, 0x67, 0xe7, 0x08, 0xfe, 0xeb, 0xa2, 0x20, 0x8e, + 0xea, 0x78, 0x74, 0x4e, 0x50, 0xa0, 0x83, 0x1a, 0x8f, 0x99, 0x9a, 0x52, 0x97, 0x41, 0x15, 0x68, + 0x5c, 0x17, 0x78, 0xcb, 0xd1, 0xb0, 0x0d, 0xf2, 0xc9, 0xf5, 0xde, 0xa4, 0x94, 0x93, 0xa4, 0x3a, + 0x93, 0xb8, 0x36, 0x2e, 0x36, 0x49, 0x1b, 0xb5, 0x4e, 0x80, 0xb8, 0x55, 0x5e, 0xeb, 0x48, 0xb6, + 0x90, 0xb0, 0xc9, 0x0c, 0xc2, 0xaa, 0x2a, 0x14, 0x3b, 0xc3, 0xd0, 0x3e, 0x16, 0x8e, 0x9a, 0xa4, + 0xab, 0xb2, 0xab, 0x87, 0x5b, 0xd4, 0x5a, 0x64, 0xea, 0x59, 0x55, 0xb3, 0xd2, 0xa4, 0x9c, 0x8a, + 0x38, 0x35, 0x0b, 0xd4, 0x81, 0x2b, 0x0f, 0xe7, 0x04, 0x7b, 0x1c, 0x24, 0x2d, 0x37, 0x89, 0x8d, + 0xe8, 0xfd, 0xc0, 0xb7, 0x62, 0x7b, 0xb2, 0x73, 0x5d, 0xe4, 0x6a, 0x31, 0xb3, 0x27, 0x05, 0xb3, + 0xf5, 0x77, 0xd0, 0x4a, 0xee, 0x17, 0x1a, 0xb5, 0x3b, 0xfc, 0x1c, 0xac, 0x8c, 0xf5, 0x47, 0x67, + 0x7b, 0x49, 0x38, 0x11, 0xf6, 0x98, 0xc4, 0xfd, 0xe8, 0x9a, 0x76, 0x77, 0xc1, 0x6b, 0x70, 0x6e, + 0x76, 0x46, 0x61, 0x8b, 0x9c, 0xf7, 0xc1, 0x4a, 0x45, 0xc1, 0x2c, 0xa2, 0xeb, 0x4d, 0xc6, 0xf7, + 0x05, 0x13, 0x4c, 0x00, 0x79, 0x0b, 0x4c, 0xae, 0xab, 0xea, 0x01, 0x9f, 0x69, 0xc2, 0x0b, 0xaa, + 0xc4, 0xdf, 0xe5, 0x14, 0xc9, 0x59, 0xf1, 0xb3, 0xee, 0x6d, 0x82, 0x75, 0xc9, 0xed, 0x2c, 0xf2, + 0x43, 0xc1, 0x5e, 0x52, 0x01, 0xe4, 0xaa, 0xd6, 0xac, 0x98, 0x78, 0x6d, 0x1c, 0xb5, 0xbf, 0x1a, + 0x13, 0x13, 0xe3, 0x36, 0x6d, 0x76, 0x1c, 0x39, 0x77, 0x43, 0xfa, 0x0f, 0x50, 0x58, 0x5b, 0xe3, + 0x05, 0x50, 0x6a, 0x92, 0x7e, 0x32, 0x7a, 0x21, 0x55, 0x8b, 0xdc, 0x84, 0x54, 0xd0, 0x21, 0x8e, + 0xf3, 0x41, 0x53, 0xaf, 0x36, 0x62, 0x1b, 0x41, 0xa2, 0xad, 0xf3, 0x83, 0xf4, 0x35, 0x20, 0x09, + 0xc4, 0x6e, 0x53, 0x92, 0x91, 0xd9, 0xe4, 0x4d, 0x84, 0xf4, 0xb8, 0xb5, 0x25, 0xd0, 0xbd, 0xbb, + 0x16, 0x7c, 0x3b, 0xcd, 0x7b, 0x4c, 0x72, 0xac, 0x4a, 0xfe, 0x9b, 0x10, 0x89, 0x5e, 0x0f, 0xd3, + 0x82, 0xf3, 0x0c, 0xd0, 0xec, 0xd1, 0x55, 0xa2, 0xd5, 0x7a, 0xba, 0x3a, 0xd0, 0x3f, 0xd1, 0x59, + 0x9b, 0x0c, 0xc5, 0xe0, 0xca, 0x5e, 0xd7, 0x11, 0x63, 0x9f, 0x6d, 0xda, 0xd6, 0x1b, 0xbd, 0x88, + 0xfd, 0xbd, 0xae, 0xe4, 0x2e, 0xeb, 0xeb, 0xa4, 0xae, 0x77, 0x8b, 0xb6, 0x6d, 0x8d, 0xfe, 0x40, + 0x1d, 0x3c, 0x0e, 0xbb, 0xc1, 0x95, 0x61, 0xae, 0x23, 0xc6, 0xfe, 0xce, 0xb4, 0x55, 0x19, 0x5d, + 0x57, 0x79, 0x24, 0xb6, 0x3a, 0x95, 0xe8, 0x65, 0x7e, 0x4f, 0x42, 0x7c, 0x27, 0xf0, 0x28, 0xb9, + 0x1f, 0xc2, 0x7d, 0x90, 0x11, 0x3a, 0xd1, 0x16, 0x5a, 0x5b, 0x09, 0x2b, 0x2b, 0x32, 0x11, 0xf1, + 0x1a, 0x49, 0x37, 0x98, 0xc4, 0xbf, 0xd0, 0x6f, 0x83, 0xd3, 0x41, 0x5b, 0x93, 0x6f, 0x21, 0x92, + 0xac, 0x4f, 0x2e, 0x71, 0x55, 0x49, 0xd0, 0x8e, 0xd7, 0xca, 0x2b, 0x18, 0x27, 0xc5, 0xe5, 0xe8, + 0x6c, 0x1d, 0x30, 0x19, 0x1f, 0xc4, 0x06, 0x9b, 0x46, 0x72, 0x8a, 0xe1, 0x63, 0x93, 0xeb, 0x53, + 0xf5, 0x62, 0xa4, 0xab, 0x91, 0x48, 0x88, 0x9d, 0xe1, 0x14, 0x99, 0xe7, 0x26, 0x66, 0x9e, 0xe6, + 0x4c, 0xcb, 0xd6, 0x8c, 0x5a, 0x74, 0x0e, 0x05, 0x7c, 0xcf, 0x86, 0x09, 0x69, 0x57, 0xb9, 0xcf, + 0x75, 0x6b, 0xac, 0xcb, 0x69, 0xc8, 0x38, 0x8e, 0xa0, 0xce, 0x24, 0xae, 0x31, 0xe3, 0x2a, 0xa8, + 0xb9, 0xd3, 0xe6, 0xa6, 0xd8, 0x0c, 0x06, 0x3b, 0x04, 0x36, 0x3b, 0xff, 0x7a, 0x52, 0x6c, 0x52, + 0xaa, 0x91, 0x9c, 0x11, 0x60, 0x5f, 0x05, 0xf5, 0xc9, 0x44, 0x8b, 0xd7, 0x8f, 0xf0, 0x02, 0x94, + 0x27, 0xa9, 0x63, 0x63, 0xc8, 0xf9, 0x14, 0xac, 0xe4, 0xdf, 0x63, 0x11, 0xa5, 0x37, 0xb0, 0xed, + 0x36, 0x3a, 0xa5, 0x3f, 0x63, 0x8b, 0xe6, 0xd3, 0x89, 0x7d, 0xc7, 0xe4, 0xea, 0x24, 0x68, 0xe1, + 0xea, 0xb0, 0x90, 0x5f, 0x6e, 0xea, 0x45, 0xaa, 0xa6, 0xe2, 0x1a, 0x6f, 0x51, 0x1a, 0xf2, 0x6d, + 0x5f, 0xf5, 0x56, 0xd6, 0xd7, 0x9b, 0x94, 0x72, 0xd2, 0xee, 0xde, 0xab, 0x59, 0xb3, 0x50, 0x5c, + 0x6e, 0xbe, 0x36, 0x6a, 0xda, 0xb7, 0x3d, 0xcc, 0x2c, 0xb9, 0x32, 0x27, 0x8f, 0x66, 0xbd, 0x98, + 0xe7, 0x93, 0xbb, 0x73, 0x12, 0x52, 0x0e, 0x12, 0xfa, 0x83, 0xbd, 0x72, 0x2b, 0xf3, 0xc5, 0x26, + 0xf5, 0x53, 0x6f, 0x18, 0xd8, 0xc9, 0x04, 0x33, 0x2d, 0xda, 0xa1, 0x46, 0x2b, 0x7e, 0xa6, 0x24, + 0x4e, 0x7d, 0xab, 0xd1, 0xb4, 0xa5, 0x37, 0x33, 0x4d, 0x7f, 0xda, 0x4d, 0x46, 0xa2, 0x69, 0xd1, + 0xfb, 0xed, 0x07, 0xff, 0x43, 0x51, 0x10, 0x47, 0x5d, 0xad, 0x53, 0x32, 0x55, 0x3b, 0xa6, 0x51, + 0x63, 0x95, 0xa9, 0x29, 0xb5, 0x1a, 0xb4, 0x63, 0x28, 0xd3, 0x31, 0x51, 0x55, 0x02, 0xef, 0x04, + 0x2b, 0xeb, 0x30, 0xb2, 0x66, 0x24, 0xec, 0xd1, 0xd0, 0x62, 0x82, 0x6e, 0x4d, 0x54, 0x3c, 0x26, + 0x88, 0x5a, 0xd3, 0x4c, 0x3d, 0xa9, 0x5b, 0x20, 0xfc, 0x79, 0x22, 0xa9, 0x2f, 0xec, 0x03, 0x2b, + 0x5a, 0xb1, 0xd3, 0x42, 0x43, 0x9d, 0x69, 0xd4, 0x17, 0x35, 0xdf, 0xb4, 0x9c, 0x8e, 0x2f, 0xa4, + 0x90, 0x5f, 0x09, 0x7f, 0x98, 0x9a, 0x52, 0x67, 0x17, 0xca, 0xf3, 0xb6, 0x93, 0x38, 0xdd, 0x29, + 0x14, 0x99, 0xb5, 0x28, 0x5a, 0xb4, 0xe6, 0x46, 0x0e, 0x8e, 0x9a, 0x1d, 0xc6, 0x7b, 0x0b, 0x25, + 0x74, 0x92, 0xaf, 0xab, 0xa9, 0x97, 0x1f, 0x57, 0xde, 0x4b, 0x58, 0x22, 0x13, 0x46, 0x85, 0x52, + 0xb0, 0x0f, 0xa6, 0x5b, 0xf4, 0x45, 0x1c, 0xb6, 0xb3, 0xe5, 0x99, 0xec, 0x70, 0x8d, 0x5a, 0xb3, + 0xa0, 0xd9, 0xed, 0xc4, 0xd8, 0x57, 0x07, 0x55, 0x25, 0xb1, 0xc2, 0x24, 0x4b, 0xfd, 0x06, 0x7c, + 0xdb, 0x6d, 0xb5, 0xe9, 0xbb, 0x4d, 0x87, 0x3e, 0x68, 0x91, 0x37, 0x14, 0x9e, 0x06, 0x57, 0x1a, + 0x70, 0x68, 0xdb, 0x11, 0xc9, 0xb3, 0xa1, 0x7f, 0x40, 0xb7, 0xc8, 0xfd, 0xf0, 0x24, 0x8c, 0x53, + 0x32, 0x47, 0xcd, 0xf5, 0x07, 0xc1, 0x95, 0x8d, 0x38, 0xd4, 0x16, 0xbb, 0x56, 0xd8, 0x01, 0x10, + 0xab, 0x69, 0x52, 0xb3, 0x97, 0x7b, 0xbf, 0xe3, 0x6a, 0x5d, 0x0d, 0xba, 0x03, 0x06, 0x83, 0x66, + 0x9f, 0x95, 0x90, 0x77, 0x15, 0xcf, 0x9a, 0x55, 0x6c, 0x27, 0x3e, 0x9d, 0x42, 0xda, 0x9b, 0xd4, + 0x83, 0x6f, 0x56, 0xd8, 0x8f, 0xff, 0x0d, 0xd0, 0xbb, 0x80, 0xf6, 0xff, 0x62, 0x27, 0x1c, 0x0f, + 0xda, 0x96, 0x0b, 0xcd, 0xdf, 0x53, 0xa1, 0x12, 0x7c, 0x7d, 0x2f, 0x63, 0xaf, 0x74, 0x07, 0x6d, + 0xdd, 0x23, 0xfc, 0x01, 0x7d, 0xea, 0xe8, 0x4e, 0x59, 0x12, 0x3a, 0xf2, 0xd0, 0x69, 0xcf, 0xfd, + 0xac, 0xf7, 0x11, 0x1d, 0x1e, 0x08, 0xed, 0x34, 0x15, 0xaf, 0xdd, 0xeb, 0x27, 0xb0, 0xcf, 0xe4, + 0xbb, 0xf5, 0x4d, 0x93, 0x5f, 0x0d, 0xfd, 0x03, 0x03, 0x53, 0x65, 0xd4, 0xf9, 0x42, 0x2e, 0xf7, + 0x65, 0x1c, 0x75, 0x6b, 0x5c, 0x0b, 0x0d, 0x90, 0x54, 0x16, 0x13, 0x58, 0x46, 0xfe, 0x25, 0x1c, + 0xb5, 0xdb, 0xdd, 0x01, 0x92, 0xa8, 0x7e, 0xbb, 0xd5, 0xd5, 0xbf, 0xdc, 0x3b, 0x25, 0xb0, 0x10, + 0x2e, 0x77, 0x6b, 0xe3, 0xb3, 0x5f, 0xb3, 0xb5, 0xad, 0xd6, 0xd4, 0x38, 0x07, 0xae, 0x81, 0x77, + 0x21, 0x92, 0x83, 0x9e, 0x5c, 0x3d, 0xd4, 0x35, 0xe0, 0xee, 0xff, 0xdd, 0xd0, 0xee, 0xb3, 0xe9, + 0xfc, 0x96, 0x68, 0x84, 0x1c, 0x97, 0xda, 0x9e, 0xb0, 0x47, 0x81, 0xde, 0x0d, 0x24, 0xd1, 0x27, + 0x16, 0x1b, 0xd2, 0xf3, 0x3a, 0x03, 0x1b, 0x09, 0x9a, 0x16, 0xb5, 0x00, 0xe6, 0x6c, 0xb8, 0xf0, + 0x2d, 0x05, 0xc9, 0xbd, 0x3d, 0x3f, 0xda, 0x3c, 0x23, 0x60, 0x70, 0x03, 0xa1, 0x5f, 0x9e, 0x66, + 0xad, 0x25, 0x9d, 0xde, 0xa9, 0xe6, 0xab, 0xfd, 0xbf, 0xf5, 0xff, 0x0b, 0x9a, 0x0a, 0x94, 0x47, + 0x1c, 0x29, 0x6a, 0x39, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXGearIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x08, 0x06, 0x00, 0x00, 0x00, 0x55, 0xed, 0xb3, + 0x47, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x90, 0x31, 0x46, 0xef, 0x00, 0x00, + 0x0a, 0x22, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9a, 0x7b, 0xf0, 0x55, 0x55, 0x15, 0xc7, + 0xf9, 0xf9, 0x00, 0xd1, 0x02, 0x05, 0x8c, 0x50, 0x12, 0x30, 0x34, 0x53, 0xb0, 0x86, 0x81, 0xc6, + 0x47, 0x45, 0x8e, 0x8a, 0xf9, 0x47, 0x93, 0x4d, 0x5a, 0x99, 0x3d, 0x06, 0x7b, 0xd1, 0x64, 0x8d, + 0x8e, 0x36, 0x9a, 0x5a, 0x43, 0x9a, 0xce, 0x68, 0x35, 0x66, 0x52, 0x3e, 0xd2, 0x8a, 0x64, 0x1c, + 0x99, 0xd2, 0x9e, 0x0a, 0x3d, 0xc8, 0x34, 0x67, 0x22, 0x29, 0x41, 0x14, 0xc9, 0xc9, 0xfa, 0xa5, + 0xf8, 0xa0, 0xa2, 0xd4, 0xd1, 0x44, 0x25, 0xa4, 0xcf, 0xf7, 0xfe, 0xee, 0xb9, 0xb3, 0x7f, 0xeb, + 0xae, 0xbd, 0xcf, 0x3e, 0xf7, 0x9c, 0x7e, 0x3c, 0x86, 0x35, 0xf3, 0xbd, 0x7b, 0xef, 0xb5, 0xd7, + 0xeb, 0xec, 0x73, 0xce, 0x7e, 0xac, 0x73, 0x87, 0x0d, 0xdb, 0x49, 0xdb, 0xce, 0x08, 0x6c, 0xd9, + 0xb2, 0x65, 0x24, 0xf8, 0x3e, 0x78, 0x04, 0x5c, 0x58, 0x16, 0x19, 0x32, 0x1f, 0x03, 0x7f, 0x01, + 0x4b, 0xc1, 0xb8, 0x32, 0xf9, 0xed, 0xbe, 0x9f, 0x8b, 0xfc, 0x28, 0x08, 0xe9, 0xed, 0xb1, 0x8b, + 0x42, 0x68, 0x3a, 0xd8, 0x1c, 0x08, 0xcf, 0x8f, 0xc9, 0xee, 0x30, 0x7c, 0x2e, 0xf6, 0xba, 0xe0, + 0x82, 0x55, 0xbd, 0x17, 0xf4, 0x79, 0x17, 0x08, 0xff, 0x27, 0x12, 0x08, 0x68, 0x89, 0x27, 0xb7, + 0xdd, 0xf0, 0xb8, 0x90, 0xdd, 0xca, 0x82, 0x45, 0xe6, 0xd7, 0xc1, 0x05, 0x17, 0xd5, 0xf7, 0x5a, + 0x3d, 0x3a, 0x8e, 0x2a, 0x3a, 0x83, 0xf2, 0xcf, 0x56, 0xce, 0xb6, 0x91, 0x1d, 0x6e, 0x79, 0xdb, + 0x44, 0x9b, 0xc0, 0x2e, 0x03, 0x1b, 0xc1, 0x0a, 0xf0, 0xfa, 0x58, 0x50, 0xf4, 0xad, 0x03, 0x96, + 0x9e, 0x84, 0xa1, 0x39, 0xe6, 0xb7, 0xe0, 0x6e, 0xf0, 0x0b, 0xf0, 0x57, 0x60, 0x69, 0x13, 0x0c, + 0xf7, 0x26, 0xc0, 0xdf, 0x1f, 0x2c, 0x03, 0x92, 0x59, 0x08, 0x76, 0x89, 0xc5, 0x30, 0xe4, 0x7c, + 0x82, 0x19, 0x0d, 0x42, 0xfa, 0x37, 0x8d, 0x37, 0x87, 0x81, 0xd0, 0xd6, 0x7c, 0x72, 0x39, 0x78, + 0x19, 0xd4, 0xa1, 0x05, 0x28, 0xcf, 0x30, 0xb6, 0x0f, 0x85, 0xf7, 0xa8, 0x31, 0x3a, 0x3d, 0x94, + 0xa9, 0x53, 0x77, 0xdf, 0xff, 0x2a, 0x06, 0x09, 0x6c, 0x34, 0xf2, 0x4f, 0x1b, 0x9d, 0x17, 0x68, + 0xcf, 0x03, 0x63, 0xc0, 0x87, 0xc0, 0x1b, 0x41, 0x93, 0xb4, 0x16, 0x63, 0x8b, 0xc0, 0x9f, 0xc0, + 0xf5, 0x60, 0x1f, 0x10, 0xd2, 0xb4, 0xbe, 0xbe, 0xbe, 0x35, 0x21, 0xa3, 0xd7, 0x7a, 0xed, 0x01, + 0x92, 0x63, 0x06, 0x49, 0xf3, 0xc3, 0xd4, 0x5e, 0x83, 0x68, 0x58, 0xef, 0x79, 0xec, 0x8d, 0x62, + 0x80, 0x36, 0x37, 0x61, 0xb7, 0xa9, 0x77, 0x75, 0x45, 0x13, 0xc1, 0x34, 0x64, 0x63, 0x65, 0x53, + 0x83, 0xa3, 0x78, 0xdc, 0x49, 0xaf, 0x87, 0x40, 0xef, 0x43, 0xe7, 0xd4, 0x0a, 0x7a, 0x7a, 0x25, + 0xfb, 0xc1, 0x63, 0x60, 0x5d, 0xbb, 0x54, 0x7d, 0x13, 0x78, 0x75, 0x80, 0x09, 0xd4, 0xdf, 0x04, + 0xf6, 0x06, 0xb9, 0xa4, 0x58, 0xb6, 0x1d, 0xe2, 0xf5, 0x3a, 0x0e, 0x68, 0x62, 0x2e, 0xa3, 0xa7, + 0x10, 0xb8, 0x01, 0x1c, 0x0b, 0x76, 0xcd, 0xbd, 0x02, 0x64, 0x77, 0x03, 0x6f, 0x05, 0x5a, 0x29, + 0xef, 0x07, 0x65, 0xa4, 0xd5, 0xb4, 0xca, 0xcd, 0xca, 0x0d, 0xc5, 0x97, 0xc3, 0xd9, 0x04, 0x70, + 0x23, 0xb8, 0x09, 0x9c, 0x02, 0x76, 0x2f, 0x24, 0xa9, 0x7f, 0x1a, 0xfc, 0x17, 0xa4, 0xe8, 0x1e, + 0x3a, 0x4f, 0x02, 0x23, 0x0a, 0xbd, 0x3a, 0x25, 0x76, 0xde, 0x00, 0x7e, 0x04, 0xca, 0xe8, 0x12, + 0x04, 0x5a, 0x73, 0x2c, 0xe5, 0x2e, 0xe0, 0x44, 0xa0, 0x2d, 0x80, 0x8e, 0x3a, 0x07, 0xd5, 0x89, + 0x61, 0x90, 0x2e, 0xc6, 0x6e, 0x03, 0x21, 0xad, 0xa7, 0x71, 0x29, 0xb8, 0x3e, 0x64, 0x26, 0xea, + 0x3a, 0x4b, 0x35, 0x32, 0x38, 0x61, 0x60, 0xd8, 0x9c, 0x09, 0x96, 0x24, 0xfc, 0xaa, 0x4b, 0x03, + 0x79, 0x3e, 0xe8, 0x07, 0x21, 0xad, 0x0e, 0x6d, 0xd5, 0xaa, 0x63, 0x75, 0x79, 0x68, 0xb9, 0xc7, + 0xfa, 0x05, 0xb5, 0x82, 0x48, 0x28, 0x13, 0xcf, 0x3b, 0x80, 0x5e, 0xdf, 0x2a, 0xf4, 0x78, 0xc2, + 0x64, 0xb5, 0x2e, 0xbc, 0x9e, 0x56, 0xc1, 0xb3, 0x76, 0xc0, 0x27, 0x83, 0xf0, 0x90, 0x29, 0xf5, + 0xe7, 0xc0, 0xc4, 0x6a, 0x9e, 0xf3, 0xa5, 0xb1, 0x7d, 0x20, 0x58, 0x09, 0x72, 0xe9, 0xbc, 0x7c, + 0xeb, 0x19, 0x92, 0x78, 0xd5, 0xf6, 0xbf, 0x8c, 0xd6, 0x20, 0xb0, 0x9f, 0xcc, 0x51, 0x5e, 0xeb, + 0x08, 0xdf, 0x94, 0xe1, 0xaa, 0x67, 0x11, 0xfc, 0x29, 0x95, 0xa2, 0x39, 0xa6, 0x8c, 0x56, 0x23, + 0xd0, 0x99, 0x47, 0x7b, 0x76, 0x18, 0x2a, 0x62, 0xf0, 0xb5, 0xe0, 0xf9, 0x84, 0xe7, 0x3f, 0xd0, + 0x37, 0xb6, 0xd0, 0xa1, 0x3e, 0x0e, 0x78, 0x2b, 0xdb, 0xa0, 0x23, 0x48, 0x21, 0xdf, 0x54, 0x89, + 0xcf, 0x3e, 0xa0, 0x05, 0x25, 0x46, 0x3a, 0xea, 0x1c, 0xd9, 0x94, 0xbf, 0x8e, 0x1d, 0x8c, 0x6a, + 0x15, 0x58, 0x1b, 0xf1, 0x7a, 0x17, 0xfc, 0x51, 0x1d, 0xe1, 0x76, 0x05, 0xde, 0x19, 0x8e, 0xbc, + 0xd2, 0x1b, 0x4d, 0x6d, 0x4e, 0xad, 0xcb, 0x56, 0x1b, 0xfb, 0xbb, 0x83, 0x5f, 0x3a, 0xbe, 0xc5, + 0xda, 0x00, 0xf6, 0x72, 0x15, 0xeb, 0x30, 0x31, 0xaa, 0xcc, 0x9e, 0x47, 0xff, 0x80, 0xe9, 0x66, + 0xfa, 0xe0, 0xef, 0x0a, 0xee, 0x73, 0x94, 0x3e, 0x51, 0x27, 0x96, 0x1c, 0x5d, 0x7c, 0x8e, 0x02, + 0xab, 0x1c, 0xdf, 0x62, 0x5d, 0x94, 0x63, 0x23, 0x5b, 0x06, 0x83, 0xaf, 0x04, 0x5a, 0xda, 0x3d, + 0x7a, 0x4f, 0xca, 0x10, 0x0a, 0xb3, 0x1d, 0xa5, 0x7f, 0xc2, 0xb3, 0x87, 0xcb, 0x94, 0x99, 0x9e, + 0xfa, 0xf0, 0x31, 0x09, 0xfc, 0x07, 0x58, 0xd2, 0x54, 0xd1, 0xdc, 0x82, 0x81, 0x31, 0xed, 0x79, + 0x3c, 0xba, 0x25, 0x27, 0x72, 0x14, 0x6f, 0x76, 0x94, 0xbf, 0x9e, 0xa3, 0x5b, 0x57, 0x06, 0xbf, + 0xda, 0x03, 0x79, 0x74, 0x63, 0x65, 0xdb, 0x58, 0xd9, 0x13, 0xfc, 0x18, 0x3c, 0x0d, 0xf4, 0xea, + 0xf4, 0x83, 0x07, 0xc0, 0x8b, 0xc0, 0xd2, 0xbf, 0x60, 0x8c, 0xcf, 0x71, 0x82, 0xdc, 0x44, 0xa0, + 0x65, 0x3e, 0x24, 0x25, 0xb6, 0xa6, 0xe5, 0xe8, 0xd7, 0x91, 0xc1, 0xc7, 0x70, 0xf0, 0x50, 0xe8, + 0xb8, 0x5d, 0xd7, 0x64, 0xad, 0x63, 0x8b, 0xb6, 0x25, 0x7f, 0x07, 0xcf, 0x80, 0x3b, 0xc0, 0xab, + 0xa2, 0xfe, 0xe8, 0x3c, 0x13, 0xe4, 0xd2, 0xdc, 0xa8, 0x21, 0xa7, 0x03, 0xa3, 0xde, 0x9d, 0x5c, + 0xe6, 0x88, 0x36, 0xce, 0xc2, 0xf7, 0x9c, 0xdc, 0x8b, 0x42, 0xee, 0xab, 0xd1, 0x00, 0xe8, 0x8c, + 0x4d, 0xc4, 0xd6, 0xbe, 0x9e, 0x9e, 0x4a, 0xb9, 0x5f, 0xe4, 0x47, 0x80, 0x87, 0xad, 0x21, 0xda, + 0xef, 0x8e, 0x06, 0xd4, 0x60, 0x07, 0x7e, 0x72, 0x4f, 0x03, 0xf3, 0xa3, 0x6e, 0x31, 0xa2, 0x3d, + 0x44, 0xce, 0x46, 0xeb, 0x9b, 0x51, 0x23, 0x89, 0x0e, 0x6c, 0xeb, 0x48, 0x60, 0xa9, 0x1f, 0xc6, + 0x1e, 0x09, 0xb5, 0x46, 0xba, 0xf0, 0x31, 0xcf, 0x3a, 0x76, 0xda, 0x3a, 0xd7, 0x95, 0x9f, 0x19, + 0x11, 0x3a, 0x1b, 0xa4, 0x4e, 0xe8, 0x3d, 0x6f, 0xb4, 0xb0, 0x7b, 0x3b, 0xb0, 0xf4, 0x05, 0x8d, + 0x02, 0xcc, 0xbd, 0xc0, 0xff, 0x65, 0x8f, 0x84, 0xdd, 0xbd, 0xc1, 0x0b, 0x20, 0x46, 0x5a, 0x88, + 0xf2, 0x7d, 0x23, 0x7c, 0x3c, 0xb0, 0xe7, 0x29, 0x19, 0x2f, 0xfd, 0xf4, 0x92, 0xba, 0xe5, 0xe8, + 0x1f, 0x0c, 0xec, 0xa4, 0xaf, 0xc0, 0xb5, 0xf4, 0x8b, 0x54, 0xd7, 0xe4, 0xf9, 0x6d, 0xf0, 0xba, + 0x94, 0xad, 0xaa, 0x7d, 0xd8, 0x5b, 0x0c, 0x3c, 0x3a, 0xad, 0xaa, 0x2d, 0xdd, 0xcd, 0x7d, 0x3d, + 0x4b, 0xf0, 0x5a, 0x77, 0xbb, 0xb2, 0xc1, 0x40, 0x01, 0x1b, 0x97, 0x45, 0x6c, 0x5b, 0xb6, 0x9e, + 0xe2, 0x6b, 0x41, 0x23, 0xe7, 0x26, 0xec, 0x9c, 0x62, 0x1d, 0xb4, 0xdb, 0xb3, 0x82, 0xf0, 0xf2, + 0xaa, 0x28, 0x1e, 0x13, 0x31, 0xd6, 0xf3, 0xeb, 0x55, 0x78, 0xc6, 0xee, 0x58, 0x90, 0x7a, 0x85, + 0xad, 0xeb, 0x1f, 0xc0, 0xa8, 0x9d, 0x1a, 0xc6, 0x86, 0x9e, 0x5e, 0x8f, 0x4e, 0x2f, 0x62, 0xf3, + 0xca, 0xd8, 0x7b, 0x77, 0x98, 0x27, 0x0c, 0xef, 0x91, 0x08, 0xbf, 0x0a, 0xfb, 0x2c, 0x84, 0xb3, + 0x53, 0xae, 0xc8, 0x6a, 0xa5, 0xbb, 0xa2, 0x8a, 0x83, 0x88, 0xec, 0xc3, 0xf0, 0x37, 0x3a, 0x7d, + 0x87, 0x3b, 0xbc, 0x34, 0x8b, 0x61, 0xbe, 0xc6, 0x19, 0xea, 0x97, 0xe0, 0xc5, 0x06, 0x34, 0x6d, + 0xb0, 0xdd, 0x8b, 0xfe, 0x0c, 0xa0, 0x4d, 0xa2, 0xa5, 0x75, 0x30, 0x16, 0x01, 0x9d, 0xc4, 0xff, + 0x66, 0x3b, 0x69, 0x4b, 0xe7, 0xe0, 0x2c, 0x27, 0x09, 0x21, 0x6c, 0x28, 0xeb, 0x60, 0x29, 0x6f, + 0x3f, 0x86, 0x96, 0x96, 0xf9, 0x23, 0x80, 0xe6, 0x08, 0x9d, 0x7a, 0x2d, 0xe9, 0x2b, 0x44, 0x2d, + 0xc2, 0xe0, 0x32, 0x6b, 0x94, 0xf6, 0xd5, 0xa0, 0xb3, 0xd4, 0x53, 0x1f, 0x0e, 0xae, 0x00, 0x96, + 0x94, 0x4b, 0x1e, 0x53, 0x13, 0xde, 0xb1, 0x47, 0x67, 0xb3, 0x05, 0xe0, 0x58, 0xd0, 0xfd, 0x2a, + 0xc3, 0xd4, 0xa9, 0xfb, 0x73, 0xe0, 0x09, 0x90, 0xa2, 0x3b, 0xeb, 0x8c, 0x0e, 0x86, 0xe5, 0xc7, + 0x1e, 0x39, 0x7e, 0x07, 0xaf, 0xeb, 0xa9, 0x84, 0xa7, 0x9b, 0x75, 0x27, 0x18, 0x6a, 0xd2, 0x26, + 0xf8, 0x72, 0x30, 0xb2, 0xb8, 0x56, 0x05, 0xa7, 0x4f, 0x24, 0x97, 0x82, 0x09, 0x05, 0x33, 0x52, + 0xea, 0xfb, 0x55, 0x1d, 0x3a, 0x04, 0x65, 0x9b, 0x8b, 0xb9, 0x99, 0x8f, 0x7c, 0x2f, 0x5b, 0xa3, + 0xf0, 0xb6, 0xc0, 0x5b, 0x6c, 0xf9, 0x43, 0xd0, 0xd6, 0xa7, 0xf2, 0xcf, 0x82, 0x33, 0x0b, 0x5f, + 0x1a, 0x20, 0x31, 0x73, 0xc8, 0x9b, 0xe0, 0x72, 0xf4, 0x0a, 0x19, 0xef, 0x20, 0xb8, 0xa1, 0xe8, + 0x74, 0xca, 0x54, 0x9f, 0x23, 0xde, 0x28, 0xab, 0x33, 0x26, 0x1a, 0xa0, 0x45, 0xe0, 0xf6, 0x0c, + 0xf3, 0xaf, 0xc9, 0x90, 0x49, 0x89, 0xac, 0x72, 0x3a, 0x8f, 0x76, 0x78, 0x05, 0xab, 0xf6, 0x96, + 0xa2, 0x30, 0x54, 0xb1, 0x5c, 0x8e, 0xfc, 0x55, 0x85, 0x4e, 0xeb, 0xc3, 0x9a, 0x1a, 0xbc, 0x77, + 0x53, 0x29, 0xde, 0x05, 0x4e, 0x02, 0x0a, 0xae, 0xd3, 0x47, 0x5d, 0xb4, 0x96, 0x47, 0xff, 0xd0, + 0x81, 0x6a, 0x6f, 0xbf, 0xf8, 0xd0, 0x4e, 0x5c, 0x7e, 0x0a, 0xda, 0x44, 0xe5, 0x68, 0xec, 0x0e, + 0xfa, 0xb6, 0x8f, 0x9c, 0x96, 0xde, 0x7b, 0x40, 0x78, 0x36, 0xd2, 0xbf, 0x35, 0xbe, 0x0c, 0xea, + 0xd0, 0x5c, 0x94, 0x67, 0x3b, 0x06, 0x56, 0xc3, 0xfb, 0x21, 0xb8, 0x95, 0x58, 0x54, 0x4f, 0x13, + 0x01, 0x6a, 0xb9, 0xb5, 0xf4, 0x6c, 0x5a, 0xab, 0xbc, 0x17, 0x83, 0x3a, 0xe7, 0x59, 0x52, 0xd6, + 0xef, 0x3c, 0x70, 0x78, 0x1b, 0xe7, 0x50, 0x3e, 0x0b, 0x2c, 0xe9, 0xc6, 0xd5, 0x22, 0x0c, 0xde, + 0x61, 0x8d, 0xd2, 0xd6, 0x13, 0x53, 0x8d, 0x50, 0x3a, 0xd7, 0x31, 0x24, 0x56, 0xad, 0x54, 0x29, + 0xfa, 0x4a, 0xfe, 0x6b, 0xe5, 0xaa, 0x4a, 0x7f, 0xac, 0x76, 0x05, 0xbe, 0x34, 0x4e, 0xbd, 0xed, + 0xcb, 0x75, 0xbe, 0xf4, 0x00, 0xb7, 0x6b, 0x89, 0x6d, 0x0b, 0x3f, 0x10, 0x51, 0x3a, 0x20, 0xc2, + 0xcf, 0x62, 0xf3, 0xf8, 0x6a, 0xc5, 0x3a, 0x1d, 0x68, 0x95, 0xca, 0x25, 0x4d, 0xd6, 0x1f, 0xc8, + 0x15, 0x8e, 0xc9, 0x31, 0x38, 0x5a, 0xa5, 0xc7, 0x3a, 0xfd, 0xc9, 0x57, 0xaa, 0xea, 0x00, 0x1d, + 0xe1, 0x38, 0xa8, 0xca, 0xd2, 0xe1, 0xd0, 0xce, 0x6f, 0x31, 0x1b, 0xcf, 0xd0, 0x31, 0x87, 0x81, + 0xd5, 0x3f, 0xca, 0xea, 0x52, 0xec, 0x6f, 0x79, 0x3d, 0x0d, 0x90, 0xee, 0x70, 0xd7, 0xfe, 0x04, + 0x5e, 0xad, 0x3b, 0xc9, 0x5d, 0xd4, 0x2b, 0x9a, 0x33, 0xd1, 0x6a, 0xf2, 0x56, 0x62, 0xee, 0x10, + 0x06, 0x67, 0x25, 0x65, 0x13, 0x74, 0x42, 0xc4, 0x88, 0x7c, 0xe5, 0x13, 0x17, 0x31, 0x1b, 0x28, + 0x91, 0xed, 0x91, 0x92, 0xdd, 0x53, 0xf2, 0xad, 0x0d, 0x96, 0x44, 0x57, 0xc7, 0x0a, 0x4b, 0x3a, + 0x7e, 0xcc, 0x05, 0xf3, 0x81, 0xf2, 0xe2, 0x27, 0x00, 0xfd, 0x89, 0xaa, 0x31, 0xc2, 0x9e, 0xfe, + 0x63, 0xb4, 0x1e, 0x78, 0xa4, 0x05, 0x41, 0x07, 0xe2, 0x72, 0x42, 0xf0, 0x0c, 0xe0, 0x1d, 0x26, + 0x43, 0xc3, 0x17, 0x96, 0x5b, 0xea, 0x96, 0xc0, 0xc0, 0x2c, 0x60, 0x93, 0x70, 0x4a, 0x90, 0x35, + 0xf7, 0x5f, 0x9d, 0x6e, 0xb7, 0x2d, 0x0e, 0x3e, 0xbc, 0x74, 0x2f, 0xec, 0x41, 0x74, 0x49, 0x44, + 0x7d, 0x80, 0x8d, 0xa8, 0xee, 0x5c, 0x0e, 0x3d, 0x94, 0x34, 0xe4, 0x74, 0x62, 0x54, 0xab, 0x97, + 0x77, 0x92, 0xfe, 0xa2, 0x23, 0xde, 0x38, 0x0b, 0xdf, 0xb7, 0xe4, 0x5c, 0x18, 0x32, 0x1f, 0x89, + 0x3a, 0xa7, 0x53, 0x7b, 0x91, 0x5c, 0xf2, 0x36, 0x5b, 0x29, 0xdb, 0x7a, 0x32, 0x2d, 0xe9, 0x2b, + 0x47, 0xe7, 0x14, 0x1f, 0x55, 0xae, 0xd9, 0x81, 0x8f, 0x03, 0x81, 0x4d, 0xf3, 0xda, 0x58, 0x8a, + 0xf6, 0xd5, 0x51, 0x77, 0x48, 0x4c, 0x01, 0xde, 0x3f, 0x32, 0x0a, 0xe5, 0xb0, 0x5c, 0x43, 0x23, + 0xeb, 0xd3, 0x0f, 0x72, 0xe3, 0x81, 0x3e, 0x46, 0x5a, 0x3a, 0x31, 0x1a, 0x4c, 0x83, 0x1d, 0x38, + 0xfd, 0x99, 0x75, 0x1c, 0x69, 0x6f, 0x84, 0x9f, 0x4e, 0xbf, 0x22, 0x30, 0x02, 0xcc, 0x04, 0xd3, + 0xc1, 0x24, 0xa0, 0xfc, 0x4b, 0x2c, 0xd9, 0x7d, 0x71, 0xce, 0x75, 0xa0, 0xaf, 0x44, 0x98, 0xa5, + 0xac, 0xcf, 0xd6, 0x39, 0xf6, 0x53, 0x32, 0x38, 0x7d, 0xa7, 0x75, 0xdc, 0x6e, 0xdf, 0x4d, 0xb9, + 0x0f, 0x38, 0x00, 0x1c, 0x06, 0x34, 0x3f, 0xbe, 0x22, 0x65, 0x2b, 0xda, 0x87, 0xe2, 0x64, 0xa0, + 0xc9, 0xd4, 0x92, 0x32, 0x8c, 0xc9, 0x74, 0x25, 0xfd, 0xc7, 0x58, 0x25, 0xda, 0xca, 0x09, 0x4d, + 0x8c, 0x3a, 0x6c, 0xa8, 0x03, 0x1f, 0x23, 0x41, 0x3f, 0xb0, 0xa4, 0x95, 0x78, 0x66, 0x43, 0x6e, + 0x06, 0xcc, 0x60, 0x50, 0x59, 0x46, 0x8f, 0x34, 0xf1, 0xba, 0xf9, 0x65, 0xf8, 0xca, 0x0c, 0xae, + 0x75, 0x94, 0xce, 0x69, 0x34, 0xb8, 0x88, 0x31, 0xfc, 0x7e, 0xc7, 0xf1, 0x2d, 0xd6, 0xc2, 0x88, + 0x4a, 0xef, 0x6c, 0x8c, 0x8e, 0x06, 0xfa, 0x43, 0x83, 0x47, 0x0b, 0x60, 0x76, 0xed, 0x8c, 0xe1, + 0x29, 0x4b, 0x69, 0xe9, 0x7e, 0x18, 0xdd, 0x69, 0xcd, 0xde, 0x43, 0x73, 0x35, 0xf1, 0x71, 0xb1, + 0x75, 0xdc, 0x6e, 0xeb, 0xe9, 0xdd, 0xdf, 0x55, 0xaa, 0xc3, 0xc4, 0xe8, 0x58, 0x50, 0x7c, 0xdc, + 0x6b, 0xfb, 0x1a, 0x54, 0x7c, 0x8b, 0x56, 0xe7, 0xd8, 0x42, 0x7d, 0x12, 0xd0, 0x29, 0xdd, 0xd2, + 0x5b, 0xea, 0xc4, 0x91, 0xa3, 0x8b, 0xc3, 0x8f, 0x5b, 0xa7, 0x41, 0x5b, 0x31, 0x4d, 0xce, 0xb1, + 0x53, 0x49, 0x06, 0xa3, 0x1a, 0x80, 0x32, 0xd2, 0x64, 0xdc, 0x7a, 0x3a, 0x28, 0xf5, 0x37, 0x1a, + 0x4b, 0xdf, 0xad, 0xe4, 0xb4, 0x07, 0x61, 0x1c, 0x7e, 0x10, 0x94, 0x7d, 0x73, 0x5b, 0xd2, 0x83, + 0xe9, 0xb8, 0x0a, 0x0e, 0x8f, 0x04, 0x9a, 0xd8, 0x72, 0xe8, 0x56, 0x84, 0x4e, 0x76, 0x04, 0xb5, + 0x7d, 0xd8, 0x37, 0xee, 0xa5, 0x5e, 0x0f, 0xb6, 0xf5, 0xbf, 0xc4, 0xab, 0x1c, 0xbf, 0x31, 0xd6, + 0xfb, 0xea, 0x79, 0x0c, 0xb4, 0xf1, 0x70, 0x5b, 0xcc, 0x4b, 0x84, 0xef, 0x0d, 0xe6, 0xbc, 0xc0, + 0x64, 0xa3, 0x55, 0x62, 0x98, 0x08, 0xaa, 0xe6, 0x98, 0x94, 0x9d, 0x6c, 0x86, 0x70, 0xbe, 0xc2, + 0x19, 0x08, 0xed, 0x23, 0xee, 0x75, 0xf8, 0x1e, 0xeb, 0xf7, 0x30, 0x3b, 0xf3, 0x53, 0x33, 0x51, + 0xb5, 0x52, 0xc4, 0x7b, 0x60, 0xf7, 0x2c, 0xb0, 0xc1, 0x73, 0xda, 0xe6, 0x69, 0xb7, 0xbe, 0x14, + 0xd8, 0x9b, 0xb6, 0xbe, 0xa9, 0x38, 0x94, 0xab, 0x9e, 0x0d, 0x9e, 0x04, 0x9a, 0xa4, 0xaf, 0x01, + 0xad, 0xbd, 0x0f, 0xa5, 0xf6, 0x19, 0x8b, 0x41, 0x19, 0x5d, 0x89, 0x80, 0x97, 0xa8, 0xea, 0x29, + 0x46, 0x6c, 0x69, 0xfb, 0xf0, 0x29, 0xf0, 0x38, 0x48, 0x91, 0xb2, 0x04, 0x63, 0xe4, 0x84, 0x72, + 0x2a, 0xf8, 0x0a, 0x90, 0xce, 0x53, 0x20, 0xef, 0xf4, 0xde, 0x53, 0x84, 0x46, 0x09, 0x67, 0x9f, + 0x07, 0xf6, 0x0e, 0xc1, 0x1a, 0x44, 0xda, 0x54, 0xfe, 0x14, 0x9c, 0x0a, 0xf6, 0x34, 0x26, 0x4a, + 0x9b, 0xe8, 0x68, 0x50, 0x8e, 0x03, 0xfa, 0xe2, 0xba, 0x0e, 0x94, 0xd1, 0x37, 0x10, 0x68, 0x64, + 0x3b, 0xd1, 0xb5, 0x7f, 0x29, 0x8d, 0xd6, 0x11, 0x20, 0x98, 0x2f, 0xc1, 0xbe, 0xc0, 0xe9, 0xf2, + 0x58, 0xcf, 0xc1, 0xfc, 0x15, 0xe8, 0x07, 0xfa, 0x18, 0xf9, 0x68, 0xbb, 0x54, 0x5d, 0xc9, 0xab, + 0xf1, 0x40, 0xf9, 0x20, 0x41, 0x69, 0xd2, 0xa3, 0xc0, 0xf1, 0x20, 0xf7, 0x28, 0xf0, 0x3d, 0x92, + 0x6c, 0x1f, 0x46, 0xbe, 0x11, 0x6a, 0x64, 0x94, 0x89, 0xa4, 0xca, 0x0a, 0xa5, 0x0b, 0xad, 0xfd, + 0x85, 0x22, 0x71, 0xf5, 0x55, 0x62, 0x49, 0x98, 0x19, 0xe8, 0x6a, 0x6a, 0xf2, 0x9c, 0x55, 0xea, + 0x69, 0xe8, 0x04, 0x1a, 0x8d, 0xa5, 0xf6, 0x00, 0xf1, 0x7a, 0x29, 0xa7, 0x33, 0xcd, 0xb9, 0xfe, + 0x1b, 0xe0, 0xe9, 0x63, 0xdc, 0x4b, 0x4e, 0x5f, 0x5d, 0xd6, 0x66, 0x0c, 0x2c, 0x05, 0x5f, 0x03, + 0xca, 0x9f, 0x87, 0x34, 0x8e, 0x98, 0x26, 0x87, 0x8c, 0xad, 0x5a, 0x27, 0x18, 0x05, 0x14, 0x92, + 0x26, 0xec, 0xb3, 0x8b, 0xa0, 0xa8, 0x2b, 0x65, 0xf2, 0x49, 0x50, 0x75, 0xaf, 0x82, 0x4a, 0x17, + 0x69, 0xcb, 0xf1, 0x19, 0xd0, 0xf9, 0xce, 0x4f, 0xfd, 0xfd, 0x40, 0x8b, 0x40, 0x48, 0x33, 0x0a, + 0xff, 0x5b, 0xbd, 0x24, 0x2a, 0xa5, 0x53, 0xef, 0x6a, 0x47, 0xa7, 0xa4, 0x53, 0xf4, 0xcb, 0x07, + 0x7d, 0xde, 0x9e, 0x45, 0x39, 0xf0, 0x30, 0x9d, 0xf2, 0x22, 0x6d, 0x7b, 0xc1, 0xb0, 0x5a, 0x2b, + 0x65, 0xe7, 0x6f, 0x29, 0xe1, 0x85, 0xd3, 0x37, 0x07, 0x14, 0x49, 0xb9, 0x07, 0xa9, 0xdb, 0x7f, + 0x91, 0x84, 0xe2, 0x43, 0x5f, 0x27, 0x20, 0xed, 0x89, 0xde, 0x06, 0xb4, 0xea, 0x44, 0x89, 0xfe, + 0xe5, 0xc0, 0xd2, 0xb9, 0x52, 0x80, 0xa9, 0xa5, 0xbc, 0x95, 0x82, 0xa5, 0xd4, 0x76, 0xc0, 0xd2, + 0x63, 0x51, 0xc3, 0x03, 0xfa, 0x4a, 0x80, 0x69, 0x2b, 0x30, 0x2a, 0x25, 0xb7, 0x4d, 0xf7, 0x11, + 0xbc, 0xfd, 0xe6, 0xff, 0x04, 0xbc, 0xae, 0xa7, 0x02, 0x5e, 0x1f, 0x58, 0x05, 0x42, 0xfa, 0xcd, + 0xd6, 0xb8, 0xb8, 0xda, 0x93, 0x74, 0xc5, 0xa0, 0x1f, 0x34, 0xf2, 0x17, 0xb1, 0x67, 0xd9, 0x68, + 0x78, 0xc3, 0xe0, 0x69, 0xe2, 0x3d, 0xdf, 0xf0, 0xad, 0xae, 0xe9, 0xde, 0x01, 0x9a, 0x3c, 0x0e, + 0xfb, 0x01, 0x3d, 0x35, 0xa2, 0x9f, 0x83, 0xe4, 0x3e, 0x8c, 0xfe, 0x85, 0x12, 0x84, 0xf4, 0xd7, + 0x38, 0x6f, 0xa5, 0xdc, 0x01, 0x46, 0xc5, 0x5c, 0x02, 0x17, 0xaa, 0xf9, 0xea, 0x20, 0xe0, 0xa6, + 0x6a, 0x43, 0x71, 0x64, 0xf4, 0xaa, 0x4d, 0x01, 0xa3, 0x43, 0xfe, 0xce, 0xfa, 0xce, 0x11, 0xd8, + 0x7e, 0x46, 0xe0, 0x7f, 0xd1, 0xc6, 0xfb, 0xa0, 0x6e, 0xf6, 0xa7, 0x73, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXCircleDownArrowIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x57, 0xb9, 0x2b, + 0x37, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x52, 0x92, 0x24, 0x04, 0x00, 0x00, + 0x05, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xe5, 0x99, 0x5d, 0x88, 0x55, 0x55, 0x14, 0xc7, + 0xbd, 0xe6, 0x4c, 0x90, 0xa9, 0x59, 0xca, 0x64, 0x56, 0x68, 0x18, 0x0a, 0x21, 0x44, 0x90, 0x41, + 0x06, 0xe5, 0x54, 0x50, 0xbd, 0x54, 0xcf, 0x9a, 0x45, 0x11, 0x69, 0x61, 0xd6, 0x93, 0x0f, 0x41, + 0xa4, 0x49, 0x5a, 0xa2, 0x11, 0x46, 0x14, 0xf4, 0x52, 0x50, 0x4f, 0x81, 0x31, 0x84, 0x4a, 0xa6, + 0x06, 0x95, 0x58, 0xf4, 0x01, 0x8a, 0x7d, 0x3a, 0xf6, 0x92, 0x5f, 0xf9, 0x11, 0x15, 0x36, 0x39, + 0x3a, 0x4e, 0xbf, 0xff, 0xf1, 0xae, 0x3b, 0xeb, 0xec, 0x7b, 0xce, 0xb9, 0xfb, 0x5c, 0xef, 0xcc, + 0x1d, 0x68, 0xc1, 0x9f, 0xbd, 0xbe, 0xd7, 0x3a, 0xe7, 0x9e, 0x7d, 0xce, 0xde, 0xfb, 0x56, 0xc6, + 0xb4, 0x88, 0x06, 0x07, 0x07, 0xc7, 0x92, 0x6a, 0x2a, 0xb8, 0x0a, 0x4c, 0x07, 0x57, 0x82, 0x53, + 0xe0, 0x20, 0x38, 0x24, 0x54, 0x2a, 0x95, 0x7f, 0x18, 0xdb, 0x4f, 0x34, 0x3b, 0x15, 0x3c, 0x06, + 0x3e, 0x02, 0x7d, 0xa0, 0x11, 0xfd, 0x8c, 0xc3, 0x2b, 0xe0, 0x56, 0xa0, 0x0b, 0x1d, 0x59, 0xa2, + 0xe8, 0x9d, 0x60, 0x27, 0x18, 0x00, 0xcd, 0xd2, 0x61, 0x02, 0xd7, 0x80, 0x49, 0xc3, 0xde, 0x3d, + 0x45, 0xe6, 0x82, 0x2d, 0xa0, 0x95, 0x74, 0x9c, 0x64, 0xcf, 0x80, 0xce, 0x32, 0x17, 0x50, 0x89, + 0x71, 0x26, 0x69, 0x07, 0x7e, 0x1b, 0xc0, 0x93, 0x20, 0xeb, 0x27, 0x3e, 0x87, 0x7e, 0x17, 0xf8, + 0x0a, 0x24, 0xcf, 0x33, 0xe3, 0x51, 0x30, 0x1e, 0xe8, 0x99, 0x9f, 0x06, 0xae, 0x03, 0xf7, 0x00, + 0xcd, 0x83, 0x2c, 0x3a, 0x80, 0x72, 0x21, 0xf3, 0x60, 0x77, 0x96, 0xb1, 0xb4, 0x8e, 0xa6, 0xa7, + 0x80, 0x4f, 0x41, 0x16, 0x7d, 0x82, 0xf2, 0x51, 0x90, 0xd7, 0x4c, 0xaa, 0x1e, 0x7e, 0x63, 0xc1, + 0x7c, 0xb0, 0x0e, 0x9c, 0x04, 0x21, 0xfd, 0x8b, 0xe2, 0xa1, 0x54, 0x50, 0x33, 0x02, 0x49, 0x6e, + 0x00, 0x07, 0xc2, 0xec, 0xc8, 0x5f, 0x83, 0xee, 0x66, 0x72, 0x5a, 0x0c, 0xf1, 0x93, 0x81, 0x26, + 0x6a, 0xd6, 0xa4, 0x7e, 0x19, 0x7d, 0xd6, 0x2f, 0x6b, 0xe1, 0xf9, 0x23, 0x81, 0xb3, 0xc0, 0x09, + 0xe0, 0x49, 0x45, 0x74, 0x87, 0xa3, 0x1e, 0xb1, 0xfc, 0xec, 0x43, 0x16, 0x72, 0x5d, 0x03, 0xb2, + 0x7e, 0xd1, 0xd7, 0x87, 0xbc, 0x22, 0x39, 0x12, 0x4d, 0x02, 0x3f, 0x00, 0x4f, 0x87, 0x10, 0xe6, + 0x45, 0xa6, 0x28, 0xe5, 0x46, 0xde, 0x0e, 0xf0, 0xa6, 0x2f, 0x56, 0xe5, 0x97, 0x44, 0x27, 0x22, + 0xe0, 0x22, 0xb0, 0x39, 0x48, 0xb2, 0x0f, 0x59, 0x1f, 0x95, 0x61, 0x25, 0x6a, 0xe8, 0xed, 0xe2, + 0xe9, 0x0c, 0xc2, 0x82, 0xa8, 0xa2, 0x38, 0x3e, 0xe7, 0x23, 0xe1, 0xf5, 0xba, 0xd2, 0x1b, 0x61, + 0x44, 0x88, 0x5a, 0xeb, 0x33, 0xea, 0x5f, 0x5e, 0x58, 0x9c, 0x80, 0x2e, 0xf0, 0xb7, 0x0b, 0x8c, + 0xbf, 0x62, 0x97, 0x99, 0x78, 0x4d, 0xbc, 0x65, 0x20, 0xee, 0x6e, 0xa5, 0x63, 0xf5, 0x8b, 0x6f, + 0x01, 0x9e, 0xd6, 0x3b, 0x97, 0x7a, 0x16, 0xcf, 0x37, 0xbc, 0x37, 0xfc, 0xf3, 0xf5, 0x5e, 0x8d, + 0x35, 0xc4, 0xbd, 0xe3, 0xf2, 0xcc, 0x6e, 0x1c, 0x91, 0xf6, 0x20, 0xf6, 0x32, 0xf0, 0xbb, 0xcb, + 0x71, 0x1a, 0x7e, 0x46, 0xda, 0xab, 0x2a, 0x61, 0x98, 0x0d, 0x74, 0x87, 0x8d, 0x34, 0x19, 0x2f, + 0xc9, 0x74, 0x6e, 0xa0, 0x24, 0xee, 0x27, 0x4b, 0xc2, 0xb8, 0xb8, 0x81, 0x7b, 0xa6, 0x99, 0x38, + 0xfd, 0x62, 0x9e, 0xde, 0xcf, 0x73, 0x7c, 0xcd, 0x7b, 0xc1, 0xc7, 0xcf, 0xe8, 0x20, 0x23, 0xb1, + 0x5a, 0x4c, 0x19, 0x3d, 0x1c, 0x98, 0xa3, 0x44, 0x82, 0x3b, 0x41, 0xaf, 0x25, 0x61, 0xd4, 0xba, + 0xa8, 0xcb, 0x82, 0xfd, 0x4b, 0xfe, 0x01, 0x53, 0x32, 0xea, 0xb3, 0xfd, 0xb6, 0x93, 0x47, 0x9c, + 0xe5, 0xd3, 0xdf, 0x4f, 0xd1, 0x35, 0xae, 0xb0, 0x7a, 0xbd, 0xdf, 0xe4, 0xa4, 0x71, 0xae, 0xe4, + 0x26, 0x14, 0xd7, 0x9a, 0x92, 0xb1, 0x87, 0xc0, 0xb3, 0x4e, 0x6e, 0x17, 0xfb, 0x21, 0x85, 0x07, + 0x5c, 0xf1, 0x07, 0x8d, 0xb7, 0x3b, 0x5e, 0x53, 0x54, 0x0d, 0x3d, 0xe6, 0xd0, 0xce, 0x91, 0x9b, + 0x77, 0x9c, 0xfa, 0x5f, 0xb8, 0x1e, 0xba, 0xb9, 0xc9, 0x13, 0x25, 0x5b, 0xe3, 0xf3, 0x9d, 0x51, + 0xbb, 0x96, 0x1d, 0x4e, 0x6e, 0x37, 0xeb, 0x6f, 0x62, 0x27, 0xcd, 0xdc, 0xac, 0x86, 0xac, 0x71, + 0x2d, 0x3d, 0x8d, 0x7a, 0xb9, 0xd2, 0xd3, 0x26, 0x8c, 0x82, 0x71, 0x5f, 0xd0, 0x43, 0xd2, 0xab, + 0x35, 0xee, 0x3f, 0xe7, 0x9a, 0x98, 0xa3, 0x89, 0xc2, 0x7e, 0x92, 0x5e, 0xb5, 0x3e, 0x9e, 0x40, + 0x97, 0x97, 0xba, 0x4e, 0x0f, 0x3b, 0x7e, 0x34, 0xb0, 0x61, 0xe3, 0xb5, 0x3b, 0x3e, 0x25, 0xe8, + 0xee, 0x44, 0x20, 0xb7, 0x5b, 0x3c, 0x49, 0x03, 0x83, 0xae, 0x89, 0x2b, 0xc4, 0xeb, 0x51, 0x39, + 0xe6, 0x94, 0x62, 0x13, 0x43, 0xa0, 0xab, 0x13, 0xf9, 0xa5, 0xb4, 0x18, 0xd2, 0xd2, 0xf7, 0xf1, + 0x3a, 0x63, 0x81, 0x02, 0xff, 0x69, 0xe0, 0x03, 0xf0, 0x1d, 0xb8, 0xa5, 0xc0, 0xd5, 0x4c, 0x5a, + 0x60, 0xf9, 0xf5, 0xbf, 0xde, 0x34, 0xe7, 0x89, 0x04, 0x7f, 0x01, 0xa3, 0xad, 0xa6, 0xcf, 0x1b, + 0x71, 0x54, 0x71, 0x4f, 0x2b, 0xbc, 0x2f, 0x06, 0xbf, 0x96, 0x5f, 0x64, 0x36, 0xf4, 0x5a, 0xc4, + 0x79, 0xdb, 0xbb, 0x66, 0xcb, 0x1b, 0xf1, 0x9f, 0x0b, 0x3c, 0x25, 0xb5, 0x6c, 0x72, 0xfa, 0xe7, + 0x48, 0x1b, 0xdb, 0x42, 0xe2, 0xad, 0xa3, 0x79, 0xb0, 0xd7, 0x39, 0xad, 0x25, 0xb3, 0x6f, 0xbe, + 0xcf, 0xd9, 0x12, 0x1e, 0xbb, 0xf6, 0xa5, 0xdb, 0xc1, 0x1c, 0x67, 0xdb, 0xe6, 0xf8, 0x3c, 0x36, + 0xec, 0x67, 0xa8, 0x57, 0x92, 0x6e, 0x77, 0x97, 0x74, 0x0a, 0xfe, 0xe2, 0xbc, 0x2c, 0xa6, 0xc7, + 0x47, 0x5b, 0x2e, 0xbf, 0x96, 0x50, 0x0a, 0x9d, 0x02, 0x8c, 0x61, 0xfc, 0x5c, 0x42, 0x95, 0xee, + 0x65, 0x1c, 0x0f, 0xbe, 0x35, 0x45, 0x75, 0x5c, 0x6d, 0xb9, 0x8a, 0x46, 0x7c, 0x9f, 0x0d, 0xe2, + 0xba, 0x6b, 0xfe, 0x18, 0x56, 0x06, 0xc6, 0xfb, 0x6a, 0xc6, 0x02, 0x86, 0x18, 0x35, 0xbf, 0xdf, + 0xc5, 0x6a, 0x75, 0x79, 0x17, 0xf8, 0xd8, 0xe9, 0x16, 0xc0, 0x6f, 0x72, 0xb2, 0xd8, 0xa8, 0xa6, + 0x55, 0x1a, 0xdf, 0x1d, 0x2e, 0x56, 0xcb, 0x5b, 0xbd, 0x05, 0xcf, 0x13, 0xc2, 0x8d, 0xce, 0x28, + 0xf6, 0x2d, 0xb3, 0x35, 0x1a, 0xf1, 0xbd, 0x1a, 0xf8, 0xe6, 0xff, 0x40, 0xde, 0x03, 0x8c, 0xfc, + 0x45, 0x48, 0xf7, 0x62, 0xa3, 0x9c, 0x66, 0xc7, 0x57, 0x1b, 0x12, 0xbf, 0xd4, 0xde, 0x6c, 0xb6, + 0xda, 0x88, 0xc3, 0xaf, 0xc0, 0x48, 0xc7, 0x63, 0x3a, 0x04, 0x8a, 0x22, 0x7c, 0xd5, 0xfc, 0x2f, + 0x16, 0x5c, 0x30, 0xae, 0x8a, 0x4a, 0x58, 0x75, 0x22, 0xcf, 0x23, 0x41, 0xae, 0xfa, 0x37, 0x18, + 0x0e, 0xaf, 0x06, 0x4e, 0x4f, 0x95, 0x2c, 0xd2, 0xa8, 0xf9, 0x95, 0x25, 0xf3, 0x8d, 0xa3, 0x1f, + 0xbf, 0xae, 0x1f, 0x40, 0xee, 0xaa, 0xcb, 0x81, 0x52, 0xe7, 0x28, 0xfd, 0xc0, 0xe8, 0x08, 0x8c, + 0xff, 0xa2, 0xd6, 0xc5, 0x84, 0x0a, 0xfc, 0xa7, 0x83, 0xac, 0x3b, 0x5f, 0xaa, 0x69, 0xe5, 0x25, + 0xcf, 0x52, 0xe0, 0xe9, 0xbd, 0xb0, 0x5e, 0x4d, 0xc6, 0x6b, 0xa3, 0xf7, 0x84, 0x2f, 0xf5, 0xd3, + 0x56, 0x0b, 0xaa, 0x79, 0x7f, 0xa7, 0x5e, 0xa8, 0x15, 0x88, 0x64, 0x88, 0x9f, 0x08, 0x74, 0xe3, + 0x8c, 0x74, 0x34, 0x37, 0x23, 0x37, 0x1c, 0xa3, 0xce, 0xbb, 0xff, 0x34, 0x6f, 0xc6, 0xb3, 0xe0, + 0xee, 0xdc, 0x80, 0x1c, 0x03, 0x31, 0x7a, 0xfd, 0x2d, 0x07, 0x7e, 0xb9, 0x9c, 0xe3, 0x9d, 0x56, + 0x13, 0xa3, 0xf5, 0x93, 0xce, 0xdb, 0x3d, 0x15, 0xef, 0xf2, 0x95, 0x02, 0xef, 0x15, 0x3e, 0x02, + 0x5e, 0x87, 0x93, 0xd7, 0xa7, 0xd3, 0x0f, 0x9f, 0x44, 0x2d, 0x9d, 0x1b, 0x7a, 0x3a, 0x86, 0xa0, + 0xcf, 0x7e, 0x31, 0xe1, 0xa4, 0x2b, 0xee, 0xf1, 0x91, 0xf0, 0x3f, 0x02, 0xbf, 0xb5, 0x2b, 0x4e, + 0xd2, 0xa4, 0x95, 0x1a, 0x4f, 0x07, 0x75, 0x35, 0xe7, 0xee, 0x88, 0x4e, 0x87, 0xf3, 0x04, 0xb0, + 0x37, 0x48, 0x72, 0x14, 0xb9, 0xf4, 0x4f, 0x1f, 0x53, 0x94, 0xbc, 0x7a, 0x83, 0x84, 0x67, 0x3a, + 0x2a, 0xff, 0x44, 0x4c, 0x7c, 0xca, 0x87, 0xa0, 0x99, 0x40, 0x3f, 0x93, 0x27, 0x7d, 0xb9, 0x34, + 0xdb, 0x6d, 0x8d, 0x93, 0x8a, 0x69, 0x46, 0x20, 0x97, 0xbe, 0xbe, 0x3b, 0x41, 0x48, 0x1b, 0x9b, + 0xc9, 0x97, 0xc4, 0x90, 0x49, 0x87, 0x44, 0xfe, 0x0d, 0x61, 0xc9, 0xf5, 0x65, 0x8c, 0x5a, 0x16, + 0xe4, 0x15, 0x27, 0x5e, 0x5f, 0xc5, 0x75, 0xa0, 0x0f, 0x84, 0xa4, 0xff, 0x86, 0x2e, 0xec, 0xe6, + 0x90, 0x40, 0x05, 0xb6, 0x85, 0x99, 0xab, 0xf2, 0x67, 0x8c, 0x4b, 0x40, 0xb2, 0x9d, 0xca, 0x6b, + 0xd2, 0xf4, 0xf8, 0xe9, 0x5c, 0xf0, 0x76, 0xb0, 0x01, 0x68, 0x69, 0x10, 0x92, 0x2e, 0x62, 0xa1, + 0xf9, 0x17, 0x8d, 0x7e, 0x81, 0x9e, 0xeb, 0x47, 0xb2, 0x71, 0x18, 0xd7, 0x82, 0xe5, 0x40, 0x7c, + 0x48, 0xda, 0xa1, 0x7c, 0x03, 0x76, 0x03, 0x2d, 0x3b, 0xb5, 0xec, 0x3d, 0x02, 0xf4, 0x1f, 0x90, + 0x96, 0xa5, 0xda, 0x6e, 0xcd, 0x04, 0x7a, 0xb5, 0xe6, 0x6d, 0x54, 0x7a, 0xb1, 0xe9, 0x3f, 0xa0, + 0x2f, 0x19, 0x5b, 0x4b, 0x5c, 0xc0, 0x1c, 0xb0, 0x09, 0xb4, 0x92, 0x34, 0x8f, 0x74, 0x4e, 0xd8, + 0xd1, 0xda, 0x6e, 0x33, 0xb2, 0x51, 0xe4, 0x36, 0xb0, 0x15, 0xf8, 0x25, 0x02, 0x62, 0x29, 0xfa, + 0x0d, 0xef, 0xd5, 0x20, 0x39, 0xe0, 0xc9, 0x28, 0x33, 0x7c, 0x2a, 0x8a, 0xea, 0x38, 0x78, 0x11, + 0xd0, 0x1e, 0xd2, 0x6f, 0xff, 0x10, 0xeb, 0xe8, 0x1c, 0x9a, 0xef, 0xc1, 0x4b, 0x60, 0x1e, 0x88, + 0x7a, 0x4c, 0xf3, 0xba, 0xbf, 0xa0, 0xe0, 0x30, 0x29, 0xcd, 0x4c, 0x46, 0xa7, 0xe7, 0x59, 0xd0, + 0xb3, 0xad, 0x53, 0x31, 0x3d, 0xf3, 0xc9, 0x73, 0xcf, 0xf3, 0xdb, 0x0f, 0xff, 0xff, 0xa6, 0xff, + 0x00, 0x60, 0x58, 0x79, 0x12, 0xc5, 0x84, 0x2f, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXTextPlainIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x34, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x04, 0xa5, 0xd6, 0xff, 0x00, 0x00, 0x05, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x5b, 0x48, 0x23, 0x57, 0x18, 0xce, 0x24, 0x31, 0xf1, 0x52, 0xad, 0x31, 0x78, 0xdf, 0xd6, 0x2a, 0xb6, 0x52, 0xad, 0x28, 0x8a, 0xe8, 0x82, 0x62, 0xe9, 0x45, 0xa5, 0x45, 0xf0, 0x82, 0x58, 0x41, 0xb4, 0xed, 0x83, 0x0f, 0xe2, 0x83, 0x6f, 0x8a, 0x20, 0xb8, 0x3e, 0x28, 0x05, 0x45, 0x7d, 0x12, 0x84, 0x82, 0x8a, 0x88, 0x22, 0x0a, 0xbe, 0x54, 0xb4, 0xc2, 0x3e, 0xe9, 0x82, 0x37, 0x50, 0x1a, 0x45, 0x2a, 0x5e, 0x8a, 0xdd, 0x20, 0x58, 0x35, 0xb1, 0x8a, 0x49, 0x4c, 0xd2, 0x2f, 0x7b, 0xe2, 0x38, 0x3b, 0xc6, 0x89, 0x33, 0x39, 0xac, 0x2b, 0x9d, 0xf3, 0x30, 0xfc, 0xe7, 0xfc, 0xdf, 0x7f, 0xff, 0xcf, 0x3f, 0x93, 0x30, 0x4e, 0xa7, 0x53, 0xf1, 0x94, 0x97, 0xf2, 0x29, 0x3b, 0xef, 0xf2, 0x5d, 0x0e, 0xe0, 0xb1, 0x2b, 0x28, 0x57, 0x40, 0xae, 0x80, 0x8f, 0x19, 0x90, 0x5b, 0xc8, 0xc7, 0x04, 0xfa, 0x2c, 0x2e, 0x57, 0xc0, 0xe7, 0x14, 0xfa, 0xa8, 0x40, 0xae, 0x80, 0x8f, 0x09, 0xf4, 0x59, 0x5c, 0xed, 0xb3, 0x06, 0x97, 0x02, 0xa7, 0x43, 0xf1, 0x7a, 0xc3, 0x61, 0x32, 0x3a, 0x9d, 0x0e, 0x2f, 0x9f, 0x86, 0x8c, 0x92, 0xf9, 0x30, 0x86, 0x89, 0x49, 0x55, 0x32, 0x94, 0x6a, 0x4f, 0x27, 0x80, 0xfd, 0x57, 0xf6, 0xdf, 0x5e, 0x58, 0x1e, 0x9e, 0x8b, 0xef, 0x5e, 0x68, 0xe3, 0x9f, 0xab, 0x1e, 0x8e, 0x17, 0x40, 0xd2, 0xc9, 0x83, 0xf9, 0xc8, 0x4b, 0xe2, 0x79, 0x1e, 0x98, 0x8d, 0xe2, 0xf0, 0x3c, 0x71, 0xee, 0x96, 0x4e, 0x05, 0x6c, 0x57, 0x6e, 0x9d, 0xfe, 0x21, 0x4c, 0xa0, 0x8e, 0xc1, 0xc6, 0xf2, 0xaf, 0xf3, 0xe2, 0x1f, 0xb7, 0x97, 0x41, 0x7a, 0xa5, 0xf6, 0x03, 0x17, 0xe0, 0xf2, 0xd4, 0x79, 0x65, 0x76, 0x1d, 0x5e, 0x8b, 0xa8, 0x96, 0x4b, 0x50, 0x60, 0xd1, 0x09, 0xc0, 0x6e, 0x71, 0xfb, 0xfa, 0xc5, 0xf7, 0xea, 0xec, 0x9f, 0xfc, 0x60, 0x6f, 0x73, 0xc6, 0xfe, 0xb2, 0xc7, 0xed, 0x66, 0xf6, 0x8f, 0x7e, 0x9f, 0x17, 0xba, 0x1a, 0xe6, 0xd5, 0xaf, 0xb6, 0xb5, 0x71, 0x1b, 0x88, 0xeb, 0x1b, 0xbc, 0x80, 0x67, 0x0f, 0x64, 0xd1, 0x69, 0xa1, 0x6b, 0xab, 0xdb, 0x9c, 0x4a, 0xe3, 0x4a, 0xff, 0x7d, 0x4b, 0xe5, 0x0a, 0xcd, 0xb5, 0xec, 0x37, 0x78, 0xb2, 0xf5, 0xe5, 0x49, 0x29, 0x80, 0x9b, 0x96, 0x60, 0x5d, 0xf4, 0xe8, 0x93, 0x5a, 0xeb, 0x0e, 0x8f, 0x0d, 0xd8, 0x23, 0x4c, 0xd4, 0x21, 0x9d, 0x00, 0x74, 0x1f, 0xb9, 0x3d, 0x0b, 0x89, 0x12, 0xaa, 0x80, 0x3e, 0xc1, 0x6d, 0x2e, 0xf4, 0x99, 0x10, 0x4c, 0x54, 0x00, 0x74, 0xee, 0x40, 0xd2, 0x37, 0x6a, 0xcb, 0x85, 0x42, 0xa9, 0x52, 0x7c, 0x22, 0x38, 0x1c, 0x9f, 0xa5, 0x29, 0x9f, 0xff, 0xac, 0xb9, 0xb6, 0x3a, 0x93, 0xbe, 0xa6, 0x63, 0x17, 0xa1, 0xd2, 0x51, 0xa4, 0x0d, 0x56, 0x64, 0x55, 0x7b, 0x57, 0xa5, 0xd2, 0x28, 0x32, 0x7e, 0xf0, 0x0e, 0x13, 0x55, 0x01, 0x3a, 0x2d, 0x24, 0xca, 0x24, 0x5d, 0xb0, 0x1c, 0x00, 0xdd, 0x7c, 0x8a, 0xd7, 0xf6, 0xe4, 0x2b, 0x40, 0xf9, 0x4a, 0x59, 0xce, 0x15, 0x27, 0x7f, 0x39, 0x90, 0x47, 0xd3, 0x6b, 0xd7, 0x93, 0x2c, 0xd3, 0xdf, 0x0e, 0xa3, 0x81, 0xc1, 0xe0, 0xd4, 0x7d, 0xac, 0xc4, 0x75, 0xa7, 0xbb, 0x18, 0x8a, 0xff, 0x8d, 0xfe, 0xf9, 0xd2, 0xfe, 0xfb, 0x2f, 0x56, 0x81, 0x2f, 0x6a, 0x7c, 0x4b, 0x7f, 0xdb, 0xac, 0xf9, 0xf4, 0x4b, 0x3a, 0xdf, 0xa1, 0x24, 0x11, 0x34, 0x5b, 0xc8, 0x68, 0x70, 0x08, 0x78, 0x0f, 0x7b, 0xe0, 0x1a, 0xff, 0xb8, 0xad, 0x0c, 0x95, 0x52, 0xd0, 0x0c, 0xe0, 0xb3, 0xaf, 0x54, 0xfa, 0x78, 0x21, 0x85, 0xe0, 0x02, 0x43, 0xc5, 0x6f, 0x56, 0x09, 0xcd, 0x16, 0x62, 0x95, 0xbe, 0x4b, 0x42, 0x28, 0x61, 0xef, 0xd2, 0x0f, 0xc9, 0xb6, 0xe4, 0x00, 0x24, 0xa7, 0x8e, 0x92, 0xa0, 0x5c, 0x01, 0x4a, 0x89, 0x94, 0xac, 0xe6, 0xff, 0x5d, 0x81, 0xeb, 0x37, 0xcb, 0xe1, 0x90, 0xfe, 0x6e, 0x5a, 0x5d, 0x5d, 0x6d, 0x6f, 0x6f, 0x3f, 0x3a, 0x3a, 0x92, 0x5c, 0x01, 0x05, 0x3e, 0x25, 0x24, 0xac, 0x9d, 0x9d, 0x9d, 0xb0, 0xb0, 0x30, 0x62, 0x35, 0x34, 0x34, 0x54, 0x82, 0x06, 0x22, 0x52, 0x55, 0x55, 0x05, 0x25, 0xc3, 0xc3, 0xc3, 0x92, 0x35, 0x48, 0x6c, 0xa1, 0xe0, 0xe0, 0xe0, 0xa4, 0xa4, 0xa4, 0x98, 0x98, 0x18, 0x98, 0xbf, 0xb8, 0xb8, 0x90, 0x9c, 0x3f, 0xe8, 0x51, 0xa9, 0x54, 0x91, 0x91, 0x91, 0x92, 0x35, 0x48, 0xac, 0x00, 0x49, 0xd8, 0xca, 0xca, 0x0a, 0x0c, 0xfb, 0xf9, 0xf9, 0x09, 0xe7, 0x0f, 0x3d, 0x26, 0x00, 0xb0, 0x5a, 0xad, 0x02, 0x5c, 0xaf, 0x2c, 0x0f, 0x15, 0x68, 0x6d, 0x6d, 0xcd, 0xce, 0xce, 0x2e, 0x28, 0x28, 0x58, 0x5a, 0x5a, 0xca, 0xc9, 0xc9, 0x09, 0x0c, 0x0c, 0x4c, 0x4d, 0x4d, 0xed, 0xea, 0xea, 0x12, 0xd5, 0xeb, 0x5b, 0x5b, 0x5b, 0xb5, 0xb5, 0xb5, 0x59, 0x59, 0x59, 0xc8, 0x31, 0x34, 0xa4, 0xa7, 0xa7, 0x4f, 0x4f, 0x4f, 0x73, 0xd3, 0x3c, 0x37, 0x37, 0x97, 0x9f, 0x9f, 0x0f, 0x43, 0xb9, 0xb9, 0xb9, 0xbd, 0xbd, 0xbd, 0x5c, 0xd6, 0xe9, 0xe9, 0x69, 0x49, 0x49, 0x09, 0x58, 0xf5, 0xf5, 0xf5, 0x93, 0x93, 0x93, 0xb0, 0x1e, 0x14, 0x14, 0x54, 0x54, 0x54, 0x64, 0x34, 0x1a, 0xb9, 0x30, 0x37, 0x7d, 0x37, 0xc4, 0xf8, 0xf8, 0x78, 0xc2, 0x83, 0x18, 0x57, 0xa0, 0xba, 0xba, 0x9a, 0x07, 0x16, 0xa8, 0x00, 0x22, 0x87, 0x2c, 0xc3, 0x30, 0x88, 0x21, 0x22, 0x22, 0x02, 0xb4, 0x56, 0xab, 0xdd, 0xdf, 0xdf, 0x67, 0x35, 0x34, 0x37, 0x37, 0xb3, 0xca, 0x11, 0x2a, 0x7b, 0x0e, 0x82, 0xa8, 0x05, 0x17, 0xc1, 0xab, 0xd5, 0xb7, 0xbf, 0x58, 0x2a, 0x2b, 0x2b, 0xb9, 0x30, 0x42, 0x7b, 0x68, 0xa1, 0xdd, 0xdd, 0x5d, 0xd2, 0x94, 0x3a, 0x9d, 0x6e, 0x60, 0x60, 0x60, 0x63, 0x63, 0xa3, 0xb4, 0xb4, 0x94, 0x18, 0x9b, 0x9f, 0x9f, 0xe7, 0xaa, 0x10, 0x08, 0x60, 0x6a, 0x6a, 0xaa, 0xbb, 0xbb, 0xfb, 0xf0, 0xf0, 0x10, 0x78, 0x8b, 0xc5, 0x42, 0x62, 0xe0, 0x5e, 0xd6, 0xf3, 0xf3, 0xf3, 0x99, 0x99, 0x19, 0xa2, 0x99, 0x17, 0x00, 0x44, 0x46, 0x46, 0x46, 0x88, 0xc5, 0xc2, 0xc2, 0x42, 0x58, 0xa9, 0xab, 0xab, 0xc3, 0x16, 0x09, 0xe5, 0x5a, 0x27, 0xb4, 0x87, 0x00, 0xc0, 0x48, 0x48, 0x48, 0x80, 0x00, 0x2a, 0x48, 0x40, 0xc7, 0xc7, 0xc7, 0xb8, 0x6a, 0x38, 0x69, 0x6a, 0x6a, 0xe2, 0xaa, 0x10, 0x08, 0x00, 0x30, 0x44, 0xdb, 0xd1, 0xd1, 0xd1, 0xd8, 0xd8, 0xd8, 0xd6, 0xd6, 0x96, 0x96, 0x96, 0x06, 0xf1, 0xce, 0xce, 0x4e, 0xae, 0x38, 0x68, 0x28, 0xc4, 0xf9, 0xdd, 0x00, 0xd6, 0xd7, 0xd7, 0x71, 0x8e, 0xb5, 0xbc, 0xbc, 0x0c, 0x18, 0xa6, 0x2d, 0xd9, 0x9a, 0x4c, 0x26, 0x9e, 0x86, 0xdb, 0x02, 0x11, 0x04, 0xf7, 0x89, 0x1e, 0x25, 0x5b, 0xbd, 0x5e, 0x9f, 0x92, 0x92, 0x82, 0x52, 0x20, 0xa3, 0x5c, 0xc0, 0x7d, 0xb4, 0xcd, 0x66, 0x2b, 0x2e, 0x2e, 0x9e, 0x9d, 0x9d, 0x05, 0x40, 0xa3, 0xd1, 0xa0, 0x91, 0x50, 0x04, 0xd0, 0x76, 0xbb, 0xfd, 0x3e, 0x91, 0xfb, 0xce, 0x33, 0x33, 0x33, 0xc1, 0x8a, 0x8b, 0x8b, 0x23, 0x80, 0xab, 0xab, 0xab, 0x90, 0x90, 0x10, 0x2e, 0xd8, 0xc3, 0x25, 0x66, 0xd9, 0x0b, 0x0b, 0x0b, 0x84, 0xc6, 0xad, 0xda, 0xdc, 0xdc, 0x04, 0xcd, 0x5e, 0x0f, 0x16, 0xe3, 0x91, 0x40, 0x03, 0x10, 0xef, 0x27, 0x26, 0x26, 0x90, 0xb3, 0xcb, 0xcb, 0xcb, 0xb2, 0xb2, 0x32, 0x8f, 0x48, 0xaf, 0x87, 0x08, 0x1e, 0x18, 0xf2, 0xf4, 0x08, 0x16, 0x0a, 0x60, 0x74, 0x74, 0x74, 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0xaf, 0xa1, 0xa1, 0x01, 0xef, 0x5c, 0xc8, 0xa3, 0x23, 0x59, 0x2d, 0x38, 0x61, 0x33, 0xca, 0xa5, 0x01, 0xc0, 0x08, 0xc2, 0x33, 0x3c, 0x3c, 0x1c, 0x2d, 0xee, 0xef, 0xef, 0x8f, 0x41, 0x79, 0x72, 0x72, 0x82, 0x13, 0x54, 0x9f, 0x15, 0x07, 0x0d, 0x29, 0x32, 0xd9, 0xb8, 0x34, 0x01, 0xb0, 0x48, 0x42, 0xb0, 0x03, 0x90, 0x3d, 0x67, 0xf5, 0x08, 0xdd, 0x81, 0x5b, 0xd0, 0x1b, 0xaa, 0xa6, 0xa6, 0x06, 0xf2, 0x58, 0x66, 0xb3, 0x39, 0x36, 0x36, 0x96, 0xc7, 0xc5, 0x16, 0x93, 0x97, 0x00, 0x06, 0x07, 0x07, 0x09, 0x37, 0x23, 0x23, 0xa3, 0xa2, 0xa2, 0x82, 0x05, 0xe3, 0x8d, 0x31, 0x34, 0x34, 0x04, 0x0c, 0x2a, 0x13, 0x10, 0x10, 0xc0, 0xd3, 0x80, 0x66, 0xeb, 0xef, 0xef, 0x07, 0xf7, 0xe0, 0xe0, 0x00, 0xf3, 0x83, 0x70, 0x13, 0x13, 0x13, 0xcf, 0xce, 0xce, 0xa2, 0xa3, 0xa3, 0xc9, 0x16, 0xd3, 0x05, 0xd6, 0x89, 0x15, 0xf2, 0x14, 0xaa, 0x40, 0x4b, 0x4b, 0x4b, 0x5e, 0x5e, 0x5e, 0x54, 0x54, 0x14, 0x66, 0x62, 0x4f, 0x4f, 0x0f, 0xeb, 0x16, 0x74, 0x91, 0x3b, 0xcd, 0xf3, 0x80, 0x2d, 0x34, 0x06, 0x2e, 0x8a, 0x86, 0xc9, 0xb3, 0xb6, 0xb6, 0x06, 0x5f, 0xd1, 0xc1, 0x7d, 0x7d, 0x7d, 0xe8, 0x5d, 0x48, 0x91, 0x4a, 0x42, 0x50, 0xa9, 0xe4, 0x9b, 0x66, 0xc5, 0xc1, 0x45, 0x30, 0x44, 0x39, 0x86, 0x2f, 0xd2, 0xcf, 0xdd, 0xc2, 0xef, 0xb7, 0xec, 0x72, 0xa3, 0x61, 0x69, 0x32, 0x85, 0x16, 0x17, 0x17, 0xd9, 0x13, 0x09, 0x04, 0x1a, 0xcc, 0x60, 0x30, 0xdc, 0x9d, 0x1b, 0x12, 0x54, 0x09, 0x88, 0xf0, 0xa7, 0x10, 0xec, 0xe1, 0xe5, 0x87, 0x27, 0xa2, 0x1c, 0x1f, 0x1f, 0xdf, 0xde, 0xde, 0x2e, 0x2f, 0x2f, 0xc7, 0x0b, 0xe5, 0xad, 0xa0, 0x1f, 0xb6, 0x41, 0x8e, 0x93, 0x93, 0x93, 0x1f, 0x86, 0xf5, 0x01, 0xc5, 0x0b, 0x0e, 0x6f, 0x2e, 0x9e, 0x32, 0x74, 0x0e, 0x0f, 0xf3, 0x5e, 0x6d, 0xf9, 0x15, 0xc0, 0x47, 0x08, 0xbe, 0x2e, 0xf1, 0x9a, 0x24, 0x61, 0xa0, 0x71, 0x31, 0xd1, 0x79, 0x21, 0xbd, 0x57, 0x5b, 0xf9, 0x7f, 0xa1, 0xc7, 0x2e, 0x07, 0x7f, 0x96, 0x3d, 0xb6, 0x3f, 0xa2, 0xed, 0xcb, 0x01, 0x88, 0x4e, 0x19, 0x65, 0x01, 0xb9, 0x02, 0x94, 0x13, 0x2a, 0x5a, 0x9d, 0x5c, 0x01, 0xd1, 0x29, 0xa3, 0x2c, 0xf0, 0x1f, 0x15, 0xdc, 0xd7, 0x70, 0xbb, 0x15, 0xe8, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXCircleDownArrowIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x45, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1c, 0x8d, 0x2b, + 0x29, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x1f, 0x21, 0x4c, 0x00, 0x00, + 0x08, 0x52, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0x79, 0xa8, 0x55, 0x55, 0x14, 0xc6, + 0x7d, 0x6a, 0x5a, 0x62, 0xe5, 0xac, 0x95, 0x60, 0x65, 0x96, 0x59, 0x96, 0x69, 0xda, 0x68, 0x96, + 0x46, 0x36, 0xa1, 0x26, 0x92, 0xd1, 0x3f, 0x15, 0x41, 0xa2, 0x66, 0x11, 0x12, 0x25, 0x28, 0x99, + 0x95, 0x15, 0x44, 0x54, 0x52, 0x50, 0x34, 0x10, 0x1a, 0x0d, 0xfa, 0x87, 0x65, 0xa5, 0x26, 0xa4, + 0xbe, 0x22, 0xad, 0x88, 0xca, 0x92, 0xb4, 0x14, 0x9b, 0x54, 0x34, 0x4d, 0x71, 0x2e, 0xa7, 0x7e, + 0xdf, 0xeb, 0xee, 0xcb, 0x79, 0xe7, 0xae, 0x7d, 0xcf, 0xf8, 0xee, 0xf3, 0x8a, 0x0b, 0x3e, 0xf7, + 0x39, 0x6b, 0xaf, 0xf5, 0xad, 0xb5, 0xd7, 0x3b, 0xc3, 0x3e, 0x7b, 0x5f, 0x9b, 0x34, 0x69, 0x64, + 0x39, 0x7c, 0xf8, 0x70, 0x4b, 0xd0, 0x15, 0xb4, 0x6e, 0xe4, 0x54, 0x8a, 0xe1, 0x6b, 0x8a, 0x47, + 0x0d, 0x78, 0xa0, 0x81, 0x43, 0x3f, 0x04, 0x5c, 0x0a, 0x4e, 0x05, 0xa7, 0x15, 0x5a, 0x1d, 0xb7, + 0x07, 0x2e, 0x8f, 0x1d, 0x1c, 0x6f, 0x28, 0x60, 0x7d, 0xa1, 0xfd, 0x91, 0xf6, 0xa3, 0x9a, 0x9a, + 0x9a, 0x6d, 0xb4, 0xd5, 0x2d, 0x14, 0xe2, 0x24, 0x70, 0x1b, 0x78, 0x17, 0xec, 0x00, 0x59, 0x64, + 0x3f, 0xce, 0x8b, 0xc0, 0x78, 0xd0, 0xb5, 0xea, 0x2a, 0x43, 0xd2, 0xc3, 0xc0, 0x7c, 0xf0, 0x0f, + 0x68, 0x08, 0x39, 0x04, 0xe9, 0x57, 0xe0, 0x5e, 0xd0, 0xe2, 0x88, 0x2e, 0x10, 0x09, 0x0e, 0x00, + 0x4b, 0x41, 0x25, 0x65, 0x2d, 0xc1, 0x46, 0x03, 0x77, 0xfb, 0x1d, 0x19, 0x35, 0x22, 0xa1, 0xee, + 0x40, 0xb7, 0x48, 0x63, 0x8a, 0xae, 0x9c, 0x41, 0x79, 0x55, 0x24, 0x75, 0x85, 0x49, 0x42, 0x97, + 0xee, 0x74, 0x30, 0x01, 0xc4, 0xbd, 0x8c, 0x0f, 0x61, 0xbb, 0x06, 0x6c, 0x04, 0x1b, 0x02, 0xed, + 0x5f, 0x1c, 0x9f, 0x0c, 0xf4, 0xe0, 0x15, 0x4e, 0x29, 0xb4, 0x67, 0xd2, 0x9e, 0x00, 0xe2, 0xca, + 0x87, 0x18, 0xde, 0xc3, 0x43, 0x59, 0xfc, 0x95, 0x15, 0x0a, 0xd2, 0x11, 0xd4, 0x82, 0x38, 0xb2, + 0x1b, 0xa3, 0xb9, 0xe0, 0x2e, 0xd0, 0x21, 0x49, 0xa6, 0xd8, 0xb7, 0x02, 0xc3, 0xc1, 0xeb, 0x60, + 0x33, 0x88, 0x23, 0x7f, 0x62, 0xd4, 0x2f, 0x49, 0x9c, 0xcc, 0xb6, 0x04, 0xec, 0x0d, 0xd6, 0x81, + 0x28, 0xf9, 0x18, 0x03, 0x3d, 0x74, 0x93, 0xfc, 0xa5, 0xbd, 0xf9, 0xc1, 0xd3, 0x14, 0x5c, 0x09, + 0x5e, 0x01, 0x7a, 0x1b, 0x95, 0x93, 0x3d, 0x74, 0x8e, 0xf6, 0x92, 0xe5, 0xd9, 0x41, 0x20, 0x0d, + 0x72, 0x67, 0xb9, 0x6c, 0xe8, 0xfb, 0x1a, 0x5c, 0x93, 0x67, 0xdc, 0x30, 0x17, 0xfc, 0x67, 0x83, + 0x39, 0x20, 0x4a, 0xa6, 0x61, 0x90, 0xfa, 0x11, 0x11, 0x8e, 0x5b, 0x72, 0x0e, 0xf9, 0xfd, 0xe0, + 0x60, 0x99, 0x2c, 0xd6, 0xd0, 0x57, 0xd1, 0x37, 0x01, 0xf1, 0x2e, 0x01, 0x51, 0x6f, 0xbc, 0xd9, + 0xd8, 0x34, 0x2f, 0x19, 0x50, 0x56, 0x05, 0xa4, 0x23, 0x81, 0xe6, 0x07, 0x3e, 0x99, 0x45, 0xc7, + 0xf1, 0x59, 0xe3, 0xa4, 0xf5, 0x27, 0xf6, 0x44, 0x50, 0xee, 0x0f, 0x36, 0x23, 0x2d, 0xb7, 0xe9, + 0x47, 0xb0, 0x0b, 0xc1, 0x2e, 0x60, 0x89, 0x0a, 0x35, 0xc9, 0x74, 0xac, 0xb0, 0x92, 0x3c, 0x6e, + 0x00, 0xdb, 0xad, 0x24, 0x0b, 0xba, 0x31, 0xb9, 0xa4, 0x04, 0x59, 0x27, 0xf0, 0x9b, 0x27, 0x90, + 0x9e, 0x2d, 0xc3, 0x73, 0x09, 0x94, 0x13, 0x09, 0xf9, 0xf4, 0x04, 0x3f, 0x7b, 0xf2, 0xfd, 0x17, + 0xfd, 0xd5, 0x99, 0x42, 0x41, 0xd0, 0x02, 0x7c, 0xee, 0x09, 0xa0, 0x6f, 0x99, 0x3e, 0x99, 0x02, + 0x34, 0x90, 0x33, 0x79, 0xb5, 0x05, 0xdf, 0x79, 0xf2, 0xde, 0x82, 0x5e, 0x73, 0x9f, 0x74, 0x82, + 0xf3, 0x0c, 0x0f, 0xb1, 0xee, 0xdd, 0x9b, 0xd3, 0xb1, 0x56, 0xc6, 0x8b, 0xfc, 0xba, 0x81, 0x4d, + 0xc0, 0x92, 0x1f, 0x50, 0x26, 0x7f, 0xf0, 0xe2, 0xd4, 0x0b, 0x1c, 0xb0, 0x18, 0xd1, 0x3d, 0x5c, + 0x99, 0xa1, 0x65, 0x8b, 0x42, 0x9e, 0x9a, 0xd3, 0xf8, 0x3e, 0x4a, 0xc7, 0x27, 0x66, 0x87, 0xec, + 0x03, 0x60, 0xc9, 0x5b, 0x89, 0xc9, 0xca, 0x38, 0x10, 0xa0, 0x39, 0xb8, 0x13, 0x2c, 0x04, 0x53, + 0x40, 0xa7, 0x32, 0xe6, 0x89, 0xbb, 0xe0, 0xbb, 0x1b, 0x58, 0xa2, 0xd9, 0xf1, 0x89, 0xb1, 0x09, + 0x31, 0xbe, 0xca, 0x62, 0x41, 0xb7, 0x0a, 0xe4, 0xfa, 0xda, 0x85, 0x4f, 0xeb, 0x2d, 0x41, 0x79, + 0x33, 0x76, 0xa2, 0x31, 0x0d, 0x21, 0x7f, 0x2d, 0x18, 0x20, 0x70, 0xfc, 0x78, 0x2c, 0x0a, 0x1c, + 0x6a, 0xc0, 0x97, 0x01, 0xc7, 0xe0, 0xe1, 0xc8, 0x58, 0x24, 0x09, 0x8c, 0x20, 0xff, 0x28, 0x18, + 0x80, 0x63, 0x4d, 0xcf, 0xb5, 0x4a, 0x97, 0x9b, 0xc0, 0xd7, 0x05, 0x58, 0x53, 0x0a, 0x7d, 0x93, + 0xe9, 0xe3, 0xb3, 0xbc, 0x60, 0x74, 0x2b, 0xb0, 0x64, 0x59, 0x79, 0xcf, 0x74, 0xbd, 0x04, 0x5a, + 0x66, 0x04, 0x3b, 0x29, 0x1d, 0x9b, 0xdf, 0x8b, 0x18, 0x9a, 0xee, 0x5b, 0xf2, 0xaa, 0xdf, 0xab, + 0xd0, 0x83, 0xd7, 0x17, 0x96, 0x27, 0xba, 0xab, 0x22, 0x9d, 0x53, 0x18, 0xc0, 0x5b, 0xa9, 0xa2, + 0x9c, 0x48, 0x2c, 0xeb, 0x2b, 0x5b, 0x1f, 0x96, 0x6d, 0xc3, 0xa9, 0x37, 0x75, 0x0a, 0x3a, 0xbb, + 0x70, 0xac, 0x85, 0xe5, 0xb0, 0x68, 0xd1, 0xb8, 0x36, 0xac, 0xac, 0xa6, 0x73, 0xf2, 0xdf, 0x49, + 0xbe, 0xd3, 0x8c, 0x9c, 0xf5, 0x6a, 0x2e, 0x99, 0x5e, 0x14, 0x8b, 0x42, 0xa7, 0x66, 0xa7, 0xd6, + 0x17, 0xe5, 0xf3, 0x06, 0x59, 0x35, 0xaa, 0x74, 0xab, 0xec, 0x36, 0x12, 0x1f, 0x11, 0xd6, 0x05, + 0x8b, 0x52, 0xd2, 0x89, 0xb1, 0xb6, 0x1c, 0x96, 0x84, 0x9d, 0xaa, 0xf1, 0x9c, 0xab, 0x65, 0x1f, + 0x79, 0x2f, 0x34, 0x72, 0xbf, 0x9e, 0xbb, 0xa4, 0xde, 0x9a, 0x4f, 0x5d, 0x51, 0x50, 0xea, 0xe1, + 0x36, 0xd8, 0x70, 0x98, 0x0f, 0xd9, 0x7e, 0x43, 0x5f, 0xad, 0xaa, 0xf7, 0x8d, 0xc4, 0x5b, 0xa1, + 0xbb, 0x2e, 0xa8, 0x77, 0x57, 0xca, 0x8d, 0x28, 0xad, 0x75, 0x56, 0x8b, 0x24, 0xe8, 0x5f, 0x6d, + 0xc7, 0x5a, 0xc3, 0x3d, 0x68, 0x24, 0x5d, 0xef, 0x2e, 0x71, 0x45, 0xb1, 0xde, 0x2e, 0x07, 0x70, + 0x9e, 0x6f, 0x10, 0x54, 0xad, 0x8a, 0xab, 0xfe, 0x6f, 0x92, 0xff, 0xcc, 0x18, 0x40, 0xbd, 0xf1, + 0xbb, 0xa2, 0x68, 0x1b, 0x33, 0x2c, 0x2b, 0x20, 0xd9, 0x1e, 0x56, 0x1e, 0x05, 0xe7, 0xb5, 0xc6, + 0x18, 0xea, 0x8d, 0xbf, 0x5c, 0x51, 0xb4, 0x05, 0x71, 0x34, 0x8a, 0xf6, 0xa8, 0xc3, 0xa2, 0x4d, + 0x7e, 0xed, 0x69, 0xd7, 0x89, 0x2b, 0x8a, 0x35, 0xdd, 0x3d, 0x5a, 0x8b, 0xe2, 0x1b, 0x57, 0xb1, + 0x06, 0xda, 0x36, 0x68, 0x46, 0x79, 0xac, 0xaf, 0xd3, 0xca, 0x6f, 0x28, 0x15, 0xfe, 0x52, 0x0d, + 0xdc, 0x44, 0x17, 0x85, 0x04, 0x3a, 0x03, 0x15, 0x26, 0x2c, 0x3e, 0xe7, 0xb0, 0x5d, 0xb5, 0x9d, + 0x5b, 0xb7, 0x8f, 0xc6, 0x50, 0x7c, 0xae, 0xe8, 0xf6, 0xd1, 0x16, 0xa5, 0x25, 0x9b, 0x2c, 0xe5, + 0x51, 0xa0, 0xd3, 0x16, 0xad, 0xb6, 0x6f, 0xc3, 0xa2, 0xcf, 0x9c, 0x3a, 0x51, 0x51, 0x76, 0x15, + 0x8e, 0xc3, 0x4d, 0xea, 0x5f, 0x16, 0x71, 0x4b, 0x9e, 0x0c, 0x6e, 0x07, 0xbd, 0xc3, 0xa4, 0x59, + 0xce, 0xe1, 0xd3, 0xa2, 0xd4, 0xcd, 0xa0, 0x7b, 0x06, 0x1e, 0xcd, 0x5e, 0xdd, 0xb3, 0x34, 0x48, + 0x53, 0xac, 0x83, 0x3a, 0x7d, 0x97, 0x93, 0xef, 0x0a, 0x0a, 0x12, 0x95, 0x1c, 0x93, 0xf0, 0x65, + 0x28, 0x75, 0xeb, 0x69, 0x95, 0x4e, 0x0b, 0xc8, 0x0f, 0x94, 0x18, 0xa5, 0x50, 0xc0, 0xa3, 0x8f, + 0xd5, 0x5f, 0xc1, 0x3c, 0xf0, 0x0b, 0xe7, 0x93, 0x69, 0xd3, 0x88, 0x6f, 0x5c, 0xc5, 0xc7, 0x45, + 0x53, 0xe6, 0x22, 0xaa, 0x90, 0xbe, 0x22, 0xc3, 0x52, 0x7c, 0x1a, 0x87, 0x3b, 0x22, 0xce, 0xc7, + 0xd1, 0xaf, 0xa9, 0xb3, 0x44, 0x45, 0x7f, 0x96, 0x01, 0x4c, 0xac, 0x3b, 0x2b, 0xfd, 0xc7, 0xba, + 0x8c, 0x4b, 0x74, 0xf8, 0xf7, 0xc7, 0x75, 0x01, 0x70, 0xf7, 0xbd, 0x3e, 0x5c, 0xb5, 0x63, 0xd9, + 0xa2, 0x94, 0x32, 0x52, 0x13, 0x5d, 0x94, 0x02, 0x45, 0xb1, 0x4a, 0x01, 0x4a, 0x9f, 0x73, 0xc0, + 0xc4, 0x3c, 0xdc, 0x6a, 0x68, 0x9f, 0xf1, 0x14, 0x66, 0xaf, 0x61, 0x5b, 0x4f, 0x87, 0x5f, 0x3f, + 0x6c, 0x3e, 0x01, 0xfa, 0xa9, 0x46, 0x50, 0xf4, 0x87, 0xdc, 0x1f, 0x54, 0xc4, 0x3c, 0xf6, 0x8d, + 0xab, 0x78, 0xc7, 0xb8, 0x7b, 0xab, 0xa8, 0x08, 0x10, 0xfb, 0x9c, 0x03, 0x26, 0xe6, 0xe1, 0xcb, + 0x68, 0xf7, 0x18, 0x3d, 0x56, 0x61, 0xc2, 0x76, 0xfb, 0xb9, 0x72, 0x8b, 0xdf, 0x26, 0x14, 0xa4, + 0x0f, 0x3c, 0x2a, 0x48, 0x1b, 0x83, 0xef, 0x39, 0x6c, 0x0f, 0x1b, 0xfa, 0x28, 0x95, 0x35, 0x2e, + 0xf1, 0xd4, 0x9f, 0x82, 0x10, 0x7c, 0x26, 0x08, 0xcb, 0x46, 0x14, 0xd6, 0xfa, 0x4a, 0x54, 0xd0, + 0x26, 0xf8, 0x0d, 0x06, 0x5a, 0x03, 0xb5, 0x64, 0xac, 0x23, 0xa0, 0xf3, 0x9d, 0x90, 0x41, 0xf1, + 0xb3, 0x02, 0x7d, 0x0f, 0xa0, 0xcd, 0x2b, 0x4b, 0x9e, 0x74, 0x1c, 0x49, 0x5b, 0xc8, 0x5e, 0x32, + 0x08, 0xf5, 0x46, 0xaa, 0x2f, 0x18, 0x4d, 0x36, 0x0c, 0xa5, 0xd2, 0xbd, 0x9c, 0x4a, 0xf0, 0xbd, + 0x06, 0x58, 0x85, 0xd1, 0x12, 0xe0, 0xb5, 0x22, 0xa5, 0x7d, 0x03, 0x04, 0xa5, 0xee, 0x36, 0x46, + 0xd1, 0x06, 0x68, 0xf7, 0xc0, 0x92, 0xe9, 0xa9, 0x12, 0x2a, 0x38, 0x41, 0xf8, 0xbb, 0x41, 0x5a, + 0xfa, 0x91, 0x88, 0xd1, 0x05, 0x86, 0xa1, 0x54, 0x8f, 0x65, 0x4c, 0xc0, 0x57, 0x98, 0x6d, 0x70, + 0xeb, 0x37, 0x26, 0x2f, 0x2a, 0x48, 0x40, 0xd6, 0x72, 0xac, 0xd7, 0xee, 0xa2, 0x80, 0x2e, 0x78, + 0xf8, 0x44, 0xc6, 0x7c, 0xfa, 0x06, 0xc9, 0x02, 0xc7, 0x0f, 0x9a, 0xbc, 0x18, 0x28, 0xa1, 0xb0, + 0xac, 0x30, 0x8d, 0x13, 0x28, 0x21, 0xbc, 0x1a, 0x58, 0x57, 0xcc, 0x6a, 0xf4, 0xaf, 0x86, 0x02, + 0x6a, 0x4b, 0x33, 0x5c, 0x28, 0x67, 0x92, 0xa9, 0x20, 0x4a, 0x19, 0xa2, 0xa9, 0x8e, 0x2c, 0xd4, + 0xf6, 0x30, 0x87, 0x84, 0x91, 0x1e, 0x84, 0x96, 0x9c, 0x61, 0x3a, 0x24, 0x50, 0x42, 0x3a, 0x08, + 0x58, 0x7b, 0x2f, 0x07, 0x42, 0x01, 0xf5, 0xcb, 0x00, 0x4b, 0xe2, 0x6d, 0x5c, 0x45, 0xe4, 0x04, + 0xf1, 0xb7, 0x06, 0xf9, 0x4a, 0xaf, 0x1b, 0xc6, 0x57, 0x1a, 0x0e, 0x52, 0x4d, 0xf2, 0x3a, 0x25, + 0xe8, 0x80, 0x67, 0x10, 0xb0, 0x0a, 0x83, 0xba, 0xac, 0x64, 0xba, 0x85, 0x5d, 0x8a, 0x44, 0xd0, + 0xcf, 0x34, 0x2c, 0xf1, 0x17, 0x1c, 0x6b, 0x7d, 0x31, 0x5b, 0x3b, 0xf5, 0x5b, 0xd1, 0x5b, 0xaf, + 0x44, 0x17, 0x2f, 0x76, 0x0b, 0x8f, 0xb6, 0x64, 0x93, 0x14, 0x26, 0x97, 0x82, 0x28, 0x41, 0xe2, + 0xce, 0x01, 0x96, 0x5c, 0x5c, 0x76, 0x00, 0x78, 0xbc, 0x60, 0x79, 0xa1, 0x7b, 0xaa, 0xac, 0x63, + 0x82, 0x4e, 0xb8, 0xe2, 0x16, 0x66, 0x5a, 0x02, 0xda, 0xb2, 0xa6, 0xc4, 0xd4, 0x6f, 0xe3, 0x2c, + 0x59, 0x5d, 0xd6, 0x51, 0x9d, 0x78, 0x69, 0xdf, 0x55, 0xbf, 0x50, 0x0a, 0x8b, 0xf6, 0x78, 0xdd, + 0x14, 0x3b, 0x92, 0x27, 0xca, 0x00, 0xae, 0x81, 0xc0, 0x8a, 0xe3, 0xe2, 0x3e, 0x1a, 0xc5, 0x91, + 0xa4, 0x1f, 0xd2, 0x25, 0x8e, 0x38, 0xd4, 0x8e, 0x8a, 0xc5, 0x83, 0xd3, 0x23, 0x21, 0x47, 0x77, + 0x1a, 0xbd, 0xef, 0x1a, 0x2b, 0xc2, 0xff, 0x46, 0x90, 0xfa, 0x0a, 0x33, 0x35, 0x01, 0x4d, 0xa4, + 0x29, 0x71, 0x6e, 0x72, 0x03, 0x08, 0xb5, 0xcb, 0x23, 0x9d, 0x9d, 0x01, 0x8e, 0xad, 0x81, 0x66, + 0xb3, 0x61, 0x39, 0x88, 0x62, 0xa8, 0xb3, 0xcb, 0xa3, 0x85, 0xef, 0x0a, 0xe0, 0x9e, 0x63, 0xe2, + 0x7f, 0x28, 0x0f, 0x5e, 0xc7, 0x01, 0x5f, 0x07, 0xb0, 0x0e, 0x58, 0x32, 0xd0, 0xd9, 0xc5, 0x6a, + 0x61, 0x18, 0x63, 0xb1, 0xa0, 0xd3, 0xa4, 0xeb, 0x9c, 0x58, 0x24, 0x31, 0x8d, 0xe0, 0x53, 0xe2, + 0xa3, 0xc0, 0xb9, 0x31, 0x5d, 0x62, 0x99, 0xc1, 0x77, 0x1c, 0x58, 0x0a, 0x2c, 0x49, 0xbe, 0x9f, + 0x05, 0x8b, 0x66, 0x95, 0x3f, 0x59, 0x6c, 0xe8, 0x34, 0xe9, 0xca, 0xe5, 0x6d, 0x14, 0x6b, 0x74, + 0x29, 0x8d, 0xc8, 0xf1, 0x15, 0x4f, 0xfe, 0x9a, 0x1b, 0xf5, 0x4c, 0x45, 0x8b, 0xe3, 0x00, 0xb0, + 0xd7, 0x43, 0xbc, 0x00, 0x7d, 0xb3, 0x54, 0xc4, 0x15, 0x70, 0x22, 0xb7, 0x09, 0x9e, 0xbc, 0xa5, + 0xce, 0x76, 0x8b, 0x42, 0xa0, 0x25, 0x45, 0x9f, 0xbc, 0x47, 0x87, 0x96, 0xf6, 0x8e, 0x28, 0x21, + 0xa7, 0xb1, 0x20, 0x3c, 0x53, 0x76, 0x63, 0x98, 0x99, 0x4b, 0xb2, 0xb0, 0x4d, 0x77, 0x8c, 0x46, + 0xfb, 0x0d, 0xba, 0xae, 0xb9, 0x04, 0xca, 0x48, 0x42, 0x1e, 0xba, 0xe5, 0xad, 0x65, 0x01, 0x97, + 0xf6, 0x72, 0x0e, 0x5a, 0x66, 0x0c, 0xf3, 0xbf, 0x3b, 0x44, 0xfa, 0x1d, 0xdc, 0x5c, 0xc7, 0x6c, + 0xb4, 0x7a, 0x53, 0x69, 0xfd, 0xb4, 0xd1, 0x84, 0xf8, 0xed, 0xc1, 0x62, 0xe0, 0x93, 0x3f, 0xe8, + 0x28, 0xae, 0xd6, 0xe7, 0x92, 0x28, 0x84, 0x7a, 0x4d, 0x7f, 0xef, 0x8b, 0x88, 0x7e, 0x1f, 0xd0, + 0x9a, 0xe9, 0x71, 0xb9, 0x04, 0x4c, 0x40, 0x42, 0xcc, 0x21, 0x60, 0x2d, 0xf0, 0x89, 0xbe, 0xd0, + 0xfb, 0x26, 0xa0, 0x8c, 0x6f, 0x0a, 0x71, 0x3b, 0xf0, 0xa9, 0x2f, 0x72, 0x41, 0xbf, 0x86, 0x76, + 0x34, 0x48, 0xb5, 0x62, 0x17, 0x3f, 0x9b, 0xba, 0xd9, 0x77, 0x1f, 0xe2, 0xe8, 0x81, 0x5f, 0x4e, + 0xd6, 0xd3, 0x99, 0x7a, 0xa1, 0x2c, 0x56, 0x3e, 0x04, 0x88, 0xba, 0x6f, 0x5d, 0x82, 0xfa, 0x8f, + 0x50, 0x83, 0x63, 0x91, 0x26, 0x34, 0x82, 0xf7, 0x74, 0x30, 0x0b, 0x1c, 0x02, 0xe5, 0x44, 0x39, + 0xa4, 0xdd, 0x91, 0x48, 0x98, 0x15, 0xe6, 0x04, 0x1b, 0x07, 0xb4, 0xac, 0x18, 0x25, 0xab, 0x30, + 0x78, 0x1a, 0x5c, 0x0e, 0xdc, 0x22, 0x79, 0xe2, 0x80, 0xf8, 0x9e, 0x05, 0x26, 0x02, 0x4d, 0xc6, + 0x7c, 0x6f, 0x16, 0xba, 0x8a, 0xf2, 0x36, 0x47, 0xa9, 0xdf, 0x8c, 0xa9, 0x2f, 0x73, 0x82, 0xea, + 0x4a, 0x98, 0x0d, 0xda, 0xc5, 0x1c, 0xe5, 0x66, 0xec, 0xe6, 0x81, 0x65, 0x40, 0x6b, 0xb1, 0x1b, + 0x0b, 0xed, 0x16, 0x56, 0xe5, 0xeb, 0xf6, 0x7a, 0xe0, 0x74, 0xff, 0xe3, 0x54, 0x2b, 0xee, 0xfa, + 0x2b, 0x9f, 0x07, 0x86, 0x81, 0x5e, 0x20, 0x8e, 0x68, 0x55, 0x7e, 0x0a, 0x7c, 0x99, 0x57, 0xe9, + 0xe2, 0x04, 0x33, 0x6d, 0x18, 0x44, 0x47, 0xa0, 0xe5, 0x06, 0xdf, 0x8a, 0x19, 0x5d, 0x91, 0xa2, + 0x2b, 0x6e, 0x03, 0xb0, 0x96, 0x2c, 0x23, 0x9d, 0x03, 0x06, 0x8b, 0x38, 0xbe, 0xc8, 0x4c, 0xb4, + 0x31, 0x94, 0x24, 0xa3, 0xcb, 0x5b, 0x93, 0xb9, 0xc6, 0x10, 0xbd, 0x15, 0x87, 0x36, 0xc6, 0xb8, + 0x63, 0xc5, 0x24, 0x39, 0x2d, 0xe6, 0xd4, 0x56, 0xa8, 0x32, 0xda, 0xaa, 0xb8, 0x03, 0xa4, 0x7e, + 0x56, 0xf9, 0x06, 0x95, 0xfa, 0x99, 0xe2, 0x23, 0x94, 0x9e, 0x44, 0xcf, 0xa7, 0xb9, 0x05, 0x8c, + 0x00, 0x79, 0xce, 0x11, 0xd6, 0xc3, 0x37, 0xb7, 0x80, 0xa5, 0x3c, 0x3b, 0xd2, 0x6c, 0x9b, 0xe2, + 0xde, 0xc8, 0x42, 0x81, 0xba, 0x81, 0xfb, 0xc0, 0x62, 0xe0, 0xfb, 0xc0, 0xa4, 0xcb, 0x14, 0xad, + 0xb1, 0xac, 0x04, 0xfa, 0xd4, 0xe8, 0x0f, 0x1a, 0xe4, 0x8f, 0x18, 0x2e, 0x51, 0x45, 0x82, 0x04, + 0x83, 0x32, 0xb0, 0xf6, 0x9c, 0xeb, 0xcd, 0xe2, 0xa0, 0x65, 0xce, 0xce, 0x60, 0x3b, 0xd0, 0x5b, + 0xc9, 0x41, 0x57, 0xc5, 0x26, 0xae, 0x86, 0xe2, 0xde, 0x32, 0xe7, 0xc7, 0xe4, 0x58, 0x05, 0x8e, + 0xa0, 0x0a, 0xfc, 0x07, 0x9a, 0x90, 0xb7, 0xcb, 0x6c, 0x98, 0xf8, 0x98, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXHTMLIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, 0x32, 0x33, 0x3a, 0x30, 0x32, 0x3a, 0x39, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x3c, 0x50, 0x22, 0x3f, 0x00, 0x00, 0x05, 0xe7, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x6b, 0x4c, 0x5b, 0x55, 0x1c, 0xa7, 0xa5, 0xe5, 0xe5, 0x78, 0xb5, 0x94, 0xf2, 0x4a, 0x00, 0x91, 0x47, 0xd8, 0x32, 0x51, 0x24, 0x7c, 0x70, 0x20, 0xf2, 0x34, 0x31, 0x13, 0x1f, 0x0c, 0x30, 0x2c, 0xbc, 0x24, 0xca, 0xc6, 0x07, 0x1e, 0x09, 0x1f, 0xf8, 0x60, 0x42, 0x4c, 0xd0, 0x84, 0x98, 0x98, 0xf1, 0xc5, 0x69, 0x54, 0x60, 0x3a, 0x82, 0x3a, 0x5d, 0x98, 0x24, 0xdb, 0x88, 0x01, 0x24, 0x3a, 0x32, 0xca, 0x63, 0x4c, 0x26, 0x8f, 0x05, 0x48, 0x86, 0x06, 0x28, 0x14, 0x4a, 0x5b, 0x1e, 0x85, 0xb6, 0xf8, 0x83, 0xa3, 0xd7, 0x6b, 0xcb, 0x6e, 0x6f, 0x7b, 0xe9, 0x08, 0xc9, 0x3d, 0x69, 0x2e, 0xff, 0xf3, 0x3b, 0xff, 0xf7, 0xff, 0x7f, 0xce, 0x69, 0x2f, 0x82, 0xdd, 0xdd, 0x5d, 0xa7, 0xe3, 0x3c, 0x84, 0xc7, 0xd9, 0xf9, 0x3d, 0xdf, 0xf9, 0x00, 0x8e, 0xba, 0x82, 0x7c, 0x05, 0xf8, 0x0a, 0x70, 0xcc, 0x00, 0xdf, 0x42, 0x1c, 0x13, 0xc8, 0x59, 0x9c, 0xaf, 0x00, 0xe7, 0x14, 0x72, 0x54, 0xc0, 0x57, 0x80, 0x63, 0x02, 0x39, 0x8b, 0xf3, 0x15, 0x38, 0x28, 0x85, 0xab, 0x86, 0x15, 0x4b, 0x78, 0xdd, 0xa4, 0x33, 0x39, 0x99, 0x2c, 0x71, 0x8e, 0xc8, 0x21, 0x57, 0xe0, 0xc1, 0xc6, 0x68, 0xed, 0xec, 0xc5, 0x94, 0xfb, 0xcf, 0x5b, 0xba, 0x35, 0xa0, 0xbd, 0x93, 0x3c, 0xfa, 0xec, 0x67, 0x0b, 0x97, 0x34, 0x46, 0xb5, 0xe5, 0xaa, 0xdd, 0x88, 0xe0, 0x50, 0x7e, 0x0f, 0x20, 0xb5, 0xb7, 0x57, 0x7f, 0x6a, 0x5e, 0xb8, 0xac, 0xd0, 0xf6, 0xc3, 0x15, 0x57, 0xa1, 0xdb, 0xc4, 0x0b, 0x0b, 0x66, 0x3e, 0xf5, 0xac, 0x75, 0x95, 0x4e, 0xe6, 0x02, 0x74, 0x77, 0xf6, 0x78, 0x53, 0x9a, 0x57, 0x1c, 0x50, 0xfe, 0x8c, 0x5b, 0xb4, 0x19, 0x8f, 0x1d, 0x53, 0x91, 0x1d, 0x32, 0x74, 0x91, 0x35, 0xa3, 0xba, 0x7d, 0xa9, 0xf5, 0xeb, 0xc5, 0x2f, 0xfe, 0xd2, 0xcf, 0xd1, 0x71, 0x06, 0x7a, 0xd3, 0xb8, 0x71, 0x55, 0xd9, 0x8c, 0xcf, 0x19, 0xef, 0x94, 0x12, 0xf9, 0x85, 0x54, 0x9f, 0x2c, 0x06, 0x66, 0xab, 0x4b, 0xf6, 0x07, 0xf0, 0x70, 0x73, 0xa2, 0x65, 0xf1, 0xf2, 0x75, 0xd5, 0x77, 0x70, 0x88, 0x6e, 0xc6, 0xdf, 0x25, 0xe0, 0x9c, 0x5f, 0x01, 0x1d, 0x21, 0x74, 0x8c, 0xfb, 0xc9, 0x37, 0xfc, 0xf2, 0x6e, 0xae, 0xdc, 0xd8, 0x32, 0x6d, 0x12, 0xe4, 0xd7, 0xb5, 0x5e, 0x7c, 0xc2, 0xdc, 0x9e, 0x2e, 0x94, 0xbf, 0x7b, 0x4e, 0x56, 0x70, 0x42, 0xe8, 0x69, 0x29, 0x65, 0x15, 0xb1, 0xb9, 0x85, 0x76, 0x9d, 0x76, 0x7b, 0xd4, 0x5d, 0xcd, 0x8b, 0x9f, 0xc2, 0x36, 0x5d, 0xbb, 0x58, 0x28, 0x4e, 0xf5, 0x79, 0x25, 0xd7, 0xef, 0x7c, 0x8a, 0x4f, 0x86, 0xf0, 0xf1, 0xbf, 0x93, 0xb4, 0xc6, 0xb5, 0x0e, 0xd5, 0xb5, 0xf6, 0xa5, 0x2b, 0x0f, 0xd6, 0x47, 0xe9, 0xe2, 0x27, 0x9c, 0x3d, 0x11, 0x43, 0x91, 0xfc, 0xbd, 0x50, 0xd7, 0x70, 0x3a, 0x6e, 0x95, 0xb6, 0x39, 0x80, 0xe2, 0xa9, 0x9c, 0x5f, 0xd4, 0x3f, 0xd3, 0xf5, 0x46, 0x7b, 0xc4, 0xe6, 0xca, 0xce, 0xbf, 0x2e, 0xcd, 0x93, 0x88, 0xa4, 0x74, 0x9c, 0x99, 0xfe, 0x63, 0xe3, 0x3e, 0xc2, 0x40, 0x30, 0x1a, 0xc3, 0x7f, 0x7b, 0x5a, 0x20, 0x10, 0x7c, 0x14, 0x76, 0x29, 0x4f, 0x56, 0xc8, 0x2c, 0x4b, 0x5f, 0xb5, 0xf9, 0x14, 0x5a, 0x35, 0xa8, 0x28, 0xf9, 0x2c, 0xc9, 0xd9, 0x8e, 0x93, 0x3d, 0xb7, 0x4e, 0xdd, 0x29, 0x95, 0x5f, 0xb4, 0xc9, 0x7b, 0x68, 0x88, 0xf5, 0x38, 0xfd, 0x41, 0xe8, 0xc7, 0x03, 0xcf, 0x4d, 0x7c, 0x12, 0xf1, 0x79, 0xb8, 0x5b, 0x04, 0xd1, 0x89, 0x13, 0x45, 0x65, 0x58, 0xa6, 0xf4, 0xb3, 0x21, 0xec, 0xdf, 0x03, 0xd0, 0xde, 0xad, 0xbe, 0x85, 0x6e, 0x79, 0xdb, 0xbf, 0x38, 0xc9, 0xeb, 0x65, 0x36, 0xc6, 0xcc, 0x78, 0xf4, 0xbb, 0x5b, 0x9d, 0xaa, 0xeb, 0xdf, 0x2e, 0x5d, 0x99, 0xdd, 0x9a, 0x36, 0x5b, 0x62, 0x3f, 0xb5, 0x39, 0x80, 0x7c, 0x59, 0x91, 0x6a, 0x67, 0x99, 0x9c, 0x39, 0x3b, 0xa6, 0x9d, 0x9b, 0x2b, 0x1d, 0xf8, 0x84, 0xb8, 0x86, 0xe6, 0xcb, 0x0a, 0xd1, 0xc4, 0xfe, 0xe2, 0x00, 0x36, 0xb6, 0xff, 0xed, 0x9f, 0xef, 0x35, 0x86, 0x35, 0x3a, 0x7f, 0xa2, 0xd7, 0x8b, 0x67, 0x6c, 0xcc, 0x85, 0xcd, 0x7b, 0x00, 0xf6, 0xcc, 0x4e, 0x7d, 0xca, 0x03, 0x91, 0x40, 0x84, 0x33, 0x31, 0xdf, 0xbf, 0xe8, 0x25, 0xef, 0xf4, 0x03, 0xf7, 0xb1, 0xce, 0xa4, 0xbd, 0xa1, 0xfa, 0xa1, 0x5d, 0xd9, 0xf2, 0xfb, 0xfa, 0x3d, 0x4a, 0x0a, 0x84, 0x8b, 0xd0, 0xe5, 0x35, 0x69, 0x4e, 0x89, 0xbc, 0x1c, 0x7d, 0x45, 0xc7, 0xd9, 0xd0, 0xf6, 0x04, 0x40, 0xe9, 0x1d, 0xdb, 0xb8, 0x87, 0xcb, 0xab, 0x73, 0xe5, 0xc7, 0x6d, 0xd3, 0x36, 0x05, 0x82, 0x08, 0x75, 0x0b, 0xef, 0x3d, 0x3d, 0x42, 0x47, 0x40, 0x8f, 0xe8, 0x14, 0x05, 0x93, 0xd9, 0x66, 0x67, 0xae, 0x4c, 0xec, 0x5f, 0x20, 0x7f, 0xa7, 0xc0, 0xbf, 0xd4, 0x4f, 0x24, 0x33, 0xe3, 0x67, 0x39, 0xe5, 0x14, 0x00, 0xb1, 0xb1, 0xbc, 0xa3, 0xbc, 0xaa, 0xfc, 0xea, 0x1b, 0xe5, 0x97, 0xcb, 0x3b, 0x4b, 0x04, 0x61, 0xbe, 0x89, 0x09, 0xcf, 0xa9, 0xa7, 0xe2, 0x4a, 0x02, 0xca, 0xcf, 0x4a, 0xde, 0x12, 0x0b, 0xc4, 0x2c, 0x7d, 0x3d, 0x98, 0x0d, 0x1b, 0xff, 0x50, 0x86, 0xde, 0xa4, 0xbf, 0xb6, 0xd4, 0xf6, 0xea, 0x58, 0x72, 0xd8, 0x5d, 0xef, 0x68, 0x85, 0xdc, 0x52, 0x67, 0xb7, 0xfa, 0x36, 0x96, 0x22, 0x06, 0x24, 0x17, 0x1e, 0x16, 0xe2, 0x7b, 0x91, 0x25, 0x83, 0x7d, 0x88, 0x93, 0x7d, 0x62, 0x0c, 0x52, 0x77, 0x35, 0xbf, 0x55, 0x4e, 0x97, 0x59, 0x32, 0x00, 0xff, 0xf0, 0xd1, 0xfb, 0x7f, 0xea, 0x1f, 0x59, 0x2e, 0x71, 0x41, 0x0e, 0xa1, 0x85, 0x0e, 0xae, 0xec, 0x93, 0x42, 0x6d, 0xbe, 0xc8, 0x9e, 0x94, 0x63, 0x6c, 0xed, 0xf0, 0x01, 0xb0, 0xcd, 0x94, 0xa3, 0xf8, 0xf8, 0x0a, 0x38, 0x2a, 0xb3, 0x6c, 0xf5, 0xf2, 0x15, 0x60, 0x9b, 0x29, 0x47, 0xf1, 0x1d, 0xfb, 0x0a, 0xb0, 0xfa, 0x3a, 0x8d, 0x9b, 0xd2, 0x68, 0x34, 0x0a, 0xf7, 0x87, 0xa3, 0x32, 0xb9, 0xaf, 0xd7, 0x60, 0x30, 0xe0, 0xaf, 0x4d, 0x86, 0xac, 0x57, 0x60, 0x7c, 0x7c, 0x5c, 0x2a, 0x95, 0x8a, 0xc5, 0x62, 0x99, 0x8c, 0xe9, 0x0b, 0x23, 0x6c, 0xf7, 0xf4, 0xf4, 0xcc, 0xcf, 0xcf, 0xdb, 0x17, 0xe1, 0xf4, 0xf4, 0x34, 0xb1, 0x02, 0x43, 0x20, 0xd8, 0x2b, 0xb1, 0x1e, 0x80, 0x97, 0x97, 0x57, 0x48, 0x48, 0x08, 0x34, 0x6a, 0x34, 0x1a, 0x06, 0xbd, 0x5d, 0x5d, 0x5d, 0xa9, 0xa9, 0xa9, 0x65, 0x65, 0x65, 0x0c, 0x3c, 0x0c, 0x4b, 0x9e, 0x9e, 0x9e, 0xd1, 0xd1, 0xd1, 0x41, 0x41, 0x41, 0xe0, 0x59, 0x5f, 0x5f, 0x67, 0xe0, 0x34, 0x5f, 0x62, 0xf3, 0x45, 0x6a, 0x68, 0x68, 0x08, 0x62, 0x22, 0x91, 0x88, 0x81, 0xb9, 0xa5, 0xa5, 0x05, 0x3c, 0x09, 0x09, 0x09, 0x0c, 0x3c, 0x56, 0x97, 0x06, 0x07, 0x07, 0xa1, 0x04, 0x45, 0xb0, 0xca, 0x49, 0x31, 0x58, 0xaf, 0x00, 0x34, 0x52, 0xa3, 0xad, 0xad, 0x2d, 0x32, 0x32, 0x12, 0xd9, 0xca, 0xce, 0xce, 0x56, 0x2a, 0x95, 0x14, 0x8e, 0x36, 0x9b, 0x98, 0x98, 0xc0, 0x54, 0xab, 0xd5, 0xf6, 0xee, 0x8f, 0x81, 0x81, 0x01, 0xd2, 0xd0, 0xd8, 0x3c, 0x39, 0x39, 0x39, 0x89, 0x89, 0x89, 0x8d, 0x8d, 0x8d, 0xe9, 0xe9, 0xe9, 0x90, 0xad, 0xac, 0xac, 0xac, 0xad, 0xad, 0x95, 0x48, 0x24, 0x59, 0x59, 0x59, 0xfd, 0xfd, 0x7b, 0x6f, 0xf2, 0x38, 0x0d, 0x2a, 0x14, 0x06, 0x82, 0x54, 0x00, 0x66, 0x9c, 0x9d, 0x9d, 0x29, 0x63, 0x75, 0x75, 0x75, 0x44, 0x64, 0x78, 0x78, 0x98, 0x02, 0xe9, 0x44, 0x43, 0x43, 0x03, 0x18, 0x96, 0x97, 0x99, 0xde, 0x32, 0x44, 0x45, 0x45, 0xd1, 0xed, 0x3a, 0xbc, 0x02, 0x19, 0x19, 0x19, 0xc8, 0x74, 0x4d, 0x4d, 0x0d, 0x1c, 0xed, 0xec, 0xec, 0x24, 0xee, 0x62, 0x87, 0x24, 0x25, 0x25, 0xc9, 0xe5, 0x72, 0x4c, 0x5d, 0x5d, 0x5d, 0x51, 0x22, 0x8c, 0xb8, 0xb8, 0x38, 0xb4, 0x13, 0x10, 0xec, 0xc8, 0xf6, 0xf6, 0x76, 0x10, 0x38, 0x5b, 0xc6, 0xc6, 0xc6, 0xd2, 0xd2, 0xd2, 0x40, 0x27, 0x27, 0x27, 0x4f, 0x4d, 0x4d, 0x01, 0xc1, 0x53, 0xaf, 0xd7, 0x03, 0xb1, 0x7f, 0xd0, 0x13, 0xf0, 0x38, 0x9a, 0xaa, 0x00, 0x32, 0x04, 0x1e, 0x85, 0x42, 0x41, 0xec, 0xad, 0xae, 0xae, 0x52, 0x22, 0x0c, 0x7b, 0x60, 0x64, 0x64, 0xef, 0xf7, 0x71, 0x4c, 0x4c, 0x0c, 0x98, 0xab, 0xab, 0xab, 0x41, 0xd7, 0xd7, 0xd7, 0x83, 0x0e, 0x0c, 0x0c, 0x04, 0xbd, 0xb0, 0xb0, 0x40, 0x29, 0x71, 0x6c, 0x05, 0xb0, 0x89, 0xe3, 0xe3, 0xe3, 0x61, 0x92, 0x1c, 0x4a, 0x20, 0xb6, 0xb7, 0xff, 0xf7, 0x5b, 0x1e, 0x08, 0xc3, 0xf0, 0xf0, 0xf0, 0xc0, 0x2a, 0xde, 0xbd, 0xe1, 0x49, 0xa7, 0x4d, 0x26, 0x4e, 0xff, 0x34, 0xb0, 0x6d, 0x13, 0x13, 0xff, 0x88, 0x13, 0x66, 0xbe, 0xa2, 0x1f, 0x80, 0xe8, 0x74, 0x3a, 0x33, 0xdc, 0xd1, 0x53, 0x56, 0x01, 0xa0, 0xc4, 0x74, 0x3f, 0xa8, 0x29, 0x45, 0x60, 0xd5, 0xdb, 0xdb, 0x1b, 0x4f, 0xf4, 0xf4, 0xec, 0xec, 0x2c, 0xda, 0xba, 0xbb, 0xbb, 0xbb, 0xa2, 0xa2, 0xa2, 0xb5, 0xb5, 0x15, 0x20, 0x61, 0xa3, 0x33, 0xd3, 0x69, 0x4a, 0x33, 0x4e, 0x2d, 0x1c, 0x59, 0x64, 0x4a, 0xa7, 0x29, 0x86, 0x83, 0x09, 0xe8, 0x62, 0x1e, 0x33, 0x33, 0x33, 0xbe, 0xbe, 0xbe, 0x44, 0x38, 0x36, 0x36, 0x56, 0xad, 0x56, 0x93, 0xde, 0x05, 0x02, 0x02, 0xb7, 0x1b, 0x11, 0x9f, 0x9c, 0x9c, 0x24, 0x3c, 0x28, 0x85, 0xbb, 0xbb, 0x3b, 0xa1, 0x33, 0x33, 0x33, 0x37, 0x37, 0x37, 0x03, 0x02, 0xfe, 0x79, 0x5d, 0x57, 0x55, 0x55, 0x45, 0x0e, 0x00, 0xec, 0xf5, 0xbe, 0xbe, 0x3e, 0x72, 0x6d, 0x61, 0x6f, 0x40, 0x49, 0x70, 0x70, 0x30, 0x11, 0xa1, 0x3f, 0x21, 0xce, 0xec, 0x1b, 0x56, 0xad, 0x57, 0x00, 0x3d, 0x8a, 0xee, 0x27, 0x7a, 0xc9, 0x5d, 0x86, 0x8b, 0x86, 0x4c, 0xc9, 0x8d, 0x43, 0x68, 0x1c, 0x88, 0x4d, 0x4d, 0x4d, 0x38, 0xe6, 0xc1, 0x8f, 0x0a, 0xc0, 0x2d, 0xdc, 0xca, 0xcd, 0xcd, 0xcd, 0xb0, 0x41, 0xc4, 0xd1, 0x78, 0x88, 0x0d, 0xf7, 0x3a, 0xf8, 0x81, 0x80, 0x0d, 0xcc, 0xa0, 0xc9, 0xd1, 0x4c, 0x3f, 0xa0, 0x89, 0x42, 0x3c, 0x0f, 0xec, 0x55, 0x6a, 0x95, 0x10, 0x87, 0xfc, 0x56, 0x02, 0xee, 0xce, 0xcd, 0xcd, 0xa1, 0x62, 0xc4, 0x39, 0x33, 0x63, 0x8e, 0x98, 0x1e, 0x72, 0x00, 0x8e, 0x70, 0x91, 0x59, 0xa7, 0xf5, 0x16, 0x62, 0x96, 0x3f, 0xf2, 0x55, 0x3e, 0x80, 0xa3, 0x2e, 0x01, 0x5f, 0x01, 0xbe, 0x02, 0x1c, 0x33, 0xc0, 0xb7, 0x10, 0xc7, 0x04, 0x72, 0x16, 0xe7, 0x2b, 0xc0, 0x39, 0x85, 0x1c, 0x15, 0x1c, 0xfb, 0x0a, 0xfc, 0x0d, 0x0a, 0x08, 0x48, 0x44, 0xec, 0xf6, 0xcb, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; -static const u_int8_t FLEXAudioIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xa6, 0xa8, 0x92, 0xdf, 0x00, 0x00, 0x09, 0x77, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x99, 0x57, 0x4c, 0x94, 0x4b, 0x14, 0xc7, 0xd9, 0xa2, 0xd2, 0x44, 0x40, 0x2c, 0x14, 0x51, 0xc0, 0xa8, 0xd8, 0x30, 0x8a, 0x77, 0xc5, 0xcb, 0xb5, 0xbc, 0x20, 0xf6, 0x68, 0xa2, 0x89, 0x3d, 0x24, 0xbe, 0x58, 0x5e, 0x7c, 0xd0, 0x18, 0xbd, 0x46, 0xe3, 0x8b, 0x4f, 0x1a, 0x8d, 0x31, 0xea, 0x83, 0x35, 0x6a, 0x2c, 0xb9, 0x24, 0x46, 0x0d, 0x8a, 0x41, 0x54, 0x04, 0x0d, 0x08, 0x42, 0x58, 0x69, 0xa2, 0xec, 0x52, 0xa4, 0x08, 0xb2, 0x74, 0x41, 0x81, 0xfb, 0x93, 0xb9, 0x99, 0x7c, 0x77, 0x29, 0xba, 0x1f, 0x4d, 0x93, 0xfd, 0xb2, 0xd9, 0x9c, 0x99, 0x39, 0x33, 0xdf, 0xf9, 0x9f, 0x36, 0x73, 0xe6, 0xd3, 0xb4, 0xb7, 0xb7, 0x3b, 0xfc, 0xce, 0x8f, 0xf6, 0x77, 0x16, 0xfe, 0xbb, 0xec, 0x76, 0x00, 0x83, 0x6d, 0x41, 0xbb, 0x05, 0x6c, 0xb4, 0x40, 0x65, 0x65, 0x65, 0x7e, 0x7e, 0xfe, 0xb7, 0x6f, 0xdf, 0x6c, 0x9c, 0xd7, 0x2d, 0xbb, 0xa6, 0x6f, 0xb3, 0x50, 0x71, 0x71, 0x71, 0xb5, 0xc5, 0xa2, 0xd7, 0xe9, 0xbc, 0xc7, 0x7a, 0xbb, 0x7b, 0xb8, 0x2b, 0x5f, 0xcb, 0x8b, 0x34, 0x1a, 0x4d, 0x5d, 0x5d, 0xdd, 0xf3, 0xe7, 0xcf, 0x1b, 0x1b, 0x1b, 0x97, 0x2e, 0x5d, 0xea, 0xea, 0xea, 0xaa, 0x64, 0x50, 0x47, 0xf7, 0x25, 0x80, 0x9c, 0x9c, 0x9c, 0x4c, 0xa3, 0xd1, 0xa1, 0x5d, 0xd3, 0xdc, 0xd2, 0xac, 0xd7, 0xeb, 0x02, 0x03, 0x02, 0xa6, 0x4f, 0x9f, 0xee, 0xec, 0xec, 0x2c, 0x24, 0x43, 0xf4, 0xf2, 0xf2, 0x72, 0x3f, 0x3f, 0x3f, 0xad, 0x56, 0xfb, 0xf0, 0xe1, 0xc3, 0xcf, 0x9f, 0x3f, 0xaf, 0x5f, 0xbf, 0x5e, 0x8e, 0xaa, 0x93, 0x9e, 0x59, 0xba, 0x23, 0x47, 0x8e, 0xa8, 0x9e, 0xac, 0x9c, 0xd8, 0xd0, 0xd0, 0x90, 0x9a, 0x9a, 0x86, 0x9a, 0x1f, 0x3f, 0x8e, 0x8d, 0x7f, 0x12, 0x57, 0x55, 0x59, 0xd9, 0xd4, 0xd8, 0x44, 0xa7, 0x97, 0xd7, 0x28, 0x27, 0x27, 0x47, 0x38, 0xf5, 0x7a, 0x3d, 0x42, 0xbf, 0x79, 0xf3, 0xc6, 0xdb, 0xdb, 0x7b, 0xda, 0xb4, 0x69, 0xa0, 0xcd, 0xcd, 0xcd, 0x9d, 0x31, 0x63, 0x86, 0x72, 0x11, 0x15, 0x74, 0x9f, 0x01, 0x30, 0x9b, 0xcd, 0x38, 0x46, 0x7c, 0x7c, 0x7c, 0x74, 0xf4, 0x3f, 0xc8, 0xf1, 0xb9, 0xba, 0xda, 0x64, 0x36, 0xe1, 0xeb, 0xad, 0xad, 0xad, 0x63, 0xc6, 0x8c, 0x71, 0x72, 0x72, 0x42, 0xfd, 0x82, 0x78, 0xf5, 0xea, 0xd5, 0xf8, 0xf1, 0xe3, 0x27, 0x4c, 0x98, 0xf0, 0xe2, 0xc5, 0x8b, 0xa1, 0x43, 0x87, 0xfa, 0xf8, 0xf8, 0xa8, 0x90, 0x5b, 0x4e, 0xe9, 0x33, 0x00, 0x65, 0x65, 0x65, 0xb5, 0xb5, 0x75, 0x0f, 0x1e, 0xdc, 0xd7, 0x68, 0x1c, 0xc6, 0x8e, 0x1d, 0xeb, 0xe2, 0xe2, 0x82, 0xca, 0x09, 0x09, 0x8b, 0xa5, 0x1a, 0x0c, 0xe3, 0xc6, 0x8d, 0x1b, 0x36, 0x6c, 0x98, 0xd1, 0x68, 0x0c, 0x08, 0x08, 0xc0, 0x85, 0xc0, 0x30, 0x67, 0xce, 0x1c, 0x7a, 0x9e, 0x3d, 0x7b, 0x36, 0x75, 0xea, 0x54, 0x47, 0xc7, 0xef, 0x26, 0x52, 0xf7, 0xf4, 0x59, 0x1a, 0x45, 0x2c, 0x44, 0x47, 0x14, 0x6f, 0x6f, 0x1f, 0x4f, 0x4f, 0x4f, 0x0f, 0x0f, 0x8f, 0x11, 0x23, 0x46, 0xb8, 0xbb, 0xbb, 0x17, 0x14, 0x14, 0x20, 0x6e, 0x42, 0x42, 0x02, 0xee, 0x0e, 0x0c, 0x5c, 0x28, 0x38, 0x38, 0x18, 0x6c, 0xa9, 0xa9, 0xa9, 0xb3, 0x66, 0xcd, 0xa2, 0x93, 0x51, 0x75, 0xa2, 0x8b, 0x59, 0x7d, 0x03, 0xa0, 0xa9, 0xa9, 0x29, 0x3b, 0x3b, 0x1b, 0xe9, 0x3d, 0x3c, 0xdc, 0xbd, 0xbc, 0xbc, 0x46, 0x8e, 0x1c, 0x29, 0x31, 0xd0, 0x24, 0x6f, 0x26, 0x25, 0x25, 0xbe, 0x7e, 0xfd, 0x1a, 0x6f, 0x01, 0xd5, 0xbb, 0x77, 0xef, 0x16, 0x2e, 0x5c, 0x98, 0x96, 0x96, 0x56, 0x5f, 0x5f, 0x3f, 0x7f, 0xfe, 0xfc, 0xcc, 0xcc, 0x4c, 0xe2, 0x5b, 0x35, 0x86, 0xbe, 0x01, 0x40, 0x76, 0x7f, 0xff, 0xfe, 0xbd, 0x4e, 0xa7, 0x77, 0x77, 0xf7, 0x70, 0x73, 0x73, 0x43, 0xf1, 0xc2, 0x02, 0xd0, 0xc3, 0x87, 0x0f, 0x87, 0xce, 0xcb, 0x7b, 0xf7, 0xf2, 0xe5, 0x4b, 0xc2, 0x60, 0xf2, 0xe4, 0xc9, 0x26, 0x93, 0x89, 0x90, 0x20, 0x0c, 0x92, 0x92, 0x92, 0xa6, 0x4c, 0x99, 0x82, 0x11, 0x80, 0x34, 0xc8, 0x00, 0x4a, 0x4a, 0x3e, 0xf2, 0x23, 0x64, 0x51, 0x3c, 0xd9, 0x1d, 0xb9, 0x79, 0x80, 0x21, 0x09, 0x9d, 0x4e, 0x47, 0xda, 0x49, 0x4c, 0x4c, 0x1c, 0x32, 0x64, 0x08, 0x59, 0x08, 0xad, 0x13, 0x03, 0x44, 0xc8, 0xd7, 0xaf, 0x5f, 0xf1, 0xa8, 0xbc, 0xbc, 0x3c, 0xe2, 0x44, 0x1d, 0x86, 0x3e, 0xb0, 0x00, 0xef, 0x36, 0x99, 0x0a, 0xb0, 0x40, 0x5d, 0x5d, 0x2d, 0x79, 0x86, 0x26, 0x18, 0x04, 0x0c, 0x30, 0xe0, 0x33, 0x18, 0x61, 0xd4, 0xa8, 0x51, 0x44, 0x79, 0x46, 0x46, 0x06, 0xa2, 0xa3, 0xf5, 0xaa, 0xaa, 0x2a, 0x8c, 0x80, 0x77, 0x7d, 0xf8, 0xf0, 0x81, 0x20, 0xa6, 0x59, 0x5b, 0x5b, 0x3b, 0x38, 0x00, 0x2c, 0x16, 0x4b, 0x4c, 0xcc, 0xc3, 0x94, 0x94, 0x94, 0xaa, 0xaa, 0x4a, 0x93, 0xc9, 0x4c, 0x98, 0xea, 0xf5, 0x43, 0xd8, 0x71, 0x9b, 0x9b, 0x9b, 0x09, 0x6b, 0x81, 0x44, 0xfc, 0xe3, 0x48, 0xa4, 0x5a, 0xbc, 0x85, 0x7e, 0x68, 0xbc, 0x2e, 0x28, 0x28, 0xa8, 0xb0, 0xb0, 0x10, 0x84, 0xc4, 0x34, 0xf0, 0x06, 0x01, 0x00, 0x81, 0x6b, 0x36, 0x97, 0x14, 0x14, 0x98, 0xd8, 0xb0, 0xf0, 0x9f, 0x8c, 0x8c, 0x74, 0x12, 0x28, 0xe2, 0xd2, 0x24, 0xcd, 0xe3, 0xdc, 0x6d, 0x6d, 0x6d, 0x68, 0x9a, 0x07, 0x1a, 0x77, 0xa2, 0x1f, 0xa8, 0x9f, 0x3e, 0x7d, 0x22, 0x9a, 0x2b, 0x2a, 0x2a, 0x60, 0x26, 0x7c, 0xd9, 0xfb, 0xb0, 0x5b, 0x69, 0x69, 0xe9, 0x40, 0x03, 0xa8, 0xa9, 0xa9, 0x49, 0x4f, 0x37, 0x56, 0x56, 0x56, 0x39, 0x38, 0x68, 0x5a, 0x5b, 0xbf, 0x7b, 0xff, 0xdb, 0xb7, 0x6f, 0x11, 0xc8, 0xc7, 0xc7, 0x1b, 0x47, 0x9f, 0x39, 0x73, 0x66, 0x64, 0x64, 0x24, 0xbb, 0x01, 0x62, 0xb1, 0x5b, 0x91, 0xf2, 0xc9, 0x51, 0x10, 0xd5, 0xd5, 0xd5, 0x64, 0x52, 0xd2, 0x14, 0xbb, 0x1e, 0xa3, 0x3c, 0x98, 0x8b, 0xa8, 0x50, 0x9d, 0x88, 0xd4, 0xc7, 0x00, 0xdb, 0x56, 0x43, 0x43, 0x3d, 0xa2, 0x18, 0x0c, 0x86, 0xc6, 0xc6, 0x26, 0xd2, 0x0b, 0x61, 0x90, 0x9c, 0x9c, 0x82, 0x63, 0xb4, 0xb4, 0xb4, 0x20, 0x37, 0x7e, 0x42, 0xaa, 0xc1, 0x97, 0x90, 0x1b, 0x48, 0xf8, 0x09, 0xc6, 0xe1, 0x34, 0x61, 0x36, 0x17, 0x62, 0x2e, 0x3c, 0x07, 0x5f, 0x42, 0x74, 0x2c, 0xc0, 0x22, 0x8c, 0xaa, 0xb3, 0x80, 0xca, 0x69, 0xbc, 0xcc, 0xd5, 0xd5, 0x05, 0xd3, 0x07, 0x05, 0x05, 0xea, 0x74, 0xd0, 0xae, 0x44, 0x2a, 0xe1, 0x88, 0x7c, 0x48, 0x8c, 0xe8, 0x29, 0x29, 0xaf, 0xbf, 0x7c, 0xf9, 0xc2, 0xfe, 0x80, 0xac, 0xe8, 0x1e, 0x35, 0xf3, 0x20, 0x25, 0xcd, 0xb2, 0xf2, 0x52, 0xa0, 0x8a, 0x70, 0x1f, 0x3d, 0x7a, 0x34, 0xd8, 0xf0, 0x31, 0xa6, 0x0c, 0x34, 0x00, 0x5e, 0x89, 0xe8, 0x1a, 0x4d, 0x9b, 0xb3, 0xb3, 0xcb, 0x82, 0x05, 0x0b, 0xee, 0xdd, 0xbb, 0xb7, 0x6b, 0xd7, 0xae, 0xe6, 0xe6, 0x96, 0xec, 0xec, 0x9c, 0xe0, 0xe0, 0x29, 0xf1, 0xf1, 0x4f, 0xb0, 0x8f, 0x88, 0x0d, 0x24, 0x43, 0xcd, 0x3c, 0x10, 0x88, 0x5b, 0x5e, 0x56, 0x86, 0xfb, 0xe1, 0x63, 0x44, 0x08, 0x61, 0x00, 0x2a, 0x10, 0x62, 0x2b, 0x75, 0x00, 0xd4, 0xbb, 0x10, 0xef, 0x43, 0xf1, 0x45, 0x45, 0x85, 0xc8, 0xf5, 0xe7, 0x9f, 0xe1, 0xf8, 0x74, 0x71, 0xf1, 0x47, 0xb2, 0x26, 0x82, 0x92, 0x16, 0x03, 0x02, 0x82, 0xb2, 0xb2, 0xb2, 0xf1, 0x6c, 0xfc, 0x07, 0xad, 0x23, 0x6b, 0x07, 0x84, 0x76, 0xdc, 0x06, 0x7f, 0x03, 0x1a, 0x04, 0xa2, 0x33, 0xca, 0x3a, 0xc4, 0x37, 0x48, 0x06, 0x01, 0xc0, 0xa4, 0x49, 0x93, 0xd2, 0xde, 0xa4, 0x7f, 0x2c, 0xa9, 0x68, 0x6b, 0xd3, 0x86, 0x86, 0xce, 0x4d, 0x4c, 0x4c, 0x40, 0xe7, 0x1d, 0x19, 0xe6, 0x93, 0x9f, 0x9f, 0x2f, 0x25, 0x01, 0xc9, 0x91, 0x2d, 0x8c, 0xdd, 0x4a, 0x60, 0x60, 0x8b, 0x00, 0x09, 0x7e, 0x65, 0xa9, 0xb1, 0x60, 0x04, 0x29, 0x31, 0x66, 0x81, 0x4d, 0x36, 0x6d, 0x22, 0x7a, 0x65, 0x01, 0xd4, 0xe6, 0xe4, 0xe8, 0x94, 0x90, 0xf0, 0x9c, 0xfd, 0x28, 0x34, 0xd4, 0x80, 0x7c, 0x89, 0x89, 0x2f, 0xc8, 0x8f, 0x15, 0x15, 0xe5, 0x9c, 0xe1, 0xfe, 0x30, 0x18, 0xd8, 0x9e, 0xc0, 0x40, 0x30, 0xf0, 0x10, 0x1b, 0x04, 0x37, 0x0f, 0x04, 0xa7, 0x20, 0xbc, 0xcb, 0x26, 0x41, 0xbb, 0x63, 0xee, 0x15, 0x00, 0x16, 0x0d, 0x0b, 0x33, 0x64, 0x65, 0x19, 0x39, 0x48, 0xa0, 0xd7, 0xad, 0x5b, 0xa3, 0x38, 0x2f, 0xc4, 0xc6, 0x3e, 0x4a, 0x4e, 0x4e, 0xbe, 0x7f, 0xff, 0x7e, 0x6d, 0x4d, 0x4d, 0x44, 0xc4, 0x12, 0xdc, 0x89, 0x1c, 0x8f, 0xc4, 0xf8, 0x18, 0x0f, 0x6c, 0x18, 0x41, 0xab, 0xd5, 0xf1, 0xdf, 0x9d, 0x4c, 0x36, 0xf5, 0xf7, 0x0a, 0x00, 0x6e, 0x4d, 0x1e, 0x5c, 0xbe, 0x2c, 0x32, 0x37, 0x2f, 0x27, 0x24, 0x64, 0xc6, 0xaa, 0x55, 0xcb, 0x0f, 0x1e, 0xfc, 0xdb, 0xd1, 0xd1, 0xc9, 0xd7, 0xd7, 0xd7, 0xc7, 0xc7, 0x97, 0xda, 0x17, 0x7d, 0x87, 0x87, 0xff, 0x85, 0xfa, 0x39, 0xc0, 0x61, 0x17, 0x72, 0x14, 0xff, 0x6c, 0x6a, 0xe4, 0x4d, 0xdc, 0xc6, 0x26, 0x41, 0xbb, 0x63, 0x56, 0x5f, 0xd0, 0x20, 0x3d, 0x5a, 0x44, 0x44, 0x7f, 0x7f, 0x7f, 0x9d, 0x4e, 0x63, 0x34, 0x66, 0xb2, 0x5f, 0x79, 0x7a, 0x8e, 0x1c, 0xee, 0xe6, 0xa6, 0xd5, 0x68, 0xe7, 0xcd, 0x33, 0x40, 0x37, 0x35, 0x35, 0xe2, 0xdc, 0x41, 0x41, 0x13, 0x21, 0x38, 0xb1, 0x71, 0x1a, 0x25, 0x76, 0x57, 0xad, 0x5c, 0xe5, 0xef, 0x3f, 0x8e, 0x13, 0x91, 0x6a, 0xbf, 0x57, 0x82, 0x51, 0x59, 0xd4, 0x23, 0x3d, 0xab, 0xe0, 0xf4, 0x00, 0xc0, 0x2b, 0x68, 0xb2, 0x0d, 0xf3, 0x20, 0x13, 0xea, 0x9f, 0x38, 0x71, 0x22, 0x99, 0x91, 0x14, 0x44, 0x0c, 0xe0, 0x36, 0xf8, 0x4f, 0x6b, 0x6b, 0x3b, 0x2d, 0x0e, 0x11, 0x1c, 0xef, 0x28, 0x16, 0x28, 0x7a, 0xc2, 0xc2, 0xe6, 0x75, 0xf8, 0x12, 0x65, 0x90, 0x46, 0x29, 0x90, 0xad, 0x74, 0xaf, 0x00, 0x20, 0x01, 0xe9, 0x05, 0x00, 0x88, 0x08, 0x01, 0x18, 0x12, 0x0e, 0x18, 0xc0, 0x43, 0x7e, 0xe4, 0xf8, 0x80, 0x9f, 0xd0, 0x0f, 0x8c, 0xfc, 0xfc, 0xf7, 0xf5, 0x0d, 0xf5, 0xe4, 0x4d, 0xac, 0x86, 0x11, 0x42, 0x43, 0x43, 0x39, 0x9f, 0x02, 0x12, 0x7a, 0x70, 0x00, 0x08, 0x3d, 0x21, 0x28, 0x0f, 0x30, 0x04, 0x12, 0xfe, 0x69, 0x22, 0x90, 0xc8, 0xf1, 0x82, 0x87, 0x4e, 0x80, 0x61, 0x2b, 0x40, 0x82, 0x04, 0x0c, 0x88, 0x2e, 0x8e, 0x46, 0xbd, 0x97, 0x9e, 0x57, 0xa8, 0xb4, 0x80, 0xad, 0x86, 0xee, 0x3f, 0xfe, 0x5e, 0x65, 0xa1, 0xfe, 0x13, 0xeb, 0xe7, 0x57, 0xb6, 0x03, 0xf8, 0x79, 0x5d, 0xf5, 0x0f, 0xa7, 0xdd, 0x02, 0xfd, 0xa3, 0xd7, 0x9f, 0x5f, 0xd5, 0x6e, 0x81, 0x1f, 0xe9, 0x4a, 0x6c, 0x11, 0x6c, 0x67, 0x9d, 0x19, 0xb9, 0x5d, 0x3c, 0x7a, 0xf4, 0x28, 0xe7, 0x8b, 0xce, 0x43, 0x36, 0xf4, 0x74, 0xec, 0x45, 0xfd, 0xf5, 0x77, 0xe0, 0xc0, 0x01, 0x79, 0xe0, 0xd9, 0xb1, 0x63, 0x87, 0xd5, 0x6b, 0x36, 0x6c, 0xd8, 0x80, 0xa0, 0x57, 0xaf, 0x5e, 0xb5, 0xea, 0xb7, 0xa9, 0xd9, 0xbf, 0x2e, 0x44, 0xa1, 0x48, 0x8d, 0xcf, 0x85, 0x05, 0x82, 0xb2, 0x0d, 0x5b, 0xe9, 0x95, 0x32, 0x1a, 0x78, 0x14, 0xc7, 0x56, 0xfd, 0xb6, 0x35, 0x7b, 0x86, 0x2b, 0x4e, 0x07, 0x3d, 0xf3, 0xfc, 0x70, 0xf4, 0xc4, 0x89, 0x13, 0xc8, 0xb4, 0x79, 0xf3, 0xe6, 0xce, 0x9c, 0x9c, 0x32, 0x3a, 0x77, 0xda, 0xd4, 0xd3, 0x85, 0x05, 0xb8, 0xae, 0xda, 0xb6, 0x6d, 0xdb, 0xdc, 0xb9, 0x73, 0xd1, 0x10, 0x67, 0x77, 0x2e, 0xc1, 0xef, 0xde, 0xbd, 0x2b, 0xb5, 0x72, 0xec, 0xd8, 0xb1, 0x79, 0x1d, 0x0f, 0x55, 0x0b, 0x9d, 0xe7, 0xcf, 0x9f, 0x0f, 0xa3, 0xa8, 0x31, 0x18, 0xa8, 0x60, 0x24, 0x0f, 0xc4, 0xad, 0x5b, 0xb7, 0xb6, 0x6c, 0xd9, 0x12, 0x11, 0x11, 0xc1, 0x17, 0xa0, 0xce, 0xba, 0x8f, 0x8d, 0x8d, 0xe5, 0x82, 0x9a, 0x59, 0xe1, 0xe1, 0xe1, 0x27, 0x4f, 0x9e, 0x54, 0x4e, 0x14, 0x74, 0x49, 0x49, 0x49, 0x54, 0x54, 0x14, 0x47, 0x6e, 0xca, 0x6e, 0x04, 0xd8, 0xb7, 0x6f, 0x5f, 0xb7, 0x15, 0x5c, 0x67, 0xb8, 0x88, 0xc7, 0x2a, 0x9c, 0xc9, 0xc0, 0xc0, 0xb5, 0x07, 0x34, 0x67, 0x2f, 0x2a, 0x12, 0xc1, 0x29, 0x3f, 0x0a, 0xdd, 0xbe, 0x7d, 0x9b, 0x9e, 0x25, 0x4b, 0x96, 0x88, 0x57, 0x1e, 0x3f, 0x7e, 0x5c, 0x2e, 0xb5, 0x7d, 0xfb, 0x76, 0xd1, 0x29, 0xfe, 0xc5, 0x79, 0x53, 0x69, 0x81, 0xfd, 0xfb, 0xf7, 0x4b, 0x06, 0x94, 0x25, 0x27, 0x0a, 0x82, 0xe0, 0xa6, 0xcc, 0x97, 0x0c, 0x82, 0xe0, 0xcb, 0x08, 0xb7, 0x91, 0x56, 0x9c, 0x34, 0xff, 0xbb, 0xf0, 0x50, 0x0e, 0x44, 0x47, 0x47, 0x23, 0x0d, 0x57, 0xc7, 0x74, 0x52, 0xbf, 0x0a, 0x0c, 0x32, 0xd4, 0xb8, 0xcd, 0x0c, 0x0c, 0x0c, 0x64, 0x51, 0x01, 0x80, 0x1c, 0x32, 0x7b, 0xf6, 0x6c, 0x9a, 0x12, 0x80, 0x34, 0x17, 0xda, 0xbd, 0x78, 0xf1, 0xe2, 0xe2, 0xc5, 0x8b, 0x85, 0x04, 0x9b, 0x36, 0x6d, 0x92, 0x6f, 0xa1, 0x54, 0x88, 0x89, 0x89, 0x59, 0xb3, 0x66, 0x0d, 0x43, 0x56, 0x00, 0x38, 0x90, 0xf3, 0x69, 0x90, 0x7e, 0x6a, 0xbd, 0x33, 0x67, 0xce, 0xf0, 0x6d, 0xe1, 0xf0, 0xe1, 0xc3, 0x5c, 0x1c, 0xd1, 0xb3, 0x71, 0xe3, 0x46, 0xb9, 0x82, 0x24, 0xba, 0xb8, 0xd8, 0x62, 0xdd, 0xb8, 0xb8, 0x38, 0x24, 0xa6, 0xfc, 0xa3, 0xfe, 0x60, 0x21, 0x08, 0x6c, 0x2a, 0xe4, 0xe0, 0xfa, 0x96, 0x4e, 0x68, 0xa1, 0x57, 0xe0, 0x59, 0x45, 0xe1, 0xa5, 0x4b, 0x97, 0x18, 0xa5, 0x9f, 0xcf, 0x47, 0x1c, 0x98, 0xf1, 0x04, 0xee, 0x49, 0xb9, 0xd6, 0x15, 0xd3, 0xc5, 0x3f, 0x8e, 0xc1, 0xc5, 0xe3, 0xd3, 0xa7, 0x4f, 0x95, 0x9d, 0x82, 0xc6, 0x81, 0xf9, 0x12, 0x05, 0xbd, 0x77, 0xef, 0xde, 0x9d, 0x3b, 0x77, 0x42, 0xe0, 0x84, 0xc0, 0xb8, 0x7e, 0xfd, 0x3a, 0x9a, 0xe5, 0x58, 0x2e, 0xd3, 0x9a, 0xe0, 0xb7, 0x06, 0x80, 0x02, 0x56, 0xae, 0x5c, 0xf9, 0xe8, 0xd1, 0x23, 0x86, 0x29, 0x4a, 0x90, 0x12, 0x23, 0x40, 0x33, 0x53, 0x4c, 0xf8, 0xe1, 0x3f, 0x75, 0x3d, 0x3c, 0xcb, 0x96, 0x2d, 0x43, 0x7a, 0xc1, 0xbc, 0x62, 0xc5, 0x0a, 0x74, 0xf9, 0xc3, 0x89, 0x82, 0x41, 0x4c, 0x87, 0x5e, 0xbd, 0x7a, 0xb5, 0x9c, 0x02, 0x0d, 0x00, 0x51, 0x5b, 0x93, 0xd6, 0x64, 0x3f, 0x84, 0x75, 0x10, 0x5f, 0xbb, 0x76, 0x4d, 0x48, 0x7f, 0xe7, 0xce, 0x1d, 0xae, 0x6e, 0x28, 0x08, 0xd7, 0xae, 0x5d, 0xab, 0x9c, 0x00, 0x2d, 0x74, 0xc0, 0x75, 0x83, 0xe8, 0x27, 0x3c, 0x94, 0x0c, 0x68, 0x97, 0x26, 0xd7, 0x2a, 0xb2, 0x53, 0x49, 0xcb, 0xce, 0xee, 0x08, 0x0c, 0x2e, 0x86, 0xb8, 0xc7, 0x96, 0x3c, 0x82, 0x46, 0x9b, 0x9d, 0xef, 0xbf, 0xac, 0x01, 0x60, 0x41, 0xa6, 0x51, 0x34, 0xe1, 0x48, 0x94, 0x7c, 0xa4, 0x39, 0xae, 0x12, 0xe8, 0xc1, 0xe7, 0xe4, 0x72, 0x22, 0x2a, 0xf8, 0x48, 0x4a, 0x27, 0x6e, 0x20, 0xa6, 0x48, 0x06, 0x3e, 0xbd, 0xc0, 0xc9, 0x28, 0xdf, 0x63, 0x20, 0x78, 0x37, 0x0e, 0x29, 0xe7, 0x0a, 0x02, 0x66, 0xf6, 0x66, 0x72, 0x34, 0x4d, 0x25, 0x4d, 0x93, 0x2b, 0x47, 0xb2, 0x1f, 0xc4, 0xe9, 0xd3, 0xa7, 0x8b, 0x8a, 0x8a, 0x20, 0xd2, 0xd3, 0xd3, 0x51, 0x3f, 0x04, 0xe9, 0x88, 0xdb, 0x6c, 0x88, 0xff, 0x3d, 0xcc, 0x57, 0x3e, 0x97, 0x2f, 0x5f, 0x16, 0xc3, 0x84, 0xe6, 0xba, 0x75, 0xeb, 0xa8, 0xd0, 0x45, 0x93, 0xea, 0xf6, 0xca, 0x95, 0x2b, 0x82, 0x93, 0xfd, 0x5f, 0x74, 0xf2, 0xd9, 0x5d, 0x10, 0xfc, 0xe3, 0x6f, 0x37, 0x6f, 0xde, 0x84, 0x81, 0x28, 0x97, 0xaf, 0x21, 0x0f, 0x4a, 0x06, 0xf4, 0x77, 0xe8, 0xd0, 0x21, 0x18, 0xb0, 0xad, 0x08, 0x4a, 0x39, 0x24, 0xa6, 0x9f, 0x3d, 0x7b, 0x56, 0xac, 0x7f, 0xee, 0xdc, 0x39, 0x31, 0x44, 0xfd, 0x19, 0x12, 0x12, 0x22, 0x68, 0xcc, 0xce, 0x57, 0x36, 0xc1, 0xa0, 0xfc, 0xb7, 0xce, 0x42, 0x28, 0x66, 0xf7, 0xee, 0xdd, 0x42, 0xc7, 0xcc, 0xe4, 0x2b, 0xe2, 0xa9, 0x53, 0xa7, 0x48, 0x6a, 0x58, 0xe3, 0xc2, 0x85, 0x0b, 0x62, 0x26, 0xce, 0x43, 0x0a, 0x17, 0xeb, 0x2e, 0x5a, 0xb4, 0x68, 0xcf, 0x9e, 0x3d, 0xd0, 0xec, 0x18, 0xe8, 0x49, 0x30, 0xf0, 0x26, 0xbe, 0x7c, 0x09, 0x06, 0x5c, 0x82, 0x4c, 0x2f, 0xaa, 0x64, 0x09, 0x40, 0x22, 0x14, 0x3c, 0xfc, 0x93, 0xa9, 0x25, 0x00, 0x16, 0xb9, 0x71, 0xe3, 0x86, 0xf2, 0xba, 0x17, 0xab, 0xf2, 0xa1, 0x56, 0x29, 0xb7, 0xa4, 0xbb, 0xae, 0x89, 0x31, 0x2e, 0xc1, 0x84, 0x82, 0x3b, 0xe7, 0x63, 0xf9, 0x4a, 0x34, 0x0d, 0x2a, 0x09, 0x55, 0xf6, 0x4b, 0x82, 0x0b, 0x39, 0x76, 0x1f, 0x62, 0x4e, 0xe4, 0x2b, 0xd9, 0xff, 0xf3, 0x04, 0x89, 0x9f, 0x45, 0x48, 0x62, 0xc2, 0xa9, 0xba, 0x9c, 0xd8, 0x35, 0x80, 0x2e, 0x59, 0x7f, 0xcd, 0x4e, 0xeb, 0x20, 0xfe, 0x35, 0xa5, 0xec, 0x41, 0x2a, 0x3b, 0x80, 0x1e, 0x94, 0x33, 0x20, 0x43, 0x76, 0x0b, 0x0c, 0x88, 0x9a, 0x7b, 0x78, 0x89, 0xdd, 0x02, 0x3d, 0x28, 0x67, 0x40, 0x86, 0xec, 0x16, 0x18, 0x10, 0x35, 0xf7, 0xf0, 0x12, 0xbb, 0x05, 0x7a, 0x50, 0xce, 0x80, 0x0c, 0xfd, 0x0b, 0xbe, 0x35, 0x47, 0x3f, 0x08, 0xc9, 0x3b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +#pragma mark - Content Type Icons -static const u_int8_t FLEXJSIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x38, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x0e, 0x0a, 0xaa, 0x03, 0x00, 0x00, 0x05, 0x39, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7d, 0x48, 0x5b, 0x57, 0x14, 0xcf, 0x8b, 0x2f, 0x31, 0xd1, 0x1a, 0x4d, 0xb4, 0x06, 0xc7, 0xfc, 0x88, 0x55, 0x59, 0x97, 0x5a, 0xf1, 0xb3, 0x43, 0x83, 0xba, 0x32, 0x97, 0x0d, 0x3a, 0x0b, 0x2b, 0x08, 0x75, 0x65, 0x82, 0x8c, 0xc1, 0xdc, 0x1f, 0xab, 0x48, 0xdd, 0x64, 0x62, 0x19, 0x6e, 0x73, 0xc2, 0xa6, 0x83, 0x6e, 0x38, 0x46, 0xff, 0x28, 0xc3, 0x75, 0x6b, 0x51, 0x36, 0x54, 0x56, 0x23, 0x88, 0x3a, 0x3b, 0xa1, 0x22, 0xd4, 0xd8, 0xc9, 0x28, 0x9b, 0x1f, 0x0c, 0xad, 0x4c, 0xa3, 0xb5, 0x89, 0x71, 0xd1, 0x7c, 0xb8, 0x63, 0x9f, 0xbc, 0x3c, 0x93, 0x98, 0x9b, 0xbc, 0x7b, 0xcd, 0x10, 0xde, 0x23, 0x84, 0x73, 0xcf, 0xfb, 0xdd, 0x73, 0x7e, 0xbf, 0x73, 0xee, 0xbb, 0x2f, 0xb9, 0xd4, 0xce, 0xce, 0x8e, 0xe8, 0x28, 0x5f, 0xe2, 0xa3, 0x4c, 0x7e, 0x97, 0xbb, 0x20, 0xe0, 0xff, 0xee, 0xa0, 0xd0, 0x01, 0xa1, 0x03, 0x98, 0x15, 0x10, 0x96, 0x10, 0x66, 0x01, 0xb1, 0xa7, 0xd3, 0xd8, 0x11, 0xf6, 0x02, 0xac, 0x8f, 0x19, 0xcc, 0x13, 0xbf, 0xba, 0xec, 0xdb, 0x30, 0x56, 0x16, 0xe9, 0xa3, 0x5f, 0x78, 0xc9, 0x23, 0xf2, 0xfc, 0x17, 0x57, 0x18, 0x8f, 0x34, 0xfe, 0x99, 0xf8, 0x73, 0x97, 0x68, 0xe5, 0x71, 0x0f, 0x00, 0xbf, 0x21, 0x19, 0x01, 0xb3, 0x1f, 0xbf, 0xb3, 0x74, 0xeb, 0x1b, 0x96, 0x41, 0x58, 0x64, 0x94, 0xb7, 0x80, 0xc5, 0x1b, 0x9f, 0xb3, 0x80, 0x85, 0x6f, 0x3f, 0xc9, 0xfc, 0xee, 0xae, 0x5c, 0xf3, 0x1c, 0xeb, 0xe1, 0x6d, 0x10, 0x78, 0x06, 0x2c, 0xc6, 0x31, 0x2e, 0xfb, 0x40, 0xa8, 0xd8, 0xd7, 0x57, 0xe7, 0x5a, 0x2f, 0x07, 0x82, 0x44, 0x62, 0x08, 0x74, 0xc0, 0x32, 0x39, 0xc6, 0xa6, 0x49, 0xfd, 0xe0, 0x4b, 0xa5, 0xee, 0x55, 0x5a, 0x19, 0xc7, 0x7a, 0x58, 0x23, 0xf7, 0x97, 0x3f, 0x1d, 0xe6, 0xf5, 0xbf, 0xae, 0xbe, 0x65, 0x7d, 0x68, 0x04, 0x27, 0x77, 0x16, 0x8b, 0xe1, 0x61, 0x10, 0xe8, 0x80, 0x63, 0xc3, 0xcc, 0x24, 0xa6, 0x15, 0x31, 0x09, 0x6f, 0xbc, 0x27, 0x4b, 0xce, 0xa0, 0x15, 0x2a, 0x6f, 0x2a, 0xb2, 0xc4, 0xb4, 0x63, 0xda, 0xbc, 0xf8, 0xf3, 0x55, 0xcc, 0x2d, 0x87, 0xd5, 0xe2, 0x8d, 0xe1, 0xe1, 0x21, 0x20, 0x80, 0xcd, 0x2a, 0x0e, 0x97, 0xb3, 0xf6, 0x41, 0x46, 0x20, 0x98, 0x83, 0xe6, 0xfa, 0xf4, 0x93, 0x14, 0xe0, 0x33, 0xc1, 0x61, 0x3b, 0x05, 0x01, 0x22, 0x91, 0x63, 0x7d, 0x95, 0x29, 0x33, 0x45, 0x4b, 0x90, 0xf5, 0x16, 0x4b, 0xdc, 0x18, 0x87, 0x79, 0x0d, 0x89, 0x47, 0x02, 0x70, 0x3b, 0xb0, 0xbd, 0xf2, 0x68, 0x75, 0xf0, 0x27, 0x26, 0x4d, 0xc4, 0x89, 0xe7, 0x91, 0xf9, 0xe4, 0xa9, 0x6e, 0xcc, 0xd2, 0xcd, 0xaf, 0x90, 0x78, 0x24, 0x00, 0x4b, 0xc0, 0xc2, 0xf5, 0x4f, 0xef, 0x97, 0x9f, 0xdc, 0x5e, 0x59, 0x82, 0x34, 0x61, 0x32, 0x79, 0xe2, 0xdb, 0x1f, 0x22, 0xf3, 0x45, 0x9d, 0x3e, 0xa3, 0x2a, 0x7d, 0x8d, 0x81, 0xfd, 0xfd, 0xf5, 0xd5, 0xa9, 0x8b, 0xf9, 0x5b, 0x0b, 0xb3, 0xc8, 0x59, 0x7e, 0x00, 0x58, 0x02, 0x36, 0xa6, 0xee, 0x31, 0x7b, 0xa8, 0x44, 0x75, 0x3c, 0xe3, 0xb3, 0xce, 0xa8, 0x6c, 0x9d, 0x9f, 0x4c, 0x7b, 0xb7, 0x28, 0x71, 0x46, 0xeb, 0xf7, 0xb1, 0x2f, 0x96, 0x33, 0x43, 0xcb, 0xef, 0x13, 0xf6, 0x27, 0x7b, 0x2b, 0x10, 0x3d, 0xd7, 0x17, 0x02, 0x4b, 0x40, 0xac, 0xbe, 0x22, 0x32, 0x23, 0x13, 0xc2, 0xda, 0xd7, 0x56, 0xfe, 0xb8, 0x7c, 0xc1, 0x74, 0xe7, 0x07, 0x5f, 0x29, 0xf6, 0xf9, 0x5c, 0x5b, 0xff, 0x3e, 0x78, 0x53, 0xb7, 0x3a, 0xd4, 0x03, 0x5e, 0xb1, 0x34, 0x5c, 0xfd, 0x7a, 0x75, 0xb8, 0xfa, 0xd9, 0x7d, 0x88, 0x60, 0x07, 0x70, 0x2a, 0x81, 0x73, 0xb9, 0xb6, 0x6d, 0xf7, 0x2f, 0x64, 0xdd, 0x3d, 0x25, 0x82, 0xcf, 0xd4, 0xa5, 0x42, 0x64, 0xa8, 0xc7, 0xbf, 0xf5, 0x33, 0x60, 0xf8, 0x36, 0x19, 0x6e, 0x23, 0xf1, 0x48, 0x00, 0x56, 0x07, 0xa0, 0x58, 0x94, 0x24, 0x5c, 0xa9, 0x7b, 0x85, 0xa9, 0x9a, 0x6d, 0x71, 0x0e, 0x59, 0x3e, 0xdb, 0x82, 0x1b, 0xa3, 0x3a, 0x7b, 0x1e, 0x89, 0x47, 0x02, 0x70, 0x05, 0x40, 0x02, 0x4a, 0x22, 0x45, 0xa6, 0xf1, 0x09, 0xa0, 0x68, 0x9e, 0x13, 0xb9, 0xd1, 0x08, 0x08, 0xe0, 0x86, 0x0b, 0xbd, 0x2d, 0x08, 0xe0, 0xd4, 0xdc, 0x69, 0x35, 0x8b, 0x5c, 0x4e, 0x8e, 0xc3, 0x87, 0xe9, 0x34, 0x3f, 0xf6, 0xe1, 0xc5, 0x70, 0x11, 0xf8, 0x3f, 0x20, 0x8d, 0x55, 0x33, 0x04, 0x9c, 0x9b, 0x56, 0xf8, 0xb9, 0x1f, 0x53, 0xf8, 0x72, 0x64, 0xc6, 0x69, 0xf9, 0x09, 0xad, 0x07, 0x2b, 0x53, 0xff, 0x8f, 0x4e, 0xcb, 0x93, 0x47, 0x37, 0xaf, 0x31, 0x7e, 0x69, 0x6c, 0xbc, 0x07, 0x80, 0xdf, 0x90, 0x80, 0x80, 0xe8, 0x33, 0x67, 0x29, 0x9a, 0xde, 0x71, 0x38, 0x80, 0xc1, 0x3f, 0x3f, 0xdf, 0x80, 0x4f, 0xd2, 0xbb, 0x1f, 0x25, 0x7a, 0x09, 0x78, 0x78, 0xe5, 0x22, 0x97, 0x62, 0x4c, 0xa1, 0x9e, 0x3b, 0xe4, 0x6d, 0x13, 0x78, 0x06, 0xe4, 0x9a, 0x93, 0xa9, 0x0d, 0xd7, 0xe0, 0xad, 0x14, 0x38, 0x89, 0xa8, 0x53, 0x79, 0x9a, 0xf7, 0xdb, 0x03, 0xc7, 0xfb, 0x41, 0x52, 0xf0, 0xa6, 0xf0, 0x73, 0x3b, 0xf0, 0x5b, 0xdb, 0xcb, 0x8b, 0x1b, 0x0f, 0xee, 0x31, 0xa7, 0x12, 0x91, 0xe9, 0x99, 0x3e, 0x96, 0x90, 0xe1, 0x16, 0x13, 0x4d, 0x1a, 0x97, 0xa0, 0xc8, 0xd1, 0x89, 0x28, 0x02, 0xb5, 0x83, 0x80, 0xc4, 0x04, 0x04, 0x2e, 0x95, 0x2c, 0x92, 0x4c, 0x19, 0xc8, 0x72, 0x0a, 0x2a, 0x9a, 0x20, 0x20, 0xa8, 0x72, 0x1d, 0x02, 0x58, 0xe8, 0xc0, 0x21, 0x14, 0x35, 0xa8, 0x90, 0x84, 0x3b, 0x70, 0xfd, 0xe9, 0x15, 0x14, 0x03, 0x4c, 0x30, 0xc9, 0x6d, 0x74, 0x6b, 0x6b, 0x2b, 0x22, 0x22, 0x22, 0x2c, 0x2c, 0x6c, 0x73, 0x73, 0x93, 0xa6, 0x09, 0xbc, 0xe3, 0x03, 0xd1, 0x46, 0x38, 0x4d, 0x74, 0x74, 0xb4, 0x5c, 0x2e, 0x0f, 0x19, 0x7b, 0x50, 0x48, 0xb2, 0x03, 0x10, 0xce, 0xe5, 0x72, 0xc1, 0xb7, 0x58, 0x8c, 0x5e, 0x99, 0x80, 0x0c, 0x04, 0x86, 0x6c, 0x02, 0x81, 0x0e, 0x8c, 0x8e, 0x8e, 0x36, 0x35, 0x35, 0xc1, 0xb2, 0x61, 0x93, 0x55, 0x54, 0x54, 0xd4, 0xd5, 0xd5, 0xb1, 0x43, 0x30, 0x7a, 0x7b, 0x7b, 0xbb, 0xba, 0xba, 0xfa, 0xfb, 0xfb, 0x2d, 0x16, 0x8b, 0x56, 0xab, 0x85, 0xc5, 0x96, 0x94, 0x94, 0xd4, 0xd7, 0xd7, 0xc7, 0xc5, 0xf0, 0xb3, 0xc9, 0x08, 0x18, 0x1e, 0x1e, 0xe6, 0xa6, 0x4f, 0x4b, 0x4b, 0xe3, 0x0e, 0x07, 0x07, 0x07, 0xcb, 0xcb, 0x77, 0xcf, 0x51, 0xf4, 0x7a, 0xbd, 0xd3, 0xe9, 0x84, 0x21, 0xfc, 0x00, 0xb3, 0xdb, 0xed, 0x5c, 0x0c, 0x6f, 0x9b, 0x80, 0x80, 0xda, 0xda, 0xda, 0xfc, 0xfc, 0x7c, 0xab, 0xd5, 0x0a, 0x24, 0x3a, 0x3b, 0x3b, 0xbb, 0xbb, 0xbb, 0x3d, 0xd8, 0x18, 0x0c, 0x06, 0xf0, 0x40, 0xe1, 0xa1, 0x03, 0x60, 0xcc, 0xcf, 0xcf, 0x37, 0x37, 0x37, 0x83, 0x12, 0x0f, 0x18, 0xbf, 0x21, 0x01, 0x01, 0xf0, 0xd4, 0x96, 0x95, 0x95, 0x31, 0xe9, 0xc7, 0xc7, 0xc7, 0xbd, 0x79, 0x14, 0x14, 0x14, 0x80, 0x73, 0x7a, 0x7a, 0x3a, 0x2b, 0x2b, 0xab, 0xa4, 0xa4, 0x24, 0x3b, 0x3b, 0xbb, 0xb1, 0xb1, 0x51, 0xa3, 0xd1, 0x78, 0x23, 0xf9, 0x78, 0x90, 0x07, 0x2f, 0x41, 0x01, 0x1a, 0x1a, 0x1a, 0x80, 0x44, 0x65, 0x65, 0x25, 0x77, 0x16, 0xac, 0x16, 0x9d, 0x6e, 0xdf, 0xa1, 0x1d, 0x45, 0x51, 0x35, 0x35, 0x35, 0x5c, 0x0c, 0x6f, 0x1b, 0xbd, 0x5d, 0xf0, 0xa9, 0xca, 0xfe, 0x39, 0xb0, 0xab, 0x0e, 0x0c, 0x0c, 0x18, 0x8d, 0xc6, 0xfa, 0xfa, 0xfa, 0xe2, 0xe2, 0x62, 0x89, 0x44, 0x02, 0x74, 0x3b, 0x3a, 0x3a, 0xe6, 0xe6, 0xdc, 0x67, 0x44, 0xfb, 0x67, 0x04, 0x31, 0x0a, 0x85, 0x80, 0xb6, 0xb6, 0x36, 0xd8, 0x73, 0x60, 0x9b, 0x6a, 0x6d, 0x6d, 0x1d, 0x19, 0x19, 0x99, 0x99, 0x99, 0x91, 0xc9, 0x64, 0xa0, 0x61, 0x68, 0x68, 0x28, 0x08, 0xa6, 0x07, 0x40, 0x09, 0x3c, 0x03, 0x07, 0x44, 0x76, 0xbb, 0xa1, 0xd2, 0x26, 0x93, 0xa9, 0xb4, 0xb4, 0x14, 0x96, 0x4d, 0x6e, 0x6e, 0xee, 0xe4, 0xe4, 0xa4, 0xcd, 0x66, 0x83, 0x97, 0x00, 0x3c, 0xfa, 0x6e, 0x10, 0x5f, 0x8b, 0xb0, 0x00, 0x60, 0xe6, 0xcd, 0x44, 0xa1, 0x50, 0xc0, 0xa2, 0x87, 0x85, 0xd4, 0xde, 0xbe, 0xf7, 0x3f, 0x38, 0x2e, 0x2e, 0xae, 0xa5, 0xa5, 0x25, 0x33, 0x73, 0xf7, 0x60, 0x18, 0xf3, 0x22, 0x2c, 0x00, 0xb6, 0x48, 0x20, 0x94, 0x90, 0x90, 0xc0, 0xa5, 0x05, 0x4f, 0x76, 0x75, 0x75, 0x75, 0x4a, 0x4a, 0xca, 0xec, 0xec, 0xec, 0xda, 0xda, 0x9a, 0x4a, 0xa5, 0x4a, 0x4e, 0x4e, 0x96, 0x4a, 0x09, 0x9c, 0x2b, 0x42, 0x16, 0x02, 0x02, 0x7a, 0x7a, 0x7a, 0x26, 0x26, 0x26, 0xd4, 0x6a, 0x35, 0xec, 0xa1, 0xcc, 0xcb, 0xb5, 0xa8, 0xa8, 0x88, 0x2b, 0xe0, 0xd8, 0xd3, 0x0b, 0x3c, 0xe9, 0xe9, 0xe9, 0x5c, 0x3f, 0x19, 0x9b, 0xf7, 0xfe, 0xc5, 0x4e, 0x64, 0xde, 0xb2, 0x2c, 0x9b, 0xaa, 0xaa, 0x2a, 0xf6, 0x56, 0x08, 0x0c, 0x02, 0x3f, 0xe6, 0x96, 0x97, 0x97, 0x61, 0x3f, 0x81, 0xc5, 0xa3, 0x54, 0x2a, 0xf3, 0xf2, 0xf2, 0x72, 0x72, 0x72, 0x58, 0x31, 0x21, 0x30, 0x08, 0x08, 0x08, 0x01, 0x4b, 0x3f, 0x29, 0x42, 0xf1, 0x1e, 0xf0, 0x93, 0x1e, 0xff, 0x96, 0x20, 0x00, 0xbf, 0x86, 0x78, 0x11, 0x84, 0x0e, 0xe0, 0xd5, 0x0f, 0x7f, 0xb6, 0xd0, 0x01, 0xfc, 0x1a, 0xe2, 0x45, 0x38, 0xf2, 0x1d, 0xf8, 0x0f, 0x1c, 0x65, 0x73, 0xb3, 0xdd, 0xbe, 0x50, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXJSONIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, + 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, + 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, + 0x61, 0x3e, 0x0a, 0x03, 0x64, 0xa2, 0xe8, 0x00, 0x00, 0x06, 0x37, 0x49, 0x44, 0x41, 0x54, 0x68, + 0x05, 0xed, 0x59, 0x7b, 0x48, 0x57, 0x57, 0x1c, 0x3f, 0xc7, 0x47, 0x3e, 0xf2, 0x31, 0xc9, 0x50, + 0xdb, 0x56, 0x13, 0x73, 0x59, 0x3e, 0x57, 0x46, 0x66, 0xe2, 0x28, 0x1b, 0x51, 0x6a, 0x2a, 0xb1, + 0xcd, 0x6a, 0x43, 0xaa, 0x8d, 0x06, 0xe5, 0xa0, 0xac, 0x86, 0x8c, 0xcd, 0xbf, 0x4c, 0xb3, 0x65, + 0x81, 0xb4, 0xd2, 0xa6, 0x11, 0xe8, 0x60, 0xb4, 0x2d, 0x96, 0x2e, 0xb6, 0x08, 0x35, 0x62, 0x15, + 0x3e, 0x96, 0xda, 0x16, 0xe1, 0x7c, 0xe2, 0x62, 0x51, 0x12, 0xe5, 0x2f, 0xcd, 0xf7, 0xdd, 0xe7, + 0xfe, 0xce, 0xe5, 0x78, 0xfb, 0xa9, 0xf7, 0xfe, 0x7e, 0xbf, 0x7b, 0xf6, 0x08, 0x7e, 0x87, 0xb8, + 0x7c, 0xcf, 0xf7, 0x7c, 0xce, 0xf7, 0x7d, 0xbe, 0xe7, 0xf4, 0x93, 0x4a, 0x92, 0x44, 0x5e, 0xe4, + 0xe1, 0xf4, 0x22, 0x1b, 0x2f, 0xdb, 0xee, 0x70, 0xe0, 0xbf, 0xce, 0xa0, 0x23, 0x03, 0x8e, 0x0c, + 0x18, 0x8c, 0x80, 0xa3, 0x84, 0x0c, 0x06, 0xd0, 0xf0, 0x76, 0x17, 0xc3, 0x12, 0x14, 0x01, 0xb5, + 0xbf, 0x93, 0xeb, 0x7f, 0x48, 0xa3, 0xe3, 0xf2, 0x34, 0x29, 0x9c, 0xbe, 0xb9, 0xd4, 0x52, 0xf0, + 0xe7, 0xdf, 0x2a, 0x37, 0x66, 0xd0, 0x4b, 0xf4, 0x9d, 0x38, 0x32, 0xcf, 0xcb, 0x12, 0x60, 0xdf, + 0x5c, 0x8c, 0x03, 0x39, 0x55, 0x52, 0x45, 0xfd, 0xd4, 0x8d, 0xee, 0xe5, 0x3e, 0x83, 0x03, 0x25, + 0x3f, 0x73, 0x80, 0xf4, 0xc5, 0x8f, 0xf4, 0xa7, 0x4f, 0x68, 0x68, 0xa0, 0x7d, 0x36, 0x3f, 0xb7, + 0x4b, 0xc0, 0x19, 0x68, 0xe8, 0x24, 0x6a, 0xeb, 0x9f, 0x13, 0x3f, 0xcb, 0xe4, 0xd1, 0x53, 0x29, + 0xf7, 0x1b, 0xee, 0xcf, 0x2c, 0x20, 0xeb, 0xd8, 0x02, 0x32, 0x00, 0x07, 0xf8, 0x28, 0xc8, 0x74, + 0x7a, 0x2b, 0x82, 0xcc, 0xf3, 0xe6, 0x8c, 0x29, 0xe2, 0xd7, 0xc3, 0x4e, 0x4f, 0x86, 0xc8, 0xc7, + 0xe7, 0xa4, 0xdb, 0x7d, 0xb2, 0xe9, 0x0d, 0x1d, 0x53, 0x4b, 0x46, 0x28, 0x01, 0x0e, 0x98, 0x9e, + 0x29, 0xb1, 0xf4, 0xf5, 0xa4, 0x1f, 0x25, 0xcd, 0x6a, 0x4c, 0xf0, 0x7c, 0x79, 0x69, 0x6b, 0x3c, + 0xbd, 0x6d, 0x8e, 0xbd, 0x69, 0x18, 0xbb, 0xe8, 0xac, 0x68, 0xab, 0x17, 0x04, 0x94, 0x10, 0xd7, + 0xe5, 0x31, 0x87, 0x93, 0xb3, 0x12, 0xee, 0xae, 0xb3, 0x2e, 0xd9, 0xb7, 0x20, 0xd2, 0x01, 0xfb, + 0x2c, 0x30, 0xb8, 0xcb, 0xe1, 0x00, 0x21, 0x8f, 0x06, 0x95, 0x20, 0xba, 0x3a, 0xeb, 0x47, 0x53, + 0x8d, 0x79, 0x3c, 0xa4, 0x8f, 0xd7, 0x45, 0x18, 0xcd, 0xc0, 0xfd, 0x27, 0xa4, 0xe6, 0x96, 0xa2, + 0x65, 0x49, 0x90, 0xae, 0x3a, 0xb2, 0x64, 0xc1, 0x14, 0xa6, 0xac, 0x76, 0x8a, 0xb6, 0x9b, 0x32, + 0xe4, 0x40, 0xf1, 0x25, 0xb2, 0xea, 0x33, 0xe9, 0xfe, 0x63, 0xb9, 0x0b, 0x79, 0xcc, 0xa1, 0x39, + 0xc9, 0xfa, 0x5d, 0x25, 0x36, 0x98, 0x6c, 0x8c, 0x56, 0x60, 0x05, 0x3f, 0x4c, 0xae, 0xcb, 0x97, + 0x7a, 0xfb, 0xed, 0x36, 0x5e, 0xde, 0x68, 0xc8, 0x81, 0xe6, 0x6e, 0x69, 0xc0, 0xdc, 0x43, 0xfd, + 0xbd, 0x69, 0xd9, 0x07, 0x34, 0x6e, 0xb1, 0xbe, 0x29, 0x94, 0x92, 0xb2, 0x0f, 0xe9, 0xa6, 0x18, + 0xc5, 0x87, 0x5b, 0x3d, 0xd2, 0xa3, 0xa7, 0xfa, 0xbb, 0x34, 0x10, 0x86, 0x1c, 0x48, 0x8f, 0xa5, + 0xe1, 0xaf, 0xc8, 0xa6, 0xf4, 0x9b, 0xa4, 0xf7, 0xbf, 0x9c, 0xfc, 0xae, 0x41, 0x43, 0x91, 0xb2, + 0x34, 0x3c, 0x46, 0x36, 0x16, 0x4a, 0x97, 0x5a, 0xe4, 0xa4, 0xb9, 0xb9, 0xd2, 0xf7, 0x12, 0xe8, + 0x02, 0x3f, 0xfd, 0x5d, 0x1a, 0x08, 0x43, 0x0e, 0xbc, 0xbd, 0x8a, 0xd4, 0x7e, 0x4a, 0x23, 0x5f, + 0x55, 0xc2, 0x79, 0xa6, 0x4e, 0xb9, 0xd1, 0x34, 0xf4, 0x5d, 0x6f, 0x27, 0xbf, 0xfd, 0xa9, 0xc0, + 0x4a, 0x77, 0xd1, 0x92, 0x2c, 0x1a, 0xe0, 0xab, 0x01, 0xd7, 0x5f, 0x32, 0xe4, 0x00, 0xc4, 0xcf, + 0x71, 0x21, 0x49, 0x11, 0x8a, 0x1a, 0x6b, 0xaa, 0x59, 0x8d, 0xd9, 0x14, 0xa3, 0x6f, 0x9f, 0x2e, + 0xc2, 0xa8, 0x03, 0xb2, 0x0f, 0x56, 0x74, 0xcf, 0x19, 0xed, 0x50, 0xb7, 0xd4, 0x19, 0x01, 0xd6, + 0x30, 0x05, 0x38, 0x60, 0x8d, 0x9a, 0x7f, 0x0e, 0xe3, 0x70, 0x40, 0x15, 0x5b, 0xd3, 0x33, 0x32, + 0xa9, 0x77, 0x8c, 0x85, 0xdc, 0xbe, 0x2a, 0x9d, 0x44, 0xc0, 0x73, 0x7a, 0xbe, 0x0f, 0xba, 0x90, + 0x6c, 0xf8, 0xe0, 0x88, 0x94, 0x7d, 0x8e, 0xac, 0x5b, 0x86, 0xde, 0x4a, 0xc2, 0x54, 0x37, 0x2e, + 0xd3, 0xf7, 0x7d, 0x23, 0x19, 0x78, 0x46, 0xca, 0x6a, 0x15, 0x17, 0xcd, 0xbb, 0xd4, 0x96, 0xd8, + 0x49, 0x0b, 0x70, 0x20, 0x71, 0x29, 0x71, 0x71, 0xa6, 0xe3, 0x13, 0xb2, 0x65, 0x5f, 0xff, 0x22, + 0xe1, 0x5f, 0x6e, 0x9a, 0xd3, 0x74, 0x07, 0x76, 0x95, 0x4d, 0xaa, 0x6d, 0x4c, 0x0a, 0x57, 0xcf, + 0xec, 0xa7, 0x05, 0x9c, 0x81, 0xd7, 0x03, 0x49, 0xd1, 0x56, 0x8a, 0x5b, 0xc9, 0x7a, 0x2b, 0xde, + 0x78, 0x8d, 0x1e, 0x7e, 0xd7, 0x06, 0xbc, 0x86, 0x64, 0x2a, 0xea, 0xe7, 0xf5, 0xbf, 0x1e, 0x93, + 0xe6, 0x6e, 0xc2, 0x7e, 0x95, 0x58, 0xf6, 0xf2, 0x0c, 0x25, 0x74, 0xa1, 0x49, 0x31, 0x03, 0x37, + 0xd7, 0xea, 0xc5, 0x04, 0x6f, 0x0a, 0x21, 0x43, 0x98, 0x03, 0x42, 0xac, 0xb1, 0x43, 0x88, 0x80, + 0x12, 0xb2, 0x43, 0xab, 0xc0, 0x2d, 0x0e, 0x07, 0x04, 0x06, 0xd3, 0x2e, 0x51, 0x8e, 0x0c, 0xd8, + 0x15, 0x36, 0x81, 0x9b, 0x6c, 0xcb, 0xc0, 0x57, 0xe6, 0x21, 0x50, 0xbd, 0x71, 0x51, 0x36, 0xb4, + 0xd1, 0x91, 0x91, 0x11, 0x4f, 0x4f, 0x4f, 0x67, 0x67, 0xe7, 0xa1, 0xa1, 0x21, 0x17, 0x17, 0x01, + 0x57, 0xb8, 0x71, 0xeb, 0x21, 0xc1, 0x36, 0x3b, 0x7c, 0x7d, 0x7d, 0x3d, 0x3c, 0x3c, 0xfe, 0x3f, + 0xd6, 0xc3, 0x01, 0x1b, 0x32, 0x00, 0xf4, 0xe4, 0xa4, 0xfc, 0x9e, 0x71, 0x72, 0xd2, 0x2f, 0x3c, + 0x20, 0xad, 0x81, 0x41, 0x9a, 0xc1, 0xa1, 0x6f, 0xca, 0xb5, 0x6b, 0xd7, 0xd6, 0xae, 0x5d, 0xbb, + 0xca, 0x3c, 0x56, 0x9b, 0xc7, 0xb1, 0x63, 0xc7, 0x2c, 0xb4, 0x56, 0x57, 0x57, 0x67, 0x65, 0x65, + 0x05, 0x04, 0x04, 0xa0, 0xc6, 0x56, 0xae, 0x5c, 0x19, 0x15, 0x15, 0xb5, 0x79, 0xf3, 0x66, 0x35, + 0xe6, 0xde, 0xbd, 0x7b, 0x3b, 0x76, 0xec, 0x08, 0x0b, 0x0b, 0xf3, 0xf2, 0xf2, 0x8a, 0x89, 0x89, + 0x39, 0x74, 0xe8, 0xd0, 0xe0, 0xa0, 0xf2, 0x7b, 0xd8, 0xd9, 0xb3, 0x67, 0xe3, 0xe3, 0xe3, 0xe3, + 0xe2, 0xe2, 0xea, 0xeb, 0xeb, 0x33, 0x33, 0x33, 0xfd, 0xfc, 0xfc, 0x16, 0x2e, 0x5c, 0x58, 0x5a, + 0x5a, 0xaa, 0xde, 0xae, 0x45, 0xe3, 0x2d, 0xa4, 0x3d, 0xf2, 0xf3, 0xf3, 0x2d, 0xf6, 0x6f, 0xdb, + 0xb6, 0x4d, 0xbd, 0xe5, 0xca, 0x95, 0x2b, 0x0c, 0xb0, 0x61, 0xc3, 0x86, 0xf5, 0xeb, 0xd7, 0x53, + 0xf3, 0x2b, 0x07, 0xb6, 0x72, 0x4c, 0x73, 0x73, 0xb3, 0x8f, 0x8f, 0x8f, 0x85, 0x90, 0xe0, 0xe0, + 0xe0, 0xfe, 0xfe, 0x7e, 0x60, 0x52, 0x52, 0x52, 0xd8, 0x12, 0x4c, 0xe7, 0x18, 0x08, 0xb9, 0x73, + 0xe7, 0x0e, 0x97, 0xa0, 0x41, 0x10, 0x8d, 0x35, 0xb6, 0x84, 0x23, 0x7b, 0xf9, 0xf2, 0xe5, 0x0b, + 0xe6, 0xb1, 0x65, 0xcb, 0x16, 0xe8, 0xb0, 0x70, 0xe0, 0xe0, 0xc1, 0x83, 0x60, 0x86, 0x87, 0x87, + 0x33, 0x7c, 0x77, 0x77, 0xf7, 0xce, 0x9d, 0x3b, 0x91, 0x10, 0x36, 0x1d, 0x1b, 0x1b, 0x8b, 0x88, + 0x90, 0xff, 0xdb, 0x1f, 0x14, 0x14, 0x74, 0xf2, 0xe4, 0xc9, 0x8e, 0x8e, 0x8e, 0xbc, 0xbc, 0x3c, + 0x1c, 0x24, 0x2e, 0xe7, 0xc1, 0x83, 0x07, 0xc8, 0x2b, 0xa6, 0xee, 0xee, 0xee, 0xe5, 0xe5, 0xe5, + 0xc8, 0x83, 0xbf, 0xbf, 0x3f, 0xa6, 0x47, 0x8f, 0x1e, 0x65, 0x12, 0xb4, 0xbf, 0xfa, 0x0e, 0xa8, + 0xf7, 0xe7, 0xe6, 0xe6, 0x72, 0xc5, 0x9c, 0x7f, 0xfe, 0xfc, 0x79, 0x30, 0x31, 0x50, 0x39, 0xd9, + 0xd9, 0xd9, 0x15, 0x15, 0x15, 0x5d, 0x5d, 0x5d, 0x7c, 0xb5, 0xad, 0xad, 0x8d, 0xad, 0x16, 0x17, + 0x17, 0x73, 0xe6, 0xf6, 0xed, 0xdb, 0xc1, 0x84, 0xc5, 0xe3, 0xe3, 0xe3, 0x60, 0x66, 0x64, 0x64, + 0x60, 0x9a, 0x9c, 0x9c, 0xcc, 0x00, 0xa9, 0xa9, 0xa9, 0x98, 0xee, 0xdb, 0xb7, 0x8f, 0xe3, 0x35, + 0x08, 0xfd, 0x33, 0xc0, 0xd4, 0x6b, 0x7c, 0xd3, 0xd3, 0xd3, 0x13, 0x12, 0x12, 0x00, 0x80, 0xad, + 0x25, 0x25, 0x25, 0x08, 0x7f, 0x48, 0x48, 0xc8, 0x9e, 0x3d, 0x7b, 0xd8, 0x96, 0xbb, 0x77, 0xef, + 0x32, 0x22, 0x2d, 0x2d, 0x8d, 0x0b, 0x61, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x67, 0xae, + 0x58, 0xb1, 0x82, 0xd1, 0x8b, 0x16, 0x2d, 0x02, 0x81, 0x55, 0xbe, 0xa4, 0x41, 0x08, 0x70, 0x00, + 0x5d, 0x15, 0x35, 0xd6, 0xda, 0xda, 0x8a, 0xa3, 0x99, 0x98, 0x98, 0xe8, 0xea, 0xea, 0x8a, 0x80, + 0x9d, 0x3a, 0x75, 0x0a, 0xb5, 0x04, 0xc5, 0xa8, 0x1c, 0xa6, 0xbe, 0xb1, 0xb1, 0x91, 0xdb, 0xc1, + 0x68, 0x14, 0x7a, 0x60, 0xe0, 0xd4, 0x1f, 0xfa, 0x78, 0xd7, 0x62, 0xa7, 0x88, 0x83, 0xb5, 0x09, + 0x01, 0x0e, 0xa0, 0x36, 0xd0, 0x37, 0x70, 0x54, 0x8e, 0x1c, 0x39, 0x72, 0xf5, 0xea, 0xd5, 0xce, + 0xce, 0x4e, 0xd4, 0x06, 0x7c, 0xa8, 0xab, 0xab, 0x83, 0x6e, 0xd4, 0x95, 0xb7, 0xb7, 0xfc, 0x37, + 0x33, 0x24, 0xa7, 0xaf, 0xaf, 0x0f, 0x44, 0x4b, 0x4b, 0x4b, 0x55, 0x55, 0x15, 0x08, 0xb4, 0xa3, + 0xb9, 0x73, 0xe7, 0x82, 0x00, 0x18, 0x5f, 0xd6, 0xa3, 0x39, 0xc1, 0x98, 0x98, 0xea, 0x0c, 0xe0, + 0xac, 0x1f, 0x33, 0x9e, 0x81, 0xbd, 0x7b, 0xf7, 0x42, 0x87, 0x9b, 0x9b, 0x1b, 0xaa, 0xb6, 0xb2, + 0xb2, 0xf2, 0xc0, 0x81, 0x03, 0x98, 0x22, 0x9c, 0xa8, 0x28, 0x26, 0xf9, 0xf4, 0xe9, 0xd3, 0xcc, + 0x08, 0xe4, 0x2a, 0x3a, 0x3a, 0x9a, 0xd1, 0xb8, 0xd1, 0x6f, 0xdc, 0xb8, 0x01, 0xc0, 0xfe, 0xfd, + 0xfb, 0x39, 0x07, 0x87, 0xb8, 0xa8, 0xa8, 0x88, 0xa5, 0x02, 0x79, 0x28, 0x2c, 0x2c, 0xd4, 0xb5, + 0xcd, 0xb6, 0x9b, 0x78, 0xc6, 0xba, 0x44, 0x8b, 0x84, 0x32, 0x18, 0x77, 0xfc, 0xf8, 0x71, 0x66, + 0x0a, 0xda, 0x48, 0x41, 0x41, 0x41, 0x64, 0x64, 0x24, 0x9b, 0xee, 0xde, 0xbd, 0x1b, 0x18, 0x38, + 0xdf, 0xdb, 0xdb, 0x8b, 0x4a, 0x03, 0x13, 0xe5, 0x7e, 0xe2, 0xc4, 0x09, 0xf4, 0x7e, 0xd0, 0xf0, + 0x04, 0x63, 0x62, 0x62, 0x02, 0xb5, 0x07, 0x39, 0xb0, 0x1e, 0xa2, 0x46, 0x47, 0x47, 0xf1, 0xb5, + 0xaa, 0x96, 0x74, 0x5d, 0x54, 0x03, 0x58, 0xbb, 0xc8, 0xc9, 0xc9, 0x51, 0x33, 0x4d, 0x26, 0x13, + 0x9a, 0x23, 0xfa, 0x49, 0x7b, 0x7b, 0xfb, 0xcd, 0x9b, 0x37, 0xf1, 0xc5, 0xab, 0x49, 0x0d, 0xe0, + 0xf4, 0xc3, 0x87, 0x0f, 0x91, 0x96, 0x81, 0x81, 0x01, 0xce, 0x31, 0x4e, 0xe8, 0x67, 0xe0, 0xe2, + 0xc5, 0x8b, 0x4d, 0x4d, 0x4d, 0xb8, 0x65, 0x1b, 0x1a, 0x1a, 0x6a, 0x6a, 0x6a, 0x10, 0xb3, 0x35, + 0x6b, 0xd6, 0xb0, 0xd0, 0xb2, 0x2f, 0x2e, 0x57, 0x0c, 0xd0, 0xa1, 0xa1, 0xa1, 0x6a, 0xfe, 0x74, + 0x1a, 0x99, 0xc1, 0x98, 0xce, 0x37, 0xc4, 0xd1, 0x8d, 0x81, 0xc5, 0xa3, 0x80, 0xdf, 0x50, 0xba, + 0x1b, 0xff, 0x1d, 0x80, 0xfe, 0x63, 0x0e, 0x37, 0x25, 0xfa, 0x09, 0x1a, 0x36, 0xae, 0xfa, 0xd8, + 0xd8, 0xd8, 0xe5, 0xcb, 0x97, 0x1b, 0x0a, 0x98, 0xe8, 0xcd, 0xfa, 0x0e, 0x88, 0xd6, 0x28, 0x58, + 0x9e, 0x80, 0x7b, 0x40, 0xb0, 0x45, 0x36, 0x8a, 0x73, 0x38, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x1d, + 0x19, 0x10, 0x1e, 0x52, 0x1b, 0x05, 0x3a, 0x32, 0x60, 0x63, 0xc0, 0x84, 0xc3, 0x5f, 0xf8, 0x0c, + 0xfc, 0x0d, 0x80, 0x98, 0xbd, 0xed, 0xf7, 0x50, 0xda, 0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXPlistIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x33, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc8, 0x4f, 0xd5, 0xc2, 0x00, 0x00, 0x06, 0xa8, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7b, 0x4c, 0x53, 0x57, 0x18, 0xb7, 0xef, 0x77, 0x91, 0x87, 0x82, 0x20, 0x68, 0x01, 0xd1, 0xf8, 0x20, 0x6e, 0x09, 0xd1, 0x44, 0xc1, 0xcc, 0xa0, 0xce, 0x4c, 0x0d, 0xfc, 0xb7, 0x11, 0xa6, 0x93, 0xb0, 0x65, 0x53, 0x18, 0x31, 0x41, 0xcd, 0x4c, 0x4c, 0x96, 0x25, 0xfe, 0xb3, 0xa0, 0x46, 0x8c, 0x61, 0x03, 0x5f, 0x7f, 0xb0, 0x31, 0x46, 0x74, 0x31, 0x6e, 0xcb, 0x62, 0x80, 0x6c, 0x73, 0x8a, 0x12, 0xc5, 0xa0, 0x19, 0xbe, 0x98, 0x48, 0x43, 0x71, 0x56, 0x94, 0xd2, 0x07, 0xa5, 0x94, 0xb6, 0xfb, 0xe1, 0x71, 0xb7, 0x87, 0xdb, 0xf6, 0xda, 0x7b, 0x5b, 0x75, 0x66, 0xbd, 0x69, 0x9a, 0xef, 0x7c, 0x8f, 0xdf, 0xf9, 0x5e, 0xe7, 0x3b, 0xed, 0x15, 0xf9, 0x7c, 0xbe, 0x69, 0xaf, 0xf3, 0x23, 0x7e, 0x9d, 0x9d, 0x9f, 0xf4, 0x3d, 0x16, 0xc0, 0xab, 0xae, 0x60, 0xac, 0x02, 0xb1, 0x0a, 0x44, 0x98, 0x81, 0x58, 0x0b, 0x45, 0x98, 0xc0, 0x88, 0xcd, 0x63, 0x15, 0x88, 0x38, 0x85, 0x11, 0x02, 0xc4, 0x2a, 0x10, 0x61, 0x02, 0x23, 0x36, 0x8f, 0x55, 0x20, 0x58, 0x0a, 0x87, 0xdc, 0xde, 0x40, 0xb6, 0xcd, 0xe3, 0xf3, 0x04, 0x72, 0x23, 0xe6, 0x44, 0xb9, 0x02, 0x5d, 0xd6, 0xf1, 0x0f, 0xba, 0x1f, 0xcf, 0x6b, 0x37, 0x05, 0x3a, 0xf6, 0xfb, 0xe3, 0xb1, 0xcc, 0x36, 0xd3, 0x97, 0x7f, 0x59, 0x87, 0x83, 0x85, 0x17, 0xa8, 0x1f, 0x26, 0x47, 0x14, 0x95, 0xff, 0x03, 0x48, 0xed, 0x0f, 0x0f, 0x46, 0x0f, 0xf5, 0xd9, 0xfe, 0x78, 0x32, 0x86, 0x8d, 0x95, 0x12, 0x91, 0x73, 0x7d, 0x06, 0xcb, 0x83, 0x9f, 0xcc, 0xce, 0x0d, 0x9d, 0x66, 0x30, 0xd5, 0x12, 0xf1, 0xfb, 0xb3, 0x35, 0x9f, 0x1a, 0x74, 0x0b, 0xb5, 0x32, 0x96, 0x8e, 0x80, 0xa5, 0x54, 0x80, 0x0d, 0x6d, 0xf2, 0xc4, 0xed, 0x3d, 0x6a, 0xb4, 0x1f, 0xb9, 0x6f, 0x33, 0x3a, 0x27, 0x68, 0x3e, 0x07, 0x3d, 0xea, 0xf1, 0x7e, 0xdd, 0x6f, 0xc3, 0xa7, 0x70, 0x86, 0xaa, 0xca, 0xa0, 0x7b, 0x67, 0xa6, 0x4a, 0xc4, 0xa1, 0xfd, 0x3c, 0x91, 0xf0, 0x00, 0xfe, 0xb4, 0xbb, 0x6b, 0xfb, 0x6c, 0x8d, 0x03, 0x0e, 0x38, 0x44, 0xef, 0x32, 0x4b, 0x29, 0xdd, 0x9a, 0xae, 0xa1, 0x39, 0x84, 0xce, 0xd5, 0xcb, 0x4b, 0x67, 0x6b, 0x4f, 0x3d, 0x18, 0x75, 0xfe, 0xab, 0xdf, 0xfa, 0xc8, 0x89, 0x4f, 0xb6, 0x46, 0x56, 0x31, 0x57, 0xb7, 0x35, 0x5d, 0xab, 0x97, 0x0a, 0x09, 0x84, 0x77, 0x0b, 0xc1, 0xd9, 0x9f, 0xcd, 0x4e, 0x74, 0x0b, 0xf6, 0xa6, 0xbd, 0x94, 0x89, 0x45, 0x1b, 0x92, 0x55, 0x65, 0xe9, 0xda, 0xf5, 0x33, 0x55, 0x12, 0x5a, 0x30, 0x95, 0xb6, 0x4c, 0xf8, 0xbe, 0x35, 0x39, 0x8e, 0x1a, 0x6d, 0xd7, 0x46, 0xc6, 0x69, 0x89, 0x4e, 0x2a, 0x46, 0x0c, 0x95, 0x06, 0x5d, 0xb6, 0x9a, 0x5f, 0x4e, 0x79, 0x07, 0xb0, 0xbe, 0xd3, 0xfc, 0x8b, 0x79, 0x8a, 0xeb, 0x8b, 0xf5, 0x72, 0xf8, 0x5d, 0x9a, 0xa6, 0x99, 0x21, 0xe7, 0x31, 0x12, 0xae, 0x59, 0xdd, 0x08, 0x03, 0xc1, 0x58, 0xa8, 0x33, 0x2d, 0x12, 0x89, 0xea, 0x73, 0x13, 0xca, 0xd3, 0xb5, 0x74, 0x6c, 0xdc, 0x34, 0xbf, 0x70, 0x81, 0x35, 0x34, 0xee, 0x6f, 0x98, 0xe2, 0x59, 0xea, 0xcf, 0xb2, 0xe3, 0xf2, 0xe2, 0xe4, 0xdc, 0x7b, 0x04, 0x95, 0xbe, 0xa1, 0x97, 0x1d, 0x59, 0x9c, 0x50, 0xb3, 0x30, 0x1e, 0x4d, 0xf5, 0xc5, 0xdd, 0x91, 0xbb, 0x76, 0x37, 0xd4, 0x30, 0x51, 0xcc, 0x2e, 0x3f, 0x7e, 0x50, 0x43, 0x16, 0x93, 0x77, 0x00, 0xb4, 0xfd, 0x8f, 0x0f, 0x9d, 0xe2, 0x69, 0xa2, 0x8f, 0xe6, 0x68, 0xd7, 0x24, 0x29, 0x05, 0xf4, 0xaf, 0xd3, 0xeb, 0xfb, 0x7e, 0x70, 0x14, 0x33, 0x80, 0x78, 0x4f, 0x23, 0x87, 0x4f, 0xf3, 0x0e, 0xe0, 0xc3, 0x0c, 0xad, 0xd9, 0xe5, 0x21, 0x33, 0xc7, 0xed, 0xf5, 0x9d, 0x7a, 0xe0, 0xc0, 0x67, 0xae, 0x5a, 0x5a, 0x9e, 0x81, 0x83, 0xa8, 0x49, 0x55, 0x70, 0xf4, 0xbf, 0xdf, 0x2b, 0xd2, 0x3f, 0xdf, 0x98, 0x1c, 0x23, 0x54, 0xff, 0x40, 0x5c, 0x90, 0xa8, 0x5c, 0x33, 0x43, 0xe9, 0xd7, 0x0b, 0x83, 0xe2, 0x7d, 0x06, 0x80, 0xc9, 0x9a, 0xfa, 0xcc, 0x2e, 0x52, 0xb1, 0x08, 0x33, 0x11, 0x11, 0xbe, 0x1d, 0xe2, 0x1c, 0x5b, 0x27, 0x7c, 0x4d, 0x83, 0x8e, 0x06, 0xa3, 0xfd, 0xaa, 0xc5, 0xc5, 0x58, 0x81, 0x90, 0x8b, 0x45, 0xef, 0xa5, 0x69, 0xaa, 0x0c, 0x7a, 0xf4, 0x15, 0xcd, 0x0f, 0x87, 0x16, 0x12, 0x00, 0x83, 0x7b, 0x75, 0x64, 0x1c, 0xe3, 0xa8, 0x79, 0xd0, 0x31, 0xee, 0x9d, 0xf2, 0x76, 0x2c, 0x4b, 0x23, 0xeb, 0x7d, 0x2b, 0x95, 0x51, 0x23, 0x44, 0x87, 0x65, 0xbc, 0xb0, 0xe3, 0x21, 0x6b, 0xe6, 0x26, 0x2b, 0x24, 0x9f, 0xcc, 0xd5, 0x7d, 0x3c, 0x47, 0x97, 0xcc, 0x67, 0x00, 0xd0, 0xc8, 0x11, 0x05, 0x40, 0x80, 0xfe, 0x76, 0x79, 0xbf, 0xea, 0xb7, 0xd5, 0xf5, 0xdb, 0xd0, 0x5a, 0x84, 0xc3, 0x7d, 0x13, 0x13, 0x9d, 0x37, 0xe3, 0x14, 0xb8, 0xc5, 0xde, 0x4d, 0xd3, 0xc8, 0x05, 0x9c, 0x1e, 0x2a, 0x02, 0xde, 0x67, 0x80, 0xb2, 0x7d, 0x46, 0xa6, 0x28, 0xc4, 0x9f, 0xe7, 0xc4, 0x61, 0x1c, 0x7d, 0x37, 0xe8, 0x38, 0xd4, 0x67, 0x65, 0x0d, 0x78, 0x96, 0xbe, 0x44, 0x24, 0x2a, 0x4a, 0x51, 0xc3, 0xf5, 0xfc, 0x04, 0x05, 0x4b, 0x24, 0x70, 0x89, 0xc9, 0x15, 0xdd, 0xe7, 0xb7, 0xc7, 0x63, 0x25, 0x5d, 0x8f, 0x02, 0x31, 0xc1, 0xaf, 0xee, 0x19, 0xbe, 0x3f, 0x3a, 0x11, 0x28, 0x8a, 0x84, 0x13, 0x85, 0x16, 0x12, 0x98, 0xb9, 0x28, 0x99, 0xf1, 0xb8, 0x3b, 0xa3, 0xb4, 0x63, 0x94, 0x61, 0x62, 0x01, 0x44, 0x39, 0xa1, 0xbc, 0xe1, 0x62, 0x15, 0xe0, 0x9d, 0xb2, 0x28, 0x1b, 0xc4, 0x2a, 0x10, 0xe5, 0x84, 0xf2, 0x86, 0xfb, 0x7f, 0x57, 0x60, 0xe2, 0xe9, 0xe3, 0xf5, 0x86, 0xfc, 0x0b, 0x02, 0xf9, 0x81, 0x03, 0x07, 0x4e, 0x9f, 0x3e, 0xcd, 0x3b, 0xb1, 0xe1, 0x1b, 0x08, 0xbb, 0xc6, 0x7b, 0x7b, 0x7b, 0x13, 0x12, 0x12, 0xc8, 0x2e, 0xd3, 0xa7, 0x4f, 0x0f, 0x05, 0x72, 0xfb, 0xf6, 0x6d, 0xe8, 0x64, 0x66, 0x66, 0x86, 0x52, 0xe0, 0xe0, 0xbb, 0xdd, 0xee, 0xf6, 0xf6, 0xf6, 0xc1, 0xc1, 0x41, 0x0e, 0x1d, 0x88, 0x04, 0xb6, 0x90, 0x4e, 0xa7, 0x9b, 0x3f, 0x7f, 0x7e, 0x6a, 0xea, 0xe4, 0x6f, 0x66, 0x87, 0xc3, 0x11, 0x2a, 0x5f, 0x72, 0xb9, 0x5c, 0xa1, 0x50, 0xa4, 0xa5, 0xa5, 0x85, 0x52, 0xe0, 0xe0, 0x9f, 0x3b, 0x77, 0x6e, 0xf5, 0xea, 0xd5, 0xe5, 0xe5, 0xe5, 0x1c, 0x3a, 0x93, 0x22, 0xee, 0xf8, 0xb8, 0xa5, 0x57, 0xae, 0x5c, 0x01, 0x82, 0x4c, 0x26, 0xe3, 0x50, 0x43, 0x22, 0x39, 0xa4, 0xb4, 0xc8, 0xe3, 0xf1, 0xd0, 0xcb, 0x93, 0x27, 0x4f, 0x02, 0x3c, 0x2f, 0x2f, 0x8f, 0x66, 0x06, 0xd2, 0x41, 0x2a, 0xb0, 0x77, 0xef, 0xde, 0x65, 0xcb, 0x96, 0xad, 0x5d, 0xbb, 0xb6, 0xb3, 0xb3, 0x73, 0xf9, 0xf2, 0xe5, 0x6a, 0xb5, 0x7a, 0xc9, 0x92, 0x25, 0x35, 0x35, 0x35, 0x1c, 0xbd, 0x8e, 0x9d, 0x02, 0x9f, 0xcd, 0x9b, 0x37, 0x03, 0x67, 0xc5, 0x8a, 0x15, 0x2b, 0x57, 0xae, 0xb4, 0x58, 0x2c, 0x2c, 0x85, 0xb3, 0x67, 0xcf, 0x6e, 0xd9, 0xb2, 0x25, 0x39, 0x39, 0x19, 0xf8, 0xf0, 0x32, 0x37, 0x37, 0x77, 0xd3, 0xa6, 0x4d, 0x8c, 0xce, 0xcd, 0x9b, 0x37, 0x6f, 0xdd, 0xba, 0x85, 0xa5, 0xcd, 0x66, 0xfb, 0xf5, 0xe9, 0x03, 0x67, 0x70, 0xa2, 0x18, 0x05, 0x3f, 0x11, 0x18, 0x93, 0xc1, 0x60, 0x20, 0x62, 0x8d, 0x66, 0xca, 0xfb, 0xa9, 0xd2, 0xd2, 0x52, 0x96, 0x32, 0x47, 0x05, 0xb0, 0xb1, 0x54, 0xea, 0xff, 0xb3, 0xd1, 0xd7, 0xd7, 0x47, 0xdb, 0xb6, 0xb6, 0xb6, 0x92, 0x2d, 0xd6, 0xad, 0x5b, 0x57, 0x58, 0x58, 0x88, 0xb7, 0x29, 0x58, 0x2e, 0x58, 0xb0, 0x80, 0xe8, 0x74, 0x75, 0x75, 0xf9, 0xfd, 0xa3, 0xa8, 0x7d, 0xfb, 0xf6, 0xd1, 0x20, 0x84, 0x0e, 0xd2, 0x42, 0xf7, 0xee, 0xdd, 0x43, 0x62, 0x60, 0x18, 0x1f, 0x1f, 0x5f, 0x5f, 0x5f, 0x7f, 0xfd, 0xfa, 0xf5, 0xe2, 0xe2, 0x62, 0x82, 0x83, 0x8d, 0x69, 0x08, 0x8e, 0x00, 0xa0, 0x76, 0xe3, 0xc6, 0x8d, 0xe6, 0xe6, 0x66, 0x62, 0xc8, 0x0a, 0x60, 0xe7, 0xce, 0x9d, 0xe0, 0x2f, 0x5a, 0xb4, 0x88, 0xa0, 0x41, 0x5a, 0x56, 0x56, 0x86, 0x82, 0x90, 0xa5, 0xd9, 0x6c, 0xce, 0xcf, 0xcf, 0x27, 0x3e, 0xe0, 0x08, 0xcd, 0x7b, 0xfa, 0x2c, 0x5d, 0xba, 0x14, 0xa7, 0x82, 0x28, 0xd0, 0xdf, 0x41, 0x02, 0x80, 0x18, 0x73, 0x03, 0x1b, 0x6c, 0xdb, 0xb6, 0x8d, 0xa8, 0x0e, 0x0d, 0x0d, 0x49, 0x24, 0x93, 0xaf, 0x1b, 0x76, 0xef, 0xde, 0x4d, 0x1b, 0x73, 0x07, 0x00, 0x4d, 0xa7, 0xf3, 0xd9, 0x2b, 0x30, 0x56, 0x00, 0x2d, 0x2d, 0x2d, 0x24, 0x30, 0x74, 0x4e, 0x65, 0x65, 0xe5, 0xf1, 0xe3, 0xc7, 0x91, 0x35, 0x1a, 0x19, 0xb4, 0xf0, 0x33, 0x40, 0xa0, 0xf1, 0xbd, 0x6a, 0xd5, 0x2a, 0x42, 0x27, 0x26, 0x26, 0x22, 0x5b, 0xa0, 0x07, 0x06, 0x06, 0x18, 0x69, 0x24, 0x44, 0x51, 0x51, 0x11, 0x0e, 0x06, 0x10, 0x50, 0xde, 0xc3, 0x87, 0x0f, 0x23, 0xfd, 0x59, 0x59, 0x59, 0xdb, 0xb7, 0x6f, 0x17, 0x80, 0x19, 0xe4, 0x10, 0x33, 0x28, 0x17, 0x2e, 0x5c, 0x20, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x68, 0xe6, 0x78, 0x30, 0x3a, 0xc2, 0x08, 0x1c, 0x0f, 0xf4, 0x43, 0x77, 0x77, 0xf7, 0xae, 0x5d, 0xbb, 0x0a, 0x0a, 0x0a, 0xc8, 0x1c, 0xab, 0xab, 0xab, 0x43, 0xa1, 0x18, 0x40, 0xb1, 0x78, 0xd2, 0x37, 0xbb, 0xdd, 0xce, 0x70, 0x82, 0x13, 0xac, 0xc2, 0x91, 0x25, 0x69, 0xa1, 0xa4, 0xa4, 0xa4, 0xa6, 0xa6, 0x26, 0x14, 0xb7, 0xa4, 0xa4, 0x84, 0x18, 0x9f, 0x3f, 0x7f, 0x9e, 0xd1, 0xc7, 0x7c, 0xbc, 0x7c, 0xf9, 0x32, 0xf8, 0xd8, 0x1e, 0x34, 0x46, 0x04, 0x23, 0x22, 0x04, 0x38, 0x38, 0xca, 0xc4, 0x10, 0x17, 0x1f, 0x3d, 0x4f, 0xf7, 0xef, 0xdf, 0x0f, 0xf0, 0x8e, 0x8e, 0x0e, 0xa2, 0x69, 0x34, 0x1a, 0x95, 0xca, 0xc9, 0xf7, 0x59, 0xc7, 0x8e, 0x1d, 0x63, 0x40, 0xce, 0x9c, 0x39, 0x03, 0x0e, 0x5a, 0x17, 0x0e, 0x8c, 0x8d, 0x8d, 0xb5, 0xb5, 0xb5, 0xa1, 0xa5, 0xd1, 0x57, 0x8c, 0x02, 0x21, 0xb8, 0xce, 0x00, 0xd9, 0x9b, 0xf9, 0xc6, 0x58, 0x24, 0x36, 0x56, 0xab, 0x35, 0xe8, 0xdd, 0x84, 0xc9, 0xcb, 0xa0, 0x63, 0x32, 0x32, 0x86, 0x0c, 0x91, 0x9d, 0x9d, 0xed, 0x72, 0xb9, 0xa0, 0x53, 0x51, 0x51, 0x01, 0x26, 0x0e, 0xe8, 0x8e, 0x1d, 0x3b, 0x1a, 0x1b, 0x1b, 0xab, 0xab, 0xab, 0xb1, 0x44, 0xca, 0xd1, 0x51, 0x0c, 0x02, 0xb9, 0xc5, 0x09, 0x5f, 0xa5, 0x52, 0x11, 0x10, 0x7a, 0x0b, 0xa2, 0xc9, 0x15, 0xc0, 0x9e, 0x3d, 0x7b, 0x30, 0x0d, 0x52, 0x52, 0x52, 0x70, 0x1b, 0x1c, 0x3c, 0x78, 0x10, 0xf7, 0x00, 0xb1, 0x41, 0x00, 0x19, 0x19, 0x19, 0x04, 0x91, 0xfe, 0xc6, 0x4c, 0x64, 0xb6, 0xc7, 0x0d, 0x40, 0x8b, 0x08, 0x9d, 0x93, 0x93, 0x83, 0x5c, 0x42, 0x07, 0xc8, 0x18, 0x9d, 0xf4, 0x98, 0x46, 0x41, 0x1a, 0x1a, 0x1a, 0x18, 0x73, 0x42, 0xd4, 0xd6, 0xd6, 0xe2, 0xca, 0x87, 0x2d, 0x62, 0xc3, 0x90, 0xc5, 0xad, 0x6c, 0x32, 0x99, 0x58, 0x3a, 0x5c, 0x01, 0x5c, 0xbc, 0x78, 0x91, 0xa5, 0x1d, 0xad, 0x25, 0x5a, 0x0b, 0x4d, 0x85, 0x1e, 0xbb, 0x73, 0xe7, 0xce, 0xa5, 0x4b, 0x97, 0xf0, 0x4d, 0x2a, 0x13, 0x88, 0x8f, 0xac, 0xf5, 0xf7, 0xf7, 0x23, 0x65, 0x81, 0x22, 0xc2, 0x61, 0x07, 0x80, 0x2b, 0x13, 0x8d, 0x88, 0xb1, 0x83, 0xb8, 0xab, 0xaa, 0xaa, 0x4e, 0x9c, 0x38, 0xc1, 0x61, 0x1c, 0x0a, 0xf4, 0x65, 0xf2, 0xd9, 0x01, 0xe0, 0xe6, 0x62, 0x95, 0x3e, 0xf0, 0xdc, 0xbc, 0x4c, 0xff, 0x9e, 0xbb, 0x97, 0xff, 0xb6, 0x27, 0x7e, 0x63, 0x42, 0xe3, 0xd7, 0x25, 0x33, 0x3d, 0xf4, 0x7a, 0xfd, 0xc6, 0x8d, 0x1b, 0x59, 0x21, 0xfd, 0xa7, 0x96, 0xb1, 0x37, 0x73, 0xaf, 0xba, 0x1c, 0x5c, 0x37, 0xf1, 0xab, 0xf6, 0x2d, 0xac, 0xfd, 0x63, 0x01, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0x14, 0xab, 0xc0, 0x0b, 0x4c, 0x6e, 0x58, 0xd0, 0xb1, 0x0a, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0xf4, 0x0f, 0x7b, 0x3c, 0x70, 0xd0, 0xa5, 0xfc, 0x34, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXJSONIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0d, 0x5c, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x09, 0x8c, 0x15, 0x49, 0xf5, 0x71, 0x0c, 0x37, 0x3b, 0x80, 0x9c, 0x4b, 0x80, 0xe1, 0x0a, + 0xe0, 0x22, 0x20, 0xb7, 0x24, 0x72, 0x0c, 0x12, 0xc3, 0x21, 0x4e, 0xb2, 0x8b, 0x60, 0x88, 0x44, + 0x19, 0x96, 0x51, 0x20, 0x30, 0x84, 0x05, 0x51, 0x43, 0x42, 0x96, 0x71, 0x81, 0x44, 0x10, 0xd8, + 0x48, 0xb2, 0x86, 0x63, 0xb3, 0xdc, 0xe7, 0x42, 0x60, 0xc1, 0x15, 0x44, 0x09, 0x67, 0x04, 0x16, + 0x11, 0x59, 0x40, 0x58, 0x1c, 0x21, 0x1c, 0x0e, 0xa7, 0xb3, 0xc8, 0xb5, 0x40, 0xfb, 0x5e, 0x35, + 0x55, 0x5d, 0xdd, 0x5d, 0xfd, 0xbb, 0x7b, 0xaa, 0xff, 0xff, 0x0d, 0xf3, 0x2b, 0xf9, 0xbf, 0x5f, + 0xbd, 0xbb, 0x5e, 0x75, 0x57, 0x5f, 0xf5, 0xaa, 0x2b, 0x18, 0x58, 0x20, 0x44, 0xa9, 0x18, 0x82, + 0x97, 0xb1, 0x2a, 0x05, 0xea, 0xbc, 0x65, 0xaa, 0xe1, 0x5b, 0x9b, 0x52, 0x72, 0xc9, 0xab, 0x5c, + 0xbd, 0xed, 0xa6, 0x80, 0x13, 0x95, 0xfd, 0xa6, 0x1d, 0xe3, 0xac, 0xbb, 0x04, 0x64, 0x76, 0x95, + 0x05, 0x65, 0x1b, 0x8a, 0xd6, 0x99, 0x5e, 0xaf, 0xf8, 0xd4, 0xe6, 0x3d, 0xab, 0x54, 0x20, 0x8d, + 0x6e, 0xb4, 0x37, 0x46, 0x69, 0xc1, 0x9b, 0x1d, 0xc0, 0x26, 0x50, 0xa1, 0x42, 0x05, 0xd3, 0x2c, + 0x6e, 0x6b, 0xd5, 0xaa, 0xa5, 0x94, 0xab, 0xcc, 0xb1, 0x8f, 0x1f, 0x3f, 0xe6, 0x20, 0x05, 0x42, + 0xc0, 0x4e, 0x20, 0x74, 0x1b, 0x42, 0x0b, 0xd8, 0xda, 0xe0, 0x34, 0xaf, 0xaa, 0xbb, 0x04, 0xc6, + 0xfc, 0xc6, 0x62, 0xfb, 0xcf, 0x3d, 0x0b, 0x16, 0x90, 0xdc, 0xb3, 0x04, 0xcb, 0xbb, 0x82, 0x0c, + 0x73, 0x3e, 0x97, 0x85, 0x82, 0x21, 0x42, 0x17, 0x34, 0xac, 0x63, 0xc1, 0x1c, 0x72, 0x09, 0x7c, + 0xb0, 0x8b, 0x93, 0x00, 0x4a, 0x14, 0x2e, 0xb9, 0xa2, 0xf4, 0xe4, 0x29, 0x40, 0x15, 0xd1, 0x3b, + 0x96, 0x30, 0x87, 0x5c, 0x02, 0x9c, 0xe0, 0xb5, 0x75, 0xb9, 0xe4, 0xc5, 0xc8, 0xf1, 0x2e, 0x81, + 0x96, 0x2d, 0x5b, 0xc2, 0x90, 0x21, 0x66, 0xcb, 0x69, 0xdf, 0xe2, 0x3f, 0x2e, 0x20, 0x0e, 0xa0, + 0x71, 0xe3, 0xc6, 0xf1, 0xc8, 0x25, 0xdc, 0x86, 0x6e, 0x43, 0x68, 0x01, 0xe1, 0x5a, 0x40, 0xc0, + 0xd5, 0xe6, 0x80, 0x72, 0x81, 0xd9, 0x02, 0x19, 0x50, 0x8d, 0x7f, 0xd3, 0x97, 0x03, 0xa8, 0xf0, + 0x4e, 0xcb, 0x81, 0x0c, 0x38, 0x85, 0xa8, 0x3e, 0xff, 0x27, 0x2a, 0xac, 0x1b, 0x57, 0x66, 0x03, + 0x37, 0x14, 0xbb, 0xbd, 0x5b, 0xbd, 0x63, 0x0c, 0x53, 0x31, 0x70, 0xdc, 0xb8, 0xc5, 0x1c, 0x32, + 0xb7, 0x9d, 0x7e, 0x66, 0xaf, 0x7b, 0xd5, 0xd2, 0xb7, 0x17, 0xd5, 0xac, 0x59, 0xd3, 0xcb, 0xa9, + 0x50, 0x78, 0x65, 0x1f, 0x0c, 0x1b, 0x36, 0x0c, 0x1e, 0x3c, 0x78, 0x20, 0x14, 0xf5, 0xee, 0xdd, + 0x1b, 0x8e, 0x1f, 0x3f, 0x0e, 0x27, 0x4e, 0x9c, 0x80, 0x7b, 0xf7, 0xee, 0xb1, 0xc3, 0x75, 0xec, + 0xd8, 0xb1, 0x50, 0xbd, 0x7a, 0x75, 0xb8, 0x7f, 0xff, 0x3e, 0xab, 0x17, 0x14, 0x14, 0x40, 0xdb, + 0xb6, 0x6d, 0x85, 0x8c, 0x00, 0xbc, 0x8e, 0x5b, 0x64, 0x10, 0x24, 0x82, 0xe9, 0xb7, 0x76, 0xed, + 0x5a, 0x86, 0xe3, 0xf5, 0xdd, 0xbb, 0x77, 0x1b, 0x1b, 0x37, 0x6e, 0x64, 0xb4, 0xbc, 0xbc, 0x3c, + 0xb6, 0x15, 0x42, 0x2f, 0x80, 0xf4, 0xf5, 0x01, 0x7a, 0x19, 0x49, 0x79, 0xf9, 0x5b, 0xa0, 0xdc, + 0x8b, 0x22, 0x89, 0xcd, 0x0b, 0x25, 0xf1, 0x30, 0x40, 0xa3, 0x66, 0xbd, 0x1f, 0x58, 0xed, 0xa2, + 0x7a, 0x90, 0x91, 0x94, 0x24, 0x7c, 0x5b, 0xd0, 0xf0, 0x87, 0xa6, 0xe2, 0x3b, 0x1b, 0x2d, 0x03, + 0xf7, 0x36, 0x5b, 0xb0, 0x1f, 0xe4, 0x6b, 0xe0, 0xc9, 0x57, 0x7e, 0x2a, 0x12, 0xd3, 0x7d, 0x0d, + 0x90, 0x78, 0x8d, 0xaa, 0x6a, 0x25, 0x7b, 0x4f, 0xaa, 0xf1, 0x36, 0xac, 0xf3, 0xd0, 0x96, 0xeb, + 0x7b, 0x3e, 0xb3, 0x5f, 0x5c, 0xc9, 0x34, 0xba, 0xa4, 0x56, 0x5d, 0x6c, 0xc9, 0x3c, 0x04, 0x5b, + 0x03, 0x8e, 0x93, 0xf2, 0xa2, 0x4e, 0x4a, 0x54, 0x8a, 0x08, 0x57, 0xfa, 0xc0, 0x43, 0x48, 0x42, + 0x07, 0x0a, 0x91, 0xad, 0xc9, 0x52, 0xa5, 0x76, 0x75, 0xa9, 0xe2, 0x01, 0xfa, 0x1a, 0xf8, 0x7a, + 0x73, 0x53, 0xf2, 0xbd, 0x0d, 0x96, 0x06, 0x7e, 0x23, 0x61, 0x61, 0xbc, 0x21, 0x5f, 0x03, 0x87, + 0x17, 0x02, 0xfc, 0x62, 0xa4, 0x5b, 0xc1, 0xda, 0x9f, 0xbb, 0x71, 0x2a, 0xcc, 0x2b, 0x3a, 0xd8, + 0x6d, 0xde, 0x1c, 0xe2, 0x50, 0x55, 0xc5, 0x45, 0xc2, 0xa5, 0x3e, 0x44, 0x74, 0x32, 0xa7, 0x93, + 0xfe, 0xbc, 0x79, 0xf3, 0x98, 0x1f, 0xf2, 0xfd, 0x1e, 0x21, 0xa8, 0xbe, 0x74, 0xe9, 0x52, 0xb6, + 0xa5, 0x7a, 0xbd, 0x7a, 0xf5, 0xd8, 0x7d, 0x20, 0xe7, 0x23, 0x9c, 0xad, 0x48, 0xc7, 0x84, 0x0d, + 0x9c, 0x3b, 0x77, 0x2e, 0xab, 0x5f, 0xbf, 0x7e, 0x9d, 0x9d, 0xcc, 0x51, 0x88, 0xd5, 0xf9, 0x76, + 0xfe, 0xfc, 0xf9, 0xc6, 0x99, 0x33, 0x67, 0x8c, 0x3e, 0x7d, 0xfa, 0xd8, 0xf0, 0x36, 0x25, 0x58, + 0xf1, 0x3c, 0x92, 0xb9, 0x01, 0x52, 0xc8, 0x7f, 0x24, 0x8c, 0x97, 0x26, 0xb6, 0x3a, 0xa7, 0xd1, + 0x76, 0xf8, 0xf0, 0xe1, 0x4e, 0xfd, 0x6e, 0x03, 0x3d, 0x7a, 0xf4, 0x30, 0xaa, 0x56, 0xad, 0x6a, + 0x3c, 0x7a, 0xf4, 0xc8, 0xc5, 0x5c, 0x16, 0x44, 0xea, 0x3b, 0x19, 0x9b, 0x1a, 0x69, 0xf1, 0x1d, + 0x2a, 0x74, 0xad, 0x25, 0x3d, 0x44, 0xba, 0x0e, 0xfa, 0xc9, 0x27, 0x3d, 0x42, 0x7e, 0x0e, 0xe8, + 0xd2, 0x33, 0x0d, 0xd0, 0x8d, 0xa0, 0xae, 0x7c, 0x82, 0xe7, 0x36, 0xc1, 0x55, 0xcf, 0xc1, 0x27, + 0x89, 0x0b, 0xb6, 0x58, 0xfc, 0x15, 0xb1, 0x5f, 0xe5, 0xcb, 0x4c, 0x4e, 0x71, 0x5e, 0xcb, 0x86, + 0xb9, 0xfc, 0xe4, 0x3a, 0x9c, 0xdb, 0x48, 0x0e, 0x62, 0xd9, 0x31, 0x3f, 0xa7, 0xae, 0xde, 0x06, + 0x78, 0xa3, 0xc0, 0x74, 0xc3, 0x8f, 0xd7, 0xe9, 0xac, 0xaa, 0x9e, 0xf2, 0x63, 0xe0, 0xc5, 0xb3, + 0x56, 0x95, 0x2f, 0x65, 0xc2, 0x69, 0x35, 0xa0, 0xb8, 0x04, 0xa0, 0xd9, 0x8f, 0x2c, 0xbb, 0x1f, + 0xcf, 0xb2, 0x60, 0x2f, 0xe8, 0xf5, 0x7a, 0x74, 0xc5, 0x60, 0x52, 0xa9, 0xe7, 0xa6, 0xfe, 0xde, + 0x8b, 0x33, 0x18, 0x5e, 0xab, 0x01, 0x39, 0x0d, 0x01, 0x36, 0xfc, 0xd2, 0x32, 0xf4, 0xfe, 0x0e, + 0x0b, 0x4e, 0x04, 0xf1, 0x07, 0xd7, 0x5f, 0x7b, 0x0d, 0xe0, 0xb7, 0xe3, 0x13, 0x71, 0xfa, 0xd3, + 0xb4, 0x1a, 0x40, 0xea, 0xfb, 0x74, 0xb0, 0x8c, 0xec, 0xfb, 0x9b, 0x05, 0x7b, 0x41, 0xd7, 0xee, + 0x58, 0x94, 0x2f, 0x56, 0x58, 0x70, 0x59, 0x21, 0xed, 0x06, 0x84, 0x35, 0xfc, 0xbf, 0x47, 0x61, + 0x25, 0x12, 0xf3, 0x47, 0x32, 0x0a, 0xdd, 0xb8, 0x0b, 0xd0, 0xfe, 0x6d, 0xcb, 0x50, 0x90, 0x61, + 0x94, 0x1e, 0xe9, 0xff, 0x73, 0x99, 0x25, 0x53, 0x56, 0x28, 0x92, 0x06, 0x94, 0xd5, 0x78, 0x14, + 0x72, 0x29, 0xdf, 0x85, 0xa2, 0x70, 0x5a, 0xd6, 0x51, 0xbe, 0x1a, 0x90, 0x9f, 0x9f, 0x2f, 0xee, + 0xf6, 0xe4, 0x28, 0xa4, 0x15, 0x0e, 0x72, 0x9f, 0x85, 0x0e, 0x8a, 0x1b, 0x3d, 0x82, 0x17, 0x2f, + 0x5e, 0x6c, 0x13, 0x5b, 0xb0, 0x60, 0x81, 0x8d, 0x4e, 0x3c, 0xa7, 0x4e, 0x9d, 0x12, 0x3c, 0x25, + 0x25, 0x25, 0x46, 0xc5, 0x8a, 0x15, 0x05, 0xcf, 0xa0, 0x41, 0x83, 0x04, 0xed, 0xf4, 0xe9, 0xd3, + 0x02, 0x9f, 0x9b, 0x9b, 0x2b, 0x60, 0x7c, 0x56, 0x2e, 0x78, 0x12, 0x01, 0x9e, 0x77, 0xad, 0x5e, + 0x42, 0xe4, 0x1c, 0xbf, 0xa3, 0xe5, 0x3c, 0xbc, 0x81, 0x8d, 0x1b, 0x37, 0x36, 0xa6, 0x4e, 0x9d, + 0x6a, 0x5c, 0xbd, 0x7a, 0x95, 0x93, 0x8c, 0x6e, 0xdd, 0xba, 0x31, 0xa7, 0x9e, 0x3d, 0x7b, 0x26, + 0x70, 0xa3, 0x46, 0x8d, 0x62, 0x38, 0x7c, 0x2d, 0xcb, 0x70, 0x74, 0x6b, 0x4d, 0x3a, 0x78, 0xe1, + 0xfa, 0x78, 0x3d, 0xd1, 0x36, 0x92, 0xab, 0x51, 0x34, 0xc8, 0xde, 0x2e, 0xd0, 0xdb, 0x03, 0x2a, + 0xfc, 0x21, 0x02, 0x1a, 0x86, 0xa1, 0x43, 0x87, 0xb2, 0xb7, 0x0c, 0xb4, 0xfb, 0xad, 0x5c, 0xb9, + 0x92, 0xd1, 0xd7, 0xaf, 0x5f, 0xcf, 0xb6, 0x55, 0xaa, 0x54, 0x61, 0x5b, 0xad, 0xbf, 0x44, 0xad, + 0x73, 0xd2, 0x28, 0x8a, 0x68, 0xcc, 0x58, 0xb5, 0x6a, 0x95, 0x8d, 0x44, 0x6f, 0x25, 0xe8, 0x31, + 0xc0, 0xae, 0x5d, 0xbb, 0x8c, 0xfd, 0xfb, 0xf7, 0xdb, 0x68, 0x72, 0xe5, 0xc0, 0x81, 0x03, 0xc6, + 0x95, 0x2b, 0x57, 0x64, 0x94, 0x36, 0xec, 0x7b, 0x1e, 0x78, 0xf8, 0xf0, 0x21, 0xd4, 0xa8, 0x51, + 0x83, 0x05, 0xa9, 0x72, 0xe5, 0xca, 0x70, 0xf2, 0xe4, 0x49, 0xe8, 0xd8, 0xb1, 0xa3, 0x56, 0xd0, + 0xa2, 0x14, 0xf6, 0x6d, 0x40, 0x94, 0xc6, 0x92, 0xa1, 0xab, 0x7c, 0x9d, 0x07, 0x92, 0x11, 0x41, + 0x5d, 0x9d, 0x99, 0x5d, 0x48, 0x37, 0x82, 0xba, 0xf2, 0x99, 0x63, 0x40, 0x37, 0x82, 0xba, 0xf2, + 0x99, 0x1e, 0xd0, 0x8d, 0xa0, 0xae, 0x7c, 0xa6, 0x07, 0x74, 0x23, 0xa8, 0x2b, 0x1f, 0xc9, 0xd5, + 0xa8, 0xf3, 0xa6, 0x5e, 0xf5, 0xc8, 0x50, 0x7e, 0xfc, 0x98, 0xf7, 0x2d, 0x80, 0x0f, 0xa7, 0xe9, + 0xba, 0x6e, 0xca, 0x47, 0xb2, 0x0b, 0xc9, 0x4f, 0x24, 0x82, 0xb8, 0xb5, 0xed, 0x08, 0x80, 0xfc, + 0x76, 0x38, 0x88, 0x8c, 0x17, 0x4f, 0x24, 0x0d, 0xe0, 0xca, 0x7f, 0x3a, 0x14, 0x40, 0x15, 0x7d, + 0xa2, 0x13, 0x5e, 0xa6, 0x2d, 0xd9, 0xce, 0xa5, 0xf4, 0xb6, 0xda, 0x0d, 0x78, 0xfe, 0xdc, 0x72, + 0xa0, 0x30, 0xcf, 0x82, 0xfd, 0xa0, 0x47, 0x4f, 0xfc, 0x38, 0x82, 0xd1, 0xb5, 0x1b, 0x20, 0x9b, + 0xe1, 0x0f, 0x6d, 0x65, 0x5c, 0xb2, 0xe1, 0x48, 0x1b, 0x90, 0x6c, 0x67, 0x55, 0xfa, 0xb5, 0x1b, + 0xb0, 0x47, 0x9a, 0x1a, 0xd3, 0x30, 0x5b, 0x65, 0xc2, 0x8e, 0xab, 0xee, 0x31, 0xc5, 0xc6, 0xce, + 0x15, 0xbc, 0xa6, 0xd5, 0x00, 0x7a, 0xb6, 0x3f, 0x72, 0xae, 0x69, 0x8c, 0x9e, 0x87, 0x06, 0xd9, + 0x85, 0x56, 0xbd, 0x63, 0x39, 0xd7, 0x7c, 0x0c, 0xc0, 0xa5, 0x1b, 0x56, 0xbd, 0x2c, 0x90, 0x56, + 0x03, 0x56, 0xfe, 0xd1, 0x34, 0xd9, 0xa8, 0x2e, 0xc0, 0xe7, 0x1f, 0x04, 0x33, 0xff, 0x9d, 0x6f, + 0x02, 0x8c, 0x1f, 0x6c, 0xf2, 0x96, 0xe2, 0x34, 0xc9, 0x73, 0x57, 0x82, 0xc9, 0x79, 0x71, 0x69, + 0xdf, 0xd0, 0xb4, 0xc2, 0x19, 0xb7, 0x77, 0xbe, 0x34, 0xd5, 0xcb, 0xc3, 0xa4, 0x97, 0xc1, 0xbc, + 0x77, 0x01, 0xfe, 0xf2, 0x77, 0x93, 0xfa, 0x87, 0x22, 0x80, 0xde, 0xed, 0xbd, 0x38, 0x83, 0xe1, + 0xb5, 0x7a, 0x80, 0x4c, 0x7c, 0xf6, 0xbe, 0x65, 0x48, 0x39, 0xcf, 0xde, 0x22, 0x33, 0x88, 0x3b, + 0x4f, 0x15, 0x5d, 0xe7, 0x49, 0x87, 0x76, 0x03, 0x5e, 0x33, 0x9f, 0xb8, 0x90, 0xae, 0xb4, 0x14, + 0xed, 0x06, 0xa4, 0xc5, 0x6b, 0xc9, 0x68, 0xa4, 0x0d, 0x88, 0xfa, 0xf5, 0x91, 0xe4, 0xa7, 0x27, + 0xa8, 0xdd, 0x00, 0x1a, 0x3e, 0x79, 0xe9, 0x55, 0x08, 0xe0, 0x35, 0x6d, 0x8f, 0xf0, 0xf9, 0x8b, + 0x38, 0x27, 0xc0, 0x37, 0x72, 0x2c, 0x58, 0x07, 0xd2, 0x1e, 0x85, 0xc8, 0x78, 0x9b, 0x7c, 0x80, + 0x5b, 0xff, 0xb5, 0xdc, 0x50, 0x8d, 0x46, 0xf2, 0xe5, 0x34, 0x71, 0xd2, 0xfb, 0x31, 0x55, 0xea, + 0x8b, 0xa5, 0x25, 0x18, 0x14, 0xc9, 0xfd, 0xc0, 0x45, 0xcc, 0x8e, 0xf8, 0xe4, 0x18, 0xc0, 0xc9, + 0x8b, 0xde, 0x46, 0xdf, 0x79, 0xd3, 0xa4, 0x55, 0xc9, 0xc2, 0x97, 0xdb, 0x78, 0xd1, 0x97, 0x15, + 0x89, 0x65, 0x3c, 0x79, 0xd2, 0xe3, 0x61, 0x6f, 0xb3, 0xf1, 0xa7, 0x48, 0x7b, 0x70, 0xfc, 0x9d, + 0x55, 0x79, 0x98, 0x69, 0x80, 0x2a, 0x2a, 0xa9, 0xc4, 0x95, 0xaf, 0x1e, 0xc8, 0xce, 0xce, 0x86, + 0x2d, 0x5b, 0xa4, 0xa9, 0x59, 0xa9, 0x0c, 0xb5, 0x87, 0xad, 0x50, 0x3d, 0x50, 0x5a, 0x5a, 0x0a, + 0x87, 0x0f, 0x1f, 0xf6, 0x50, 0x95, 0x1e, 0x74, 0xa8, 0xd1, 0x38, 0x8e, 0x23, 0xae, 0x6f, 0x0f, + 0x4c, 0x99, 0x32, 0x85, 0xbd, 0x36, 0xa5, 0x57, 0xa7, 0xfc, 0xe7, 0x8c, 0x35, 0xcd, 0xd1, 0xe6, + 0x34, 0x7a, 0x11, 0xc8, 0x5f, 0xb3, 0x72, 0xbe, 0xf1, 0xe3, 0xc7, 0x0b, 0x3a, 0xd1, 0xce, 0x9e, + 0x3d, 0xcb, 0x49, 0x40, 0xd9, 0x65, 0x84, 0x3b, 0x78, 0xf0, 0xa0, 0xe0, 0xc1, 0xf7, 0xc8, 0x82, + 0xee, 0x0b, 0xf8, 0xbd, 0xe7, 0x3c, 0x74, 0xe8, 0x90, 0x81, 0xef, 0x7a, 0xd9, 0xaf, 0x4e, 0x9d, + 0x3a, 0xb6, 0x17, 0xd2, 0x24, 0x3b, 0x70, 0xe0, 0x40, 0x86, 0xe3, 0x2f, 0xb2, 0xfb, 0xf6, 0xed, + 0x6b, 0xe3, 0x69, 0xd1, 0xa2, 0x05, 0xab, 0x0f, 0x1e, 0x3c, 0xd8, 0x58, 0xbe, 0x7c, 0xb9, 0x78, + 0x63, 0xcf, 0xdf, 0xe4, 0xcf, 0x98, 0x31, 0x83, 0xd1, 0xd1, 0x51, 0x63, 0xd2, 0xa4, 0x49, 0x46, + 0xb5, 0x6a, 0xd5, 0x6c, 0xf2, 0x7e, 0xfe, 0x59, 0xaf, 0xc7, 0xfd, 0x38, 0x91, 0xde, 0xb3, 0x67, + 0x4f, 0x97, 0x72, 0x9e, 0xad, 0x46, 0x0e, 0xd0, 0x14, 0x02, 0x7c, 0x89, 0x6d, 0xd3, 0x44, 0xf8, + 0x76, 0xed, 0xda, 0xb9, 0x70, 0x59, 0x59, 0x59, 0x02, 0x47, 0x3c, 0xfd, 0xfa, 0xf5, 0x63, 0x75, + 0x3e, 0xf5, 0x40, 0x7e, 0xdb, 0x2f, 0x18, 0x15, 0x80, 0x76, 0x03, 0x48, 0xe7, 0xc4, 0x89, 0x13, + 0x45, 0x14, 0xc9, 0x19, 0xfa, 0x51, 0xe1, 0x2f, 0xc6, 0x47, 0x8c, 0x18, 0xc1, 0xea, 0xfc, 0x4f, + 0xe6, 0x21, 0x1c, 0xd5, 0x67, 0xcf, 0x9e, 0xcd, 0xc8, 0xf4, 0x22, 0x9c, 0xea, 0x97, 0x2e, 0x5d, + 0xe2, 0xec, 0x09, 0xb7, 0xbe, 0xc7, 0x00, 0x2a, 0x4b, 0x58, 0x68, 0x2a, 0x01, 0x46, 0x8d, 0x3c, + 0x66, 0xbf, 0xe9, 0xd3, 0xa7, 0x33, 0x7e, 0x4c, 0x3d, 0x00, 0x9c, 0xe0, 0xc1, 0xe0, 0x4d, 0x9b, + 0x36, 0xc1, 0x93, 0x27, 0xe6, 0xa3, 0xb8, 0x85, 0x0b, 0x31, 0xb3, 0x05, 0x0b, 0xcf, 0x4b, 0x66, + 0x15, 0x9d, 0xbf, 0x84, 0xcd, 0x73, 0x10, 0xbb, 0x77, 0xef, 0x2e, 0xa2, 0xcb, 0x49, 0xad, 0x5a, + 0xb5, 0x62, 0x38, 0xf4, 0xc1, 0xc0, 0x37, 0xfa, 0x02, 0xe6, 0xf4, 0x73, 0xe7, 0xce, 0x09, 0x1c, + 0xf1, 0xd0, 0x0f, 0x0f, 0x7a, 0x4e, 0xb6, 0xd1, 0xee, 0xde, 0xbd, 0x6b, 0xab, 0x0b, 0xa6, 0x04, + 0x80, 0xd9, 0xd7, 0x09, 0x18, 0x64, 0x12, 0x9e, 0xc8, 0x98, 0x01, 0x19, 0x47, 0x5d, 0x4e, 0xb3, + 0x4e, 0x30, 0x6d, 0x94, 0x65, 0x71, 0x7a, 0x75, 0x3d, 0x4d, 0xb9, 0xd9, 0xbb, 0x77, 0xaf, 0xf1, + 0xfc, 0xf9, 0x73, 0x59, 0x5c, 0x1b, 0xf6, 0xbd, 0x9c, 0x1e, 0x39, 0x72, 0x24, 0xd0, 0x6a, 0x05, + 0x34, 0xd4, 0x6d, 0xdb, 0xb6, 0x0d, 0xda, 0xb4, 0x69, 0x03, 0x17, 0x2e, 0x5c, 0xd0, 0xe9, 0xf4, + 0x68, 0x65, 0xfd, 0x42, 0x40, 0x23, 0x0b, 0xef, 0x7a, 0xdc, 0x6f, 0xfd, 0xd8, 0x53, 0x4e, 0xf7, + 0xed, 0x81, 0x68, 0xc3, 0x15, 0xbd, 0x36, 0xed, 0x51, 0x28, 0x7a, 0x97, 0xc2, 0x69, 0xcc, 0x34, + 0x20, 0x5c, 0xbc, 0xa2, 0xe7, 0xce, 0xf4, 0x40, 0xf4, 0x31, 0x0d, 0xa7, 0xf1, 0xa5, 0x1f, 0x85, + 0xc2, 0x35, 0x37, 0x7e, 0xdc, 0x2f, 0xfd, 0x21, 0x10, 0xbf, 0x90, 0x86, 0xf3, 0x28, 0xd3, 0x01, + 0xe1, 0xe2, 0x15, 0x39, 0x77, 0xa6, 0x03, 0x22, 0x0f, 0x69, 0x38, 0x85, 0x99, 0x0e, 0x08, 0x17, + 0xaf, 0xc8, 0xb9, 0x33, 0x1d, 0x10, 0x79, 0x48, 0xc3, 0x29, 0xcc, 0x74, 0x40, 0xb8, 0x78, 0x45, + 0xce, 0x1d, 0xea, 0xb1, 0x74, 0xe4, 0xd6, 0x3d, 0x14, 0x52, 0xb6, 0xf4, 0x99, 0x7f, 0x03, 0x7c, + 0xf5, 0xcc, 0x62, 0xa0, 0xd4, 0xdd, 0x21, 0x3d, 0xac, 0x7a, 0x22, 0x88, 0x5e, 0x95, 0xca, 0x25, + 0xab, 0x12, 0x40, 0xc7, 0x1c, 0x00, 0xca, 0x01, 0x8e, 0x5b, 0x89, 0xcd, 0x7d, 0xc0, 0x43, 0x7c, + 0xe2, 0x98, 0x3b, 0x13, 0xe0, 0xec, 0x65, 0x75, 0x88, 0xbc, 0x12, 0x4b, 0x55, 0xdc, 0xce, 0x97, + 0xe9, 0x32, 0x0f, 0x75, 0xc4, 0xde, 0xf7, 0x00, 0xaa, 0x45, 0x90, 0x38, 0x25, 0xeb, 0x2d, 0x2b, + 0x1c, 0x9b, 0x23, 0xe0, 0x7b, 0xb3, 0xd5, 0xc1, 0x6f, 0xf3, 0x3a, 0x40, 0x4e, 0x23, 0x9c, 0x0e, + 0xf4, 0x22, 0x7b, 0x3d, 0x48, 0x43, 0x69, 0x32, 0x18, 0x95, 0x7f, 0xe1, 0x2c, 0xb6, 0x2f, 0xae, + 0x9b, 0x30, 0xff, 0xff, 0x47, 0x31, 0xc0, 0xf7, 0xdf, 0x05, 0xf8, 0xb4, 0x88, 0x63, 0xd2, 0xbb, + 0x8d, 0xc5, 0x11, 0x40, 0x53, 0x66, 0xe5, 0x55, 0xd4, 0x78, 0x48, 0x68, 0x65, 0x29, 0xbe, 0x7c, + 0x15, 0xc7, 0x85, 0xdd, 0x9e, 0x2e, 0x06, 0xf8, 0xb6, 0x34, 0xbd, 0x90, 0xcb, 0xab, 0xa6, 0xa1, + 0x70, 0x5a, 0x2a, 0xb7, 0xb1, 0x3e, 0x09, 0xd3, 0x52, 0x07, 0xba, 0x25, 0x0a, 0x1d, 0xba, 0x3e, + 0x24, 0x92, 0x8f, 0x75, 0x07, 0x24, 0x72, 0xfc, 0x55, 0xa1, 0xc5, 0xa2, 0x03, 0x4a, 0x1f, 0xaa, + 0xc3, 0x19, 0x62, 0xd8, 0x57, 0x2b, 0x40, 0xac, 0x97, 0x8e, 0x2f, 0x3d, 0x6c, 0x7a, 0x2a, 0x4a, + 0x12, 0x21, 0xed, 0x1d, 0x70, 0x13, 0xa7, 0x07, 0xd2, 0xd5, 0x8f, 0xb3, 0xf4, 0x6c, 0x17, 0xcd, + 0x34, 0xc0, 0x26, 0x78, 0xe9, 0xd9, 0x4d, 0xb1, 0x10, 0x6d, 0xff, 0x19, 0x00, 0xb7, 0x4b, 0x9d, + 0x56, 0x53, 0x5f, 0x4f, 0xdb, 0x49, 0x98, 0xd6, 0xe0, 0x7c, 0xeb, 0xd7, 0xee, 0x06, 0xbf, 0xd1, + 0x02, 0xe0, 0x57, 0x38, 0xb9, 0x23, 0xe8, 0x35, 0xbf, 0x5b, 0x83, 0x1a, 0xb3, 0xf3, 0xaf, 0x98, + 0x69, 0x84, 0xb9, 0xfb, 0x9f, 0x5f, 0x76, 0xd3, 0x69, 0xb9, 0xc8, 0xa8, 0xed, 0xb9, 0xad, 0xa8, + 0x31, 0x69, 0x3b, 0x02, 0xea, 0xe3, 0x09, 0xb6, 0x43, 0x73, 0xb7, 0x53, 0x74, 0x03, 0x36, 0xe1, + 0x77, 0xfa, 0x89, 0x10, 0xb2, 0xe6, 0x8b, 0xd7, 0x00, 0x26, 0xa1, 0x4e, 0x55, 0xf0, 0xc9, 0x87, + 0x28, 0x26, 0xdc, 0xca, 0xf6, 0xc2, 0xc0, 0x69, 0x3b, 0x02, 0x64, 0x27, 0xb7, 0xe1, 0xa4, 0xb5, + 0x1f, 0x9b, 0x53, 0x3e, 0x04, 0xba, 0x16, 0xae, 0x48, 0x71, 0xe5, 0xa3, 0x60, 0x59, 0x2c, 0x42, + 0x48, 0x01, 0x3c, 0xc3, 0x4b, 0x5c, 0x5a, 0x35, 0xeb, 0x81, 0xf5, 0x25, 0x04, 0xc6, 0xf5, 0x11, + 0x4e, 0x41, 0x19, 0xde, 0x4b, 0x21, 0x90, 0x62, 0x54, 0xda, 0x8e, 0x00, 0xb9, 0x9d, 0xc3, 0x7b, + 0xcb, 0x35, 0x13, 0xbe, 0x8f, 0x27, 0xc9, 0x12, 0x69, 0xfa, 0xb8, 0x9b, 0x23, 0x18, 0x86, 0x72, + 0x48, 0x9c, 0xc1, 0x27, 0xc9, 0x38, 0x04, 0x9f, 0xfc, 0x88, 0x45, 0x07, 0x90, 0x23, 0xe5, 0xb5, + 0x64, 0x3a, 0x20, 0xcd, 0x3d, 0x1f, 0x8b, 0x0e, 0xc0, 0x79, 0x5f, 0x38, 0x17, 0xd0, 0x1d, 0x89, + 0xad, 0x87, 0xdc, 0xb8, 0xb0, 0x98, 0x2d, 0x07, 0xdd, 0x12, 0x95, 0xf0, 0xe9, 0x68, 0x5c, 0x4a, + 0x2c, 0x4e, 0xc2, 0x14, 0x8c, 0x42, 0xcc, 0xba, 0xfc, 0x70, 0x8f, 0x77, 0x58, 0xa2, 0x7a, 0x1a, + 0x4a, 0x16, 0xf2, 0xbf, 0x8b, 0x2b, 0xa1, 0xbe, 0xed, 0x6d, 0x2b, 0x95, 0x14, 0xc5, 0x7e, 0x97, + 0x4a, 0xf3, 0x96, 0xad, 0x45, 0x05, 0x00, 0x7f, 0x9a, 0x8b, 0xb9, 0x5b, 0xf8, 0xf4, 0x33, 0x59, + 0xa5, 0x6d, 0x53, 0x80, 0x3f, 0xcf, 0x8f, 0x4f, 0xf0, 0xa9, 0x9d, 0xb1, 0x39, 0x02, 0x92, 0x15, + 0xf4, 0xb8, 0xeb, 0x8d, 0xcd, 0x11, 0x10, 0xf7, 0x40, 0x25, 0xcb, 0xbf, 0x4c, 0x07, 0x24, 0x2b, + 0xb2, 0x01, 0xf5, 0x66, 0x3a, 0x20, 0x60, 0xa0, 0x92, 0xc5, 0x96, 0xe9, 0x80, 0x64, 0x45, 0x36, + 0xa0, 0xde, 0xa4, 0x76, 0x00, 0x25, 0x77, 0xe0, 0x4a, 0x9d, 0x01, 0x5d, 0x29, 0x9f, 0x6c, 0x49, + 0xeb, 0x00, 0x4a, 0x30, 0xc4, 0xbc, 0x3b, 0xf6, 0x95, 0xb8, 0x69, 0xd3, 0xa6, 0x95, 0xcf, 0xe8, + 0x06, 0x68, 0x75, 0xd2, 0x3a, 0x80, 0x32, 0xe0, 0x72, 0x72, 0x72, 0x00, 0x13, 0xc9, 0x60, 0xc0, + 0x80, 0x01, 0x01, 0x5c, 0x29, 0x9f, 0x2c, 0x91, 0xdd, 0x07, 0x50, 0x6a, 0xe1, 0xcd, 0x9b, 0x37, + 0x95, 0x51, 0xac, 0x84, 0xf7, 0xfe, 0x98, 0xf0, 0x09, 0x94, 0x8a, 0x9b, 0xa8, 0xd0, 0xf7, 0x14, + 0x71, 0x51, 0x61, 0xc0, 0xe4, 0x39, 0xf6, 0xad, 0x45, 0x4a, 0xe3, 0x25, 0x39, 0xfc, 0xfe, 0x10, + 0x6c, 0xdd, 0xba, 0x15, 0x30, 0x93, 0x0f, 0x30, 0xa3, 0x95, 0xe5, 0xac, 0x79, 0xe9, 0x21, 0x1e, + 0xcc, 0x0e, 0x84, 0xf3, 0xe7, 0xcf, 0xb3, 0xe1, 0x8f, 0xe4, 0xdb, 0xb7, 0x6f, 0x0f, 0x4d, 0x9a, + 0x34, 0xf1, 0x12, 0x61, 0x79, 0x70, 0x94, 0xfb, 0x86, 0x49, 0x78, 0xec, 0x88, 0xa5, 0x6f, 0x39, + 0x12, 0x8c, 0x5f, 0x63, 0x82, 0xa3, 0x47, 0x8f, 0x32, 0xb8, 0x4b, 0x97, 0x2e, 0xd0, 0xab, 0x57, + 0x12, 0x9e, 0x5f, 0x47, 0x91, 0x98, 0xc6, 0x53, 0x84, 0xb1, 0x85, 0x22, 0x27, 0xce, 0x09, 0x3b, + 0xd7, 0xd2, 0x96, 0xed, 0xd2, 0x2a, 0xcf, 0x32, 0x7f, 0xdd, 0xba, 0x75, 0x8d, 0xfe, 0xfd, 0xfb, + 0x1b, 0x1d, 0x3a, 0x74, 0x30, 0x30, 0x41, 0xd0, 0x46, 0xa3, 0x6c, 0x45, 0x67, 0xc1, 0x2c, 0x78, + 0x83, 0xa7, 0x32, 0xcb, 0x7a, 0x9c, 0x30, 0x65, 0xf8, 0x2e, 0x5b, 0xb6, 0xcc, 0x26, 0x4e, 0xd9, + 0xc1, 0x4e, 0xbe, 0x46, 0x8d, 0x1a, 0xb9, 0x70, 0x9c, 0x07, 0x73, 0x55, 0x6d, 0xf2, 0xba, 0x95, + 0x50, 0xa9, 0x9e, 0x61, 0x8d, 0xf1, 0xf4, 0x68, 0x72, 0x3e, 0x51, 0x07, 0xc8, 0xf9, 0xae, 0x04, + 0x53, 0xca, 0xb3, 0x5c, 0x28, 0x3d, 0x74, 0xc3, 0x86, 0x0d, 0xc6, 0xa2, 0x45, 0x8b, 0x5c, 0xa9, + 0xa2, 0x93, 0x27, 0x4f, 0xb6, 0x05, 0xab, 0xa8, 0xa8, 0x48, 0x16, 0x65, 0x30, 0x2d, 0xd7, 0x2d, + 0x77, 0x24, 0xff, 0xc6, 0x98, 0xcc, 0xc8, 0x17, 0x47, 0x27, 0x5f, 0x69, 0x15, 0xf8, 0xcb, 0x97, + 0x2f, 0x0b, 0xf2, 0x8a, 0x15, 0x2b, 0x84, 0x0d, 0x3c, 0x9a, 0x8d, 0xa7, 0x4f, 0x9f, 0x0a, 0x9a, + 0x2e, 0x10, 0x8b, 0x0e, 0xc0, 0xe1, 0xc2, 0xe0, 0x79, 0xbc, 0x7c, 0x4f, 0x73, 0x6e, 0xa9, 0xe1, + 0xa3, 0x47, 0x8f, 0x36, 0x6e, 0xdd, 0xba, 0x25, 0xda, 0x8c, 0x19, 0xd4, 0x06, 0x2e, 0xce, 0x2e, + 0x82, 0x33, 0x66, 0xcc, 0x18, 0x41, 0x73, 0x02, 0x4b, 0x96, 0x2c, 0x11, 0x7c, 0xa4, 0x9b, 0x72, + 0x83, 0xe5, 0x22, 0x77, 0xc0, 0xac, 0x59, 0xb3, 0x64, 0x12, 0xeb, 0x0c, 0xd9, 0x1f, 0xaf, 0x7c, + 0x62, 0x9b, 0x50, 0xc0, 0x4a, 0xd2, 0x4e, 0xc2, 0xe8, 0x70, 0xe0, 0x52, 0xbb, 0x76, 0x6d, 0x58, + 0xbd, 0x7a, 0x35, 0x1b, 0x6b, 0xd1, 0x6f, 0xb8, 0x76, 0xed, 0x1a, 0xe0, 0x50, 0x03, 0x73, 0xe6, + 0xcc, 0x81, 0xdc, 0xdc, 0x5c, 0xa6, 0x07, 0x73, 0xef, 0x61, 0xcd, 0x9a, 0x35, 0xd0, 0xa0, 0x41, + 0x03, 0xf6, 0xed, 0x5d, 0x42, 0xe2, 0x90, 0x02, 0x98, 0x41, 0x2e, 0xec, 0x90, 0x8c, 0xfc, 0xfd, + 0x5e, 0x41, 0x40, 0x60, 0xfb, 0xf6, 0xed, 0xa2, 0x4a, 0xeb, 0xc4, 0x77, 0xee, 0xdc, 0x59, 0xd4, + 0x9d, 0x00, 0x9d, 0xb3, 0xe4, 0x42, 0x79, 0xd2, 0x49, 0x2b, 0x01, 0x3b, 0xaa, 0x4c, 0x6c, 0x41, + 0x87, 0xa0, 0xd6, 0xad, 0x5b, 0x8b, 0xbd, 0x93, 0x60, 0x5c, 0x1f, 0xc0, 0xc0, 0x13, 0x3a, 0xb3, + 0x59, 0x5c, 0x5c, 0x2c, 0x96, 0xa5, 0xc0, 0x20, 0x18, 0x78, 0x32, 0xb5, 0xf9, 0x42, 0x5f, 0x04, + 0xc0, 0x60, 0x0a, 0x79, 0xe2, 0xc1, 0x93, 0xae, 0x51, 0x58, 0x58, 0x68, 0xcc, 0x9c, 0x39, 0x93, + 0x7d, 0xd2, 0x90, 0x70, 0xfc, 0x47, 0xa9, 0xfa, 0xf2, 0xf0, 0x42, 0x76, 0x28, 0x9f, 0x9b, 0xce, + 0x0f, 0x9c, 0x87, 0xce, 0x27, 0xb4, 0x7c, 0x05, 0x95, 0x9d, 0x3b, 0x77, 0xb2, 0x73, 0x11, 0xa7, + 0xd1, 0x96, 0x56, 0x90, 0xc0, 0x0e, 0xb5, 0xf9, 0x51, 0xd6, 0x4a, 0x52, 0x87, 0x20, 0xf9, 0xf3, + 0x8b, 0xf8, 0x91, 0x49, 0x4f, 0x1f, 0xe9, 0x84, 0x4b, 0x0d, 0xc3, 0xbd, 0xdb, 0x36, 0xa4, 0xc8, + 0x8d, 0xee, 0xd4, 0xa9, 0x13, 0xeb, 0x18, 0x2f, 0x25, 0xb4, 0xe4, 0x00, 0xd9, 0xa8, 0x5f, 0xbf, + 0xbe, 0x08, 0x24, 0x97, 0xc7, 0x85, 0x4d, 0x8c, 0x09, 0x13, 0x26, 0x18, 0xb7, 0x6f, 0xe3, 0x27, + 0x63, 0x1d, 0x05, 0x8f, 0x36, 0xa3, 0x6b, 0xd7, 0xae, 0xb6, 0x73, 0x04, 0xad, 0x1b, 0x42, 0x1f, + 0xd0, 0xa0, 0xb2, 0x6e, 0xdd, 0x3a, 0xa3, 0x69, 0xd3, 0xa6, 0x36, 0x9d, 0xb4, 0x13, 0x38, 0x3f, + 0x0f, 0xe1, 0x50, 0x1b, 0xb8, 0x9a, 0xb4, 0x0e, 0xd8, 0xb1, 0x63, 0x87, 0xcd, 0xe9, 0x63, 0xc7, + 0x8e, 0x05, 0x76, 0xaa, 0x3c, 0x31, 0x26, 0xbe, 0x30, 0xc7, 0x5d, 0xc8, 0xaf, 0x1c, 0x39, 0x72, + 0x04, 0xf0, 0x04, 0xe6, 0xc9, 0x46, 0xcb, 0x8e, 0xec, 0xdb, 0xb7, 0xcf, 0x36, 0x56, 0x7b, 0x32, + 0x97, 0x43, 0x42, 0x64, 0x37, 0x62, 0xb8, 0xa2, 0x08, 0xbb, 0x81, 0xa2, 0x8f, 0xa1, 0xe0, 0x21, + 0x0b, 0xcd, 0x9a, 0x35, 0xf3, 0xbd, 0xf1, 0x2a, 0x87, 0xf1, 0x76, 0x35, 0x39, 0xb2, 0x0e, 0x70, + 0x69, 0xce, 0x20, 0x02, 0x45, 0x20, 0x16, 0x97, 0xa1, 0x81, 0x3c, 0x7d, 0x45, 0x99, 0x32, 0x1d, + 0x90, 0xe6, 0x8e, 0xcd, 0x74, 0x40, 0xa6, 0x03, 0xd2, 0x1c, 0x81, 0x34, 0x9b, 0xcf, 0x1c, 0x01, + 0x69, 0xee, 0x80, 0xff, 0x03, 0x75, 0x4b, 0xcb, 0x8b, 0xae, 0x16, 0xbd, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXTextIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xd4, 0x6c, 0xf8, 0x31, 0x00, 0x00, 0x05, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x5b, 0x2c, 0x6c, 0x57, 0x18, 0x9e, 0x61, 0xce, 0x5c, 0x5c, 0xe2, 0x5a, 0xd7, 0x10, 0x97, 0x53, 0xd7, 0xba, 0x3d, 0xd0, 0x3e, 0x20, 0x2a, 0x82, 0x88, 0x22, 0x1e, 0x08, 0xaa, 0x24, 0x08, 0x21, 0x12, 0x11, 0x91, 0xf4, 0xa9, 0x69, 0x1a, 0xf5, 0x26, 0x22, 0xc1, 0x83, 0x04, 0x91, 0xa6, 0x09, 0x5e, 0x2a, 0x8d, 0x34, 0x91, 0xa0, 0xe1, 0xd4, 0x83, 0x07, 0xd2, 0x70, 0x8a, 0xe8, 0x11, 0xe2, 0x1a, 0x8a, 0xc1, 0x30, 0x86, 0x41, 0xbf, 0xb1, 0xcc, 0xea, 0x9c, 0x33, 0xec, 0xd9, 0x33, 0xb3, 0x9c, 0x46, 0xb2, 0x57, 0x64, 0xe7, 0x5f, 0xff, 0xff, 0xfd, 0xf7, 0xb5, 0xd6, 0xac, 0xbd, 0x89, 0xef, 0xee, 0xee, 0x44, 0x2f, 0x79, 0xd8, 0xbc, 0xe4, 0xe0, 0x75, 0xb1, 0x0b, 0x09, 0xfc, 0xdf, 0x1d, 0x14, 0x3a, 0x20, 0x74, 0xc0, 0xca, 0x0a, 0x08, 0x4b, 0xc8, 0xca, 0x02, 0x5a, 0xad, 0x2e, 0x74, 0xc0, 0xea, 0x12, 0x5a, 0x69, 0x40, 0xe8, 0x80, 0x95, 0x05, 0xb4, 0x5a, 0x5d, 0x62, 0xb5, 0x05, 0x9d, 0x01, 0xad, 0xe8, 0x6e, 0x4a, 0xa5, 0x7c, 0xa7, 0x51, 0xdf, 0x9a, 0xba, 0x1a, 0xda, 0x88, 0xc5, 0xaf, 0x65, 0x8a, 0x24, 0x07, 0x67, 0x89, 0x48, 0xcc, 0xc4, 0x35, 0x9b, 0x04, 0x7e, 0x3d, 0xf9, 0x27, 0xff, 0xdd, 0x9f, 0xfc, 0x03, 0xfa, 0x25, 0x38, 0x26, 0xd7, 0xe9, 0x13, 0xfe, 0x78, 0x0e, 0x24, 0x9b, 0x3d, 0xb0, 0xae, 0x51, 0x73, 0xf8, 0x30, 0x16, 0xad, 0x99, 0x89, 0x37, 0xb6, 0x40, 0x39, 0x6c, 0x3a, 0x70, 0x7e, 0x7b, 0x43, 0x2c, 0xba, 0x49, 0xa4, 0x9e, 0xaf, 0xa4, 0xa0, 0x8f, 0xb5, 0xd7, 0xbb, 0xd7, 0x1a, 0xc2, 0xf4, 0x91, 0xca, 0x9c, 0x6d, 0x5f, 0x81, 0xde, 0xbb, 0xd6, 0x1c, 0x69, 0xaf, 0x41, 0x5c, 0xdc, 0xde, 0x12, 0x91, 0xf5, 0x4f, 0x36, 0x1d, 0x50, 0xeb, 0x03, 0xaa, 0x76, 0xf7, 0x7d, 0x1b, 0xfe, 0x05, 0xfe, 0xbe, 0xf7, 0x09, 0xa6, 0xc1, 0xfd, 0xe0, 0x1d, 0x4c, 0x98, 0x95, 0xee, 0xbe, 0x84, 0xa9, 0xbe, 0x7b, 0x48, 0x98, 0x62, 0x2c, 0x26, 0x18, 0x25, 0x70, 0xf7, 0x50, 0x51, 0x99, 0x0d, 0x97, 0x41, 0xb9, 0xf8, 0x41, 0x7a, 0xa9, 0x4f, 0xd8, 0xe2, 0xb8, 0xa9, 0x22, 0x97, 0x3f, 0x0a, 0x32, 0x49, 0xa8, 0xf5, 0x4b, 0x88, 0x86, 0xf8, 0xa8, 0x8a, 0x42, 0x9f, 0x1e, 0xed, 0xd8, 0xa3, 0x30, 0xb3, 0x98, 0x6c, 0x12, 0x08, 0x95, 0xdb, 0x13, 0xaf, 0x81, 0x32, 0x05, 0x87, 0xfb, 0x68, 0x85, 0x23, 0x91, 0x86, 0xc8, 0xed, 0x38, 0x60, 0x66, 0x89, 0xd8, 0x6c, 0xe2, 0x6f, 0x5c, 0xbd, 0x4f, 0x6e, 0xb4, 0x38, 0xda, 0xbf, 0x72, 0x72, 0xe7, 0x70, 0xff, 0xa5, 0xa3, 0xcb, 0x8f, 0xbe, 0xaf, 0x51, 0xfe, 0xaf, 0x5d, 0xbd, 0x38, 0x60, 0x66, 0x89, 0xd8, 0x24, 0xe0, 0x6a, 0x2b, 0xf9, 0xce, 0x2b, 0xd0, 0xa4, 0x63, 0x85, 0xd8, 0xe6, 0x5b, 0xcf, 0x00, 0x93, 0x30, 0xb3, 0x00, 0x6c, 0x96, 0x90, 0x59, 0x2e, 0xd9, 0x82, 0x85, 0x04, 0xd8, 0xd6, 0xd3, 0x7c, 0x6b, 0x2f, 0xbe, 0x03, 0x6c, 0x36, 0x31, 0x2d, 0xdc, 0xd1, 0x8d, 0xf6, 0xaf, 0x4b, 0x15, 0xa6, 0x7f, 0x6b, 0x2e, 0x28, 0x73, 0x55, 0x73, 0xf1, 0xe6, 0x5c, 0x29, 0x16, 0x89, 0xc3, 0xe5, 0xf6, 0xd8, 0xee, 0x94, 0xcf, 0x84, 0x10, 0x33, 0xfc, 0x36, 0xfa, 0xf3, 0xf1, 0x5e, 0xe9, 0xfa, 0x5b, 0x8e, 0x1b, 0x35, 0xee, 0xd2, 0x3f, 0x05, 0x7c, 0x56, 0xe4, 0xe2, 0xc9, 0x24, 0x74, 0x62, 0x84, 0xe5, 0x12, 0xfa, 0x43, 0x75, 0xc2, 0x11, 0x3d, 0xfc, 0x41, 0xfa, 0x46, 0xa5, 0x64, 0x18, 0x3d, 0x4c, 0xb1, 0x4c, 0xa0, 0xc4, 0xd5, 0x2b, 0x4a, 0xe1, 0xc0, 0x11, 0x1f, 0xa4, 0xc0, 0x70, 0x00, 0x2c, 0x10, 0xb1, 0x5c, 0x42, 0x16, 0xb8, 0xb7, 0x5e, 0x85, 0x65, 0x07, 0xac, 0x8f, 0xc6, 0x02, 0x0b, 0x42, 0x02, 0x16, 0x14, 0x8d, 0xa9, 0x8a, 0xd0, 0x01, 0xa6, 0xe5, 0xb4, 0xc0, 0x98, 0xd0, 0x01, 0x0b, 0x8a, 0xc6, 0x54, 0x85, 0x6f, 0x07, 0xb4, 0x5a, 0xed, 0xe4, 0xe4, 0xe4, 0xee, 0xee, 0x2e, 0x53, 0xef, 0xef, 0x19, 0xdb, 0xd8, 0xd8, 0x98, 0x9a, 0x9a, 0x32, 0xfb, 0x6a, 0x03, 0x05, 0x3e, 0x63, 0x74, 0x74, 0x14, 0xde, 0xb2, 0xb2, 0xb2, 0xf8, 0x80, 0x2d, 0xc3, 0xc4, 0xc7, 0xc7, 0xc3, 0xc5, 0xec, 0xec, 0xac, 0x59, 0xea, 0x7c, 0x3b, 0x70, 0x70, 0x70, 0x00, 0xeb, 0xe4, 0xf9, 0x5e, 0xdd, 0xd8, 0x4d, 0x2c, 0x73, 0xc1, 0x2b, 0x81, 0xa5, 0xa5, 0xa5, 0xe5, 0xe5, 0x65, 0x84, 0x7a, 0x76, 0x76, 0xf6, 0xfb, 0xfd, 0x40, 0x9d, 0xb0, 0xa8, 0x0c, 0x83, 0x3f, 0x3d, 0x3d, 0x6d, 0x6c, 0x6c, 0x8c, 0x89, 0x89, 0x71, 0x70, 0x70, 0x88, 0x8c, 0x8c, 0x6c, 0x6e, 0x6e, 0x3e, 0x3f, 0x3f, 0xa7, 0x80, 0xfa, 0xfa, 0xfa, 0xcf, 0xef, 0x47, 0x45, 0x45, 0x05, 0x0a, 0x5c, 0x54, 0x54, 0x84, 0x59, 0x62, 0x62, 0xe2, 0xe0, 0xe0, 0x20, 0x30, 0x2a, 0x95, 0x6a, 0x7a, 0x7a, 0xfa, 0xf2, 0xf2, 0x12, 0xf4, 0xc2, 0xc2, 0x02, 0x71, 0xb1, 0xb3, 0xb3, 0x43, 0xd5, 0xb9, 0x08, 0x93, 0xfd, 0x9a, 0x9b, 0x9b, 0x7b, 0x54, 0xbf, 0xa5, 0xa5, 0x85, 0xea, 0x62, 0x6f, 0xf8, 0xf9, 0xf9, 0x11, 0x98, 0x9b, 0x9b, 0x1b, 0x21, 0x22, 0x22, 0x22, 0x90, 0x03, 0x30, 0x48, 0xd5, 0xde, 0xfe, 0xe1, 0xbb, 0x8b, 0x4c, 0x26, 0x53, 0x2a, 0x95, 0x36, 0xfa, 0x0f, 0x44, 0x25, 0x25, 0x25, 0x00, 0xe4, 0xe4, 0xe4, 0x18, 0xbb, 0xb0, 0xb3, 0xb3, 0xbb, 0xba, 0xba, 0xa2, 0x2e, 0x9e, 0x22, 0x44, 0x4f, 0x09, 0x28, 0x7f, 0x7f, 0x7f, 0x3f, 0x29, 0x29, 0xc9, 0xd3, 0x53, 0x77, 0x89, 0x87, 0xfb, 0x4f, 0xef, 0x47, 0x6c, 0x6c, 0xec, 0xd8, 0xd8, 0x18, 0xc5, 0xe4, 0xe5, 0xe5, 0x41, 0x9a, 0x96, 0x96, 0xb6, 0xb5, 0xb5, 0x05, 0xe6, 0xfc, 0xfc, 0xbc, 0xaf, 0xaf, 0xee, 0x2b, 0x62, 0x53, 0x53, 0x13, 0xc1, 0xa0, 0x81, 0x65, 0x65, 0x65, 0xe0, 0x24, 0x24, 0x24, 0x1c, 0x1f, 0x1f, 0x87, 0x87, 0x87, 0x4b, 0xa5, 0xd2, 0xde, 0xde, 0xde, 0xa3, 0xa3, 0x23, 0x00, 0x3a, 0x3a, 0x3a, 0xc2, 0xc2, 0xc2, 0x24, 0x12, 0xdd, 0xbb, 0x8e, 0x8f, 0x8f, 0x0f, 0x71, 0x51, 0x58, 0x58, 0x48, 0xed, 0x73, 0x10, 0xa6, 0x13, 0x20, 0xca, 0xfd, 0xfd, 0xfd, 0xb0, 0x8e, 0x7d, 0x66, 0x6c, 0x4b, 0xad, 0x56, 0xdb, 0xda, 0xda, 0x42, 0xda, 0xde, 0xde, 0xfe, 0x9b, 0x7e, 0x60, 0xa9, 0x80, 0x13, 0x1d, 0x1d, 0x4d, 0xf1, 0xe8, 0x43, 0x66, 0x66, 0x26, 0x98, 0x5e, 0x5e, 0xba, 0x1b, 0x75, 0x5f, 0x5f, 0x1f, 0x15, 0x11, 0x22, 0x20, 0x20, 0x00, 0x7c, 0x9c, 0x16, 0x1f, 0xf0, 0xb9, 0xa7, 0x0c, 0x5e, 0xf0, 0x56, 0x57, 0x57, 0x6f, 0x6e, 0x74, 0x1f, 0x6b, 0x1b, 0x1a, 0x1a, 0xf0, 0x34, 0x1c, 0x17, 0x17, 0xff, 0xbd, 0x58, 0x22, 0xc9, 0xa1, 0xa1, 0xa1, 0xc0, 0xc0, 0xc0, 0xbd, 0xbd, 0xbd, 0x94, 0x94, 0x94, 0xf2, 0xf2, 0x72, 0x43, 0xa4, 0xc5, 0x34, 0xdf, 0x04, 0xc8, 0xaa, 0xc5, 0x6e, 0x33, 0xf6, 0x84, 0xa6, 0x13, 0x66, 0x4f, 0x4f, 0x4f, 0x54, 0x54, 0x14, 0x05, 0x20, 0xe2, 0x90, 0x90, 0x10, 0x3a, 0x05, 0xd1, 0xd6, 0xd6, 0x76, 0x78, 0x78, 0x28, 0x97, 0xcb, 0xb1, 0x4d, 0x3b, 0x3b, 0x3b, 0xeb, 0xea, 0xea, 0x0c, 0xa5, 0x1c, 0x2e, 0x0c, 0x61, 0x1f, 0xd2, 0xdc, 0x0d, 0xa2, 0xd2, 0x91, 0x91, 0x11, 0x68, 0x22, 0xa6, 0xb5, 0xb5, 0x35, 0x1c, 0x17, 0xe3, 0xe3, 0xe3, 0xb5, 0xb5, 0xb5, 0x58, 0x57, 0x04, 0x10, 0x1a, 0x1a, 0x0a, 0x69, 0x7a, 0x7a, 0x3a, 0xd9, 0xb5, 0x60, 0x2e, 0x2e, 0x2e, 0x56, 0x57, 0x57, 0xb7, 0xb6, 0xb6, 0x52, 0x0b, 0xdd, 0xdd, 0xdd, 0xc0, 0xe0, 0xe4, 0x81, 0xc8, 0xd9, 0xd9, 0x19, 0xe1, 0x0e, 0x0f, 0x0f, 0x53, 0x29, 0x88, 0xb8, 0xb8, 0x38, 0x00, 0xaa, 0xaa, 0xaa, 0xb0, 0xd8, 0xd6, 0xd7, 0xd7, 0xbb, 0xba, 0xba, 0x4a, 0x4b, 0x4b, 0x91, 0xb0, 0x21, 0xc6, 0x98, 0xe6, 0xbb, 0x07, 0x56, 0x56, 0x56, 0x60, 0x1d, 0x03, 0x8e, 0x15, 0x8a, 0x87, 0x2f, 0xb8, 0x88, 0x98, 0x58, 0xc4, 0x8f, 0xb4, 0x58, 0xac, 0xfb, 0x9f, 0x17, 0x44, 0xa9, 0xa9, 0xa9, 0x64, 0x07, 0x63, 0x5a, 0x50, 0x50, 0x40, 0x00, 0xd8, 0xdf, 0x3a, 0x65, 0x91, 0x28, 0x3f, 0x3f, 0x1f, 0x9b, 0xd8, 0xdb, 0xdb, 0x9b, 0x4c, 0x33, 0x32, 0x32, 0x68, 0x4c, 0xc5, 0xc5, 0xc5, 0x84, 0x49, 0x8f, 0x2c, 0x4c, 0x67, 0x66, 0x66, 0x28, 0xe0, 0x51, 0x82, 0x6f, 0x02, 0x50, 0xc6, 0x59, 0xe1, 0xe8, 0xa8, 0xfb, 0xbc, 0x8c, 0x1c, 0x70, 0x68, 0x54, 0x56, 0x56, 0x6e, 0x6f, 0x6f, 0x53, 0xa3, 0x13, 0x13, 0x13, 0x38, 0x9a, 0x48, 0x04, 0x00, 0xe0, 0x9c, 0xa9, 0xa9, 0xa9, 0x21, 0x87, 0x0c, 0x30, 0xf8, 0x09, 0x27, 0xa2, 0xdc, 0xdc, 0x5c, 0x24, 0xe0, 0xe1, 0xe1, 0x81, 0x29, 0x72, 0xce, 0xce, 0xce, 0xa6, 0x16, 0x50, 0xf5, 0xe4, 0xe4, 0x64, 0x02, 0x73, 0x72, 0x72, 0x42, 0x21, 0x06, 0x06, 0x06, 0xa8, 0xf4, 0x29, 0xc2, 0xbc, 0x77, 0x62, 0x58, 0xd9, 0xdc, 0xdc, 0x74, 0x71, 0x71, 0x21, 0x99, 0x10, 0x67, 0x86, 0x4f, 0xfc, 0x9c, 0xe1, 0x4a, 0x13, 0x14, 0x14, 0x64, 0x58, 0x45, 0x43, 0x80, 0x49, 0x1a, 0xdb, 0x0c, 0xcb, 0xc6, 0xdf, 0xdf, 0x9f, 0xb4, 0xd4, 0x24, 0xde, 0xbc, 0x04, 0x4c, 0x9a, 0xfb, 0xf8, 0x00, 0x5e, 0x57, 0x89, 0x8f, 0x1f, 0x16, 0x7f, 0x8f, 0x42, 0x02, 0xfc, 0x6b, 0xf5, 0x3c, 0x48, 0xa1, 0x03, 0xcf, 0x53, 0x57, 0xfe, 0x56, 0x85, 0x0e, 0xf0, 0xaf, 0xd5, 0xf3, 0x20, 0x85, 0x0e, 0x3c, 0x4f, 0x5d, 0xf9, 0x5b, 0x15, 0x3a, 0xc0, 0xbf, 0x56, 0xcf, 0x83, 0xfc, 0x17, 0xab, 0x70, 0xa9, 0x05, 0xf0, 0x5c, 0xd1, 0x77, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXTextPlainIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, + 0x32, 0x32, 0x3a, 0x30, 0x32, 0x3a, 0x34, 0x33, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, + 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, + 0x61, 0x3e, 0x0a, 0x04, 0xa5, 0xd6, 0xff, 0x00, 0x00, 0x05, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x68, + 0x05, 0xed, 0x58, 0x5b, 0x48, 0x23, 0x57, 0x18, 0xce, 0x24, 0x31, 0xf1, 0x52, 0xad, 0x31, 0x78, + 0xdf, 0xd6, 0x2a, 0xb6, 0x52, 0xad, 0x28, 0x8a, 0xe8, 0x82, 0x62, 0xe9, 0x45, 0xa5, 0x45, 0xf0, + 0x82, 0x58, 0x41, 0xb4, 0xed, 0x83, 0x0f, 0xe2, 0x83, 0x6f, 0x8a, 0x20, 0xb8, 0x3e, 0x28, 0x05, + 0x45, 0x7d, 0x12, 0x84, 0x82, 0x8a, 0x88, 0x22, 0x0a, 0xbe, 0x54, 0xb4, 0xc2, 0x3e, 0xe9, 0x82, + 0x37, 0x50, 0x1a, 0x45, 0x2a, 0x5e, 0x8a, 0xdd, 0x20, 0x58, 0x35, 0xb1, 0x8a, 0x49, 0x4c, 0xd2, + 0x2f, 0x7b, 0xe2, 0x38, 0x3b, 0xc6, 0x89, 0x33, 0x39, 0xac, 0x2b, 0x9d, 0xf3, 0x30, 0xfc, 0xe7, + 0xfc, 0xdf, 0x7f, 0xff, 0xcf, 0x3f, 0x93, 0x30, 0x4e, 0xa7, 0x53, 0xf1, 0x94, 0x97, 0xf2, 0x29, + 0x3b, 0xef, 0xf2, 0x5d, 0x0e, 0xe0, 0xb1, 0x2b, 0x28, 0x57, 0x40, 0xae, 0x80, 0x8f, 0x19, 0x90, + 0x5b, 0xc8, 0xc7, 0x04, 0xfa, 0x2c, 0x2e, 0x57, 0xc0, 0xe7, 0x14, 0xfa, 0xa8, 0x40, 0xae, 0x80, + 0x8f, 0x09, 0xf4, 0x59, 0x5c, 0xed, 0xb3, 0x06, 0x97, 0x02, 0xa7, 0x43, 0xf1, 0x7a, 0xc3, 0x61, + 0x32, 0x3a, 0x9d, 0x0e, 0x2f, 0x9f, 0x86, 0x8c, 0x92, 0xf9, 0x30, 0x86, 0x89, 0x49, 0x55, 0x32, + 0x94, 0x6a, 0x4f, 0x27, 0x80, 0xfd, 0x57, 0xf6, 0xdf, 0x5e, 0x58, 0x1e, 0x9e, 0x8b, 0xef, 0x5e, + 0x68, 0xe3, 0x9f, 0xab, 0x1e, 0x8e, 0x17, 0x40, 0xd2, 0xc9, 0x83, 0xf9, 0xc8, 0x4b, 0xe2, 0x79, + 0x1e, 0x98, 0x8d, 0xe2, 0xf0, 0x3c, 0x71, 0xee, 0x96, 0x4e, 0x05, 0x6c, 0x57, 0x6e, 0x9d, 0xfe, + 0x21, 0x4c, 0xa0, 0x8e, 0xc1, 0xc6, 0xf2, 0xaf, 0xf3, 0xe2, 0x1f, 0xb7, 0x97, 0x41, 0x7a, 0xa5, + 0xf6, 0x03, 0x17, 0xe0, 0xf2, 0xd4, 0x79, 0x65, 0x76, 0x1d, 0x5e, 0x8b, 0xa8, 0x96, 0x4b, 0x50, + 0x60, 0xd1, 0x09, 0xc0, 0x6e, 0x71, 0xfb, 0xfa, 0xc5, 0xf7, 0xea, 0xec, 0x9f, 0xfc, 0x60, 0x6f, + 0x73, 0xc6, 0xfe, 0xb2, 0xc7, 0xed, 0x66, 0xf6, 0x8f, 0x7e, 0x9f, 0x17, 0xba, 0x1a, 0xe6, 0xd5, + 0xaf, 0xb6, 0xb5, 0x71, 0x1b, 0x88, 0xeb, 0x1b, 0xbc, 0x80, 0x67, 0x0f, 0x64, 0xd1, 0x69, 0xa1, + 0x6b, 0xab, 0xdb, 0x9c, 0x4a, 0xe3, 0x4a, 0xff, 0x7d, 0x4b, 0xe5, 0x0a, 0xcd, 0xb5, 0xec, 0x37, + 0x78, 0xb2, 0xf5, 0xe5, 0x49, 0x29, 0x80, 0x9b, 0x96, 0x60, 0x5d, 0xf4, 0xe8, 0x93, 0x5a, 0xeb, + 0x0e, 0x8f, 0x0d, 0xd8, 0x23, 0x4c, 0xd4, 0x21, 0x9d, 0x00, 0x74, 0x1f, 0xb9, 0x3d, 0x0b, 0x89, + 0x12, 0xaa, 0x80, 0x3e, 0xc1, 0x6d, 0x2e, 0xf4, 0x99, 0x10, 0x4c, 0x54, 0x00, 0x74, 0xee, 0x40, + 0xd2, 0x37, 0x6a, 0xcb, 0x85, 0x42, 0xa9, 0x52, 0x7c, 0x22, 0x38, 0x1c, 0x9f, 0xa5, 0x29, 0x9f, + 0xff, 0xac, 0xb9, 0xb6, 0x3a, 0x93, 0xbe, 0xa6, 0x63, 0x17, 0xa1, 0xd2, 0x51, 0xa4, 0x0d, 0x56, + 0x64, 0x55, 0x7b, 0x57, 0xa5, 0xd2, 0x28, 0x32, 0x7e, 0xf0, 0x0e, 0x13, 0x55, 0x01, 0x3a, 0x2d, + 0x24, 0xca, 0x24, 0x5d, 0xb0, 0x1c, 0x00, 0xdd, 0x7c, 0x8a, 0xd7, 0xf6, 0xe4, 0x2b, 0x40, 0xf9, + 0x4a, 0x59, 0xce, 0x15, 0x27, 0x7f, 0x39, 0x90, 0x47, 0xd3, 0x6b, 0xd7, 0x93, 0x2c, 0xd3, 0xdf, + 0x0e, 0xa3, 0x81, 0xc1, 0xe0, 0xd4, 0x7d, 0xac, 0xc4, 0x75, 0xa7, 0xbb, 0x18, 0x8a, 0xff, 0x8d, + 0xfe, 0xf9, 0xd2, 0xfe, 0xfb, 0x2f, 0x56, 0x81, 0x2f, 0x6a, 0x7c, 0x4b, 0x7f, 0xdb, 0xac, 0xf9, + 0xf4, 0x4b, 0x3a, 0xdf, 0xa1, 0x24, 0x11, 0x34, 0x5b, 0xc8, 0x68, 0x70, 0x08, 0x78, 0x0f, 0x7b, + 0xe0, 0x1a, 0xff, 0xb8, 0xad, 0x0c, 0x95, 0x52, 0xd0, 0x0c, 0xe0, 0xb3, 0xaf, 0x54, 0xfa, 0x78, + 0x21, 0x85, 0xe0, 0x02, 0x43, 0xc5, 0x6f, 0x56, 0x09, 0xcd, 0x16, 0x62, 0x95, 0xbe, 0x4b, 0x42, + 0x28, 0x61, 0xef, 0xd2, 0x0f, 0xc9, 0xb6, 0xe4, 0x00, 0x24, 0xa7, 0x8e, 0x92, 0xa0, 0x5c, 0x01, + 0x4a, 0x89, 0x94, 0xac, 0xe6, 0xff, 0x5d, 0x81, 0xeb, 0x37, 0xcb, 0xe1, 0x90, 0xfe, 0x6e, 0x5a, + 0x5d, 0x5d, 0x6d, 0x6f, 0x6f, 0x3f, 0x3a, 0x3a, 0x92, 0x5c, 0x01, 0x05, 0x3e, 0x25, 0x24, 0xac, + 0x9d, 0x9d, 0x9d, 0xb0, 0xb0, 0x30, 0x62, 0x35, 0x34, 0x34, 0x54, 0x82, 0x06, 0x22, 0x52, 0x55, + 0x55, 0x05, 0x25, 0xc3, 0xc3, 0xc3, 0x92, 0x35, 0x48, 0x6c, 0xa1, 0xe0, 0xe0, 0xe0, 0xa4, 0xa4, + 0xa4, 0x98, 0x98, 0x18, 0x98, 0xbf, 0xb8, 0xb8, 0x90, 0x9c, 0x3f, 0xe8, 0x51, 0xa9, 0x54, 0x91, + 0x91, 0x91, 0x92, 0x35, 0x48, 0xac, 0x00, 0x49, 0xd8, 0xca, 0xca, 0x0a, 0x0c, 0xfb, 0xf9, 0xf9, + 0x09, 0xe7, 0x0f, 0x3d, 0x26, 0x00, 0xb0, 0x5a, 0xad, 0x02, 0x5c, 0xaf, 0x2c, 0x0f, 0x15, 0x68, + 0x6d, 0x6d, 0xcd, 0xce, 0xce, 0x2e, 0x28, 0x28, 0x58, 0x5a, 0x5a, 0xca, 0xc9, 0xc9, 0x09, 0x0c, + 0x0c, 0x4c, 0x4d, 0x4d, 0xed, 0xea, 0xea, 0x12, 0xd5, 0xeb, 0x5b, 0x5b, 0x5b, 0xb5, 0xb5, 0xb5, + 0x59, 0x59, 0x59, 0xc8, 0x31, 0x34, 0xa4, 0xa7, 0xa7, 0x4f, 0x4f, 0x4f, 0x73, 0xd3, 0x3c, 0x37, + 0x37, 0x97, 0x9f, 0x9f, 0x0f, 0x43, 0xb9, 0xb9, 0xb9, 0xbd, 0xbd, 0xbd, 0x5c, 0xd6, 0xe9, 0xe9, + 0x69, 0x49, 0x49, 0x09, 0x58, 0xf5, 0xf5, 0xf5, 0x93, 0x93, 0x93, 0xb0, 0x1e, 0x14, 0x14, 0x54, + 0x54, 0x54, 0x64, 0x34, 0x1a, 0xb9, 0x30, 0x37, 0x7d, 0x37, 0xc4, 0xf8, 0xf8, 0x78, 0xc2, 0x83, + 0x18, 0x57, 0xa0, 0xba, 0xba, 0x9a, 0x07, 0x16, 0xa8, 0x00, 0x22, 0x87, 0x2c, 0xc3, 0x30, 0x88, + 0x21, 0x22, 0x22, 0x02, 0xb4, 0x56, 0xab, 0xdd, 0xdf, 0xdf, 0x67, 0x35, 0x34, 0x37, 0x37, 0xb3, + 0xca, 0x11, 0x2a, 0x7b, 0x0e, 0x82, 0xa8, 0x05, 0x17, 0xc1, 0xab, 0xd5, 0xb7, 0xbf, 0x58, 0x2a, + 0x2b, 0x2b, 0xb9, 0x30, 0x42, 0x7b, 0x68, 0xa1, 0xdd, 0xdd, 0x5d, 0xd2, 0x94, 0x3a, 0x9d, 0x6e, + 0x60, 0x60, 0x60, 0x63, 0x63, 0xa3, 0xb4, 0xb4, 0x94, 0x18, 0x9b, 0x9f, 0x9f, 0xe7, 0xaa, 0x10, + 0x08, 0x60, 0x6a, 0x6a, 0xaa, 0xbb, 0xbb, 0xfb, 0xf0, 0xf0, 0x10, 0x78, 0x8b, 0xc5, 0x42, 0x62, + 0xe0, 0x5e, 0xd6, 0xf3, 0xf3, 0xf3, 0x99, 0x99, 0x19, 0xa2, 0x99, 0x17, 0x00, 0x44, 0x46, 0x46, + 0x46, 0x88, 0xc5, 0xc2, 0xc2, 0x42, 0x58, 0xa9, 0xab, 0xab, 0xc3, 0x16, 0x09, 0xe5, 0x5a, 0x27, + 0xb4, 0x87, 0x00, 0xc0, 0x48, 0x48, 0x48, 0x80, 0x00, 0x2a, 0x48, 0x40, 0xc7, 0xc7, 0xc7, 0xb8, + 0x6a, 0x38, 0x69, 0x6a, 0x6a, 0xe2, 0xaa, 0x10, 0x08, 0x00, 0x30, 0x44, 0xdb, 0xd1, 0xd1, 0xd1, + 0xd8, 0xd8, 0xd8, 0xd6, 0xd6, 0x96, 0x96, 0x96, 0x06, 0xf1, 0xce, 0xce, 0x4e, 0xae, 0x38, 0x68, + 0x28, 0xc4, 0xf9, 0xdd, 0x00, 0xd6, 0xd7, 0xd7, 0x71, 0x8e, 0xb5, 0xbc, 0xbc, 0x0c, 0x18, 0xa6, + 0x2d, 0xd9, 0x9a, 0x4c, 0x26, 0x9e, 0x86, 0xdb, 0x02, 0x11, 0x04, 0xf7, 0x89, 0x1e, 0x25, 0x5b, + 0xbd, 0x5e, 0x9f, 0x92, 0x92, 0x82, 0x52, 0x20, 0xa3, 0x5c, 0xc0, 0x7d, 0xb4, 0xcd, 0x66, 0x2b, + 0x2e, 0x2e, 0x9e, 0x9d, 0x9d, 0x05, 0x40, 0xa3, 0xd1, 0xa0, 0x91, 0x50, 0x04, 0xd0, 0x76, 0xbb, + 0xfd, 0x3e, 0x91, 0xfb, 0xce, 0x33, 0x33, 0x33, 0xc1, 0x8a, 0x8b, 0x8b, 0x23, 0x80, 0xab, 0xab, + 0xab, 0x90, 0x90, 0x10, 0x2e, 0xd8, 0xc3, 0x25, 0x66, 0xd9, 0x0b, 0x0b, 0x0b, 0x84, 0xc6, 0xad, + 0xda, 0xdc, 0xdc, 0x04, 0xcd, 0x5e, 0x0f, 0x16, 0xe3, 0x91, 0x40, 0x03, 0x10, 0xef, 0x27, 0x26, + 0x26, 0x90, 0xb3, 0xcb, 0xcb, 0xcb, 0xb2, 0xb2, 0x32, 0x8f, 0x48, 0xaf, 0x87, 0x08, 0x1e, 0x18, + 0xf2, 0xf4, 0x08, 0x16, 0x0a, 0x60, 0x74, 0x74, 0x74, 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0xaf, 0xa1, + 0xa1, 0x01, 0xef, 0x5c, 0xc8, 0xa3, 0x23, 0x59, 0x2d, 0x38, 0x61, 0x33, 0xca, 0xa5, 0x01, 0xc0, + 0x08, 0xc2, 0x33, 0x3c, 0x3c, 0x1c, 0x2d, 0xee, 0xef, 0xef, 0x8f, 0x41, 0x79, 0x72, 0x72, 0x82, + 0x13, 0x54, 0x9f, 0x15, 0x07, 0x0d, 0x29, 0x32, 0xd9, 0xb8, 0x34, 0x01, 0xb0, 0x48, 0x42, 0xb0, + 0x03, 0x90, 0x3d, 0x67, 0xf5, 0x08, 0xdd, 0x81, 0x5b, 0xd0, 0x1b, 0xaa, 0xa6, 0xa6, 0x06, 0xf2, + 0x58, 0x66, 0xb3, 0x39, 0x36, 0x36, 0x96, 0xc7, 0xc5, 0x16, 0x93, 0x97, 0x00, 0x06, 0x07, 0x07, + 0x09, 0x37, 0x23, 0x23, 0xa3, 0xa2, 0xa2, 0x82, 0x05, 0xe3, 0x8d, 0x31, 0x34, 0x34, 0x04, 0x0c, + 0x2a, 0x13, 0x10, 0x10, 0xc0, 0xd3, 0x80, 0x66, 0xeb, 0xef, 0xef, 0x07, 0xf7, 0xe0, 0xe0, 0x00, + 0xf3, 0x83, 0x70, 0x13, 0x13, 0x13, 0xcf, 0xce, 0xce, 0xa2, 0xa3, 0xa3, 0xc9, 0x16, 0xd3, 0x05, + 0xd6, 0x89, 0x15, 0xf2, 0x14, 0xaa, 0x40, 0x4b, 0x4b, 0x4b, 0x5e, 0x5e, 0x5e, 0x54, 0x54, 0x14, + 0x66, 0x62, 0x4f, 0x4f, 0x0f, 0xeb, 0x16, 0x74, 0x91, 0x3b, 0xcd, 0xf3, 0x80, 0x2d, 0x34, 0x06, + 0x2e, 0x8a, 0x86, 0xc9, 0xb3, 0xb6, 0xb6, 0x06, 0x5f, 0xd1, 0xc1, 0x7d, 0x7d, 0x7d, 0xe8, 0x5d, + 0x48, 0x91, 0x4a, 0x42, 0x50, 0xa9, 0xe4, 0x9b, 0x66, 0xc5, 0xc1, 0x45, 0x30, 0x44, 0x39, 0x86, + 0x2f, 0xd2, 0xcf, 0xdd, 0xc2, 0xef, 0xb7, 0xec, 0x72, 0xa3, 0x61, 0x69, 0x32, 0x85, 0x16, 0x17, + 0x17, 0xd9, 0x13, 0x09, 0x04, 0x1a, 0xcc, 0x60, 0x30, 0xdc, 0x9d, 0x1b, 0x12, 0x54, 0x09, 0x88, + 0xf0, 0xa7, 0x10, 0xec, 0xe1, 0xe5, 0x87, 0x27, 0xa2, 0x1c, 0x1f, 0x1f, 0xdf, 0xde, 0xde, 0x2e, + 0x2f, 0x2f, 0xc7, 0x0b, 0xe5, 0xad, 0xa0, 0x1f, 0xb6, 0x41, 0x8e, 0x93, 0x93, 0x93, 0x1f, 0x86, + 0xf5, 0x01, 0xc5, 0x0b, 0x0e, 0x6f, 0x2e, 0x9e, 0x32, 0x74, 0x0e, 0x0f, 0xf3, 0x5e, 0x6d, 0xf9, + 0x15, 0xc0, 0x47, 0x08, 0xbe, 0x2e, 0xf1, 0x9a, 0x24, 0x61, 0xa0, 0x71, 0x31, 0xd1, 0x79, 0x21, + 0xbd, 0x57, 0x5b, 0xf9, 0x7f, 0xa1, 0xc7, 0x2e, 0x07, 0x7f, 0x96, 0x3d, 0xb6, 0x3f, 0xa2, 0xed, + 0xcb, 0x01, 0x88, 0x4e, 0x19, 0x65, 0x01, 0xb9, 0x02, 0x94, 0x13, 0x2a, 0x5a, 0x9d, 0x5c, 0x01, + 0xd1, 0x29, 0xa3, 0x2c, 0xf0, 0x1f, 0x15, 0xdc, 0xd7, 0x70, 0xbb, 0x15, 0xe8, 0x4c, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXVideoIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x37, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xcc, 0x4b, 0x33, 0xb9, 0x00, 0x00, 0x09, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x7b, 0x4c, 0x54, 0xd9, 0x19, 0x9f, 0x99, 0x7b, 0x67, 0x18, 0x9e, 0x83, 0xc0, 0xcc, 0x30, 0x83, 0x2c, 0xa2, 0x80, 0x3c, 0x15, 0x96, 0xe2, 0xae, 0x8f, 0xd4, 0xf5, 0x11, 0x13, 0xb7, 0xb6, 0x31, 0xa6, 0xd5, 0x08, 0x6a, 0xb4, 0xba, 0x3e, 0x6a, 0x1a, 0x13, 0x63, 0xac, 0x35, 0x21, 0x9a, 0xfe, 0x63, 0x62, 0x8d, 0xb1, 0x35, 0x46, 0x8d, 0xd1, 0xac, 0xa6, 0x35, 0xd1, 0xa6, 0x66, 0xdd, 0x9a, 0xad, 0x31, 0x0d, 0x6e, 0xa3, 0x8d, 0x6f, 0x08, 0x6f, 0x99, 0x05, 0x11, 0x81, 0x85, 0x79, 0xc0, 0xbc, 0x98, 0xc7, 0xbd, 0x33, 0xf7, 0x4e, 0x7f, 0x77, 0xce, 0xee, 0x75, 0x32, 0x28, 0x8f, 0x19, 0x08, 0x6b, 0x32, 0x07, 0xb8, 0x7c, 0xe7, 0x9c, 0xef, 0x3b, 0xe7, 0xfb, 0x7d, 0xdf, 0x77, 0xce, 0x77, 0xee, 0xb9, 0xd2, 0x40, 0x20, 0x20, 0xf9, 0x90, 0x8b, 0xec, 0x43, 0x56, 0x5e, 0xd0, 0x3d, 0x06, 0x60, 0xa6, 0x3d, 0x18, 0xf3, 0x40, 0xcc, 0x03, 0x51, 0x5a, 0x60, 0x86, 0x43, 0xe8, 0xd9, 0xb3, 0x67, 0x83, 0x83, 0x83, 0xd1, 0x60, 0x98, 0x19, 0x00, 0x0c, 0xc3, 0xb4, 0xb6, 0x77, 0x9d, 0xf9, 0xeb, 0xc5, 0x23, 0x7f, 0xfc, 0xc3, 0xed, 0xdb, 0x5f, 0x45, 0x03, 0x80, 0x8e, 0x46, 0x78, 0xb2, 0xb2, 0x83, 0x83, 0x16, 0xe3, 0x90, 0xcd, 0x60, 0xe8, 0xf9, 0xde, 0x62, 0x4d, 0x4e, 0x4e, 0xee, 0x1d, 0xb4, 0xf5, 0xf5, 0x7e, 0xff, 0xe2, 0xc5, 0x8b, 0xc9, 0x8e, 0x13, 0xca, 0x1f, 0x15, 0x80, 0xbb, 0x77, 0xef, 0x32, 0x5e, 0x6f, 0x5c, 0x42, 0xb2, 0xcb, 0xed, 0x95, 0x4a, 0xa5, 0x18, 0x97, 0xa6, 0x69, 0xa5, 0x52, 0x91, 0x9c, 0x94, 0xa4, 0xce, 0x48, 0xcb, 0xd4, 0x6a, 0x92, 0x92, 0x92, 0xd0, 0xd8, 0xdf, 0x6f, 0x6c, 0x6c, 0xed, 0xec, 0x37, 0x59, 0x19, 0x2f, 0x23, 0x95, 0xd1, 0x1f, 0x65, 0xeb, 0xca, 0xb4, 0x6a, 0x9e, 0x93, 0x98, 0x4c, 0x96, 0x21, 0xab, 0xfd, 0xf1, 0xe3, 0xc7, 0x0e, 0x87, 0x23, 0x25, 0x25, 0x25, 0x54, 0xad, 0x89, 0xd3, 0x51, 0x01, 0x18, 0x1a, 0x1a, 0xea, 0xea, 0xfc, 0x4e, 0x9d, 0x53, 0x2e, 0x97, 0xcb, 0xe7, 0xcc, 0xce, 0xc0, 0xa1, 0x84, 0x65, 0x39, 0x37, 0xe3, 0xb3, 0xd8, 0x6c, 0xcd, 0x86, 0x01, 0x9b, 0xfd, 0x89, 0x67, 0xc4, 0xe9, 0xb0, 0x19, 0xfb, 0x8c, 0xb6, 0xb4, 0x0c, 0x5d, 0x41, 0x5e, 0xee, 0xec, 0xac, 0xcc, 0xa4, 0xe4, 0x44, 0xc0, 0x18, 0x30, 0x5a, 0xad, 0x56, 0x67, 0xf7, 0xeb, 0x3e, 0xa9, 0x4c, 0x3e, 0x38, 0x68, 0xec, 0xea, 0xea, 0xaa, 0xa8, 0xa8, 0x98, 0xb8, 0xd2, 0xa1, 0x9c, 0x51, 0x01, 0x50, 0x05, 0x8b, 0x5e, 0xa7, 0xcb, 0xc9, 0xd6, 0xe6, 0xe7, 0xea, 0x29, 0x19, 0xdc, 0x00, 0x3f, 0x08, 0x0f, 0x9e, 0x97, 0x70, 0x5c, 0x80, 0xf1, 0xb1, 0x76, 0xa7, 0xbb, 0x7f, 0xc0, 0xdc, 0xfa, 0xb2, 0xeb, 0xf5, 0xab, 0xae, 0xde, 0xbe, 0x3e, 0xf4, 0x26, 0x26, 0x26, 0x3b, 0x9c, 0xae, 0xef, 0xda, 0x5b, 0xf4, 0x9a, 0xa4, 0x3f, 0x1d, 0xaf, 0x8d, 0x53, 0x50, 0x5a, 0xad, 0x36, 0x54, 0xa7, 0x49, 0xd1, 0x51, 0x01, 0xa8, 0xab, 0xab, 0x63, 0x3d, 0x9e, 0xf8, 0xb4, 0x5c, 0x4d, 0xba, 0xca, 0x6e, 0x77, 0xd0, 0x32, 0x4a, 0x4a, 0x41, 0x7b, 0x19, 0x0d, 0x24, 0x40, 0x23, 0x91, 0xc4, 0xc9, 0xa9, 0xcc, 0x8c, 0x94, 0x2c, 0xad, 0x6a, 0x51, 0x79, 0x01, 0xc3, 0xfa, 0x7b, 0x7a, 0x07, 0x9a, 0x5a, 0x0d, 0xf7, 0x1f, 0xd4, 0x1b, 0xda, 0x1b, 0xaa, 0x7f, 0xfd, 0xf9, 0x6f, 0xb7, 0x57, 0xc3, 0x75, 0x93, 0x52, 0x77, 0x34, 0x73, 0x54, 0x00, 0x1a, 0x1a, 0x1a, 0x1c, 0x56, 0x2b, 0x9d, 0xf2, 0x51, 0x6e, 0x4e, 0xae, 0xd5, 0xee, 0xa2, 0x64, 0x28, 0xd0, 0x5f, 0x22, 0x10, 0xf8, 0x93, 0x0a, 0x0f, 0x50, 0x14, 0x25, 0x21, 0xf4, 0x6c, 0x9d, 0x7a, 0xb6, 0x5e, 0xf3, 0xf3, 0x25, 0x95, 0x4f, 0xea, 0x5f, 0xb6, 0xb7, 0xb5, 0x3e, 0x7b, 0xd1, 0xb4, 0xe4, 0xd3, 0xca, 0xd1, 0x3a, 0x4d, 0xaa, 0x25, 0x2a, 0x00, 0x1e, 0x8f, 0x47, 0x4a, 0xd1, 0x0c, 0xcb, 0xf5, 0xf4, 0x9b, 0x38, 0xde, 0x27, 0xa7, 0x69, 0xb9, 0x9c, 0xa2, 0x69, 0x4a, 0x4e, 0x09, 0x4f, 0xc1, 0x17, 0x14, 0x01, 0x22, 0x38, 0xe6, 0x47, 0x54, 0x52, 0x84, 0xd8, 0xa7, 0x1f, 0x17, 0x16, 0xe4, 0xcd, 0xfe, 0xe6, 0xde, 0xa3, 0xaf, 0xbf, 0xf9, 0x0f, 0xcd, 0x3b, 0xf7, 0xed, 0xdb, 0x97, 0x95, 0x95, 0x35, 0x29, 0xbd, 0x45, 0xe6, 0xa8, 0x00, 0x64, 0x66, 0x66, 0x42, 0x43, 0x9b, 0xd5, 0xf2, 0x8f, 0x7f, 0xfe, 0xab, 0xb4, 0xa4, 0x38, 0x0b, 0xb1, 0x92, 0x9c, 0xa8, 0x4a, 0x49, 0x50, 0x25, 0x27, 0xc4, 0xc7, 0x2b, 0x04, 0x00, 0xf8, 0x09, 0x16, 0xc1, 0x1d, 0x32, 0xf8, 0x41, 0x08, 0x2c, 0x50, 0x41, 0x5a, 0xb6, 0xf8, 0x93, 0x8a, 0x53, 0xa7, 0xeb, 0x92, 0x65, 0xce, 0xa6, 0xa6, 0xa6, 0x99, 0x01, 0x70, 0xf2, 0xe4, 0x49, 0xa4, 0xa4, 0x53, 0xa7, 0xff, 0xd2, 0xd3, 0xd1, 0xa8, 0xd5, 0xaa, 0x0b, 0x8b, 0xe7, 0x27, 0x26, 0xd0, 0x71, 0x71, 0x4a, 0xa8, 0xe8, 0xf7, 0x07, 0xa4, 0xd2, 0x80, 0xa0, 0x2e, 0x60, 0xc8, 0xa4, 0x3c, 0x4f, 0xd0, 0x70, 0xa8, 0x52, 0x94, 0x54, 0xc6, 0x07, 0x38, 0xce, 0xef, 0xf3, 0xb1, 0x0a, 0x05, 0x9d, 0xae, 0x4a, 0x17, 0x82, 0x2c, 0xd2, 0x12, 0x95, 0x07, 0x0a, 0x0a, 0x0a, 0x30, 0x6f, 0xda, 0xac, 0x59, 0x99, 0x5a, 0xb5, 0x32, 0x4e, 0x9e, 0xa8, 0xa4, 0x52, 0x92, 0xe2, 0x3b, 0x0d, 0x2f, 0x47, 0x1c, 0xc3, 0x89, 0x49, 0x49, 0x64, 0x3f, 0x12, 0x00, 0x08, 0x19, 0x22, 0xe8, 0x08, 0x81, 0x90, 0xb8, 0xdd, 0x6e, 0x8d, 0x36, 0xb3, 0xb0, 0xa8, 0x94, 0xe3, 0x78, 0xaf, 0xcb, 0x5b, 0xf7, 0xfc, 0xf1, 0x2f, 0xd6, 0xfd, 0x52, 0xe8, 0x88, 0xa8, 0x44, 0x05, 0x80, 0xcc, 0x18, 0x90, 0x04, 0x54, 0xaa, 0xd4, 0x00, 0xcf, 0xf9, 0x18, 0x6c, 0x9b, 0x72, 0x1f, 0xeb, 0x5b, 0xbe, 0x7c, 0x79, 0x5a, 0x5a, 0x3a, 0x72, 0x1c, 0xb4, 0x86, 0xe6, 0x34, 0x25, 0xc3, 0x53, 0x22, 0x81, 0x43, 0x64, 0xf1, 0x4a, 0x65, 0x6f, 0x7f, 0x7f, 0x73, 0x6b, 0x1b, 0x03, 0xfb, 0xe3, 0x97, 0xf5, 0x19, 0x4d, 0xc6, 0x68, 0x5e, 0x6b, 0xa7, 0x00, 0x00, 0x76, 0xcf, 0x0c, 0xb5, 0x9a, 0xe7, 0x39, 0xb7, 0x87, 0x89, 0x53, 0xca, 0x19, 0x96, 0x0d, 0x48, 0xa9, 0xcb, 0x97, 0x2e, 0x74, 0xb4, 0x37, 0x05, 0xfd, 0x20, 0xc5, 0x82, 0x86, 0xa2, 0x00, 0x33, 0x3c, 0x6c, 0x59, 0xf7, 0xab, 0xdf, 0xfc, 0x6c, 0xd1, 0x12, 0x96, 0xf5, 0xb3, 0x00, 0xcb, 0xf8, 0x59, 0x24, 0x0a, 0xbb, 0x23, 0x1a, 0x00, 0x53, 0x70, 0x98, 0xc3, 0x8e, 0xa3, 0xd5, 0x68, 0xfc, 0x7e, 0x0e, 0xeb, 0xc1, 0xeb, 0x15, 0xdc, 0xe0, 0x74, 0xba, 0xe5, 0x0a, 0x79, 0x4d, 0xcd, 0xe6, 0x3d, 0xbb, 0xbf, 0x58, 0xb7, 0xee, 0x73, 0x43, 0xc7, 0x4b, 0xb3, 0xd9, 0x58, 0x55, 0x55, 0x69, 0x36, 0x19, 0x5f, 0xf7, 0xf4, 0xb0, 0x1c, 0x0f, 0x3c, 0x5e, 0x2f, 0xcb, 0xb0, 0x3e, 0x9e, 0x27, 0x77, 0x0a, 0x91, 0x5f, 0x2c, 0x4c, 0x01, 0x00, 0xb9, 0x9c, 0xd6, 0x68, 0xb5, 0x7e, 0xbf, 0x1f, 0x1e, 0xf0, 0x7a, 0xa0, 0x16, 0xeb, 0x74, 0x8e, 0x28, 0xe4, 0xf2, 0xfc, 0xfc, 0xfc, 0xd2, 0x92, 0x12, 0xbd, 0x5e, 0xf7, 0xaa, 0xfb, 0xd5, 0x67, 0x9f, 0x2d, 0x37, 0x18, 0x0c, 0x26, 0x8b, 0xd9, 0xef, 0xe7, 0x3d, 0x6e, 0xaf, 0x00, 0x80, 0x65, 0xbd, 0x8c, 0x8f, 0xf7, 0x73, 0x11, 0x45, 0xfe, 0x5b, 0xa1, 0x29, 0x08, 0x21, 0x8a, 0xa6, 0x34, 0x6a, 0x35, 0xc7, 0x75, 0xc2, 0x01, 0x0c, 0x93, 0x80, 0xf0, 0xc0, 0xd9, 0xce, 0x64, 0xb6, 0x7c, 0xfb, 0x6d, 0x9d, 0x5e, 0x9f, 0xdd, 0xd2, 0xda, 0x1c, 0x17, 0x17, 0x67, 0xe8, 0x30, 0x48, 0xa4, 0x92, 0x8a, 0xf2, 0x72, 0x97, 0xdb, 0xed, 0x72, 0x7b, 0x58, 0x9f, 0x1f, 0xda, 0xc3, 0x09, 0x7e, 0xde, 0xff, 0x56, 0x97, 0x88, 0xa8, 0x29, 0x00, 0x40, 0x53, 0x74, 0x7a, 0x3a, 0xb6, 0xc2, 0x60, 0xfa, 0x52, 0x20, 0x97, 0xd1, 0xd0, 0xaf, 0xec, 0xe3, 0xa5, 0x76, 0xbb, 0xb5, 0xcf, 0xcc, 0xa4, 0xeb, 0x8a, 0x0e, 0xd7, 0xfe, 0x19, 0x51, 0x8e, 0x83, 0x2a, 0x96, 0xad, 0x5a, 0xa3, 0x19, 0x71, 0xb9, 0x20, 0x82, 0xbd, 0x15, 0x8d, 0x3c, 0xcf, 0xc3, 0x75, 0x08, 0xbf, 0x88, 0x94, 0x17, 0x84, 0xa6, 0x00, 0x00, 0x96, 0xaf, 0x5e, 0xa7, 0x4d, 0x49, 0x55, 0x69, 0x35, 0x50, 0x2f, 0xdd, 0xed, 0x1c, 0x52, 0xa9, 0x52, 0x32, 0x34, 0x6a, 0xa4, 0x01, 0x21, 0x7f, 0x61, 0xdf, 0xa7, 0x29, 0x09, 0x94, 0x0d, 0xf0, 0xd8, 0x8b, 0xc0, 0x3c, 0x64, 0x36, 0xa5, 0xce, 0x52, 0xcd, 0x52, 0xa5, 0x3a, 0xdd, 0x01, 0x5a, 0xae, 0x28, 0x2a, 0x2a, 0x8a, 0xf8, 0x2c, 0x1d, 0x2d, 0x00, 0x28, 0x85, 0xbd, 0x25, 0x5e, 0x19, 0xff, 0xdf, 0xff, 0x3d, 0xf1, 0x30, 0xfc, 0x90, 0xc3, 0x23, 0xa1, 0xdd, 0x43, 0x76, 0x37, 0x6d, 0xb4, 0x8f, 0xb0, 0x32, 0xf4, 0x06, 0x01, 0x08, 0x89, 0x80, 0xc7, 0x5e, 0x8b, 0xe5, 0x8a, 0x7f, 0x52, 0xc9, 0x88, 0xc3, 0x6e, 0x32, 0xdb, 0xe8, 0x04, 0x4b, 0x7b, 0x5b, 0xdb, 0xc1, 0xdf, 0x7f, 0xb1, 0x64, 0xd1, 0x02, 0x8d, 0x46, 0x13, 0xb1, 0x07, 0x04, 0x3f, 0x46, 0x26, 0xec, 0xf3, 0xf9, 0x90, 0x92, 0x46, 0x46, 0x46, 0xcc, 0x66, 0x4b, 0x43, 0x63, 0xd3, 0xc9, 0x93, 0xa7, 0xcc, 0x96, 0x21, 0xe4, 0x54, 0xa4, 0x58, 0xc1, 0xee, 0x38, 0x2d, 0x08, 0x23, 0x23, 0x0f, 0x08, 0xc3, 0x07, 0xa9, 0xe0, 0x3f, 0xa1, 0xc6, 0x23, 0x85, 0xc1, 0x1b, 0xc5, 0x85, 0x05, 0x7f, 0xff, 0xdb, 0x97, 0x19, 0x19, 0x6a, 0x9c, 0x49, 0x11, 0x60, 0x42, 0xcf, 0xe4, 0x4b, 0x84, 0x62, 0x64, 0x22, 0x44, 0x30, 0xc7, 0x71, 0x0a, 0x85, 0x1c, 0x47, 0xb3, 0xdf, 0xed, 0xdd, 0x69, 0x32, 0x99, 0x84, 0xa0, 0x41, 0xce, 0x22, 0x56, 0x79, 0x8f, 0x65, 0xd0, 0x8f, 0x13, 0x2a, 0xf8, 0xf2, 0xf2, 0xf3, 0x81, 0xd0, 0xeb, 0xf5, 0x46, 0xac, 0x3d, 0xd4, 0x88, 0xdc, 0x03, 0x10, 0x86, 0x9e, 0xc0, 0x80, 0x02, 0x02, 0x56, 0x14, 0x54, 0x9f, 0x64, 0x01, 0xfe, 0x1f, 0x30, 0x4f, 0x52, 0x50, 0x64, 0x8f, 0x0a, 0x80, 0x38, 0xca, 0x0c, 0x12, 0x53, 0x90, 0xc8, 0x66, 0x50, 0x7b, 0x4c, 0x1d, 0x03, 0x30, 0xb3, 0xf6, 0x8f, 0x79, 0x60, 0xa6, 0xed, 0x1f, 0xf3, 0xc0, 0x87, 0xec, 0x01, 0x9c, 0x21, 0x4f, 0x9f, 0x3e, 0x7d, 0xeb, 0xd6, 0xad, 0xb1, 0x41, 0x20, 0xcd, 0x05, 0xcf, 0x9b, 0xd1, 0x1e, 0x9b, 0xdf, 0x3b, 0x0b, 0x92, 0x68, 0x64, 0xa5, 0xa3, 0xa3, 0x03, 0x83, 0xce, 0x9d, 0x3b, 0x77, 0x0c, 0xf1, 0xa3, 0x47, 0x8f, 0x8a, 0x37, 0x0e, 0xb8, 0xfc, 0x19, 0x83, 0x33, 0xe2, 0xae, 0xc8, 0xf3, 0x80, 0x42, 0xa1, 0xc0, 0x9b, 0xca, 0xd8, 0xf7, 0x39, 0x39, 0x39, 0x39, 0xf3, 0xe6, 0xcd, 0x4b, 0x4b, 0x4b, 0x03, 0x54, 0x5c, 0x41, 0xbf, 0xd7, 0x8a, 0xd1, 0x74, 0x44, 0x0c, 0x1d, 0x82, 0x38, 0x90, 0x4e, 0x44, 0x1c, 0x91, 0x06, 0x0d, 0xb7, 0x6c, 0xd9, 0x32, 0x11, 0xe6, 0xc9, 0xf2, 0x84, 0x7b, 0xe0, 0xc8, 0x91, 0x23, 0x9f, 0x04, 0xcb, 0x9a, 0x35, 0x6b, 0xda, 0xda, 0xda, 0x9e, 0x3f, 0x7f, 0xbe, 0x6a, 0xd5, 0x2a, 0x34, 0x2c, 0x5d, 0xba, 0xf4, 0xda, 0xb5, 0x6b, 0xa2, 0xa5, 0xb6, 0x6d, 0xdb, 0x46, 0x1a, 0x97, 0x2d, 0x5b, 0x66, 0xb3, 0xd9, 0xc4, 0x76, 0x91, 0xb8, 0x71, 0xe3, 0xc6, 0xd6, 0xad, 0x5b, 0x31, 0xc8, 0xf1, 0xe3, 0xc7, 0x47, 0xdb, 0x1e, 0x2d, 0x07, 0x0f, 0x1e, 0x5c, 0xb8, 0x70, 0x21, 0x3e, 0x20, 0x94, 0x94, 0x94, 0x1c, 0x3e, 0x7c, 0xd8, 0xe5, 0x72, 0x89, 0xb2, 0x20, 0xfa, 0xfb, 0xfb, 0x77, 0xec, 0xd8, 0x51, 0x58, 0x58, 0x08, 0x86, 0xf2, 0xf2, 0xf2, 0xd1, 0x0c, 0x6f, 0x99, 0xc3, 0x10, 0xeb, 0x74, 0x3a, 0xb1, 0xef, 0xea, 0xd5, 0xab, 0x67, 0xcf, 0x9e, 0x15, 0xab, 0x1b, 0x36, 0x6c, 0x20, 0xcc, 0x4e, 0xa7, 0x33, 0xf4, 0x00, 0xdc, 0xdd, 0xdd, 0x1d, 0x36, 0xc8, 0xae, 0x5d, 0xbb, 0x44, 0x29, 0x10, 0xe4, 0x94, 0x2a, 0x7a, 0x60, 0x60, 0x60, 0x20, 0x3b, 0x3b, 0x9b, 0x30, 0xe0, 0x5d, 0x94, 0x10, 0xc5, 0xc5, 0xc5, 0xc0, 0x40, 0xc6, 0xc1, 0x37, 0x9b, 0xd1, 0xef, 0x68, 0xb9, 0xb9, 0xb9, 0x16, 0x8b, 0x25, 0x6c, 0x22, 0x54, 0x85, 0x23, 0x71, 0x68, 0xe9, 0xec, 0xec, 0x2c, 0x2d, 0x2d, 0xc5, 0xa0, 0xbb, 0x77, 0xef, 0x46, 0x84, 0xe0, 0xa6, 0x64, 0xf3, 0xe6, 0xcd, 0xa8, 0x6e, 0xda, 0xb4, 0x29, 0x54, 0xbe, 0xb9, 0xb9, 0x19, 0x36, 0x26, 0x73, 0x87, 0x01, 0xb8, 0x7d, 0xfb, 0x36, 0x69, 0x87, 0x73, 0xae, 0x5c, 0xb9, 0xb2, 0x62, 0xc5, 0x0a, 0x52, 0xad, 0xa9, 0xa9, 0x21, 0x13, 0xad, 0x5f, 0xbf, 0x1e, 0x2d, 0xab, 0x57, 0xaf, 0xee, 0xeb, 0xeb, 0x43, 0x0b, 0xae, 0xb8, 0xc9, 0x42, 0x3a, 0x74, 0xe8, 0x10, 0xaa, 0x98, 0x94, 0x28, 0x00, 0x53, 0x9e, 0x3b, 0x77, 0x0e, 0xfa, 0x1c, 0x3b, 0x76, 0x2c, 0x3e, 0x3e, 0x1e, 0x22, 0xd5, 0xd5, 0xd5, 0xa1, 0xaa, 0x12, 0x3a, 0x1c, 0x00, 0x5a, 0x2f, 0x5e, 0xbc, 0x08, 0x6e, 0x7c, 0x32, 0x01, 0x8d, 0xf3, 0x3a, 0x16, 0x22, 0x4c, 0x88, 0x3d, 0x27, 0x4c, 0x18, 0x57, 0xd3, 0x44, 0xb3, 0x30, 0x00, 0x44, 0x3f, 0xbc, 0x25, 0x42, 0x96, 0x88, 0x60, 0x04, 0x70, 0x12, 0x00, 0x90, 0x22, 0xfb, 0xd2, 0x99, 0x33, 0x67, 0xfe, 0xfd, 0x63, 0xd9, 0xb9, 0x73, 0x27, 0x18, 0x16, 0x2c, 0x58, 0x00, 0x7e, 0x5c, 0xf4, 0x92, 0x61, 0xb1, 0x72, 0xc4, 0x19, 0x21, 0x8b, 0x46, 0xa5, 0x52, 0x89, 0x1d, 0x59, 0x6c, 0x24, 0xc4, 0x3b, 0x00, 0x20, 0x42, 0xf0, 0x05, 0x0e, 0x02, 0xf5, 0xf5, 0xf5, 0x77, 0xee, 0xdc, 0x01, 0xb1, 0x76, 0xed, 0xda, 0x30, 0x31, 0x54, 0xdf, 0x07, 0x00, 0x81, 0x0b, 0x91, 0xed, 0xdb, 0xb7, 0x8b, 0x22, 0xfb, 0xf7, 0xef, 0x47, 0x0b, 0x01, 0x20, 0xea, 0x87, 0x96, 0xb0, 0x92, 0x97, 0x97, 0x07, 0x91, 0x9b, 0x37, 0x6f, 0x92, 0x76, 0x7c, 0x77, 0x12, 0x47, 0x10, 0x1b, 0xe1, 0x10, 0xb1, 0x91, 0x10, 0xef, 0x78, 0xa5, 0xc4, 0xba, 0x41, 0xbc, 0x9e, 0x3f, 0x7f, 0xfe, 0xf2, 0xe5, 0xcb, 0x3d, 0x3d, 0x3d, 0x18, 0xee, 0xc0, 0x81, 0x03, 0x61, 0x93, 0x8d, 0x51, 0x85, 0x38, 0x7a, 0xe1, 0x16, 0x91, 0x27, 0x94, 0xd6, 0xeb, 0xf5, 0xa4, 0xfd, 0xd2, 0xa5, 0x4b, 0x65, 0x65, 0x65, 0x22, 0x0f, 0xdc, 0x42, 0xae, 0x8a, 0xc5, 0x45, 0x88, 0x4f, 0xc8, 0x48, 0x32, 0x84, 0x01, 0x34, 0x08, 0x04, 0x02, 0x2e, 0xf4, 0x45, 0x91, 0x1f, 0x88, 0x30, 0x40, 0xa4, 0xda, 0xd8, 0xd8, 0x88, 0x6e, 0xf8, 0x01, 0xef, 0x7b, 0xb0, 0x28, 0x79, 0x69, 0x0c, 0xe5, 0x84, 0x2b, 0xe1, 0x28, 0x32, 0x04, 0xac, 0x12, 0xba, 0x9f, 0xee, 0xd9, 0xb3, 0x07, 0xed, 0x50, 0xe8, 0xe1, 0xc3, 0x87, 0x10, 0x79, 0xfa, 0xf4, 0x29, 0xd2, 0x05, 0x5a, 0xc4, 0x35, 0x30, 0x7f, 0xfe, 0x7c, 0x54, 0xb1, 0x41, 0x89, 0xab, 0xb6, 0xa5, 0xa5, 0x05, 0x52, 0x27, 0x4e, 0x9c, 0x00, 0xbf, 0xdd, 0x6e, 0x27, 0xfe, 0xc7, 0xbe, 0xf7, 0xe6, 0xcd, 0x1b, 0xb4, 0x60, 0x91, 0x10, 0xd8, 0x24, 0xaa, 0x43, 0xd5, 0x00, 0xfd, 0x8e, 0x10, 0x22, 0x1c, 0x8b, 0x17, 0x2f, 0x26, 0xfa, 0x61, 0x25, 0x85, 0xc9, 0x54, 0x55, 0x55, 0x91, 0xae, 0xd0, 0x27, 0x02, 0x00, 0x2b, 0x1e, 0x9c, 0x98, 0x35, 0x31, 0x31, 0x91, 0x74, 0x91, 0x70, 0x22, 0x34, 0xec, 0x57, 0x5b, 0x5b, 0x0b, 0x86, 0xfb, 0xf7, 0xef, 0x93, 0x7d, 0x09, 0x4b, 0x73, 0xe5, 0xca, 0x95, 0x62, 0x2a, 0xdc, 0xb8, 0x71, 0x23, 0x99, 0xe8, 0xc2, 0x85, 0x0b, 0x44, 0x04, 0x7b, 0x1d, 0xb6, 0x5a, 0x42, 0xc3, 0x22, 0x8f, 0x1e, 0x3d, 0x0a, 0xd3, 0x04, 0xd5, 0xf7, 0x02, 0xb8, 0x77, 0xef, 0x5e, 0x6a, 0x6a, 0x2a, 0xd6, 0x1f, 0x2e, 0x4e, 0xc2, 0xc4, 0x90, 0x01, 0xc8, 0xa0, 0xa1, 0x4f, 0x04, 0x00, 0xee, 0x17, 0x08, 0x27, 0x66, 0xc2, 0x75, 0x15, 0xe9, 0x45, 0x48, 0x60, 0xbd, 0xc2, 0x93, 0xd0, 0x86, 0x00, 0x00, 0x0f, 0xbe, 0x0e, 0x62, 0x77, 0x27, 0x0c, 0xe8, 0x02, 0xf3, 0xde, 0xbd, 0x7b, 0x87, 0x87, 0x87, 0xc5, 0x89, 0xae, 0x5f, 0xbf, 0x4e, 0x96, 0x3e, 0xe1, 0xa9, 0xac, 0xac, 0x7c, 0xf0, 0xe0, 0x81, 0xd8, 0x1b, 0x4a, 0x8c, 0xf5, 0x52, 0x8f, 0xcf, 0xc0, 0x30, 0x15, 0x39, 0x08, 0x84, 0xea, 0x3a, 0x41, 0x1a, 0xfb, 0x3d, 0x82, 0x04, 0x47, 0x09, 0x62, 0xef, 0xd1, 0x52, 0x48, 0x67, 0x58, 0x63, 0x08, 0x74, 0xd1, 0x63, 0x61, 0x3c, 0xd8, 0xb8, 0x31, 0xc8, 0x9c, 0x39, 0x73, 0x48, 0x50, 0x85, 0xf5, 0x92, 0xea, 0x58, 0x00, 0xde, 0x29, 0xf0, 0x53, 0x6b, 0x0c, 0x3f, 0x4a, 0xfc, 0xd4, 0xf4, 0x1b, 0x57, 0x9f, 0x18, 0x80, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0xff, 0x07, 0x71, 0xef, 0x64, 0x50, 0x13, 0xcd, 0x1c, 0x52, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXTextPlainIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0e, 0xc4, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x09, 0x90, 0x54, 0xc5, 0xf5, 0xcd, 0xcc, 0x9e, 0xdc, 0x57, 0x40, 0x2e, 0x5d, 0xee, 0xfb, + 0x08, 0x2b, 0x22, 0x87, 0x58, 0x12, 0xce, 0x70, 0xc7, 0x14, 0x10, 0x81, 0x18, 0x52, 0x21, 0x72, + 0x05, 0x39, 0xb6, 0x8c, 0x86, 0xaa, 0x68, 0x82, 0x40, 0x15, 0x1a, 0x20, 0x80, 0x28, 0x90, 0x18, + 0x24, 0xa6, 0x8a, 0x32, 0x51, 0x63, 0x89, 0x21, 0x01, 0x53, 0x50, 0x04, 0x10, 0xb1, 0x90, 0x02, + 0x42, 0x20, 0xc5, 0xa9, 0x72, 0x83, 0xe1, 0x5a, 0x98, 0xdd, 0xd9, 0x99, 0xfd, 0x79, 0xaf, 0x67, + 0xbb, 0xa7, 0xff, 0x39, 0xff, 0xff, 0x9d, 0xf9, 0xb3, 0x8b, 0xbf, 0xab, 0x66, 0xba, 0xfb, 0xf5, + 0xbb, 0xfa, 0xbd, 0xee, 0xfe, 0xdd, 0xff, 0x77, 0xff, 0x1f, 0x50, 0x30, 0x80, 0x83, 0x10, 0x74, + 0x80, 0xcb, 0x50, 0x53, 0x4b, 0xf0, 0xc2, 0xd0, 0x7b, 0xb0, 0x76, 0x76, 0x89, 0x4a, 0x89, 0xa4, + 0x12, 0xe6, 0xbc, 0x96, 0xa7, 0x22, 0x00, 0xaa, 0xb4, 0x1c, 0x9e, 0x1f, 0x72, 0x57, 0xa1, 0x1f, + 0x85, 0x33, 0x87, 0x63, 0x22, 0xcd, 0x71, 0x02, 0x94, 0x50, 0xb3, 0xb0, 0xce, 0x25, 0x55, 0x49, + 0x4b, 0xae, 0x23, 0x08, 0x04, 0x02, 0x5a, 0x1c, 0x55, 0x5e, 0x45, 0xf0, 0xe5, 0x97, 0x5f, 0x8a, + 0xc2, 0x8d, 0x1b, 0x37, 0xb2, 0x74, 0x61, 0x61, 0xa1, 0x80, 0xb1, 0x04, 0xaf, 0xcc, 0xec, 0xd9, + 0xb3, 0x79, 0xd2, 0x32, 0x76, 0x5c, 0x69, 0xc7, 0x04, 0xaa, 0x3a, 0xa8, 0x95, 0x35, 0xce, 0x39, + 0x26, 0xc8, 0x92, 0xf9, 0x50, 0xdb, 0xe1, 0xa1, 0x5d, 0x61, 0x08, 0x6e, 0x5d, 0x53, 0x60, 0xd2, + 0x0b, 0xb9, 0xd0, 0xb4, 0x8d, 0x64, 0x6a, 0xad, 0x49, 0x78, 0xb3, 0x20, 0xf8, 0xe5, 0xb3, 0xe5, + 0xda, 0x62, 0x45, 0xa5, 0xd2, 0x1b, 0xf3, 0x4a, 0x99, 0x80, 0x97, 0xc6, 0x85, 0x59, 0xbc, 0xea, + 0xa7, 0x61, 0x90, 0xa5, 0x12, 0xb0, 0x0a, 0x5a, 0x89, 0xd5, 0x81, 0x1a, 0xdc, 0xd2, 0xa5, 0x4b, + 0x99, 0xde, 0x4c, 0x4f, 0xcc, 0xcb, 0x8d, 0xb0, 0x7f, 0xff, 0xfe, 0x22, 0xcf, 0xea, 0x40, 0x85, + 0x68, 0x0e, 0x41, 0x60, 0x95, 0x60, 0x12, 0xec, 0x22, 0x33, 0xe9, 0x64, 0x68, 0x2b, 0x8e, 0x95, + 0x2d, 0x53, 0xf9, 0xad, 0xb2, 0xcc, 0x8c, 0xe8, 0x55, 0x4d, 0x4f, 0x8b, 0xa0, 0x6d, 0x14, 0x54, + 0xbe, 0x6c, 0x7b, 0x0d, 0x86, 0x46, 0x65, 0xf3, 0x36, 0xe4, 0x43, 0x93, 0x02, 0xa9, 0x59, 0x6a, + 0x19, 0x60, 0xde, 0xb2, 0x06, 0xfd, 0xc7, 0x67, 0x0b, 0x86, 0xc4, 0x78, 0xc4, 0x4f, 0x72, 0x18, + 0x8b, 0xf7, 0x56, 0x46, 0x58, 0xfc, 0xe1, 0xba, 0x08, 0xfc, 0xf1, 0xa5, 0x08, 0x14, 0xdf, 0x30, + 0xe0, 0xcc, 0x41, 0xe4, 0x83, 0x64, 0x41, 0xee, 0x1f, 0x1c, 0x97, 0x60, 0x5b, 0x96, 0x95, 0xb2, + 0xec, 0xe6, 0x5f, 0xc6, 0x63, 0x5e, 0x26, 0xc7, 0x8e, 0xbb, 0x02, 0x57, 0xcc, 0x6e, 0x6c, 0x69, + 0x22, 0xbb, 0x4c, 0xac, 0xf0, 0x92, 0x0a, 0xd8, 0xb9, 0x73, 0xa7, 0x15, 0x3d, 0x0c, 0x1b, 0x36, + 0xcc, 0xb2, 0x5c, 0x75, 0xa9, 0x42, 0x4c, 0xe5, 0x99, 0x67, 0x9e, 0xa1, 0x7e, 0x21, 0xcc, 0x28, + 0xa7, 0x6b, 0xd6, 0xac, 0xa9, 0x94, 0x96, 0x96, 0xaa, 0xca, 0xeb, 0xd4, 0xa9, 0x23, 0x70, 0xeb, + 0xd7, 0xaf, 0xaf, 0x10, 0x8e, 0x4c, 0x93, 0xe0, 0x84, 0x68, 0x54, 0xc0, 0x7f, 0x44, 0xc5, 0xd3, + 0x9c, 0x40, 0xce, 0xdf, 0xb8, 0x71, 0xc3, 0xb2, 0x7c, 0xcc, 0x98, 0x31, 0x4c, 0x70, 0xf5, 0x77, + 0x72, 0xf5, 0xaf, 0x41, 0xd2, 0x66, 0x8a, 0x8e, 0xad, 0x54, 0xa8, 0xfe, 0x02, 0x4c, 0x87, 0x6b, + 0xa3, 0xa1, 0x9a, 0x6c, 0x25, 0x0f, 0xd7, 0x3c, 0x6d, 0x65, 0x43, 0x4b, 0x13, 0xc9, 0x0c, 0xe4, + 0x34, 0x9f, 0xea, 0x52, 0xfc, 0xfa, 0xb3, 0xf1, 0xc9, 0x85, 0x99, 0x10, 0x53, 0x01, 0x7d, 0x46, + 0x65, 0xeb, 0x68, 0xba, 0x0c, 0x88, 0x57, 0xb8, 0xee, 0xb7, 0xe2, 0x64, 0x14, 0x37, 0x68, 0x6a, + 0x7d, 0xc1, 0x51, 0x0d, 0x15, 0xac, 0x6f, 0x6b, 0xfe, 0x68, 0xdc, 0x37, 0xbb, 0x1e, 0x68, 0x50, + 0x0d, 0xb3, 0xa6, 0x35, 0xd0, 0xa9, 0x6f, 0x02, 0x28, 0x8f, 0x81, 0xa5, 0x99, 0x2c, 0x7b, 0xb2, + 0xd6, 0xd1, 0xb2, 0x1f, 0xe4, 0xb2, 0x99, 0xbf, 0xcd, 0x83, 0x07, 0x3b, 0x19, 0xeb, 0x6a, 0x29, + 0xc0, 0x44, 0x69, 0x47, 0x60, 0x63, 0xb1, 0x8e, 0x58, 0x58, 0x23, 0xdf, 0xe7, 0x02, 0xe8, 0x7a, + 0x7c, 0xe5, 0xca, 0x15, 0x4b, 0x1b, 0x74, 0xeb, 0xd6, 0xcd, 0xb2, 0x3c, 0x69, 0x3f, 0x18, 0x3e, + 0x7c, 0xb8, 0x61, 0xfb, 0xb6, 0x0b, 0x14, 0x3e, 0x58, 0xb7, 0x6e, 0x1d, 0x9b, 0x73, 0x2f, 0x5e, + 0xbc, 0x58, 0xcc, 0xbd, 0xb5, 0xaa, 0xcd, 0x9b, 0x37, 0x0f, 0x96, 0x2f, 0x5f, 0x0e, 0x7b, 0xf6, + 0xec, 0x61, 0x45, 0x53, 0xa7, 0x4e, 0x15, 0xb8, 0xc5, 0xc5, 0xc5, 0x2c, 0x8d, 0x93, 0x06, 0x68, + 0xd7, 0xae, 0x5d, 0x82, 0x54, 0xd6, 0xe4, 0xb1, 0xc7, 0x1e, 0x63, 0x59, 0x2c, 0x15, 0x60, 0x5e, + 0x83, 0xd3, 0xa7, 0x4f, 0x2b, 0x8d, 0x1b, 0x37, 0x56, 0x56, 0xaf, 0x5e, 0xad, 0xe0, 0xe2, 0x40, + 0x94, 0xcb, 0xb8, 0x3c, 0xcd, 0x63, 0x42, 0x4a, 0x70, 0xc2, 0x4c, 0xed, 0xda, 0xb5, 0xd9, 0x4c, + 0xe1, 0xc8, 0x91, 0x23, 0x8c, 0x01, 0x21, 0xf2, 0xdf, 0xb5, 0x6b, 0xb8, 0x08, 0x93, 0xf2, 0x8c, + 0x58, 0xca, 0xbf, 0xf3, 0xce, 0x3b, 0xac, 0x7c, 0xdc, 0xb8, 0x71, 0x2c, 0x66, 0x0c, 0xf0, 0x4f, + 0x0c, 0xd7, 0x33, 0x67, 0xce, 0x84, 0x26, 0x4d, 0x9a, 0xc0, 0xed, 0xdb, 0xb7, 0x91, 0x4f, 0x3c, + 0x60, 0x39, 0x4f, 0xb2, 0xd8, 0x69, 0x9e, 0x88, 0xfc, 0x9e, 0xac, 0x32, 0xa1, 0x51, 0x26, 0xed, + 0x26, 0x32, 0x12, 0x9a, 0x4a, 0x98, 0xe8, 0x67, 0xa9, 0x64, 0xea, 0x25, 0x2f, 0xbf, 0x02, 0x5e, + 0x5a, 0xdb, 0x48, 0x96, 0x18, 0x87, 0x8c, 0x0a, 0xcd, 0x60, 0xf2, 0x6c, 0xc2, 0x0c, 0x87, 0xc3, + 0xe5, 0x59, 0x08, 0xc1, 0x38, 0xed, 0x8b, 0xef, 0xd7, 0x80, 0xbc, 0x9a, 0x1c, 0xcb, 0x7d, 0x5c, + 0xa9, 0x26, 0x34, 0x7f, 0x63, 0x3e, 0xd0, 0x4f, 0x0e, 0x46, 0x30, 0xb9, 0x9c, 0xa7, 0xe9, 0xee, + 0x5b, 0x2a, 0x82, 0x2b, 0x0f, 0x70, 0xc1, 0x8d, 0x1f, 0xd2, 0x4f, 0x79, 0x8d, 0x60, 0xa7, 0x3e, + 0x2f, 0x87, 0xdf, 0x3f, 0xaf, 0xbe, 0xed, 0x4c, 0x37, 0xf7, 0xe4, 0x90, 0x57, 0x33, 0x00, 0x2f, + 0xbe, 0xaf, 0x36, 0x86, 0x5c, 0x6e, 0x96, 0x4e, 0xc9, 0x30, 0xca, 0x9b, 0x05, 0x09, 0xd1, 0x36, + 0x19, 0xad, 0x60, 0x8e, 0x6b, 0xe7, 0x26, 0x93, 0x96, 0xd6, 0x28, 0x5f, 0xa9, 0x26, 0x64, 0xc4, + 0xd0, 0x2e, 0xac, 0xf4, 0x5e, 0x6a, 0x9a, 0x90, 0x6b, 0x0f, 0xfc, 0xf9, 0x95, 0x08, 0x7c, 0xbe, + 0x23, 0x6a, 0xaa, 0xef, 0x03, 0xad, 0x82, 0xf0, 0xec, 0x7a, 0xcd, 0xc3, 0x07, 0xc4, 0xe6, 0x1e, + 0x30, 0x23, 0x4c, 0xe6, 0x41, 0x2d, 0x9d, 0xeb, 0x0a, 0x68, 0x19, 0x39, 0xcd, 0xdf, 0xbd, 0x05, + 0xf0, 0xdf, 0x03, 0x31, 0x68, 0xd8, 0x2c, 0x00, 0x2d, 0x71, 0x4d, 0x14, 0x74, 0xd9, 0x16, 0x32, + 0x56, 0x01, 0xa7, 0x15, 0x36, 0xc3, 0x77, 0x59, 0x6f, 0x33, 0x76, 0xde, 0xc3, 0xfd, 0x0a, 0x78, + 0x6f, 0x73, 0xb5, 0x44, 0xd7, 0x1e, 0x98, 0x3f, 0x7f, 0x3e, 0x5b, 0xe5, 0xd1, 0x03, 0x99, 0x11, + 0x23, 0x46, 0xa8, 0xb9, 0x3a, 0xc8, 0x11, 0xbd, 0xfc, 0xc4, 0xc7, 0x01, 0x69, 0x1c, 0x95, 0x2f, + 0xce, 0xe4, 0xb8, 0x45, 0x8b, 0x16, 0x6c, 0xe1, 0xb6, 0x63, 0xc7, 0x0e, 0x16, 0x23, 0x26, 0x5b, + 0x10, 0x96, 0x97, 0xeb, 0x9f, 0xa5, 0x51, 0x19, 0x5f, 0x79, 0xca, 0x3c, 0x66, 0xcc, 0x98, 0x21, + 0x68, 0x09, 0xa7, 0x7b, 0xf7, 0xee, 0x72, 0x31, 0x4b, 0x13, 0x9c, 0xff, 0xe4, 0xc2, 0xa3, 0x47, + 0x8f, 0x0a, 0xf8, 0xa0, 0x41, 0x83, 0x44, 0xfa, 0xde, 0xbd, 0x7b, 0x32, 0x5a, 0x9c, 0x87, 0x0e, + 0x52, 0x01, 0x20, 0xc6, 0x6d, 0xdb, 0xb6, 0x15, 0xc5, 0xf4, 0x08, 0x95, 0x60, 0xb4, 0x7a, 0x95, + 0x03, 0xc1, 0x8c, 0x2a, 0x40, 0x37, 0xe5, 0xe7, 0xcc, 0x99, 0xa3, 0xd0, 0x52, 0x7b, 0xfa, 0xf4, + 0xe9, 0x8c, 0x76, 0xd9, 0xb2, 0x65, 0x32, 0x29, 0x4b, 0xf7, 0xea, 0xd5, 0x8b, 0x95, 0x69, 0x0b, + 0xfa, 0xf5, 0xeb, 0xa7, 0x82, 0x1b, 0x55, 0x94, 0x68, 0x54, 0xcb, 0x6e, 0x99, 0x09, 0x27, 0x38, + 0x77, 0xee, 0x9c, 0x42, 0x35, 0xe7, 0x79, 0x19, 0x87, 0x31, 0x30, 0xa8, 0x00, 0x29, 0x4e, 0xf8, + 0x67, 0xce, 0x9c, 0x61, 0xe8, 0xfc, 0xc6, 0xbf, 0x7c, 0x3f, 0x80, 0xf3, 0x49, 0x6b, 0x05, 0x70, + 0xa9, 0xcf, 0xe5, 0xb8, 0x8a, 0xb7, 0x6f, 0xdf, 0xae, 0x5c, 0xbd, 0x7a, 0xd5, 0x15, 0xad, 0x5d, + 0x22, 0xc3, 0x0b, 0x99, 0xb6, 0x53, 0x21, 0x33, 0x34, 0x68, 0xd5, 0x0c, 0x86, 0xd3, 0xe9, 0xaa, + 0xac, 0xb0, 0xd6, 0x8c, 0xae, 0x87, 0x51, 0x2d, 0xa3, 0x4c, 0xe5, 0xab, 0x7d, 0x05, 0x0c, 0xfb, + 0x40, 0xa6, 0xac, 0xe9, 0x46, 0x6e, 0xb5, 0xf7, 0x80, 0x5f, 0x01, 0x37, 0x6e, 0x4f, 0x25, 0x8d, + 0xef, 0x81, 0x54, 0x5a, 0xd3, 0x0d, 0x2f, 0xdf, 0x03, 0x6e, 0xac, 0x96, 0x4a, 0x1a, 0xcf, 0x3d, + 0x40, 0x77, 0x23, 0x52, 0x19, 0x0c, 0xe7, 0x42, 0x56, 0x02, 0xce, 0xfd, 0xbb, 0x1c, 0xd6, 0x2f, + 0x50, 0xdf, 0x26, 0x34, 0xc3, 0x1f, 0x33, 0x3b, 0x07, 0xfa, 0x8e, 0x4d, 0x88, 0xd8, 0x58, 0x54, + 0x0a, 0x67, 0x8e, 0xc4, 0xd8, 0x0a, 0x6c, 0xe9, 0x3f, 0x9c, 0xdf, 0x46, 0x34, 0x92, 0xe3, 0xd8, + 0x03, 0x27, 0x3e, 0xc5, 0x27, 0xe8, 0x36, 0xc3, 0x7f, 0xf6, 0xa9, 0x71, 0x6f, 0x56, 0xdc, 0xd0, + 0x4d, 0xe5, 0x64, 0x31, 0x61, 0x1e, 0x9b, 0x4a, 0xdd, 0xbb, 0x1d, 0x9f, 0x5a, 0x77, 0x7c, 0x24, + 0x04, 0x23, 0xa6, 0xe7, 0x40, 0xa4, 0x44, 0x81, 0xd7, 0x7e, 0x16, 0xf7, 0xc8, 0x84, 0x9f, 0xe7, + 0x42, 0xf3, 0xb6, 0x41, 0xf8, 0xec, 0xef, 0x51, 0xd8, 0xf3, 0x6e, 0x19, 0x84, 0x8b, 0xd3, 0x3f, + 0x0d, 0x77, 0x5e, 0x81, 0x3b, 0xf1, 0x9a, 0xd6, 0x6b, 0x1c, 0x04, 0xba, 0x13, 0x1d, 0x09, 0x27, + 0xee, 0x50, 0x37, 0x78, 0x20, 0xc0, 0x60, 0x8d, 0x5a, 0xc4, 0x61, 0xe1, 0xe2, 0x38, 0xee, 0x67, + 0xdb, 0x62, 0xf0, 0xe9, 0x47, 0x65, 0x70, 0xfb, 0x7a, 0xa2, 0x42, 0x7c, 0xe7, 0x08, 0x61, 0x34, + 0x6c, 0x16, 0x84, 0x1f, 0x2c, 0x8a, 0x6f, 0x00, 0x8c, 0x53, 0xd8, 0xff, 0x77, 0x5c, 0x81, 0x58, + 0x24, 0xae, 0x44, 0xae, 0xc5, 0xc3, 0x89, 0x5a, 0x75, 0xe3, 0x15, 0x88, 0xc6, 0x37, 0x23, 0xc2, + 0x7b, 0x2b, 0xf5, 0x5b, 0x5b, 0x2e, 0x9c, 0x2c, 0x17, 0x5a, 0x52, 0xda, 0xb3, 0x0a, 0x3c, 0xb9, + 0x30, 0x17, 0x36, 0x14, 0x95, 0xc0, 0x90, 0xa7, 0xf5, 0xdb, 0x66, 0xb8, 0x46, 0x5d, 0x06, 0x84, + 0x80, 0x6e, 0xee, 0x7e, 0xbf, 0x28, 0x6e, 0xd5, 0x1f, 0x2f, 0xcb, 0x83, 0xfd, 0x1f, 0x46, 0xe1, + 0xd4, 0xe7, 0x31, 0xd6, 0xe4, 0x08, 0xaf, 0x73, 0xbf, 0x84, 0xed, 0x3a, 0xf4, 0x76, 0xdc, 0x15, + 0xb9, 0xa8, 0xca, 0x3f, 0x89, 0x8e, 0xe0, 0x73, 0x8a, 0x17, 0xc7, 0xc6, 0xf7, 0x3e, 0xcf, 0x58, + 0x99, 0x07, 0x0f, 0x75, 0x31, 0x57, 0xe6, 0x95, 0xa7, 0x4b, 0xe0, 0x7f, 0x97, 0xe2, 0x96, 0x77, + 0x7a, 0x17, 0x5a, 0x68, 0xac, 0x49, 0x98, 0x4b, 0xd3, 0x20, 0x56, 0xd5, 0xac, 0xa7, 0x15, 0xc0, + 0x9b, 0x70, 0x29, 0x0f, 0x9e, 0x56, 0x20, 0xaf, 0x96, 0xb1, 0xfe, 0x74, 0xbd, 0x78, 0x69, 0x6c, + 0x18, 0x2e, 0x9e, 0x4a, 0x8c, 0x52, 0xc6, 0x98, 0x7a, 0xa8, 0xeb, 0x25, 0xa5, 0x9b, 0x27, 0x2d, + 0x7b, 0xdf, 0x8f, 0xc2, 0xd6, 0xd7, 0x2b, 0x86, 0x26, 0xbd, 0x2e, 0xd0, 0xb4, 0x75, 0x10, 0xe6, + 0xbe, 0xa1, 0x7f, 0xaa, 0x63, 0x80, 0x2a, 0x40, 0x69, 0xf3, 0x40, 0xb4, 0x4c, 0xc8, 0x10, 0x89, + 0xfe, 0xe3, 0xb3, 0xa0, 0x7e, 0x13, 0x63, 0x91, 0x4d, 0x1e, 0x72, 0xae, 0x3c, 0x31, 0x76, 0xed, + 0x01, 0xa1, 0x95, 0xcb, 0xc4, 0x17, 0xc7, 0xca, 0x71, 0x97, 0xba, 0x82, 0xa7, 0x34, 0x6c, 0xec, + 0x50, 0xb4, 0x90, 0x91, 0xb1, 0x0a, 0x58, 0xe8, 0xe4, 0xa8, 0xc8, 0xd8, 0x9f, 0x8e, 0x58, 0x64, + 0x16, 0xd9, 0xaf, 0x40, 0x66, 0xed, 0x9f, 0xe4, 0xc8, 0x48, 0xa6, 0x95, 0xb3, 0x23, 0xdf, 0x6f, + 0x42, 0x76, 0xac, 0x94, 0x4e, 0x9c, 0x6a, 0xef, 0x81, 0xc4, 0xa4, 0xdc, 0xa1, 0x99, 0xf0, 0xd9, + 0x19, 0x9c, 0x3d, 0x7b, 0x96, 0x51, 0x3d, 0xf1, 0xc4, 0x13, 0x0e, 0xa9, 0x13, 0xe8, 0xf4, 0x34, + 0x28, 0x1a, 0x8d, 0x42, 0x28, 0x14, 0x4a, 0x00, 0x1d, 0xa4, 0x5c, 0x5f, 0xc8, 0xe4, 0xc7, 0x50, + 0x6e, 0x17, 0xe9, 0xf8, 0xf0, 0x0f, 0x1a, 0x34, 0x68, 0x00, 0x17, 0x2e, 0x5c, 0x80, 0x66, 0xcd, + 0x9a, 0x39, 0x50, 0x3b, 0x81, 0xea, 0xba, 0x09, 0x91, 0xd2, 0x0b, 0x16, 0x2c, 0x48, 0x70, 0x72, + 0x91, 0xc2, 0x33, 0x50, 0xf4, 0x94, 0xd4, 0xb5, 0xf2, 0x24, 0x52, 0x57, 0x01, 0x72, 0x27, 0x59, + 0x97, 0x7e, 0x43, 0x87, 0x0e, 0x15, 0x69, 0xda, 0xbf, 0x6d, 0x37, 0xdc, 0xbd, 0x7b, 0x17, 0xb2, + 0xb3, 0xb3, 0x05, 0x2d, 0xf1, 0x3a, 0x74, 0xe8, 0x90, 0x8a, 0xfc, 0xa9, 0xa7, 0x9e, 0x12, 0xe5, + 0xeb, 0xd7, 0xaf, 0x57, 0x95, 0xe1, 0xc1, 0x2e, 0x56, 0x46, 0xfb, 0xc0, 0xb9, 0x2e, 0x93, 0x26, + 0x4d, 0x52, 0xe1, 0x88, 0x0c, 0x5a, 0x40, 0x17, 0xe8, 0x01, 0x37, 0x22, 0x28, 0xc1, 0x60, 0x50, + 0xd9, 0xbc, 0x79, 0xb3, 0x82, 0x6e, 0x66, 0xf9, 0xb7, 0xde, 0x7a, 0x4b, 0x85, 0x8b, 0x1e, 0x60, + 0x70, 0x15, 0x10, 0x33, 0x1f, 0x7f, 0xfc, 0xb1, 0xd2, 0xb2, 0x65, 0x4b, 0x16, 0xe3, 0xc6, 0x73, + 0x86, 0x43, 0xfc, 0xe4, 0x40, 0x8f, 0x60, 0x47, 0x8e, 0x1c, 0xc9, 0xca, 0x56, 0xae, 0x5c, 0x29, + 0x17, 0x29, 0xcf, 0x3d, 0xf7, 0x9c, 0xa0, 0xa1, 0x67, 0xce, 0x79, 0x79, 0x79, 0x86, 0x72, 0x88, + 0x48, 0xcd, 0xb5, 0x82, 0xcd, 0xc2, 0x85, 0x0b, 0x75, 0x04, 0xa4, 0x80, 0x56, 0x09, 0xb3, 0x0a, + 0x10, 0x9b, 0xb7, 0xdf, 0x7e, 0x5b, 0xa1, 0xbd, 0xe6, 0xf4, 0x14, 0xbf, 0xa0, 0xa0, 0x40, 0x47, + 0x5b, 0x21, 0x8a, 0xc1, 0xb5, 0x15, 0xa0, 0x32, 0x92, 0xf5, 0xf8, 0xe3, 0x8f, 0x33, 0x34, 0xbe, + 0xf5, 0x00, 0xfb, 0x0a, 0xcb, 0xcb, 0x7f, 0xba, 0x26, 0x84, 0x84, 0x95, 0x0e, 0xf5, 0xea, 0xd5, + 0x83, 0x29, 0x53, 0xa6, 0x40, 0xa3, 0x46, 0x8d, 0x00, 0xf7, 0x4c, 0xb0, 0x66, 0xe0, 0x86, 0x29, + 0x1f, 0xdd, 0x88, 0x1f, 0x05, 0xdc, 0xbe, 0xa0, 0x63, 0x63, 0x59, 0x81, 0x47, 0x1f, 0x7d, 0x94, + 0x11, 0x90, 0x12, 0x14, 0x66, 0xcd, 0x9a, 0xc5, 0xe2, 0x64, 0x7f, 0xb7, 0x6e, 0xdd, 0xc2, 0x2d, + 0x64, 0x41, 0xa0, 0x33, 0xec, 0x63, 0xc7, 0x8e, 0x85, 0xba, 0x75, 0xeb, 0x26, 0x23, 0x71, 0x5f, + 0x2e, 0xbb, 0x83, 0xa7, 0x79, 0x13, 0x42, 0xae, 0xcc, 0x95, 0x14, 0xe3, 0x71, 0x10, 0x5e, 0xac, + 0xa0, 0x42, 0x02, 0x2e, 0xe3, 0xe0, 0x01, 0x7c, 0x86, 0xd3, 0xb4, 0x69, 0x53, 0x55, 0x39, 0x6f, + 0xc3, 0x84, 0x4b, 0x61, 0xdf, 0xbe, 0x7d, 0xaa, 0x72, 0xce, 0xa3, 0x4d, 0x9b, 0x36, 0xac, 0x9c, + 0xe7, 0x29, 0xe6, 0xfb, 0x2c, 0x38, 0x8c, 0x21, 0x48, 0x7f, 0x96, 0x17, 0x32, 0xc4, 0x43, 0x3a, + 0x7d, 0xb8, 0x79, 0xf3, 0xa6, 0x1e, 0x28, 0x41, 0x2e, 0x5e, 0xbc, 0xc8, 0x2e, 0x72, 0xe7, 0xcf, + 0x9f, 0x07, 0xdc, 0xad, 0x22, 0x95, 0xc4, 0x93, 0x7d, 0xfb, 0xf6, 0x65, 0xc3, 0xa7, 0xae, 0xa0, + 0x02, 0xa0, 0x95, 0xab, 0xcd, 0xab, 0xe8, 0xa4, 0xca, 0xb0, 0x24, 0x1e, 0xce, 0x51, 0x3a, 0x76, + 0xec, 0xc8, 0x2c, 0x84, 0x43, 0x97, 0xb2, 0x77, 0xef, 0x5e, 0x2d, 0x4a, 0x95, 0xca, 0xeb, 0x46, + 0xa1, 0x21, 0x43, 0x86, 0xa8, 0xdc, 0x3b, 0x7e, 0xfc, 0xf8, 0x2a, 0xa5, 0xb0, 0x56, 0x19, 0xd7, + 0x53, 0x09, 0x95, 0x1b, 0x33, 0x98, 0xb1, 0x1c, 0x85, 0x32, 0xa8, 0x97, 0x6d, 0xd1, 0x7e, 0x05, + 0x6c, 0x9b, 0x2a, 0x4d, 0x88, 0xbe, 0x07, 0xd2, 0x64, 0x58, 0xdb, 0x6c, 0xab, 0xfd, 0x28, 0x64, + 0xbb, 0xa6, 0x55, 0x14, 0xb1, 0xda, 0x77, 0x81, 0x2a, 0x6a, 0x57, 0xdb, 0x6a, 0xf9, 0x0e, 0xb0, + 0x6d, 0xaa, 0xf4, 0x20, 0xfa, 0x0e, 0x48, 0x8f, 0x5d, 0x6d, 0x73, 0xf5, 0x1d, 0x60, 0xdb, 0x54, + 0xe9, 0x41, 0xf4, 0x1d, 0x90, 0x1e, 0xbb, 0xda, 0xe6, 0xea, 0x3b, 0xc0, 0xb6, 0xa9, 0xd2, 0x83, + 0xe8, 0x3b, 0x20, 0x3d, 0x76, 0xb5, 0xcd, 0xd5, 0xf2, 0x86, 0x96, 0x6d, 0x2e, 0x36, 0x10, 0x2f, + 0x9d, 0x56, 0xe0, 0xfa, 0x85, 0x72, 0x30, 0xda, 0x3b, 0x61, 0x83, 0x5c, 0x85, 0x12, 0xc4, 0x87, + 0x38, 0x75, 0x1b, 0x05, 0xa0, 0xa0, 0xab, 0x75, 0xfb, 0x39, 0x79, 0xb0, 0x1c, 0xfe, 0xb6, 0x21, + 0x02, 0xf8, 0x0e, 0x49, 0xa8, 0x5d, 0x3f, 0x00, 0x7d, 0x46, 0x67, 0xc3, 0x77, 0xa6, 0x78, 0x56, + 0x65, 0x95, 0xce, 0x66, 0x19, 0x4f, 0x16, 0x62, 0x7b, 0xde, 0x8d, 0xc2, 0x47, 0xeb, 0xcd, 0x77, + 0xd7, 0x98, 0x29, 0x97, 0x0c, 0xde, 0x73, 0x50, 0x16, 0x4c, 0x7c, 0xde, 0x7c, 0x93, 0xe3, 0x6f, + 0xa6, 0x95, 0x30, 0xa7, 0xcb, 0x7c, 0xe6, 0xff, 0x2e, 0x1f, 0x1a, 0x3f, 0x98, 0x86, 0x0d, 0x57, + 0xb2, 0x10, 0x07, 0x69, 0xeb, 0x26, 0xe4, 0x80, 0x91, 0x15, 0xea, 0x8d, 0x2b, 0xc6, 0xb7, 0x86, + 0xad, 0x68, 0xec, 0x94, 0x25, 0xe3, 0x5b, 0x9e, 0xd8, 0xcf, 0x29, 0xd8, 0x29, 0x06, 0x30, 0x51, + 0x98, 0x81, 0x84, 0x27, 0xfd, 0x91, 0xef, 0x51, 0xe6, 0xf5, 0x7b, 0x78, 0x58, 0x16, 0x3c, 0xb9, + 0x30, 0xd1, 0x72, 0xe5, 0xfd, 0x9a, 0x1c, 0x87, 0x62, 0xed, 0xde, 0xcd, 0x7d, 0x7f, 0x8d, 0x02, + 0xbd, 0xc7, 0x93, 0x87, 0xf0, 0x9d, 0xf4, 0x38, 0x96, 0xf3, 0xf7, 0x22, 0xf6, 0xc4, 0x01, 0x5a, + 0x43, 0xd1, 0x9b, 0x3b, 0xdc, 0x84, 0xbc, 0x1a, 0x6a, 0x3a, 0x79, 0x43, 0x79, 0x18, 0xf7, 0x71, + 0x2f, 0x99, 0x10, 0x86, 0x58, 0xcc, 0xda, 0x29, 0xda, 0xb7, 0x88, 0x68, 0xf5, 0xe8, 0xd0, 0x3b, + 0x04, 0x3f, 0x5a, 0x92, 0xab, 0x05, 0xa7, 0x2d, 0xef, 0xc9, 0x10, 0xd4, 0xe6, 0xdb, 0xea, 0xad, + 0x0f, 0xad, 0x7b, 0xba, 0x13, 0xdb, 0xac, 0x9d, 0x9a, 0xae, 0x75, 0xf7, 0x04, 0xdf, 0x2c, 0xec, + 0x50, 0xa1, 0x44, 0xa7, 0x72, 0x6d, 0x30, 0xb7, 0x8d, 0xc3, 0xad, 0x40, 0x4f, 0x2e, 0xc2, 0xc9, + 0x94, 0xb3, 0x3b, 0x04, 0x25, 0xe3, 0xa3, 0x2d, 0x97, 0xb7, 0x97, 0xf3, 0xb2, 0x54, 0xbd, 0x86, + 0x86, 0xf3, 0xab, 0x6c, 0xac, 0x6e, 0x52, 0x95, 0xe5, 0xe6, 0xd3, 0x3b, 0xb6, 0x80, 0xef, 0x00, + 0xc7, 0x26, 0x4b, 0x2d, 0xc1, 0x7d, 0xed, 0x80, 0x6c, 0x83, 0x6b, 0xc2, 0xf5, 0xf3, 0xc9, 0xe7, + 0xa1, 0x26, 0x1b, 0x2a, 0x52, 0x6b, 0xf9, 0x0a, 0x6e, 0x9e, 0xcc, 0x82, 0x64, 0xcd, 0x69, 0x25, + 0x4c, 0x1b, 0xed, 0xe9, 0x00, 0x63, 0x19, 0x7b, 0x81, 0x38, 0x40, 0xcc, 0xe4, 0xbd, 0x56, 0x9f, + 0x6e, 0x8d, 0xc2, 0xf1, 0xfd, 0xf1, 0x99, 0x0f, 0x6d, 0x61, 0x6c, 0xd1, 0x21, 0x08, 0xad, 0x7b, + 0x84, 0x20, 0x37, 0xfe, 0xfa, 0x7a, 0x99, 0xad, 0x61, 0xba, 0x51, 0xcb, 0x20, 0x5c, 0xf9, 0x42, + 0x6d, 0xf0, 0x3f, 0x2d, 0x8e, 0xc0, 0xc3, 0xc3, 0x43, 0xd0, 0xa9, 0x6f, 0x08, 0xdf, 0x6a, 0x17, + 0x80, 0x1b, 0x97, 0x15, 0x38, 0x7b, 0x34, 0x06, 0xc7, 0xf6, 0xc6, 0x40, 0x3b, 0x5b, 0xeb, 0xd4, + 0x37, 0x0b, 0x7e, 0xf8, 0x2b, 0x03, 0x2f, 0x1a, 0x4a, 0x73, 0x07, 0xf4, 0xfc, 0x22, 0xfc, 0xeb, + 0xef, 0x85, 0x2b, 0x7d, 0x1e, 0xb1, 0x68, 0x53, 0x3e, 0x7b, 0x11, 0x57, 0xb2, 0x2a, 0x97, 0xe1, + 0x6e, 0xae, 0xe5, 0x53, 0xc3, 0x50, 0x7c, 0xd3, 0x7a, 0x6a, 0x6a, 0xc4, 0x27, 0x18, 0x0c, 0xc0, + 0xa4, 0x5f, 0xe4, 0x40, 0xb7, 0x81, 0x89, 0x99, 0x96, 0x11, 0x5e, 0x65, 0x61, 0x9e, 0x3b, 0x80, + 0xde, 0xf0, 0xf7, 0xaf, 0xbf, 0x94, 0xc1, 0xd9, 0x23, 0xd8, 0x03, 0x2a, 0x8e, 0x30, 0xda, 0xa9, + 0x44, 0x30, 0x14, 0x80, 0x16, 0xed, 0x83, 0x50, 0x38, 0x2c, 0x04, 0x8f, 0x7c, 0xd7, 0x59, 0xc7, + 0x8d, 0xe0, 0xb9, 0xd4, 0xed, 0x7f, 0x28, 0x83, 0x43, 0xff, 0x8c, 0x82, 0x76, 0x51, 0xc8, 0x65, + 0xd7, 0xac, 0x13, 0x80, 0x8e, 0xd8, 0x2b, 0xba, 0xf6, 0x0f, 0x41, 0x7b, 0x5c, 0x0b, 0xd0, 0xfd, + 0x26, 0x2f, 0x82, 0xe7, 0x0e, 0xf0, 0xa2, 0x52, 0xd5, 0x49, 0xc6, 0x7d, 0x7d, 0x11, 0xae, 0x0e, + 0x8e, 0xf0, 0x1d, 0x90, 0x61, 0x2f, 0xf9, 0x0e, 0xf0, 0x1d, 0x90, 0x61, 0x0b, 0x64, 0x58, 0xbc, + 0xdf, 0x03, 0x7c, 0x07, 0x64, 0xd8, 0x02, 0x19, 0x16, 0xef, 0xf7, 0x00, 0xdf, 0x01, 0x19, 0xb6, + 0x00, 0x8a, 0x4f, 0x76, 0x6a, 0x26, 0x9d, 0x1a, 0x7a, 0xde, 0x03, 0xd6, 0xae, 0x5d, 0x2b, 0x0e, + 0x10, 0xf2, 0x83, 0x84, 0x14, 0xd3, 0x81, 0x2c, 0xaf, 0xc3, 0x9d, 0x3b, 0x77, 0x98, 0x2e, 0x74, + 0x6a, 0x93, 0x74, 0xa0, 0xe3, 0x49, 0x5e, 0x07, 0x67, 0x6b, 0xfa, 0x14, 0x68, 0x37, 0x7a, 0xf4, + 0x68, 0xa0, 0xf3, 0x57, 0xf8, 0xf1, 0x1d, 0x38, 0x7c, 0xf8, 0x30, 0x9c, 0x3c, 0x79, 0x92, 0x71, + 0x8d, 0x44, 0x12, 0xcf, 0x7a, 0x53, 0x20, 0xc6, 0x16, 0x0b, 0xfc, 0x76, 0x0f, 0xe0, 0x79, 0x48, + 0xd8, 0xbd, 0x7b, 0x37, 0xf4, 0xee, 0xdd, 0x9b, 0x7d, 0x6a, 0xc7, 0x16, 0x61, 0x0a, 0x91, 0x6c, + 0xdf, 0x8a, 0xc0, 0x77, 0x4a, 0x33, 0x63, 0xd1, 0x79, 0x45, 0x3c, 0x79, 0x07, 0xed, 0xdb, 0xb7, + 0x07, 0x82, 0x1d, 0x3b, 0x76, 0x0c, 0x0e, 0x1c, 0x38, 0x00, 0x64, 0xc0, 0xae, 0x5d, 0xbb, 0x42, + 0x8f, 0x1e, 0x3d, 0x00, 0xbf, 0x8b, 0x68, 0x4b, 0x45, 0x3c, 0x11, 0x08, 0x2b, 0x56, 0xac, 0x60, + 0xb8, 0x78, 0x28, 0x14, 0xb6, 0x6d, 0xdb, 0x66, 0x8b, 0x8e, 0x3e, 0xbd, 0x84, 0xe7, 0xd7, 0x00, + 0xdf, 0x9a, 0xcc, 0x86, 0x0f, 0x3a, 0x22, 0xdc, 0xbc, 0x79, 0x73, 0xc0, 0x93, 0x7e, 0x30, 0x70, + 0xe0, 0x40, 0x5b, 0x67, 0x33, 0xbf, 0xfa, 0xea, 0x2b, 0xa0, 0x03, 0xd7, 0x3c, 0x64, 0x65, 0x65, + 0x41, 0x87, 0x0e, 0x1d, 0x2c, 0x4f, 0x8e, 0x53, 0xdd, 0xa9, 0xc1, 0x50, 0xbd, 0xf3, 0xf3, 0xf3, + 0xd9, 0x67, 0x9f, 0xb8, 0x0d, 0xf6, 0xef, 0xdf, 0xcf, 0xe0, 0x3d, 0x7b, 0xf6, 0x84, 0x3e, 0x7d, + 0xfa, 0x70, 0xb6, 0xc9, 0x63, 0xed, 0xb9, 0x31, 0xa3, 0xfc, 0xa5, 0x4b, 0x97, 0x14, 0xec, 0xa2, + 0x74, 0x4b, 0x51, 0xfc, 0xe8, 0xe3, 0x93, 0x72, 0x5e, 0x9b, 0x9e, 0x30, 0x61, 0x82, 0x11, 0x2b, + 0x15, 0x8c, 0x9f, 0xd6, 0x25, 0x5a, 0xa3, 0x77, 0x6b, 0xab, 0x90, 0x31, 0xb3, 0x6a, 0xd5, 0x2a, + 0x9d, 0x4c, 0xfa, 0x02, 0x15, 0xff, 0xf0, 0x25, 0xd7, 0xa1, 0x4b, 0x97, 0x2e, 0x0a, 0x36, 0x08, + 0x2d, 0xb9, 0xc8, 0x77, 0xee, 0xdc, 0x59, 0xc7, 0x87, 0x68, 0x8d, 0x4e, 0xfd, 0x72, 0xa2, 0x2d, + 0x5b, 0xb6, 0xe8, 0x68, 0xf0, 0xe3, 0x54, 0x3a, 0x18, 0xd7, 0x01, 0x1b, 0x16, 0x27, 0xb5, 0x8c, + 0x75, 0x07, 0x0d, 0xad, 0xb0, 0xb5, 0x67, 0x58, 0xdf, 0x7c, 0xf3, 0x4d, 0x15, 0xfa, 0xa9, 0x53, + 0xa7, 0x94, 0x1a, 0x35, 0x6a, 0x08, 0xa5, 0xe8, 0xcc, 0xb6, 0x55, 0x70, 0xea, 0x00, 0xe2, 0x15, + 0x0e, 0x87, 0x15, 0x6c, 0x75, 0x3a, 0xb6, 0x64, 0x70, 0x3c, 0x55, 0x2c, 0x64, 0x6f, 0xda, 0xb4, + 0x49, 0x87, 0x63, 0x04, 0xe0, 0xef, 0x15, 0x4f, 0xe6, 0x00, 0x4e, 0xcb, 0x5f, 0x98, 0x4e, 0xf8, + 0x74, 0x9e, 0x9d, 0x9f, 0xcf, 0xa5, 0x72, 0xb2, 0x07, 0x77, 0x00, 0xbe, 0x83, 0x41, 0xc1, 0x9e, + 0xc9, 0xc9, 0x4c, 0x63, 0xd7, 0x17, 0x61, 0xba, 0x68, 0x4e, 0x9b, 0x36, 0x0d, 0xe5, 0x25, 0x02, + 0x0d, 0x01, 0x7c, 0x48, 0x21, 0x28, 0x75, 0x73, 0x1a, 0x2a, 0x52, 0x15, 0x76, 0xed, 0xda, 0x05, + 0xad, 0x5a, 0xb5, 0x62, 0x27, 0xa9, 0xe5, 0x0b, 0x38, 0xa5, 0x73, 0x72, 0x72, 0x54, 0xb3, 0x19, + 0x2f, 0x2e, 0xa8, 0x8b, 0x16, 0x2d, 0x02, 0x6c, 0x64, 0xa2, 0x7a, 0x83, 0x07, 0x0f, 0x16, 0xe9, + 0x58, 0x2c, 0x06, 0xf2, 0xd7, 0xcb, 0x45, 0x81, 0x26, 0xe1, 0xda, 0x01, 0xf8, 0xc6, 0x01, 0x9d, + 0x00, 0x74, 0x33, 0x3b, 0x62, 0xce, 0x65, 0xd0, 0xb5, 0x80, 0x3e, 0x6f, 0x9d, 0x8a, 0x80, 0x5f, + 0xca, 0x03, 0x3a, 0x3f, 0x7f, 0xf9, 0xf2, 0x65, 0xc6, 0xee, 0xf8, 0xf1, 0xe3, 0xec, 0xc0, 0x34, + 0xc9, 0xe4, 0x3f, 0xba, 0x8e, 0x78, 0x19, 0xb4, 0x6f, 0x1a, 0xa1, 0x86, 0xe0, 0x38, 0x98, 0xf6, + 0x0d, 0x83, 0x02, 0xed, 0x10, 0x84, 0xc2, 0x58, 0x97, 0xa3, 0x8f, 0x41, 0xe0, 0x3b, 0x2e, 0x44, + 0xf7, 0x23, 0x38, 0x5e, 0x14, 0x15, 0x3c, 0xf7, 0xaf, 0xe2, 0xb2, 0x64, 0xc9, 0x12, 0xa5, 0x53, + 0xa7, 0x4e, 0x0a, 0xe1, 0xd3, 0xaf, 0x56, 0xad, 0x5a, 0x82, 0x86, 0x8e, 0xd4, 0x73, 0x38, 0x1d, + 0x9b, 0xa7, 0xef, 0x29, 0xc8, 0x61, 0xcd, 0x9a, 0x35, 0x02, 0x97, 0xf8, 0x17, 0x16, 0x16, 0x2a, + 0xaf, 0xbe, 0xfa, 0xaa, 0x82, 0xef, 0xcb, 0x50, 0xe6, 0xce, 0x9d, 0xab, 0x1a, 0x7e, 0xa8, 0xbc, + 0x61, 0xc3, 0x86, 0x4a, 0x51, 0x51, 0x91, 0xcc, 0x82, 0x7d, 0x44, 0x99, 0xae, 0x4d, 0xd8, 0x8b, + 0x84, 0x2c, 0x59, 0x6f, 0x1a, 0xc2, 0xb8, 0x0e, 0xf4, 0x31, 0x0a, 0x7c, 0xcf, 0x87, 0xa0, 0xa7, + 0x6f, 0x42, 0xd0, 0x39, 0x70, 0x2d, 0x3e, 0xbd, 0xd2, 0x82, 0xc2, 0xd6, 0xad, 0x5b, 0x59, 0xdd, + 0xb8, 0x4d, 0x28, 0xc6, 0x8b, 0xba, 0xf2, 0xc1, 0x07, 0x1f, 0x08, 0x1e, 0x46, 0x09, 0xd7, 0xd3, + 0x50, 0xfa, 0x42, 0xe2, 0xc4, 0x89, 0x13, 0x81, 0x5e, 0x46, 0x72, 0xe2, 0xc4, 0x09, 0x36, 0x33, + 0x42, 0xa5, 0x01, 0xc7, 0x48, 0x40, 0xa5, 0x20, 0x37, 0x57, 0xbf, 0xbb, 0xec, 0xeb, 0xaf, 0xbf, + 0x66, 0x53, 0x50, 0x9a, 0x7f, 0x6b, 0x43, 0x49, 0x49, 0x09, 0x2b, 0x23, 0x38, 0x0d, 0x27, 0x78, + 0xe1, 0x57, 0xa1, 0x10, 0xcf, 0x01, 0x03, 0x06, 0xb0, 0x97, 0x3e, 0x7c, 0xf2, 0xc9, 0x27, 0x70, + 0xf0, 0xe0, 0x41, 0xf6, 0x23, 0xa4, 0x82, 0x82, 0x02, 0x78, 0xf9, 0xe5, 0x97, 0x61, 0xf2, 0xe4, + 0xc9, 0x30, 0x6a, 0xd4, 0x28, 0xc0, 0xf7, 0x21, 0x00, 0x7e, 0x8f, 0x82, 0x0d, 0x81, 0x32, 0x13, + 0x9a, 0xb1, 0xd0, 0xd0, 0x44, 0x43, 0x23, 0xcd, 0x9c, 0xb4, 0x81, 0x16, 0x64, 0x7c, 0x51, 0x46, + 0x2f, 0x4e, 0x21, 0x7d, 0x79, 0x28, 0x2b, 0x2b, 0x63, 0x79, 0x99, 0x8e, 0x74, 0xbe, 0x7e, 0xfd, + 0x3a, 0x43, 0xa1, 0x3a, 0xc9, 0x5f, 0x8b, 0x24, 0x20, 0xe5, 0xb5, 0x30, 0xce, 0x4f, 0xc4, 0x46, + 0x5e, 0x31, 0x83, 0xc9, 0x3d, 0xa0, 0xb2, 0xdf, 0xad, 0x30, 0x93, 0xf1, 0x4d, 0x83, 0xdb, 0x5a, + 0x07, 0xd0, 0x67, 0x4e, 0x71, 0x86, 0x23, 0x9c, 0xa6, 0x4d, 0x50, 0xcb, 0xa7, 0x45, 0x95, 0x1f, + 0x9c, 0x5b, 0xc0, 0x96, 0x03, 0xf8, 0x62, 0xc3, 0xa8, 0x3b, 0xd1, 0x32, 0x1e, 0xc7, 0x75, 0x5b, + 0x8b, 0x1f, 0xe7, 0xea, 0xdd, 0xff, 0x14, 0xb6, 0x1c, 0x70, 0xff, 0x9b, 0x21, 0x73, 0x35, 0x74, + 0x3d, 0x0d, 0xcd, 0x9c, 0xca, 0xf7, 0x97, 0x64, 0xdf, 0x01, 0x19, 0xf6, 0xa7, 0xef, 0x00, 0xdf, + 0x01, 0x19, 0xb6, 0x40, 0x86, 0xc5, 0xfb, 0x3d, 0x20, 0xc3, 0x0e, 0xf8, 0x3f, 0xb8, 0x3e, 0x1b, + 0x7a, 0x52, 0x1b, 0x0a, 0x83, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, + 0x82 +}; -static const u_int8_t FLEXXMLIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x30, 0x39, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x9d, 0x3c, 0x78, 0xe3, 0x00, 0x00, 0x05, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x59, 0x4c, 0x1b, 0x57, 0x14, 0xc5, 0x0b, 0xbb, 0xc1, 0x26, 0xa2, 0x31, 0x56, 0x58, 0x4c, 0xb1, 0x1b, 0x37, 0x15, 0x8e, 0x42, 0x05, 0x94, 0x25, 0x88, 0x25, 0x6c, 0x05, 0x52, 0x14, 0x0a, 0xfd, 0xa8, 0x08, 0x1f, 0x91, 0xe0, 0x83, 0x02, 0xa2, 0x2a, 0x6a, 0xfb, 0xd3, 0x82, 0x00, 0x15, 0x3e, 0x8a, 0x8a, 0x10, 0x42, 0x42, 0x4a, 0xbf, 0x10, 0x12, 0x84, 0x06, 0xd5, 0x12, 0x15, 0x5b, 0x49, 0x0a, 0x51, 0x31, 0x34, 0xdd, 0x00, 0xa5, 0xb5, 0x4d, 0x42, 0x83, 0xa1, 0x24, 0x0a, 0xc4, 0x94, 0x60, 0x03, 0xb6, 0xb1, 0x7b, 0x9d, 0x57, 0xdc, 0x67, 0x9b, 0x24, 0xe3, 0x19, 0x3b, 0x08, 0x69, 0x46, 0x23, 0xfb, 0xbe, 0xf3, 0xee, 0xbd, 0xef, 0xdc, 0x7b, 0xdf, 0x32, 0x33, 0x0c, 0xb3, 0xd9, 0xec, 0x71, 0x9c, 0x2f, 0xe6, 0x71, 0x26, 0x6f, 0xe1, 0x4e, 0x07, 0x70, 0xd4, 0x15, 0xa4, 0x2b, 0x40, 0x57, 0x80, 0x62, 0x06, 0xe8, 0x29, 0x44, 0x31, 0x81, 0x94, 0xcd, 0xe9, 0x0a, 0x50, 0x4e, 0x21, 0x45, 0x07, 0x74, 0x05, 0x28, 0x26, 0x90, 0xb2, 0x39, 0x5d, 0x81, 0xc3, 0x52, 0xa8, 0xff, 0x67, 0xdb, 0x11, 0x36, 0xea, 0x76, 0x3d, 0x4c, 0xae, 0x7f, 0xf2, 0x75, 0x71, 0x05, 0x36, 0x15, 0xcb, 0xb7, 0x9b, 0xbe, 0x1e, 0x2e, 0xfe, 0xd4, 0x31, 0x80, 0xf5, 0xdf, 0x94, 0xdf, 0x15, 0x7d, 0xac, 0xec, 0x19, 0x36, 0x3c, 0xd1, 0x39, 0xf6, 0x92, 0x46, 0xd8, 0xa4, 0x2d, 0x6d, 0x0c, 0x4d, 0xe6, 0xd5, 0x1f, 0x7e, 0x51, 0xf5, 0x8d, 0xad, 0xff, 0xae, 0x02, 0x9c, 0xe5, 0xed, 0x69, 0xd3, 0x7b, 0xd0, 0xd0, 0x3d, 0xd8, 0x98, 0xeb, 0xbc, 0x76, 0xe7, 0xaa, 0x2c, 0x3c, 0x37, 0x41, 0x5c, 0x72, 0x21, 0x40, 0x28, 0x38, 0xe8, 0x21, 0xff, 0x4f, 0x35, 0x00, 0xc3, 0x96, 0x76, 0x49, 0x36, 0xb5, 0xf8, 0xcd, 0x04, 0x90, 0x23, 0xc8, 0xc2, 0xb8, 0xbb, 0x77, 0x6f, 0xf0, 0x26, 0xdc, 0xfc, 0xb8, 0x33, 0xa2, 0x92, 0x4c, 0x41, 0x92, 0x94, 0xa0, 0xe1, 0xa1, 0x6a, 0xe4, 0x03, 0xd8, 0x5a, 0xfa, 0x7b, 0xb1, 0x7f, 0x7c, 0x79, 0x58, 0x0e, 0x84, 0x70, 0xd7, 0xbe, 0xc1, 0x3c, 0x61, 0x7e, 0x32, 0x8e, 0x20, 0x99, 0x2b, 0x0a, 0x8b, 0xc8, 0x49, 0x58, 0xb9, 0xf9, 0xf3, 0xfe, 0xae, 0x1e, 0x21, 0x0f, 0x67, 0xef, 0xc0, 0xcd, 0x09, 0xe3, 0x8b, 0xde, 0x4d, 0x07, 0x13, 0xb6, 0x9f, 0x8f, 0xa3, 0xd5, 0x0b, 0x11, 0x86, 0xd3, 0xaf, 0x94, 0x66, 0xf3, 0xda, 0x8f, 0xf3, 0x8b, 0xfd, 0x63, 0x30, 0x36, 0xee, 0x9d, 0xc9, 0x66, 0x0b, 0x92, 0xa5, 0xc2, 0xfc, 0xf3, 0x82, 0x84, 0x68, 0x0f, 0x26, 0x03, 0xef, 0xc2, 0x65, 0xc3, 0xf6, 0x8e, 0x7a, 0x54, 0x0e, 0x45, 0xd3, 0x28, 0xee, 0xe3, 0xb8, 0xa7, 0xbf, 0xaf, 0x30, 0x2f, 0x49, 0x54, 0x9c, 0xe1, 0x1f, 0x7a, 0x12, 0xc7, 0x5f, 0x28, 0x3b, 0x1d, 0xc0, 0xad, 0x0f, 0xbf, 0x7a, 0x30, 0x3d, 0x8f, 0xfb, 0xe5, 0x46, 0x85, 0x42, 0xfe, 0x20, 0xbb, 0x5e, 0x3c, 0x0e, 0x8e, 0x3f, 0x5f, 0xde, 0x54, 0x2e, 0x43, 0x18, 0x10, 0x8c, 0x1e, 0x5b, 0xd3, 0x0c, 0x06, 0xe3, 0xcd, 0x4f, 0xca, 0x84, 0x17, 0xcf, 0x3f, 0xdf, 0x16, 0xef, 0x75, 0x7a, 0x0a, 0xe9, 0x37, 0xff, 0xdf, 0x22, 0x4f, 0xa5, 0xc6, 0x48, 0x2e, 0xe7, 0x05, 0xbd, 0x2e, 0xc4, 0x3d, 0x12, 0x94, 0x79, 0xaf, 0x85, 0x9f, 0xfb, 0xe8, 0xfd, 0xb3, 0x55, 0x25, 0x30, 0xa9, 0xfe, 0xb8, 0x2a, 0x7b, 0xa2, 0x7e, 0x08, 0x86, 0x30, 0x1d, 0x76, 0x35, 0x5b, 0x04, 0x3d, 0x20, 0x35, 0xa7, 0x03, 0xc0, 0xbd, 0xaf, 0xdd, 0x9a, 0x63, 0x30, 0x98, 0x91, 0x85, 0x29, 0xfc, 0xb8, 0x37, 0x70, 0x9c, 0xa0, 0x6c, 0xda, 0x33, 0xa8, 0xbf, 0xff, 0x69, 0x49, 0x36, 0x89, 0xd8, 0x13, 0xb4, 0xb2, 0x53, 0x73, 0x3a, 0x80, 0xc8, 0x77, 0x52, 0x20, 0x49, 0x68, 0xcf, 0x31, 0x19, 0x8d, 0x2b, 0x37, 0x6e, 0xc3, 0xed, 0x2f, 0x08, 0x06, 0x1c, 0x26, 0xb1, 0x4f, 0x30, 0xcf, 0x6e, 0x80, 0x43, 0x9b, 0x68, 0xfe, 0x2c, 0x8f, 0xc8, 0x0d, 0xdb, 0x36, 0x67, 0xc2, 0x2b, 0xe7, 0x4e, 0x3b, 0x9b, 0x0b, 0xa7, 0xd7, 0x80, 0x85, 0x90, 0xed, 0xae, 0x6f, 0xa5, 0xc8, 0x64, 0xb3, 0x04, 0x89, 0x52, 0x88, 0x24, 0xe4, 0xad, 0xc3, 0xd7, 0x31, 0x1c, 0xc6, 0xea, 0xd1, 0x99, 0x7b, 0xdf, 0x4e, 0x6a, 0xfe, 0xfc, 0xcb, 0x6a, 0x05, 0x02, 0xd3, 0x93, 0x1d, 0x9e, 0x15, 0x2f, 0x2a, 0xb9, 0x00, 0xf3, 0x0a, 0xc7, 0x89, 0xc8, 0xa4, 0x02, 0x38, 0x70, 0xbc, 0xa9, 0xb8, 0xaf, 0xea, 0x1b, 0x57, 0x8f, 0xcf, 0x9a, 0x0c, 0xc6, 0x03, 0xcc, 0xf2, 0xcf, 0x09, 0x3d, 0x99, 0x73, 0xed, 0x0b, 0x1c, 0x01, 0xf9, 0xf1, 0xc2, 0xdd, 0xc9, 0xaa, 0x2f, 0xed, 0xf6, 0x5c, 0x9f, 0x13, 0xdc, 0xa8, 0x4b, 0xa9, 0xaf, 0x5e, 0x4a, 0xf5, 0x0e, 0x0a, 0xb4, 0xd3, 0x27, 0xd8, 0x74, 0x7a, 0x0a, 0xe1, 0x7e, 0x79, 0xa7, 0x23, 0x62, 0x3f, 0xbb, 0x22, 0xfd, 0xa0, 0xf8, 0x2e, 0x1c, 0x4c, 0xd7, 0x6f, 0xec, 0x3e, 0xfe, 0x6f, 0xfd, 0xed, 0x3c, 0xd2, 0xe0, 0x6a, 0x48, 0xd6, 0x6f, 0x69, 0x71, 0xf6, 0x41, 0x92, 0x08, 0x71, 0x49, 0x66, 0x58, 0x66, 0x1c, 0x83, 0xcd, 0x72, 0x54, 0x26, 0x8e, 0x50, 0x0a, 0x00, 0x0d, 0xe3, 0x7d, 0x22, 0xf0, 0xcc, 0x95, 0x8b, 0x92, 0xcb, 0x6f, 0xab, 0xc7, 0x66, 0xe1, 0x68, 0xb3, 0xdb, 0xe0, 0xed, 0xa8, 0x30, 0x58, 0xcc, 0x53, 0x29, 0x31, 0xa2, 0xf7, 0x2e, 0x04, 0x9f, 0x15, 0xdb, 0x75, 0x91, 0x6c, 0xc2, 0xce, 0xe5, 0xda, 0xeb, 0xd1, 0xaf, 0x8a, 0x99, 0xcf, 0xbb, 0x1d, 0x7d, 0x02, 0x3e, 0xd7, 0xd1, 0xaf, 0x5d, 0x5b, 0x77, 0xec, 0xa2, 0x82, 0x50, 0x5a, 0x03, 0x24, 0x73, 0xe6, 0x52, 0x33, 0x17, 0x3f, 0x4e, 0xbb, 0x94, 0x1b, 0x21, 0x67, 0x74, 0x00, 0x84, 0xd2, 0xe4, 0x46, 0x25, 0xba, 0x02, 0x6e, 0x4c, 0x2e, 0x21, 0xd7, 0x74, 0x05, 0x08, 0xa5, 0xc9, 0x8d, 0x4a, 0xc7, 0xbe, 0x02, 0x2e, 0x78, 0x94, 0x20, 0x9d, 0xde, 0xfd, 0xfd, 0x7d, 0x38, 0x83, 0xc1, 0x9c, 0xcd, 0x26, 0x4f, 0xe3, 0xc8, 0x2a, 0x50, 0x5d, 0x5d, 0xed, 0xe5, 0xe5, 0xe5, 0xf9, 0xf4, 0x6a, 0x6f, 0x6f, 0x27, 0x9d, 0x85, 0x23, 0x0b, 0x20, 0x32, 0x32, 0x32, 0x2a, 0x2a, 0xca, 0xd7, 0xd7, 0x17, 0xa8, 0x6b, 0xb5, 0xda, 0xe3, 0x17, 0x40, 0x6d, 0x6d, 0xad, 0x52, 0xa9, 0xcc, 0xc8, 0xc8, 0x20, 0x4d, 0x1d, 0x19, 0x92, 0xa9, 0xc0, 0xf4, 0xf4, 0x74, 0x7a, 0x7a, 0x7a, 0x7c, 0x7c, 0x7c, 0x72, 0x72, 0xf2, 0xd4, 0xd4, 0xd4, 0xc8, 0xc8, 0x48, 0x62, 0x62, 0x22, 0x34, 0x8b, 0x8a, 0x8a, 0x76, 0x76, 0x76, 0x64, 0x32, 0x59, 0x52, 0x52, 0x52, 0x5a, 0x5a, 0x5a, 0x67, 0x67, 0x27, 0x9f, 0xcf, 0x17, 0x8b, 0xc5, 0xbd, 0xbd, 0xbd, 0x31, 0x31, 0x31, 0x21, 0x21, 0x21, 0xf5, 0xf5, 0xf5, 0x7b, 0x7b, 0x36, 0x1f, 0x91, 0x28, 0xb2, 0xb7, 0x98, 0x93, 0x78, 0x94, 0x6d, 0x69, 0x69, 0xb1, 0x0e, 0xdc, 0xd4, 0xd4, 0x54, 0x57, 0x57, 0x67, 0x6d, 0xaa, 0x54, 0xaa, 0xaa, 0xaa, 0x2a, 0x6b, 0xd3, 0x51, 0x80, 0x60, 0xf0, 0x11, 0xf3, 0xf3, 0xf3, 0x41, 0xa7, 0xb9, 0xb9, 0x19, 0x07, 0x9d, 0x92, 0xc9, 0x54, 0xa0, 0xa6, 0xa6, 0x66, 0x70, 0x70, 0x90, 0xc7, 0xb3, 0xbc, 0xbf, 0x4b, 0xa5, 0x52, 0x89, 0x44, 0x02, 0x42, 0x6e, 0x6e, 0xee, 0xcc, 0xcc, 0x8c, 0x48, 0x24, 0x6a, 0x6c, 0x6c, 0x84, 0x6a, 0x00, 0x52, 0x5a, 0x5a, 0x3a, 0x3e, 0x3e, 0x0e, 0x02, 0x5c, 0x43, 0x43, 0x43, 0xe5, 0xe5, 0xe5, 0x20, 0xcc, 0xcf, 0xdb, 0x7c, 0x53, 0x7a, 0xda, 0x49, 0xe9, 0x87, 0xcc, 0xfe, 0xe5, 0xe3, 0xe3, 0x53, 0x58, 0x58, 0xc8, 0xe5, 0x72, 0xb3, 0xb3, 0xb3, 0xcb, 0xca, 0xca, 0x74, 0x3a, 0x5d, 0x74, 0x74, 0x74, 0x5f, 0x5f, 0x5f, 0x40, 0x40, 0x00, 0x70, 0x01, 0x1c, 0x66, 0x0b, 0x08, 0x79, 0x79, 0x79, 0xb1, 0xb1, 0xb1, 0x20, 0xc0, 0x4e, 0x93, 0x95, 0x95, 0xb5, 0xb2, 0xb2, 0x02, 0xb2, 0x46, 0x73, 0xc8, 0xdb, 0x26, 0xe0, 0xa4, 0x2f, 0x32, 0x15, 0x40, 0x83, 0xc1, 0x2c, 0x6f, 0x68, 0x68, 0x00, 0x42, 0x30, 0xad, 0x3b, 0x3a, 0x3a, 0x10, 0x7b, 0x9c, 0x87, 0x9f, 0x9f, 0x1f, 0x7c, 0x69, 0x03, 0x04, 0x02, 0x80, 0x9d, 0x1e, 0xc9, 0x26, 0x93, 0x09, 0xd7, 0xa1, 0x2e, 0x93, 0x0f, 0x00, 0x32, 0xda, 0xd5, 0xd5, 0x05, 0xd5, 0x00, 0x12, 0x15, 0x15, 0x15, 0x1b, 0x1b, 0x44, 0xbf, 0x4e, 0x53, 0x27, 0x8d, 0x7b, 0x20, 0x19, 0x00, 0xd0, 0xcd, 0xc9, 0xc9, 0x59, 0x5d, 0x5d, 0x1d, 0x18, 0x18, 0xa8, 0xac, 0xac, 0x54, 0x28, 0x14, 0x05, 0x05, 0x05, 0xd6, 0xed, 0x1c, 0x56, 0x21, 0x8c, 0x81, 0x7e, 0xf1, 0xc1, 0x70, 0x19, 0x4a, 0x61, 0x34, 0x1a, 0x91, 0x0e, 0x2e, 0xe3, 0x3a, 0x84, 0x64, 0xa7, 0x96, 0x3c, 0x52, 0x86, 0xa5, 0x89, 0x12, 0x0f, 0xc7, 0x90, 0x5c, 0x2e, 0x6f, 0x6d, 0x6d, 0x45, 0x23, 0x41, 0x73, 0x62, 0x62, 0xa2, 0xad, 0xad, 0x0d, 0xcd, 0x96, 0xc0, 0xc0, 0xc0, 0x85, 0x85, 0x05, 0xd4, 0x05, 0x4b, 0xbc, 0xbb, 0xbb, 0x1b, 0x64, 0x16, 0x8b, 0xd5, 0xd3, 0xd3, 0x03, 0x26, 0x8e, 0x8f, 0x0f, 0x1c, 0x0e, 0x67, 0x74, 0x74, 0xd4, 0x59, 0x3e, 0x64, 0x2a, 0x00, 0xfc, 0xe0, 0x29, 0x00, 0xd8, 0x80, 0x00, 0x59, 0xd4, 0xeb, 0xf5, 0x88, 0xb1, 0x15, 0x64, 0x32, 0x2d, 0x6e, 0x81, 0x22, 0x5c, 0xe8, 0xac, 0x05, 0x04, 0x2d, 0x12, 0x08, 0x00, 0x28, 0x82, 0x3e, 0x32, 0x41, 0xe1, 0xa1, 0x5f, 0x47, 0x04, 0xef, 0x7d, 0x96, 0x4c, 0x7f, 0x95, 0x78, 0x56, 0x66, 0x5e, 0x16, 0x4e, 0x66, 0x0a, 0xbd, 0x2c, 0x6e, 0x84, 0xc6, 0xa1, 0x03, 0x20, 0x94, 0x26, 0x37, 0x2a, 0xd1, 0x15, 0x70, 0x63, 0x72, 0x09, 0xb9, 0xa6, 0x2b, 0x40, 0x28, 0x4d, 0x6e, 0x54, 0xa2, 0x2b, 0xe0, 0xc6, 0xe4, 0x12, 0x72, 0x4d, 0x57, 0x80, 0x50, 0x9a, 0xdc, 0xa8, 0xf4, 0x2f, 0x8a, 0xf9, 0x6c, 0x7c, 0x9d, 0x47, 0x95, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXHTMLIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa8, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x30, 0x39, 0x54, + 0x32, 0x33, 0x3a, 0x30, 0x32, 0x3a, 0x39, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, + 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, + 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, + 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, + 0x61, 0x3e, 0x0a, 0x3c, 0x50, 0x22, 0x3f, 0x00, 0x00, 0x05, 0xe7, 0x49, 0x44, 0x41, 0x54, 0x68, + 0x05, 0xed, 0x59, 0x6b, 0x4c, 0x5b, 0x55, 0x1c, 0xa7, 0xa5, 0xe5, 0xe5, 0x78, 0xb5, 0x94, 0xf2, + 0x4a, 0x00, 0x91, 0x47, 0xd8, 0x32, 0x51, 0x24, 0x7c, 0x70, 0x20, 0xf2, 0x34, 0x31, 0x13, 0x1f, + 0x0c, 0x30, 0x2c, 0xbc, 0x24, 0xca, 0xc6, 0x07, 0x1e, 0x09, 0x1f, 0xf8, 0x60, 0x42, 0x4c, 0xd0, + 0x84, 0x98, 0x98, 0xf1, 0xc5, 0x69, 0x54, 0x60, 0x3a, 0x82, 0x3a, 0x5d, 0x98, 0x24, 0xdb, 0x88, + 0x01, 0x24, 0x3a, 0x32, 0xca, 0x63, 0x4c, 0x26, 0x8f, 0x05, 0x48, 0x86, 0x06, 0x28, 0x14, 0x4a, + 0x5b, 0x1e, 0x85, 0xb6, 0xf8, 0x83, 0xa3, 0xd7, 0x6b, 0xcb, 0x6e, 0x6f, 0x7b, 0xe9, 0x08, 0xc9, + 0x3d, 0x69, 0x2e, 0xff, 0xf3, 0x3b, 0xff, 0xf7, 0xff, 0x7f, 0xce, 0x69, 0x2f, 0x82, 0xdd, 0xdd, + 0x5d, 0xa7, 0xe3, 0x3c, 0x84, 0xc7, 0xd9, 0xf9, 0x3d, 0xdf, 0xf9, 0x00, 0x8e, 0xba, 0x82, 0x7c, + 0x05, 0xf8, 0x0a, 0x70, 0xcc, 0x00, 0xdf, 0x42, 0x1c, 0x13, 0xc8, 0x59, 0x9c, 0xaf, 0x00, 0xe7, + 0x14, 0x72, 0x54, 0xc0, 0x57, 0x80, 0x63, 0x02, 0x39, 0x8b, 0xf3, 0x15, 0x38, 0x28, 0x85, 0xab, + 0x86, 0x15, 0x4b, 0x78, 0xdd, 0xa4, 0x33, 0x39, 0x99, 0x2c, 0x71, 0x8e, 0xc8, 0x21, 0x57, 0xe0, + 0xc1, 0xc6, 0x68, 0xed, 0xec, 0xc5, 0x94, 0xfb, 0xcf, 0x5b, 0xba, 0x35, 0xa0, 0xbd, 0x93, 0x3c, + 0xfa, 0xec, 0x67, 0x0b, 0x97, 0x34, 0x46, 0xb5, 0xe5, 0xaa, 0xdd, 0x88, 0xe0, 0x50, 0x7e, 0x0f, + 0x20, 0xb5, 0xb7, 0x57, 0x7f, 0x6a, 0x5e, 0xb8, 0xac, 0xd0, 0xf6, 0xc3, 0x15, 0x57, 0xa1, 0xdb, + 0xc4, 0x0b, 0x0b, 0x66, 0x3e, 0xf5, 0xac, 0x75, 0x95, 0x4e, 0xe6, 0x02, 0x74, 0x77, 0xf6, 0x78, + 0x53, 0x9a, 0x57, 0x1c, 0x50, 0xfe, 0x8c, 0x5b, 0xb4, 0x19, 0x8f, 0x1d, 0x53, 0x91, 0x1d, 0x32, + 0x74, 0x91, 0x35, 0xa3, 0xba, 0x7d, 0xa9, 0xf5, 0xeb, 0xc5, 0x2f, 0xfe, 0xd2, 0xcf, 0xd1, 0x71, + 0x06, 0x7a, 0xd3, 0xb8, 0x71, 0x55, 0xd9, 0x8c, 0xcf, 0x19, 0xef, 0x94, 0x12, 0xf9, 0x85, 0x54, + 0x9f, 0x2c, 0x06, 0x66, 0xab, 0x4b, 0xf6, 0x07, 0xf0, 0x70, 0x73, 0xa2, 0x65, 0xf1, 0xf2, 0x75, + 0xd5, 0x77, 0x70, 0x88, 0x6e, 0xc6, 0xdf, 0x25, 0xe0, 0x9c, 0x5f, 0x01, 0x1d, 0x21, 0x74, 0x8c, + 0xfb, 0xc9, 0x37, 0xfc, 0xf2, 0x6e, 0xae, 0xdc, 0xd8, 0x32, 0x6d, 0x12, 0xe4, 0xd7, 0xb5, 0x5e, + 0x7c, 0xc2, 0xdc, 0x9e, 0x2e, 0x94, 0xbf, 0x7b, 0x4e, 0x56, 0x70, 0x42, 0xe8, 0x69, 0x29, 0x65, + 0x15, 0xb1, 0xb9, 0x85, 0x76, 0x9d, 0x76, 0x7b, 0xd4, 0x5d, 0xcd, 0x8b, 0x9f, 0xc2, 0x36, 0x5d, + 0xbb, 0x58, 0x28, 0x4e, 0xf5, 0x79, 0x25, 0xd7, 0xef, 0x7c, 0x8a, 0x4f, 0x86, 0xf0, 0xf1, 0xbf, + 0x93, 0xb4, 0xc6, 0xb5, 0x0e, 0xd5, 0xb5, 0xf6, 0xa5, 0x2b, 0x0f, 0xd6, 0x47, 0xe9, 0xe2, 0x27, + 0x9c, 0x3d, 0x11, 0x43, 0x91, 0xfc, 0xbd, 0x50, 0xd7, 0x70, 0x3a, 0x6e, 0x95, 0xb6, 0x39, 0x80, + 0xe2, 0xa9, 0x9c, 0x5f, 0xd4, 0x3f, 0xd3, 0xf5, 0x46, 0x7b, 0xc4, 0xe6, 0xca, 0xce, 0xbf, 0x2e, + 0xcd, 0x93, 0x88, 0xa4, 0x74, 0x9c, 0x99, 0xfe, 0x63, 0xe3, 0x3e, 0xc2, 0x40, 0x30, 0x1a, 0xc3, + 0x7f, 0x7b, 0x5a, 0x20, 0x10, 0x7c, 0x14, 0x76, 0x29, 0x4f, 0x56, 0xc8, 0x2c, 0x4b, 0x5f, 0xb5, + 0xf9, 0x14, 0x5a, 0x35, 0xa8, 0x28, 0xf9, 0x2c, 0xc9, 0xd9, 0x8e, 0x93, 0x3d, 0xb7, 0x4e, 0xdd, + 0x29, 0x95, 0x5f, 0xb4, 0xc9, 0x7b, 0x68, 0x88, 0xf5, 0x38, 0xfd, 0x41, 0xe8, 0xc7, 0x03, 0xcf, + 0x4d, 0x7c, 0x12, 0xf1, 0x79, 0xb8, 0x5b, 0x04, 0xd1, 0x89, 0x13, 0x45, 0x65, 0x58, 0xa6, 0xf4, + 0xb3, 0x21, 0xec, 0xdf, 0x03, 0xd0, 0xde, 0xad, 0xbe, 0x85, 0x6e, 0x79, 0xdb, 0xbf, 0x38, 0xc9, + 0xeb, 0x65, 0x36, 0xc6, 0xcc, 0x78, 0xf4, 0xbb, 0x5b, 0x9d, 0xaa, 0xeb, 0xdf, 0x2e, 0x5d, 0x99, + 0xdd, 0x9a, 0x36, 0x5b, 0x62, 0x3f, 0xb5, 0x39, 0x80, 0x7c, 0x59, 0x91, 0x6a, 0x67, 0x99, 0x9c, + 0x39, 0x3b, 0xa6, 0x9d, 0x9b, 0x2b, 0x1d, 0xf8, 0x84, 0xb8, 0x86, 0xe6, 0xcb, 0x0a, 0xd1, 0xc4, + 0xfe, 0xe2, 0x00, 0x36, 0xb6, 0xff, 0xed, 0x9f, 0xef, 0x35, 0x86, 0x35, 0x3a, 0x7f, 0xa2, 0xd7, + 0x8b, 0x67, 0x6c, 0xcc, 0x85, 0xcd, 0x7b, 0x00, 0xf6, 0xcc, 0x4e, 0x7d, 0xca, 0x03, 0x91, 0x40, + 0x84, 0x33, 0x31, 0xdf, 0xbf, 0xe8, 0x25, 0xef, 0xf4, 0x03, 0xf7, 0xb1, 0xce, 0xa4, 0xbd, 0xa1, + 0xfa, 0xa1, 0x5d, 0xd9, 0xf2, 0xfb, 0xfa, 0x3d, 0x4a, 0x0a, 0x84, 0x8b, 0xd0, 0xe5, 0x35, 0x69, + 0x4e, 0x89, 0xbc, 0x1c, 0x7d, 0x45, 0xc7, 0xd9, 0xd0, 0xf6, 0x04, 0x40, 0xe9, 0x1d, 0xdb, 0xb8, + 0x87, 0xcb, 0xab, 0x73, 0xe5, 0xc7, 0x6d, 0xd3, 0x36, 0x05, 0x82, 0x08, 0x75, 0x0b, 0xef, 0x3d, + 0x3d, 0x42, 0x47, 0x40, 0x8f, 0xe8, 0x14, 0x05, 0x93, 0xd9, 0x66, 0x67, 0xae, 0x4c, 0xec, 0x5f, + 0x20, 0x7f, 0xa7, 0xc0, 0xbf, 0xd4, 0x4f, 0x24, 0x33, 0xe3, 0x67, 0x39, 0xe5, 0x14, 0x00, 0xb1, + 0xb1, 0xbc, 0xa3, 0xbc, 0xaa, 0xfc, 0xea, 0x1b, 0xe5, 0x97, 0xcb, 0x3b, 0x4b, 0x04, 0x61, 0xbe, + 0x89, 0x09, 0xcf, 0xa9, 0xa7, 0xe2, 0x4a, 0x02, 0xca, 0xcf, 0x4a, 0xde, 0x12, 0x0b, 0xc4, 0x2c, + 0x7d, 0x3d, 0x98, 0x0d, 0x1b, 0xff, 0x50, 0x86, 0xde, 0xa4, 0xbf, 0xb6, 0xd4, 0xf6, 0xea, 0x58, + 0x72, 0xd8, 0x5d, 0xef, 0x68, 0x85, 0xdc, 0x52, 0x67, 0xb7, 0xfa, 0x36, 0x96, 0x22, 0x06, 0x24, + 0x17, 0x1e, 0x16, 0xe2, 0x7b, 0x91, 0x25, 0x83, 0x7d, 0x88, 0x93, 0x7d, 0x62, 0x0c, 0x52, 0x77, + 0x35, 0xbf, 0x55, 0x4e, 0x97, 0x59, 0x32, 0x00, 0xff, 0xf0, 0xd1, 0xfb, 0x7f, 0xea, 0x1f, 0x59, + 0x2e, 0x71, 0x41, 0x0e, 0xa1, 0x85, 0x0e, 0xae, 0xec, 0x93, 0x42, 0x6d, 0xbe, 0xc8, 0x9e, 0x94, + 0x63, 0x6c, 0xed, 0xf0, 0x01, 0xb0, 0xcd, 0x94, 0xa3, 0xf8, 0xf8, 0x0a, 0x38, 0x2a, 0xb3, 0x6c, + 0xf5, 0xf2, 0x15, 0x60, 0x9b, 0x29, 0x47, 0xf1, 0x1d, 0xfb, 0x0a, 0xb0, 0xfa, 0x3a, 0x8d, 0x9b, + 0xd2, 0x68, 0x34, 0x0a, 0xf7, 0x87, 0xa3, 0x32, 0xb9, 0xaf, 0xd7, 0x60, 0x30, 0xe0, 0xaf, 0x4d, + 0x86, 0xac, 0x57, 0x60, 0x7c, 0x7c, 0x5c, 0x2a, 0x95, 0x8a, 0xc5, 0x62, 0x99, 0x8c, 0xe9, 0x0b, + 0x23, 0x6c, 0xf7, 0xf4, 0xf4, 0xcc, 0xcf, 0xcf, 0xdb, 0x17, 0xe1, 0xf4, 0xf4, 0x34, 0xb1, 0x02, + 0x43, 0x20, 0xd8, 0x2b, 0xb1, 0x1e, 0x80, 0x97, 0x97, 0x57, 0x48, 0x48, 0x08, 0x34, 0x6a, 0x34, + 0x1a, 0x06, 0xbd, 0x5d, 0x5d, 0x5d, 0xa9, 0xa9, 0xa9, 0x65, 0x65, 0x65, 0x0c, 0x3c, 0x0c, 0x4b, + 0x9e, 0x9e, 0x9e, 0xd1, 0xd1, 0xd1, 0x41, 0x41, 0x41, 0xe0, 0x59, 0x5f, 0x5f, 0x67, 0xe0, 0x34, + 0x5f, 0x62, 0xf3, 0x45, 0x6a, 0x68, 0x68, 0x08, 0x62, 0x22, 0x91, 0x88, 0x81, 0xb9, 0xa5, 0xa5, + 0x05, 0x3c, 0x09, 0x09, 0x09, 0x0c, 0x3c, 0x56, 0x97, 0x06, 0x07, 0x07, 0xa1, 0x04, 0x45, 0xb0, + 0xca, 0x49, 0x31, 0x58, 0xaf, 0x00, 0x34, 0x52, 0xa3, 0xad, 0xad, 0x2d, 0x32, 0x32, 0x12, 0xd9, + 0xca, 0xce, 0xce, 0x56, 0x2a, 0x95, 0x14, 0x8e, 0x36, 0x9b, 0x98, 0x98, 0xc0, 0x54, 0xab, 0xd5, + 0xf6, 0xee, 0x8f, 0x81, 0x81, 0x01, 0xd2, 0xd0, 0xd8, 0x3c, 0x39, 0x39, 0x39, 0x89, 0x89, 0x89, + 0x8d, 0x8d, 0x8d, 0xe9, 0xe9, 0xe9, 0x90, 0xad, 0xac, 0xac, 0xac, 0xad, 0xad, 0x95, 0x48, 0x24, + 0x59, 0x59, 0x59, 0xfd, 0xfd, 0x7b, 0x6f, 0xf2, 0x38, 0x0d, 0x2a, 0x14, 0x06, 0x82, 0x54, 0x00, + 0x66, 0x9c, 0x9d, 0x9d, 0x29, 0x63, 0x75, 0x75, 0x75, 0x44, 0x64, 0x78, 0x78, 0x98, 0x02, 0xe9, + 0x44, 0x43, 0x43, 0x03, 0x18, 0x96, 0x97, 0x99, 0xde, 0x32, 0x44, 0x45, 0x45, 0xd1, 0xed, 0x3a, + 0xbc, 0x02, 0x19, 0x19, 0x19, 0xc8, 0x74, 0x4d, 0x4d, 0x0d, 0x1c, 0xed, 0xec, 0xec, 0x24, 0xee, + 0x62, 0x87, 0x24, 0x25, 0x25, 0xc9, 0xe5, 0x72, 0x4c, 0x5d, 0x5d, 0x5d, 0x51, 0x22, 0x8c, 0xb8, + 0xb8, 0x38, 0xb4, 0x13, 0x10, 0xec, 0xc8, 0xf6, 0xf6, 0x76, 0x10, 0x38, 0x5b, 0xc6, 0xc6, 0xc6, + 0xd2, 0xd2, 0xd2, 0x40, 0x27, 0x27, 0x27, 0x4f, 0x4d, 0x4d, 0x01, 0xc1, 0x53, 0xaf, 0xd7, 0x03, + 0xb1, 0x7f, 0xd0, 0x13, 0xf0, 0x38, 0x9a, 0xaa, 0x00, 0x32, 0x04, 0x1e, 0x85, 0x42, 0x41, 0xec, + 0xad, 0xae, 0xae, 0x52, 0x22, 0x0c, 0x7b, 0x60, 0x64, 0x64, 0xef, 0xf7, 0x71, 0x4c, 0x4c, 0x0c, + 0x98, 0xab, 0xab, 0xab, 0x41, 0xd7, 0xd7, 0xd7, 0x83, 0x0e, 0x0c, 0x0c, 0x04, 0xbd, 0xb0, 0xb0, + 0x40, 0x29, 0x71, 0x6c, 0x05, 0xb0, 0x89, 0xe3, 0xe3, 0xe3, 0x61, 0x92, 0x1c, 0x4a, 0x20, 0xb6, + 0xb7, 0xff, 0xf7, 0x5b, 0x1e, 0x08, 0xc3, 0xf0, 0xf0, 0xf0, 0xc0, 0x2a, 0xde, 0xbd, 0xe1, 0x49, + 0xa7, 0x4d, 0x26, 0x4e, 0xff, 0x34, 0xb0, 0x6d, 0x13, 0x13, 0xff, 0x88, 0x13, 0x66, 0xbe, 0xa2, + 0x1f, 0x80, 0xe8, 0x74, 0x3a, 0x33, 0xdc, 0xd1, 0x53, 0x56, 0x01, 0xa0, 0xc4, 0x74, 0x3f, 0xa8, + 0x29, 0x45, 0x60, 0xd5, 0xdb, 0xdb, 0x1b, 0x4f, 0xf4, 0xf4, 0xec, 0xec, 0x2c, 0xda, 0xba, 0xbb, + 0xbb, 0xbb, 0xa2, 0xa2, 0xa2, 0xb5, 0xb5, 0x15, 0x20, 0x61, 0xa3, 0x33, 0xd3, 0x69, 0x4a, 0x33, + 0x4e, 0x2d, 0x1c, 0x59, 0x64, 0x4a, 0xa7, 0x29, 0x86, 0x83, 0x09, 0xe8, 0x62, 0x1e, 0x33, 0x33, + 0x33, 0xbe, 0xbe, 0xbe, 0x44, 0x38, 0x36, 0x36, 0x56, 0xad, 0x56, 0x93, 0xde, 0x05, 0x02, 0x02, + 0xb7, 0x1b, 0x11, 0x9f, 0x9c, 0x9c, 0x24, 0x3c, 0x28, 0x85, 0xbb, 0xbb, 0x3b, 0xa1, 0x33, 0x33, + 0x33, 0x37, 0x37, 0x37, 0x03, 0x02, 0xfe, 0x79, 0x5d, 0x57, 0x55, 0x55, 0x45, 0x0e, 0x00, 0xec, + 0xf5, 0xbe, 0xbe, 0x3e, 0x72, 0x6d, 0x61, 0x6f, 0x40, 0x49, 0x70, 0x70, 0x30, 0x11, 0xa1, 0x3f, + 0x21, 0xce, 0xec, 0x1b, 0x56, 0xad, 0x57, 0x00, 0x3d, 0x8a, 0xee, 0x27, 0x7a, 0xc9, 0x5d, 0x86, + 0x8b, 0x86, 0x4c, 0xc9, 0x8d, 0x43, 0x68, 0x1c, 0x88, 0x4d, 0x4d, 0x4d, 0x38, 0xe6, 0xc1, 0x8f, + 0x0a, 0xc0, 0x2d, 0xdc, 0xca, 0xcd, 0xcd, 0xcd, 0xb0, 0x41, 0xc4, 0xd1, 0x78, 0x88, 0x0d, 0xf7, + 0x3a, 0xf8, 0x81, 0x80, 0x0d, 0xcc, 0xa0, 0xc9, 0xd1, 0x4c, 0x3f, 0xa0, 0x89, 0x42, 0x3c, 0x0f, + 0xec, 0x55, 0x6a, 0x95, 0x10, 0x87, 0xfc, 0x56, 0x02, 0xee, 0xce, 0xcd, 0xcd, 0xa1, 0x62, 0xc4, + 0x39, 0x33, 0x63, 0x8e, 0x98, 0x1e, 0x72, 0x00, 0x8e, 0x70, 0x91, 0x59, 0xa7, 0xf5, 0x16, 0x62, + 0x96, 0x3f, 0xf2, 0x55, 0x3e, 0x80, 0xa3, 0x2e, 0x01, 0x5f, 0x01, 0xbe, 0x02, 0x1c, 0x33, 0xc0, + 0xb7, 0x10, 0xc7, 0x04, 0x72, 0x16, 0xe7, 0x2b, 0xc0, 0x39, 0x85, 0x1c, 0x15, 0x1c, 0xfb, 0x0a, + 0xfc, 0x0d, 0x0a, 0x08, 0x48, 0x44, 0xec, 0xf6, 0xcb, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -static const u_int8_t FLEXBinaryIcon2x[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, 0x2d, 0x32, 0x31, 0x54, 0x32, 0x31, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xce, 0xc3, 0x0a, 0xd6, 0x00, 0x00, 0x05, 0xc2, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x6f, 0x48, 0x64, 0x55, 0x14, 0x3f, 0x33, 0xe3, 0x8c, 0x63, 0xce, 0x44, 0x6e, 0x5b, 0xae, 0xd9, 0x22, 0xa8, 0x59, 0xae, 0x08, 0x91, 0x9a, 0x1b, 0xea, 0x87, 0x30, 0xd1, 0x45, 0x03, 0x29, 0x58, 0x61, 0x2b, 0xe9, 0x93, 0x89, 0x84, 0x44, 0x11, 0x51, 0x7d, 0x0b, 0x4a, 0x21, 0xb2, 0xed, 0x8b, 0xfa, 0x29, 0xa8, 0x2c, 0xf1, 0x83, 0x4a, 0x1b, 0xad, 0x6c, 0x61, 0x05, 0x9b, 0xc9, 0x36, 0xba, 0x9b, 0xe8, 0x1a, 0xa2, 0x28, 0xfe, 0xd7, 0x36, 0xf3, 0xcf, 0x6c, 0x3a, 0xce, 0x8c, 0x33, 0x9d, 0x3b, 0xf7, 0xcd, 0x9d, 0xf7, 0xe6, 0xcd, 0xcc, 0xfb, 0x3b, 0xc4, 0xc2, 0xbb, 0x1f, 0xc6, 0x73, 0xcf, 0xfd, 0x9d, 0xdf, 0xb9, 0xe7, 0x9c, 0xfb, 0xe7, 0x71, 0x35, 0x05, 0x83, 0x41, 0xb8, 0x97, 0x9b, 0xf9, 0x5e, 0x9e, 0x3c, 0x99, 0xbb, 0x11, 0xc0, 0xff, 0x5d, 0x41, 0xa3, 0x02, 0x46, 0x05, 0x34, 0x66, 0xc0, 0x58, 0x42, 0x1a, 0x13, 0xa8, 0xd9, 0x5c, 0x46, 0x05, 0x0e, 0xff, 0x82, 0xe0, 0x89, 0x66, 0x47, 0x3c, 0x02, 0x5d, 0x09, 0x53, 0x78, 0xc4, 0x42, 0x71, 0x67, 0x16, 0x7e, 0x7a, 0x13, 0xb6, 0x26, 0xe0, 0x68, 0x07, 0x52, 0xec, 0x70, 0xfa, 0x1c, 0x94, 0xbc, 0x01, 0x45, 0xaf, 0x08, 0x41, 0xbc, 0x1e, 0x06, 0x39, 0xf0, 0x1c, 0x78, 0xdd, 0x60, 0x3f, 0x05, 0x17, 0x7f, 0xe0, 0x0d, 0x84, 0x45, 0xa5, 0x84, 0xb3, 0x7d, 0x30, 0x71, 0x99, 0x18, 0x9f, 0x7f, 0x17, 0x0a, 0x5e, 0x0c, 0xb3, 0x44, 0xff, 0x8d, 0x13, 0x00, 0x1a, 0x5f, 0x7b, 0x0d, 0x7c, 0x87, 0x1c, 0xdc, 0xef, 0x81, 0xad, 0x9b, 0xf0, 0x7d, 0x33, 0x2c, 0xff, 0x08, 0x17, 0x3e, 0x07, 0x53, 0x2c, 0xab, 0xc5, 0xab, 0xb0, 0xf2, 0x0b, 0xc1, 0xa7, 0x67, 0x72, 0x56, 0xfc, 0x3f, 0x8a, 0x09, 0x83, 0x30, 0xf9, 0x19, 0x6c, 0x4d, 0x12, 0x8e, 0xc3, 0x3b, 0x7c, 0xa6, 0x28, 0x39, 0xd6, 0x12, 0x3a, 0xdc, 0x86, 0x6b, 0x2d, 0xdc, 0xec, 0x6d, 0xe9, 0x90, 0xf3, 0x2c, 0x38, 0x1f, 0xe1, 0xcc, 0x66, 0xbe, 0x82, 0x99, 0x2f, 0xa2, 0x28, 0x48, 0x77, 0x7d, 0x0c, 0xae, 0xbe, 0x1a, 0x43, 0x4f, 0x55, 0x4a, 0x09, 0x4f, 0x3c, 0x84, 0x6d, 0x73, 0x22, 0x2e, 0x21, 0x6f, 0x20, 0x56, 0x2e, 0x7f, 0xff, 0x18, 0x7c, 0x47, 0x04, 0xe3, 0xcc, 0x86, 0x97, 0xc7, 0xc1, 0x79, 0x96, 0xec, 0x81, 0x2b, 0x4d, 0x30, 0x37, 0x48, 0x94, 0xe3, 0x1f, 0x42, 0x51, 0x33, 0x98, 0xad, 0x44, 0x9e, 0xfd, 0x1a, 0xb6, 0x27, 0x61, 0xfd, 0x37, 0xd8, 0xb8, 0x41, 0xba, 0xf1, 0x9a, 0x4c, 0xc2, 0xbb, 0xeb, 0x70, 0xab, 0x1b, 0xdc, 0xab, 0xb0, 0xf0, 0x1d, 0x78, 0xf6, 0xe2, 0x91, 0x45, 0xe9, 0x45, 0x15, 0x08, 0x78, 0xe1, 0x56, 0x0f, 0x07, 0x2a, 0x7f, 0x87, 0xcc, 0x1e, 0x9b, 0xc9, 0x02, 0xd5, 0x97, 0xc1, 0x6c, 0x21, 0xf2, 0xde, 0x12, 0x2c, 0x5c, 0x21, 0x02, 0xb6, 0xdb, 0x5f, 0x82, 0xeb, 0x53, 0x89, 0xd9, 0xcb, 0x27, 0x3c, 0x58, 0x81, 0xf1, 0x8f, 0x00, 0x8b, 0x2c, 0x7b, 0xf6, 0x38, 0x05, 0x51, 0x00, 0xee, 0xb5, 0xc8, 0xd2, 0xcf, 0xbd, 0x10, 0x9a, 0x66, 0xe8, 0xc7, 0xf1, 0x28, 0x3c, 0x54, 0xcc, 0x75, 0xff, 0x99, 0x8b, 0xe8, 0x25, 0x25, 0xdd, 0x09, 0x85, 0x1e, 0x45, 0x4b, 0x08, 0xd3, 0x40, 0x1b, 0xe6, 0xfb, 0x81, 0x3c, 0x01, 0xf8, 0xd4, 0xe3, 0xb0, 0xfd, 0x07, 0xd1, 0x30, 0xcc, 0xf3, 0xdf, 0x80, 0xff, 0x98, 0xc3, 0xb8, 0x3e, 0x01, 0x57, 0x97, 0x00, 0x4f, 0x3b, 0x0c, 0x2c, 0x49, 0x78, 0xa6, 0x04, 0xda, 0xd6, 0x23, 0x0c, 0xdd, 0xd9, 0x11, 0x39, 0xbe, 0x24, 0x0e, 0x60, 0x99, 0x03, 0xdb, 0xee, 0xc7, 0xa5, 0x23, 0x30, 0xc4, 0xf3, 0x91, 0xb6, 0x83, 0x30, 0xc6, 0xfe, 0x60, 0x04, 0x60, 0x73, 0x46, 0x64, 0xbe, 0xc4, 0xc0, 0x92, 0x84, 0x66, 0x1b, 0x38, 0xc2, 0xa7, 0x05, 0x9f, 0x21, 0xa1, 0x2c, 0x5a, 0x42, 0x77, 0x37, 0x38, 0xbc, 0x59, 0x14, 0x1b, 0xd3, 0x30, 0x4c, 0x42, 0x6a, 0x6e, 0x90, 0x81, 0x99, 0x39, 0xb3, 0x62, 0x1a, 0x86, 0x61, 0x43, 0xb2, 0x05, 0x51, 0x00, 0x16, 0x3b, 0x67, 0x7b, 0xe2, 0x8d, 0x26, 0x61, 0x1a, 0x86, 0x89, 0x46, 0xc4, 0xea, 0x33, 0x30, 0x33, 0x67, 0x28, 0xa6, 0x61, 0x18, 0x36, 0x24, 0x5b, 0x10, 0x05, 0x90, 0x8a, 0x2b, 0x27, 0xd4, 0x7c, 0xff, 0x42, 0xd0, 0x2f, 0xe0, 0x39, 0x0e, 0x1f, 0x6d, 0x0c, 0x23, 0x18, 0x8e, 0xd3, 0x61, 0x60, 0xbd, 0x08, 0x85, 0x7e, 0x44, 0x01, 0x64, 0x3c, 0xc6, 0x01, 0x02, 0x7e, 0x72, 0x62, 0xf2, 0xdb, 0xee, 0x3c, 0xd7, 0x63, 0x18, 0xfe, 0x68, 0x3c, 0x99, 0x81, 0xf5, 0x22, 0x14, 0x3a, 0x12, 0x05, 0xf0, 0xf0, 0x93, 0xc0, 0x96, 0xe6, 0xca, 0xcf, 0x11, 0x30, 0xde, 0xa6, 0x7f, 0xdf, 0xe6, 0xba, 0x67, 0x4a, 0x23, 0x7a, 0x49, 0x49, 0x77, 0x42, 0xa1, 0x47, 0x51, 0x00, 0x78, 0x56, 0x9c, 0xbb, 0xc4, 0x61, 0x6e, 0x74, 0x82, 0x3f, 0x74, 0x25, 0x63, 0x1f, 0x2f, 0x60, 0x7a, 0x62, 0xde, 0x77, 0x1a, 0x9e, 0xb8, 0x28, 0x24, 0x49, 0xd8, 0xd3, 0x9d, 0x50, 0xe8, 0x4d, 0x74, 0xd4, 0xe0, 0xf0, 0x33, 0xef, 0x93, 0x6f, 0x84, 0xc0, 0x09, 0x59, 0x42, 0x3d, 0x67, 0xc9, 0x74, 0xd7, 0xae, 0xc3, 0x9d, 0x19, 0xce, 0xb0, 0xec, 0x2d, 0xb0, 0x3a, 0x84, 0x24, 0x52, 0x3d, 0xdd, 0x09, 0x79, 0x0e, 0x45, 0x15, 0xc0, 0xb1, 0x8c, 0x02, 0x38, 0xff, 0x1e, 0x87, 0xc1, 0x6f, 0x69, 0xfc, 0xb2, 0x60, 0xb3, 0xcf, 0x7a, 0x1a, 0x9e, 0x7a, 0x9d, 0x67, 0x2e, 0x4f, 0xd4, 0x9d, 0x90, 0xe7, 0x36, 0x56, 0x00, 0x38, 0x5c, 0xf9, 0x01, 0xbc, 0xf0, 0x6d, 0xe4, 0x23, 0x14, 0x35, 0xd6, 0x34, 0x28, 0x7f, 0x1b, 0x5e, 0xfa, 0x55, 0x71, 0xfa, 0xa9, 0x33, 0xdd, 0x09, 0xc3, 0x31, 0x98, 0x24, 0x9e, 0x16, 0xf1, 0x8a, 0xd9, 0xf9, 0x93, 0x7c, 0x96, 0xe2, 0x61, 0x82, 0x9f, 0x74, 0xda, 0x9b, 0xde, 0x84, 0x52, 0x01, 0x68, 0x9f, 0x71, 0x92, 0x19, 0xe2, 0x2c, 0xa1, 0x24, 0x7b, 0xd5, 0x91, 0xde, 0x08, 0x40, 0xc7, 0x64, 0xaa, 0xa2, 0x32, 0x2a, 0xa0, 0x2a, 0x6d, 0x3a, 0x1a, 0x19, 0x15, 0xd0, 0x31, 0x99, 0xaa, 0xa8, 0x8c, 0x0a, 0xa8, 0x4a, 0x9b, 0x8e, 0x46, 0x6a, 0x2a, 0x70, 0x12, 0x6a, 0x92, 0x93, 0xf0, 0xfb, 0xfd, 0x5d, 0x5d, 0x5d, 0x43, 0x43, 0x43, 0x92, 0x48, 0x4d, 0x00, 0xfc, 0x16, 0x52, 0xd4, 0xaa, 0xaa, 0xaa, 0xd0, 0x9f, 0xc9, 0x64, 0x1a, 0x1d, 0x1d, 0x4d, 0x6c, 0x38, 0x37, 0x47, 0x9e, 0x8f, 0x72, 0x73, 0x73, 0x13, 0xc3, 0x34, 0x8e, 0x2a, 0xae, 0x40, 0x41, 0x41, 0x41, 0x4a, 0x4a, 0x0a, 0x7a, 0x3d, 0x38, 0x38, 0x48, 0x9c, 0x39, 0x9b, 0xcd, 0x96, 0x9a, 0x9a, 0x9a, 0x9d, 0x2d, 0xeb, 0x79, 0x27, 0x31, 0x55, 0xa2, 0x51, 0x15, 0x09, 0xc0, 0xa4, 0x22, 0xe3, 0xf0, 0xf0, 0xb0, 0xa4, 0xad, 0xcf, 0xe7, 0x93, 0xc4, 0x68, 0x04, 0x28, 0xae, 0x00, 0x4b, 0xc6, 0xc6, 0xc6, 0x46, 0x7b, 0x7b, 0x7b, 0x75, 0x75, 0x75, 0x6b, 0x6b, 0xeb, 0xd8, 0xd8, 0x18, 0xd3, 0x53, 0xa1, 0xb9, 0xb9, 0xb9, 0xbc, 0xbc, 0xbc, 0xa2, 0xa2, 0xa2, 0xb2, 0xb2, 0x72, 0x6f, 0x2f, 0xfc, 0x9c, 0x01, 0xb0, 0xbb, 0xbb, 0xdb, 0xd8, 0xd8, 0x88, 0x43, 0x6d, 0x6d, 0x6d, 0x83, 0x83, 0x83, 0xc5, 0xc5, 0xc5, 0xe9, 0xe9, 0xe9, 0x75, 0x75, 0x75, 0x9b, 0x9b, 0x9b, 0x51, 0x0c, 0x72, 0xbb, 0x2a, 0x12, 0x40, 0x2b, 0x80, 0xdb, 0x80, 0xf9, 0xb0, 0x58, 0x2c, 0x3d, 0x3d, 0x3d, 0x8c, 0xca, 0xed, 0x76, 0xe3, 0x32, 0x63, 0xa3, 0x4b, 0x4b, 0x4b, 0x6c, 0x68, 0x62, 0x82, 0x7b, 0x34, 0x77, 0x3a, 0x9d, 0x7c, 0x4c, 0x53, 0x53, 0x13, 0xc3, 0x28, 0x12, 0x40, 0x11, 0x9a, 0x82, 0x69, 0x00, 0x38, 0x69, 0x4c, 0x73, 0x77, 0x77, 0x77, 0x5e, 0x1e, 0x79, 0x42, 0x4d, 0x4b, 0x4b, 0x5b, 0x5e, 0x5e, 0x66, 0x6c, 0xd3, 0xd3, 0xd3, 0x03, 0x03, 0x03, 0x34, 0x06, 0x7e, 0x00, 0x08, 0xe8, 0xeb, 0xeb, 0xa3, 0xfa, 0xda, 0xda, 0x5a, 0x8c, 0xa7, 0xa5, 0xa5, 0x05, 0xbb, 0x58, 0x07, 0x66, 0xab, 0x48, 0x50, 0x1f, 0x00, 0xcb, 0xd9, 0xfc, 0x3c, 0xf7, 0x5e, 0xd4, 0xd9, 0xd9, 0xc9, 0xf7, 0x7d, 0x74, 0xc4, 0xbd, 0x68, 0x44, 0x05, 0x30, 0x35, 0x35, 0x45, 0x03, 0x70, 0xb9, 0x5c, 0x88, 0x9f, 0x9c, 0x0c, 0xfd, 0x1b, 0x06, 0x60, 0x7f, 0x7f, 0x9f, 0x6f, 0x2e, 0x53, 0x56, 0xbf, 0x07, 0x1a, 0x1a, 0x1a, 0xe8, 0x3c, 0xf2, 0xf3, 0xf3, 0x0b, 0x0b, 0x0b, 0x51, 0xa6, 0xe7, 0x26, 0x55, 0xca, 0xf9, 0x2d, 0x29, 0x29, 0x41, 0x58, 0x4e, 0x4e, 0x0e, 0x05, 0x7b, 0x3c, 0x1e, 0x39, 0x56, 0x51, 0x18, 0xf5, 0x01, 0x60, 0x5e, 0x29, 0x97, 0xd7, 0xeb, 0x5d, 0x5b, 0x5b, 0x43, 0xd9, 0x6e, 0x0f, 0xbf, 0xab, 0x46, 0x39, 0x89, 0xd3, 0xa5, 0xbb, 0x88, 0xbf, 0x97, 0xe2, 0x00, 0x13, 0xa9, 0xd5, 0x07, 0xd0, 0xdf, 0xdf, 0xbf, 0xba, 0xba, 0x8a, 0x85, 0xee, 0xed, 0xed, 0xc5, 0x5d, 0x8b, 0x4e, 0x4a, 0x4b, 0x23, 0x2f, 0x76, 0x78, 0x59, 0xe3, 0x4d, 0x4c, 0x3d, 0xf3, 0x65, 0xd4, 0xa0, 0x09, 0xd5, 0x53, 0x21, 0x10, 0x08, 0xf0, 0xbb, 0x54, 0x56, 0xf0, 0x2b, 0x73, 0xa9, 0x31, 0x58, 0x4d, 0x4d, 0x0d, 0x63, 0xc7, 0xab, 0x8a, 0x6e, 0x68, 0xd4, 0x14, 0x15, 0x15, 0x61, 0x29, 0x28, 0xac, 0xac, 0xac, 0x8c, 0x61, 0x98, 0x80, 0x2b, 0xed, 0xf8, 0xf8, 0x18, 0x37, 0x7a, 0x46, 0x46, 0x06, 0x55, 0xa2, 0x06, 0x4f, 0xd8, 0xac, 0xac, 0x2c, 0xda, 0xcd, 0xcc, 0xcc, 0xc4, 0xcb, 0x91, 0x39, 0x92, 0x29, 0x28, 0xae, 0x80, 0xd9, 0x4c, 0x4c, 0x1c, 0x0e, 0x47, 0x47, 0x47, 0x07, 0x26, 0x6f, 0x71, 0x71, 0x11, 0xd7, 0x40, 0x7d, 0x7d, 0xfd, 0xc8, 0xc8, 0x88, 0xd5, 0x6a, 0xa5, 0x53, 0xa1, 0x18, 0x2a, 0xb3, 0x5f, 0x54, 0xe2, 0x9c, 0xb0, 0x8b, 0x61, 0x53, 0x25, 0xde, 0xd3, 0xc8, 0xc0, 0xef, 0x52, 0x00, 0x33, 0x91, 0x23, 0x68, 0x7a, 0x56, 0xc1, 0x6d, 0xb7, 0xb0, 0xb0, 0x80, 0xbb, 0x10, 0x0f, 0x75, 0x39, 0xce, 0x92, 0x81, 0xd1, 0x14, 0x40, 0x32, 0x26, 0xa4, 0x94, 0x53, 0xf1, 0x12, 0x52, 0xea, 0x20, 0xd9, 0x78, 0x23, 0x80, 0x64, 0x67, 0x58, 0x8a, 0xdf, 0xa8, 0x80, 0x54, 0x86, 0x92, 0x3d, 0x6e, 0x54, 0x20, 0xd9, 0x19, 0x96, 0xe2, 0x37, 0x2a, 0x20, 0x95, 0xa1, 0x64, 0x8f, 0x1b, 0x15, 0x48, 0x76, 0x86, 0xa5, 0xf8, 0xff, 0x03, 0xf5, 0x1a, 0x5a, 0xe0, 0xcf, 0xeb, 0xd5, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; +static const u_int8_t FLEXHTMLIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0f, 0x8d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x09, 0x54, 0x14, 0x47, 0xf6, 0x73, 0x05, 0x10, 0xd4, 0x78, 0x24, 0x28, 0x8a, 0x46, 0xc1, + 0xdd, 0x28, 0xde, 0x06, 0x41, 0x8d, 0x26, 0xae, 0xc7, 0xaa, 0xf1, 0x40, 0xa3, 0x59, 0x45, 0x4d, + 0x5c, 0x13, 0x37, 0xe6, 0x78, 0x66, 0xf1, 0x4e, 0x36, 0x51, 0xdc, 0xd5, 0x98, 0xb7, 0x3e, 0xcf, + 0x68, 0xa2, 0x79, 0x26, 0xcf, 0xac, 0x67, 0x36, 0xc7, 0x4b, 0xc4, 0xe8, 0x86, 0x55, 0x14, 0x41, + 0x41, 0xf1, 0x8a, 0x1b, 0x09, 0x04, 0x0f, 0x44, 0x14, 0x41, 0x10, 0x05, 0xe5, 0x86, 0xde, 0xfa, + 0x85, 0x5d, 0x74, 0xcf, 0x74, 0xcf, 0x74, 0x4f, 0x77, 0xcf, 0x60, 0xd2, 0xf5, 0x5e, 0x4f, 0xff, + 0xfa, 0xff, 0xd7, 0x3f, 0xea, 0x57, 0x55, 0xd7, 0x74, 0x77, 0x55, 0xbb, 0x71, 0x24, 0x81, 0x8a, + 0xe4, 0xae, 0x82, 0x97, 0xb2, 0x6a, 0x2f, 0xf0, 0x87, 0xa3, 0x61, 0x54, 0x52, 0x69, 0xcd, 0x7d, + 0x7a, 0xe6, 0xf3, 0xcc, 0x12, 0xf4, 0x81, 0x4f, 0x83, 0x13, 0x9e, 0xe2, 0x41, 0x4e, 0x0e, 0x06, + 0xc6, 0xf1, 0x00, 0xb8, 0x51, 0x96, 0x63, 0x89, 0x12, 0xe5, 0xdd, 0x30, 0xc7, 0xd4, 0x29, 0x00, + 0xb4, 0x3b, 0x2d, 0xa5, 0xc4, 0xcd, 0xcd, 0x8d, 0xa1, 0x6d, 0x6a, 0x10, 0x32, 0xf2, 0x25, 0x8c, + 0xf7, 0xc1, 0x78, 0x0d, 0x36, 0x9d, 0xe6, 0x1d, 0x15, 0x9e, 0x45, 0x05, 0x2e, 0xdd, 0xcf, 0x84, + 0xe2, 0xea, 0xbb, 0x94, 0x3e, 0x35, 0x35, 0x12, 0x46, 0x24, 0x0d, 0x10, 0xf2, 0xd6, 0xc1, 0x7c, + 0xdc, 0x47, 0x1f, 0x7b, 0x96, 0x07, 0x45, 0xe7, 0x6f, 0xae, 0x7f, 0x21, 0xca, 0x5b, 0xb5, 0x25, + 0xa4, 0xf2, 0x0d, 0x6f, 0x62, 0xca, 0x08, 0x11, 0x33, 0x66, 0x9c, 0x58, 0x4b, 0x7c, 0x33, 0x98, + 0x3b, 0x77, 0xae, 0xb5, 0xa3, 0x02, 0x8c, 0xa8, 0x96, 0xf8, 0x42, 0x48, 0x1f, 0x3d, 0x7a, 0x34, + 0xec, 0xd9, 0xb3, 0x47, 0xc0, 0x5a, 0x07, 0x1a, 0xef, 0x83, 0x6a, 0x0d, 0x56, 0x36, 0xda, 0x41, + 0x88, 0x7c, 0xb6, 0xc3, 0xeb, 0x10, 0xd9, 0x21, 0x05, 0x56, 0x43, 0x9b, 0x2d, 0xd5, 0x56, 0x4d, + 0xeb, 0x01, 0x02, 0x5b, 0xdf, 0xcb, 0xa7, 0x26, 0x5b, 0x91, 0xf9, 0x56, 0x29, 0x24, 0x20, 0x6e, + 0xf3, 0xe5, 0xf5, 0x42, 0x14, 0x83, 0x25, 0x9b, 0x36, 0x4f, 0xc5, 0x82, 0xe3, 0x93, 0x87, 0xf1, + 0x59, 0xd6, 0xe4, 0x19, 0x82, 0x00, 0xc8, 0x13, 0x93, 0xb6, 0x48, 0x88, 0x12, 0xc1, 0x36, 0x15, + 0x08, 0x39, 0x5f, 0x4c, 0x7d, 0x9e, 0xbb, 0x53, 0x59, 0x24, 0x44, 0x29, 0x82, 0x5d, 0xd3, 0x8a, + 0x0e, 0x1f, 0x3e, 0x6c, 0x2b, 0x6c, 0x92, 0x34, 0xd9, 0x32, 0x52, 0x7e, 0x12, 0x09, 0xdc, 0x96, + 0x2d, 0x5b, 0xf0, 0x8a, 0x44, 0xc9, 0x78, 0xe6, 0x8f, 0x73, 0xe7, 0xce, 0x31, 0xb8, 0x5b, 0xb7, + 0x6e, 0xac, 0x38, 0xcf, 0xcb, 0x10, 0x0f, 0x00, 0xc9, 0x18, 0x20, 0xf3, 0xfd, 0xfb, 0xf7, 0x99, + 0x82, 0xf2, 0xf2, 0x72, 0x26, 0x74, 0xda, 0xb4, 0x69, 0x0c, 0xde, 0xbd, 0x7b, 0x37, 0xe7, 0xe9, + 0xe9, 0xc9, 0xf2, 0x52, 0x4a, 0x5c, 0x13, 0x03, 0x62, 0x89, 0x6e, 0xe9, 0xe1, 0xf7, 0xc0, 0xa1, + 0xb1, 0x48, 0x4d, 0xfd, 0xfd, 0x06, 0x15, 0x5c, 0x28, 0x3e, 0x0f, 0xef, 0xa7, 0xbf, 0xa7, 0xbc, + 0x96, 0x2c, 0x7b, 0x9e, 0x30, 0x8f, 0x23, 0x25, 0x19, 0xfb, 0x85, 0x28, 0x36, 0xa2, 0x56, 0xd6, + 0x56, 0x50, 0x38, 0xf5, 0x76, 0x8a, 0x88, 0x6e, 0x99, 0x91, 0xec, 0xc9, 0x5f, 0xe6, 0xec, 0x62, + 0x82, 0x2c, 0x0b, 0x0c, 0x3d, 0x1a, 0x2e, 0x42, 0xcd, 0x3b, 0xff, 0xba, 0x2c, 0x2f, 0x32, 0x4a, + 0x2a, 0x40, 0xcb, 0xb7, 0x5e, 0xd9, 0x24, 0x12, 0x84, 0x19, 0xc4, 0x4b, 0x25, 0xc4, 0x0f, 0x4b, + 0x8c, 0x90, 0x22, 0x49, 0x2b, 0x40, 0xce, 0x0f, 0x2f, 0xae, 0xb2, 0x12, 0x68, 0xa9, 0x60, 0xfa, + 0xc9, 0x09, 0x56, 0x3c, 0x96, 0x5a, 0x24, 0x3d, 0x10, 0x32, 0x0d, 0x4f, 0xec, 0x47, 0xb3, 0x52, + 0x16, 0xa6, 0x97, 0x5c, 0x10, 0xb2, 0x4a, 0xc2, 0x76, 0x15, 0xf0, 0xa5, 0x2c, 0xad, 0xe7, 0xf1, + 0xf6, 0xce, 0xe6, 0x58, 0x64, 0xb7, 0xc3, 0x59, 0x8d, 0x45, 0x85, 0x85, 0x85, 0x50, 0x56, 0x56, + 0x66, 0xb7, 0xa0, 0x90, 0x01, 0xaf, 0xc7, 0x79, 0x79, 0x79, 0x42, 0x54, 0x3d, 0x2c, 0x15, 0xa4, + 0x95, 0x2b, 0x57, 0x8a, 0xd0, 0x84, 0x5b, 0x94, 0x97, 0xca, 0x8c, 0x18, 0x61, 0xfd, 0xf7, 0x00, + 0xf9, 0x24, 0x4b, 0xa2, 0xc0, 0x16, 0x2d, 0x5a, 0x50, 0x39, 0x08, 0xf3, 0x07, 0x2d, 0x40, 0xf2, + 0x1f, 0x7c, 0xf0, 0x01, 0x17, 0x12, 0x12, 0x42, 0xf1, 0x94, 0x89, 0xfc, 0xa8, 0x52, 0x80, 0x1e, + 0x5c, 0xbc, 0x78, 0x91, 0xbb, 0x7c, 0xf9, 0x32, 0x53, 0xc2, 0x0b, 0xe2, 0xbd, 0x39, 0x7b, 0xf6, + 0xac, 0x63, 0x0a, 0x78, 0x6b, 0xf9, 0x33, 0x0a, 0xe6, 0xe1, 0x51, 0xa3, 0x46, 0x51, 0xf8, 0xf6, + 0xed, 0xdb, 0x0c, 0x27, 0xa4, 0xf3, 0xca, 0x79, 0x63, 0xf0, 0x6c, 0xf6, 0x03, 0x52, 0x2b, 0xb6, + 0x93, 0x55, 0x3f, 0xb0, 0xcd, 0xae, 0x9e, 0x6a, 0x78, 0x0c, 0xd4, 0x9b, 0xa4, 0xae, 0x84, 0xe1, + 0x35, 0xa4, 0xce, 0x1c, 0xf5, 0xdc, 0xa6, 0x03, 0xea, 0xeb, 0x4c, 0xdf, 0x12, 0x4e, 0x8b, 0xc0, + 0xcd, 0xf2, 0x1b, 0xfa, 0x5a, 0xfe, 0x40, 0x9a, 0x66, 0x07, 0x96, 0xa7, 0xbf, 0x0b, 0xf6, 0x6e, + 0x5b, 0x90, 0xe9, 0x14, 0x44, 0x9d, 0x1c, 0x27, 0x72, 0x00, 0xcb, 0x44, 0x9f, 0x9f, 0x2d, 0xc2, + 0x39, 0x92, 0x71, 0x68, 0x14, 0x9a, 0x72, 0x72, 0x0c, 0xe4, 0x95, 0xdf, 0xa4, 0xfa, 0xde, 0x0a, + 0x59, 0x08, 0xe3, 0x02, 0x27, 0xc9, 0xea, 0x46, 0xc3, 0xb1, 0xf6, 0xbf, 0x1f, 0x90, 0x00, 0xbe, + 0x1e, 0x8d, 0x44, 0x7c, 0x49, 0x85, 0x47, 0x60, 0xc9, 0x85, 0x05, 0x14, 0xe7, 0xef, 0xd9, 0x18, + 0xf6, 0xf6, 0x8f, 0x17, 0xd1, 0x95, 0x64, 0x14, 0x3b, 0x30, 0x34, 0x31, 0x1c, 0x6a, 0xb9, 0x5a, + 0x2a, 0xf3, 0xab, 0x88, 0xff, 0x40, 0xf3, 0x47, 0x5a, 0xd8, 0x95, 0xff, 0x8f, 0xf4, 0xbf, 0xc1, + 0xe1, 0xfc, 0x38, 0xf8, 0xb0, 0xe7, 0xa7, 0x10, 0xda, 0xa4, 0xbb, 0x4d, 0xfe, 0xb2, 0x9a, 0x52, + 0x18, 0x7b, 0x7c, 0x08, 0xd4, 0x70, 0xd5, 0x94, 0x2f, 0x7e, 0x50, 0xaa, 0x4d, 0x7e, 0x46, 0x14, + 0x5e, 0x98, 0xed, 0xc1, 0x69, 0xc5, 0xff, 0xa3, 0xd3, 0x74, 0x9c, 0x00, 0xe3, 0x71, 0xf9, 0xfe, + 0x45, 0xd9, 0x22, 0x78, 0xaf, 0x15, 0x79, 0x76, 0x5f, 0xfb, 0x5c, 0x96, 0x07, 0x09, 0xb7, 0x2a, + 0xf2, 0x45, 0x32, 0x93, 0x0a, 0x8e, 0xd8, 0xe4, 0xb7, 0x24, 0x2a, 0x8e, 0x00, 0xf3, 0x58, 0x00, + 0x4c, 0x26, 0x4d, 0x29, 0xff, 0x41, 0x53, 0x5a, 0xd7, 0xe3, 0x13, 0xe8, 0xde, 0xb4, 0x17, 0xa5, + 0xfe, 0x72, 0x2f, 0x1d, 0x66, 0x9f, 0x99, 0x0e, 0xfd, 0x5b, 0x0c, 0x82, 0xe5, 0xa1, 0xab, 0x05, + 0x25, 0xea, 0xc0, 0xc2, 0xca, 0x02, 0x98, 0x94, 0x32, 0x92, 0x66, 0xfc, 0x3d, 0xfd, 0xe1, 0xdb, + 0xfe, 0x07, 0xc1, 0x1d, 0x3c, 0xac, 0xf8, 0x94, 0x20, 0x34, 0x39, 0x20, 0xa5, 0xa0, 0xa2, 0xb6, + 0x02, 0x46, 0x26, 0x3d, 0x4d, 0x9a, 0x58, 0x4b, 0xf8, 0x2a, 0xe2, 0x80, 0x14, 0x8b, 0xae, 0x38, + 0xdd, 0x1d, 0x40, 0xeb, 0x12, 0x0a, 0x0e, 0xc1, 0x33, 0x2d, 0x87, 0xe8, 0x6a, 0xa8, 0x9c, 0x30, + 0x43, 0x1c, 0x90, 0x53, 0x66, 0x04, 0x5e, 0xf3, 0x75, 0xc0, 0x08, 0xa3, 0xd4, 0xc8, 0xfc, 0x6d, + 0x38, 0x80, 0x4f, 0x67, 0xf0, 0x20, 0xff, 0xf6, 0x64, 0x2b, 0x27, 0x21, 0x21, 0x01, 0xbc, 0xbc, + 0xbc, 0x64, 0xe9, 0xf6, 0x08, 0xd1, 0xd1, 0xd1, 0x54, 0x07, 0xea, 0x19, 0x39, 0xb2, 0x6e, 0x84, + 0xb2, 0x57, 0x06, 0xe9, 0x8a, 0x22, 0x40, 0xc6, 0x5e, 0x2a, 0xab, 0xa8, 0xa8, 0x88, 0x29, 0x99, + 0x39, 0x73, 0x26, 0x93, 0x7f, 0xf0, 0xe0, 0x41, 0x58, 0xba, 0x74, 0x29, 0x54, 0x57, 0x57, 0xc3, + 0xda, 0xb5, 0x6b, 0xe9, 0x91, 0x98, 0x98, 0x48, 0xe9, 0xe8, 0x34, 0x1a, 0x35, 0x7f, 0xfe, 0x7c, + 0x7a, 0x6e, 0xd2, 0xa4, 0x09, 0x90, 0xbf, 0xc4, 0x14, 0x1e, 0x3f, 0x7e, 0x3c, 0x93, 0x81, 0xe5, + 0x78, 0x3d, 0x0c, 0xa9, 0x04, 0xb0, 0xbc, 0x30, 0xc8, 0xe5, 0x89, 0x2c, 0x6e, 0xf0, 0xe0, 0xc1, + 0x94, 0x7c, 0xe6, 0xcc, 0x19, 0xfa, 0xaf, 0xf5, 0xca, 0x95, 0x2b, 0x8c, 0x9d, 0xd4, 0x20, 0xc5, + 0x31, 0x84, 0x00, 0xc0, 0xb2, 0x43, 0x87, 0x0e, 0xa5, 0x18, 0x84, 0x53, 0x52, 0x52, 0x38, 0xbc, + 0x8f, 0x8e, 0xb0, 0x65, 0x42, 0x9c, 0xdc, 0x7f, 0x78, 0x4b, 0x5e, 0xcc, 0x2b, 0x8a, 0x00, 0x11, + 0x4a, 0xd3, 0xf0, 0xe1, 0xc3, 0xe9, 0x19, 0x6b, 0x11, 0x13, 0x29, 0x4f, 0xcf, 0xf8, 0xd3, 0xb8, + 0x71, 0x63, 0x0a, 0x5f, 0xbd, 0x7a, 0x95, 0x9e, 0x57, 0xad, 0x5a, 0x05, 0xc2, 0x28, 0x79, 0x7b, + 0x7b, 0x53, 0x3c, 0xfe, 0x08, 0x61, 0x86, 0x74, 0x10, 0xd0, 0x7d, 0x18, 0xcd, 0xcc, 0xcc, 0xa4, + 0xa6, 0x74, 0xea, 0xd4, 0xc9, 0x41, 0x93, 0xd4, 0x15, 0xd3, 0xdd, 0x01, 0x75, 0xea, 0xb5, 0x73, + 0xab, 0x6a, 0x42, 0xda, 0xd5, 0xe9, 0x2f, 0xc1, 0x74, 0x40, 0xff, 0x3a, 0x55, 0x27, 0xd1, 0xec, + 0x03, 0xea, 0xea, 0x4b, 0x7f, 0x6e, 0xb3, 0x0f, 0xe8, 0x5f, 0xa7, 0xea, 0x24, 0x9a, 0x11, 0x50, + 0x57, 0x5f, 0xfa, 0x73, 0x9b, 0x11, 0xd0, 0xbf, 0x4e, 0xd5, 0x49, 0x34, 0x23, 0xa0, 0xa4, 0xbe, + 0x32, 0xef, 0x65, 0x28, 0x61, 0x73, 0x88, 0xc7, 0x29, 0x57, 0x62, 0xfe, 0xe6, 0xaf, 0xe2, 0xdb, + 0x85, 0x2a, 0x5c, 0xd1, 0xd4, 0x84, 0x8a, 0xaa, 0x0a, 0xe9, 0x9d, 0xe9, 0x4f, 0xb3, 0x3e, 0x96, + 0x55, 0x99, 0x57, 0x91, 0x4b, 0x69, 0xdd, 0x9a, 0xf6, 0x64, 0x3c, 0x87, 0x6e, 0xfd, 0x40, 0xcb, + 0x65, 0x97, 0x65, 0x31, 0x9c, 0xa3, 0x80, 0xa7, 0xa3, 0x05, 0xdf, 0x3c, 0x37, 0x13, 0xc8, 0xbd, + 0x52, 0x5a, 0xfc, 0x4e, 0xd5, 0x6d, 0x59, 0x31, 0xaf, 0x9c, 0x8e, 0xa2, 0xb4, 0xb5, 0x3d, 0xb6, + 0x30, 0x9e, 0x6b, 0xa5, 0x75, 0xff, 0xda, 0x66, 0xa4, 0x4e, 0x82, 0x36, 0xbe, 0x41, 0xb0, 0x3d, + 0xec, 0x1b, 0x46, 0x53, 0x0b, 0xa8, 0x6e, 0x42, 0xc7, 0x6f, 0x1f, 0x85, 0x77, 0x7f, 0x9a, 0x47, + 0xf5, 0xe0, 0x2d, 0xf1, 0xef, 0xfa, 0x1f, 0x02, 0x72, 0xcf, 0x42, 0x52, 0x6f, 0x2d, 0xd4, 0x02, + 0x79, 0x0b, 0x05, 0xfc, 0xc8, 0xfd, 0xcf, 0xd8, 0xfe, 0x87, 0xad, 0x78, 0x84, 0xb7, 0xe9, 0xa3, + 0x3b, 0xbd, 0x0d, 0x63, 0x5a, 0x4f, 0xb0, 0xe2, 0xb1, 0x87, 0x50, 0xec, 0x00, 0x1a, 0x33, 0xe6, + 0xd8, 0x60, 0xc0, 0xdb, 0xe0, 0x98, 0x36, 0xf4, 0xdc, 0x0a, 0x5d, 0x9b, 0xf4, 0xb0, 0x29, 0x7f, + 0xce, 0x8f, 0xaf, 0xc0, 0x4f, 0x77, 0x7f, 0x84, 0xdd, 0xe1, 0x7b, 0x21, 0xc0, 0xbb, 0xb5, 0x24, + 0xef, 0xb5, 0xb2, 0xab, 0xf0, 0x52, 0xea, 0x44, 0x4a, 0xf3, 0x70, 0xf3, 0x84, 0xd8, 0x01, 0x87, + 0xc1, 0xc7, 0xdd, 0x47, 0x92, 0x57, 0x0a, 0xa9, 0xa8, 0x0f, 0x7c, 0x46, 0xda, 0x38, 0xd6, 0x24, + 0x1a, 0x3f, 0xe4, 0xf1, 0x3f, 0x02, 0x76, 0x46, 0x7b, 0xc6, 0xa3, 0x32, 0x34, 0x1e, 0x93, 0x9c, + 0xf1, 0x48, 0x0b, 0xf2, 0x6d, 0x4f, 0xe5, 0xbd, 0xd0, 0x76, 0x1a, 0x7d, 0x36, 0x30, 0x2a, 0x69, + 0x20, 0xc4, 0xfc, 0xbc, 0x18, 0x49, 0x8a, 0x92, 0x22, 0x07, 0x1e, 0xf3, 0x0e, 0x60, 0xc2, 0x12, + 0x0b, 0x0e, 0x43, 0x79, 0x6d, 0x39, 0xcb, 0xcb, 0x01, 0x9f, 0x5c, 0xf9, 0x90, 0x92, 0xde, 0xed, + 0xbc, 0x42, 0x8e, 0x85, 0xe1, 0x31, 0xba, 0xfb, 0x6f, 0x7e, 0xc7, 0xf2, 0x81, 0x3e, 0x6d, 0x18, + 0x6c, 0x0f, 0x50, 0xdc, 0x84, 0x50, 0xd0, 0x6b, 0x67, 0x5f, 0x82, 0x8c, 0x92, 0x34, 0x2a, 0xb3, + 0xc7, 0xa3, 0x7d, 0x60, 0x6d, 0xf7, 0xcd, 0xb2, 0xf2, 0x95, 0x0e, 0x9d, 0xf8, 0x8c, 0x2d, 0x3e, + 0xff, 0x07, 0x2a, 0xa7, 0xb5, 0x6f, 0x1b, 0xd8, 0x19, 0xf6, 0xad, 0xac, 0x4c, 0x29, 0x82, 0xa2, + 0x08, 0xf0, 0x05, 0x3f, 0xee, 0xf5, 0x39, 0x6d, 0xa3, 0x1e, 0x6e, 0x1e, 0xf0, 0xe3, 0x9d, 0xd3, + 0x74, 0x28, 0x3c, 0x70, 0x73, 0x2f, 0x4f, 0x66, 0xe7, 0x63, 0x85, 0x09, 0x14, 0x8e, 0x6c, 0xf3, + 0x02, 0xc3, 0x59, 0x02, 0x27, 0x8a, 0x8e, 0xd3, 0xf2, 0xbc, 0xf1, 0x7b, 0xc2, 0xf7, 0xa9, 0x36, + 0x1e, 0x65, 0xaa, 0x8a, 0x80, 0xd0, 0x88, 0x23, 0x05, 0x07, 0xe1, 0xef, 0x69, 0x6f, 0x53, 0x14, + 0xde, 0x3a, 0x3c, 0x34, 0xf0, 0x24, 0x23, 0xdb, 0xab, 0xfd, 0x11, 0xe4, 0x01, 0x08, 0x79, 0xf9, + 0x8e, 0xf2, 0xbf, 0x19, 0x32, 0x0f, 0x26, 0x04, 0x4e, 0x66, 0x65, 0x55, 0x03, 0x52, 0xb7, 0xeb, + 0xd4, 0xe0, 0xc8, 0x90, 0xca, 0x65, 0x97, 0x66, 0xb1, 0x22, 0xfc, 0x33, 0xaf, 0x59, 0xa7, 0xa7, + 0x32, 0x9c, 0x25, 0x70, 0xaf, 0xfa, 0x1e, 0xf7, 0xfa, 0xd9, 0x97, 0x2c, 0xd1, 0x0e, 0xe5, 0x1d, + 0x8e, 0x80, 0x5c, 0x4d, 0x45, 0x26, 0x0f, 0x85, 0xe2, 0xaa, 0xbb, 0x10, 0x37, 0x30, 0x19, 0x3c, + 0xc9, 0xb0, 0x68, 0x74, 0x52, 0xd5, 0x07, 0x94, 0x18, 0x83, 0xc6, 0x3f, 0xe2, 0xee, 0xed, 0x14, + 0xe3, 0xd1, 0x1e, 0xdd, 0x23, 0x40, 0xde, 0x33, 0x83, 0xeb, 0x65, 0xd7, 0xa0, 0xad, 0x6f, 0x3b, + 0x25, 0xfe, 0x6a, 0xe6, 0xd1, 0xdd, 0x01, 0xcd, 0x16, 0xa9, 0x14, 0xa0, 0x7b, 0x13, 0x52, 0xa9, + 0x5f, 0x33, 0xbb, 0xe9, 0x80, 0xe6, 0x2a, 0xd4, 0x28, 0xc0, 0x8c, 0x80, 0xc6, 0x0a, 0xd4, 0x5c, + 0x5c, 0xd1, 0x95, 0xe6, 0xc8, 0x91, 0x23, 0xe0, 0xe1, 0xe1, 0x01, 0x03, 0x07, 0x0e, 0xd4, 0xac, + 0x50, 0x4e, 0x40, 0x56, 0x56, 0x16, 0x90, 0x87, 0x86, 0x94, 0x4c, 0x1e, 0x26, 0xca, 0xb1, 0x59, + 0xe3, 0xed, 0x5d, 0xbf, 0x77, 0xec, 0xd8, 0x41, 0x9f, 0x26, 0x92, 0x92, 0x36, 0x59, 0x7d, 0x7c, + 0x7c, 0xb8, 0xed, 0xdb, 0xb7, 0xdb, 0xe4, 0xb1, 0x45, 0x44, 0xf9, 0xfc, 0x61, 0x8b, 0xcf, 0x92, + 0x66, 0xdb, 0xaa, 0x07, 0xdc, 0x7d, 0xfa, 0xf4, 0xa1, 0xc2, 0x2d, 0x0b, 0x0b, 0xf3, 0xa8, 0x3c, + 0x32, 0x32, 0x52, 0x88, 0x52, 0x0d, 0x93, 0xb5, 0x91, 0x76, 0xf5, 0x58, 0x0a, 0x55, 0xd5, 0x89, + 0x07, 0x0c, 0x18, 0xc0, 0x1e, 0x74, 0x57, 0x56, 0x56, 0x12, 0x9b, 0x01, 0x6a, 0x6a, 0x6a, 0x60, + 0xdd, 0xba, 0x75, 0x14, 0x26, 0xaf, 0x5c, 0xd3, 0x87, 0xdc, 0x1b, 0x36, 0x6c, 0xa0, 0x79, 0xfc, + 0xc1, 0x99, 0x2a, 0x1e, 0x2d, 0x5b, 0xb6, 0xa4, 0xe7, 0xe5, 0xcb, 0x97, 0x33, 0x1c, 0x63, 0xd2, + 0x02, 0x58, 0x7a, 0x24, 0x95, 0xe7, 0x23, 0x10, 0x1c, 0x1c, 0xcc, 0x91, 0x27, 0xf2, 0xb4, 0x96, + 0x82, 0x82, 0x82, 0x28, 0x6b, 0x5c, 0x5c, 0x1c, 0x0b, 0x3d, 0xb1, 0x83, 0xc1, 0xa7, 0x4e, 0x9d, + 0xa2, 0xf4, 0x21, 0x43, 0x86, 0x50, 0xdc, 0xec, 0xd9, 0xb3, 0x19, 0x6d, 0xdb, 0xb6, 0x6d, 0x14, + 0x8e, 0x89, 0x89, 0x11, 0xa9, 0x73, 0x24, 0x02, 0x0e, 0x35, 0x21, 0xde, 0x50, 0xa1, 0x76, 0xc4, + 0x49, 0x35, 0xa1, 0xfd, 0xfb, 0xf7, 0x53, 0x63, 0x91, 0x37, 0x34, 0x34, 0x94, 0xc1, 0xc8, 0x1f, + 0x15, 0x15, 0x25, 0x14, 0xc1, 0x39, 0xe2, 0x80, 0xaa, 0x26, 0x44, 0x94, 0x36, 0xb8, 0xa4, 0xab, + 0x03, 0x87, 0x0e, 0x1d, 0xa2, 0x0e, 0x66, 0x64, 0x64, 0x40, 0xdf, 0xbe, 0x7d, 0x9d, 0xe3, 0xac, + 0x28, 0x86, 0x12, 0x19, 0x1c, 0x1a, 0x89, 0x25, 0xf4, 0x70, 0x77, 0x77, 0xe7, 0xc6, 0x8d, 0x1b, + 0xc7, 0xf2, 0x63, 0xc7, 0x8e, 0x65, 0x25, 0xda, 0xb5, 0x6b, 0xc7, 0xf0, 0x3c, 0x7f, 0x6d, 0x6d, + 0xad, 0x08, 0xc7, 0x37, 0x21, 0xbe, 0xa9, 0x20, 0x5f, 0x55, 0x55, 0x15, 0xd7, 0xb4, 0x69, 0x53, + 0x11, 0x1f, 0x5f, 0x3e, 0x3b, 0x3b, 0x9b, 0xc9, 0x97, 0x03, 0x74, 0x9d, 0x4e, 0xe3, 0x88, 0x44, + 0xde, 0x44, 0x81, 0x5e, 0xbd, 0x7a, 0x41, 0xa3, 0x46, 0xe2, 0x97, 0x5c, 0x89, 0x51, 0x86, 0x24, + 0x5d, 0x1d, 0x30, 0xc4, 0x42, 0x3b, 0x42, 0x75, 0xed, 0x03, 0x76, 0x74, 0x19, 0x42, 0x36, 0x1d, + 0x30, 0xa4, 0x5a, 0x55, 0x08, 0x35, 0x23, 0xa0, 0xa2, 0xb2, 0x0c, 0x61, 0x35, 0x23, 0x60, 0x48, + 0xb5, 0xaa, 0x10, 0xfa, 0xd0, 0x5f, 0x07, 0x54, 0xf8, 0xda, 0x20, 0x59, 0x1f, 0xfa, 0x2e, 0xd0, + 0x20, 0x6b, 0x55, 0x85, 0x51, 0x66, 0x00, 0x54, 0x54, 0x96, 0x11, 0xac, 0x66, 0x00, 0x8c, 0xa8, + 0x55, 0x15, 0x32, 0xcd, 0x00, 0xa8, 0xa8, 0x2c, 0x23, 0x58, 0xcd, 0x00, 0x18, 0x51, 0xab, 0x2a, + 0x64, 0x9a, 0x01, 0x50, 0x51, 0x59, 0x46, 0xb0, 0x9a, 0x01, 0x30, 0xa2, 0x56, 0x55, 0xc8, 0x34, + 0x03, 0xa0, 0xa2, 0xb2, 0x8c, 0x60, 0x55, 0xf4, 0x68, 0xcc, 0x08, 0xc5, 0x46, 0xc8, 0x7c, 0xe3, + 0xdc, 0x0c, 0xf8, 0xa5, 0x24, 0x1d, 0x9e, 0x6e, 0xf9, 0x2c, 0xfc, 0xa9, 0xed, 0x74, 0x78, 0xb2, + 0x71, 0xa8, 0x11, 0x6a, 0x74, 0x95, 0xd9, 0x20, 0x7a, 0xc0, 0xa9, 0xa2, 0x13, 0xb0, 0xf8, 0xa7, + 0xb7, 0xa0, 0x8a, 0xab, 0x7b, 0x58, 0xe5, 0x88, 0x87, 0xcb, 0xc8, 0xeb, 0x81, 0x3f, 0x17, 0x5f, + 0x20, 0xaf, 0x0b, 0xd6, 0x40, 0xc2, 0x2d, 0xf2, 0x02, 0x28, 0x79, 0x98, 0x25, 0x95, 0xde, 0xcf, + 0x58, 0x02, 0x3f, 0xe4, 0xed, 0x93, 0x22, 0xb9, 0x04, 0xe7, 0x92, 0x5b, 0x11, 0xf8, 0x1e, 0x4e, + 0x6c, 0xee, 0x37, 0xb0, 0xf5, 0xca, 0x46, 0x20, 0xaf, 0x6c, 0x31, 0xc7, 0x3d, 0xdd, 0x3d, 0xe1, + 0x93, 0xde, 0x3b, 0xe0, 0x89, 0x46, 0xc1, 0x0c, 0xa7, 0x04, 0xf8, 0xf8, 0xf2, 0x5a, 0x20, 0xfb, + 0xbe, 0x31, 0xd6, 0x65, 0xa1, 0xff, 0x84, 0x81, 0x2d, 0xc4, 0x0f, 0x98, 0x4b, 0xaa, 0x8b, 0x61, + 0xc6, 0xa9, 0x49, 0x50, 0x54, 0x59, 0xff, 0x6a, 0xb1, 0x97, 0xbb, 0x17, 0x4c, 0x0e, 0x7a, 0x11, + 0xa6, 0xb5, 0x9b, 0x09, 0x5e, 0x6e, 0x8f, 0xb0, 0xf2, 0xce, 0x04, 0x9c, 0x16, 0x00, 0x7c, 0xbf, + 0x74, 0x5b, 0xd6, 0x16, 0xf8, 0xfa, 0xfa, 0x6e, 0xda, 0x4a, 0x85, 0x4e, 0xfe, 0xae, 0xf1, 0x93, + 0xf0, 0xd7, 0x90, 0xc5, 0x0e, 0x0d, 0x19, 0x5f, 0x11, 0x79, 0x1f, 0x5d, 0x5a, 0xc3, 0xc4, 0xbd, + 0x11, 0x3c, 0x17, 0x9e, 0x6f, 0x33, 0x85, 0xe5, 0x2d, 0x81, 0x1b, 0xe5, 0xd7, 0x81, 0x6c, 0x6f, + 0x07, 0x27, 0x6e, 0x1f, 0xb3, 0x24, 0xd1, 0x17, 0x79, 0x5f, 0x27, 0xe5, 0x9b, 0x79, 0x35, 0xb7, + 0xa2, 0x19, 0x85, 0x30, 0x34, 0x00, 0x05, 0x95, 0xf9, 0xb0, 0x81, 0x38, 0x4b, 0x36, 0xe8, 0x10, + 0xd9, 0x8f, 0xc3, 0xc3, 0xf0, 0x80, 0xe7, 0xe0, 0xd5, 0x0e, 0x73, 0xe0, 0x51, 0xaf, 0x66, 0x22, + 0x9a, 0x9a, 0x4c, 0x62, 0x41, 0x3c, 0x2c, 0x4d, 0x5b, 0xc4, 0x8a, 0x4c, 0x6a, 0x1b, 0x05, 0xaf, + 0x75, 0x8c, 0x66, 0x79, 0x7b, 0x00, 0x6e, 0x7b, 0xb1, 0x3d, 0x7b, 0x2b, 0xfc, 0x3b, 0x67, 0x07, + 0x54, 0xd7, 0xd6, 0xed, 0x82, 0xc2, 0x97, 0xe9, 0xd2, 0xa4, 0x1b, 0xe0, 0x3b, 0xe8, 0xc1, 0x7e, + 0xc6, 0xae, 0x24, 0xd6, 0x3d, 0x00, 0x19, 0xf7, 0xd2, 0x60, 0xcd, 0x2f, 0x2b, 0x21, 0x93, 0x6c, + 0x48, 0x22, 0x4c, 0x8d, 0x3c, 0xfd, 0x60, 0x46, 0xfb, 0x57, 0x61, 0x02, 0x79, 0x7f, 0xd7, 0xd1, + 0x8d, 0x47, 0x84, 0xf2, 0xd2, 0xc9, 0x4b, 0xcf, 0xe4, 0x6d, 0x53, 0x86, 0x1a, 0xf4, 0xd8, 0x10, + 0x88, 0xe9, 0x2c, 0xbf, 0x4d, 0x01, 0x63, 0xb4, 0x01, 0x1c, 0xb9, 0xf5, 0x5f, 0xf8, 0x88, 0x0c, + 0x67, 0x05, 0x15, 0xb7, 0x44, 0x5c, 0x01, 0x3e, 0xad, 0x60, 0x0e, 0xd9, 0xb7, 0xa7, 0x5f, 0x73, + 0xfd, 0xdf, 0xcf, 0xd1, 0x35, 0x00, 0x7f, 0x39, 0x33, 0x0d, 0x2e, 0x5a, 0xac, 0xf0, 0x79, 0xc2, + 0xaf, 0x23, 0xdd, 0x11, 0x26, 0xd0, 0xa7, 0xad, 0xc8, 0x29, 0x2d, 0x99, 0x5b, 0x15, 0x79, 0x64, + 0x87, 0xa5, 0x48, 0xb6, 0x77, 0x4f, 0xe7, 0x26, 0xa1, 0xb0, 0xa9, 0xe7, 0x36, 0x2d, 0x22, 0x45, + 0x65, 0xef, 0x56, 0xdd, 0x81, 0xf7, 0x33, 0xde, 0x03, 0xb2, 0x09, 0xa9, 0x08, 0x8f, 0xd7, 0xa8, + 0xb8, 0xa7, 0x93, 0x45, 0x38, 0xad, 0x19, 0x5d, 0x03, 0x80, 0xc6, 0x14, 0x91, 0xf5, 0x33, 0xb8, + 0x56, 0x20, 0x2e, 0xef, 0x7b, 0x7c, 0x71, 0x44, 0x64, 0x1f, 0xae, 0x3b, 0x78, 0xad, 0xe3, 0x5b, + 0xf0, 0xec, 0x63, 0xc3, 0x44, 0x78, 0x35, 0x99, 0xf2, 0xda, 0x32, 0x78, 0x21, 0xe5, 0x39, 0x72, + 0xf1, 0x2e, 0xa1, 0xc5, 0x1e, 0x27, 0xad, 0x73, 0x57, 0xdf, 0x6f, 0x35, 0xf7, 0xaa, 0xf3, 0x77, + 0xcf, 0xd0, 0xe1, 0x92, 0xec, 0x91, 0x64, 0x65, 0x4e, 0x58, 0xf3, 0x08, 0x78, 0x33, 0x78, 0x3e, + 0x5d, 0x9c, 0x61, 0x45, 0xd4, 0x88, 0xd0, 0x3d, 0x00, 0x42, 0x7b, 0x70, 0xb6, 0x83, 0xcb, 0x09, + 0xb6, 0x66, 0x6d, 0x02, 0xb2, 0xa7, 0xb7, 0x90, 0x04, 0xb8, 0xe4, 0x60, 0x5c, 0xe0, 0x44, 0xf8, + 0xf3, 0x13, 0xb3, 0xc1, 0xcf, 0xc3, 0x5f, 0x44, 0x93, 0xcb, 0xa0, 0xbc, 0x17, 0x53, 0x27, 0x90, + 0x37, 0x99, 0x73, 0x28, 0x8b, 0xaf, 0x87, 0x2f, 0x7c, 0x11, 0xfe, 0x3d, 0xe0, 0xda, 0x23, 0xb5, + 0xa9, 0x9a, 0xec, 0x7c, 0xf5, 0x65, 0xce, 0x4e, 0xd8, 0x91, 0xfd, 0x29, 0x59, 0x49, 0x53, 0x26, + 0x2a, 0xee, 0xed, 0xe1, 0x03, 0x51, 0x41, 0x33, 0xc8, 0x0c, 0x69, 0xba, 0xe1, 0xb3, 0x23, 0x43, + 0x03, 0x20, 0xf2, 0x8a, 0x64, 0xb2, 0x4a, 0x2f, 0xd1, 0x56, 0x76, 0x8e, 0xac, 0xf5, 0xb0, 0x4c, + 0xf8, 0xa7, 0x69, 0x4e, 0xc8, 0x02, 0x9b, 0x33, 0xa1, 0xe8, 0xf3, 0xaf, 0x92, 0x75, 0x22, 0x67, + 0x68, 0x51, 0xbc, 0x90, 0xff, 0x2b, 0xec, 0x6b, 0x68, 0xe3, 0x13, 0x64, 0x29, 0x4a, 0x36, 0x8f, + 0x33, 0xa0, 0x4d, 0x97, 0x56, 0x43, 0x72, 0x61, 0xdd, 0x2e, 0x2f, 0x42, 0xc6, 0x0e, 0x7e, 0xc1, + 0xb4, 0x95, 0xf7, 0x7a, 0xf4, 0x29, 0x21, 0xda, 0x70, 0xd8, 0xa9, 0x01, 0x10, 0x7a, 0x83, 0x33, + 0x90, 0x9d, 0xd9, 0x9f, 0xd1, 0x19, 0x48, 0x65, 0x6d, 0xdd, 0x1f, 0x30, 0xdc, 0x51, 0x0c, 0x77, + 0x16, 0x93, 0x4a, 0xf8, 0x07, 0xea, 0x60, 0xde, 0x01, 0x46, 0x5a, 0xd3, 0x63, 0x33, 0xf4, 0x6c, + 0xda, 0x87, 0xe5, 0x95, 0x00, 0x6b, 0x2f, 0xae, 0x84, 0xd8, 0x1b, 0x75, 0x4b, 0x04, 0x31, 0x80, + 0x23, 0x03, 0xc6, 0xc2, 0x2b, 0x1d, 0xde, 0xd0, 0x34, 0x13, 0x53, 0xa2, 0xd7, 0x16, 0x8f, 0xcb, + 0x02, 0x60, 0x69, 0x54, 0x2e, 0x69, 0x9d, 0xad, 0x65, 0xd6, 0x8a, 0xe1, 0x10, 0xb6, 0x2b, 0x7b, + 0x1b, 0x2b, 0xb2, 0xf8, 0xf7, 0x31, 0x74, 0x1a, 0xcb, 0x10, 0x2a, 0x00, 0x5c, 0x88, 0x6a, 0x6b, + 0x11, 0x9e, 0x0a, 0x51, 0xba, 0xb0, 0x36, 0x98, 0x00, 0xc8, 0x79, 0xb3, 0x37, 0xf7, 0x6b, 0x58, + 0x97, 0x59, 0x3f, 0xbd, 0xc4, 0x6b, 0xc6, 0xf4, 0x76, 0x2f, 0xcb, 0xb1, 0x3f, 0x74, 0xf8, 0x06, + 0x71, 0x2f, 0x48, 0xae, 0xd6, 0x70, 0x35, 0x25, 0x5e, 0xac, 0xf9, 0xa5, 0x43, 0xcf, 0xb5, 0x8e, + 0xfc, 0x55, 0x55, 0x3e, 0xfa, 0xdd, 0xe0, 0x7b, 0x80, 0x5c, 0x70, 0x7e, 0x2d, 0xf8, 0x06, 0xdd, + 0x03, 0x7e, 0x2d, 0x95, 0x6c, 0xcb, 0x0f, 0x33, 0x00, 0xb6, 0x6a, 0xc7, 0x09, 0x34, 0x33, 0x00, + 0x4e, 0xa8, 0x64, 0x5b, 0x2a, 0xcc, 0x00, 0xd8, 0xaa, 0x1d, 0x27, 0xd0, 0xcc, 0x00, 0x38, 0xa1, + 0x92, 0x6d, 0xa9, 0x30, 0x03, 0x60, 0xab, 0x76, 0x9c, 0x40, 0xd3, 0x25, 0x00, 0xc9, 0xc9, 0xc9, + 0x40, 0xd6, 0x30, 0xb1, 0x45, 0x84, 0xf8, 0x37, 0x7f, 0xe3, 0xc6, 0x8d, 0x0e, 0x9b, 0x5f, 0x5a, + 0x5a, 0x0a, 0x77, 0xee, 0xdc, 0x71, 0xb8, 0xbc, 0x96, 0x82, 0x68, 0x37, 0xda, 0x6f, 0x79, 0x90, + 0xf5, 0x59, 0x5a, 0xc4, 0xca, 0x96, 0xd5, 0x25, 0x00, 0xdd, 0xbb, 0x77, 0x87, 0x25, 0x4b, 0x96, + 0x40, 0xb3, 0x66, 0xf5, 0x4f, 0xb7, 0xee, 0xdd, 0xab, 0x7f, 0xd6, 0x2b, 0xab, 0x5d, 0x82, 0xf0, + 0xce, 0x3b, 0xef, 0x80, 0x9f, 0x9f, 0x1f, 0x95, 0x45, 0xd6, 0x22, 0x4a, 0x70, 0x18, 0x8b, 0x1a, + 0x33, 0x66, 0x0c, 0x2c, 0x5a, 0xb4, 0x08, 0x26, 0x4e, 0x9c, 0x08, 0xc2, 0x7d, 0x75, 0xf9, 0xd5, + 0xad, 0x7a, 0x6b, 0xd7, 0xe5, 0xb5, 0x14, 0xac, 0x30, 0xb2, 0xf2, 0x14, 0xf6, 0xed, 0xdb, 0x07, + 0xa7, 0x4f, 0xd7, 0xdf, 0xe9, 0x44, 0xa3, 0xc9, 0xaa, 0x55, 0x8a, 0xf3, 0xf7, 0xf7, 0x87, 0xde, + 0xbd, 0x7b, 0x43, 0x8f, 0x1e, 0xb6, 0x77, 0x7d, 0x22, 0x9f, 0x43, 0x64, 0x3e, 0x2a, 0xfd, 0xb0, + 0xd4, 0xf5, 0xeb, 0xd7, 0x01, 0x3f, 0x44, 0x85, 0x8b, 0xeb, 0xc8, 0x67, 0x9a, 0xe8, 0xc7, 0xa5, + 0x70, 0xaf, 0xeb, 0x92, 0x92, 0x12, 0xc0, 0x9d, 0x98, 0x3b, 0x76, 0xec, 0x08, 0xf9, 0xf9, 0xf9, + 0x10, 0x1f, 0x1f, 0x0f, 0xb9, 0xb9, 0xb9, 0x40, 0x56, 0x0c, 0xc2, 0xb0, 0x61, 0xc3, 0x24, 0xdf, + 0x9c, 0x68, 0xdf, 0xbe, 0x3d, 0xdb, 0x00, 0x7c, 0xde, 0xbc, 0x79, 0xb0, 0x66, 0x4d, 0xfd, 0xf3, + 0x66, 0x66, 0x98, 0x9e, 0x80, 0xdc, 0x12, 0x44, 0x47, 0xf0, 0xfc, 0xb2, 0x62, 0x62, 0x1f, 0x47, + 0x96, 0xd8, 0x4b, 0x2e, 0x7f, 0x44, 0x1a, 0xd9, 0x72, 0x5a, 0x24, 0xfe, 0xc0, 0x81, 0x03, 0xb2, + 0xbc, 0xc8, 0x6f, 0x79, 0x9c, 0x38, 0x71, 0x82, 0x95, 0x9f, 0x3a, 0x75, 0xaa, 0x15, 0xdd, 0x92, + 0x5f, 0x2e, 0x4f, 0xb6, 0x02, 0x60, 0x72, 0xa4, 0x00, 0xe1, 0x92, 0x4e, 0x35, 0x7b, 0x75, 0x4b, + 0xc9, 0x92, 0xc3, 0xe9, 0x32, 0x04, 0x11, 0x07, 0xad, 0x12, 0x51, 0x08, 0xd7, 0xae, 0x5d, 0xa3, + 0x4f, 0xc5, 0x10, 0x26, 0x6b, 0x5e, 0x19, 0xcf, 0xc2, 0x85, 0x0b, 0x45, 0x9f, 0x4d, 0xc3, 0x56, + 0x8a, 0xad, 0x13, 0x77, 0x57, 0x1f, 0x34, 0x68, 0x10, 0xe3, 0xeb, 0xda, 0xb5, 0x2b, 0x6d, 0x81, + 0xd8, 0x0a, 0xf1, 0x58, 0xbf, 0x7e, 0x3d, 0x24, 0x25, 0x25, 0x89, 0x16, 0xf2, 0x92, 0x2d, 0x09, + 0x80, 0x2c, 0xa9, 0x66, 0x65, 0x70, 0xd7, 0x76, 0xd4, 0x87, 0x07, 0xc2, 0x7c, 0xda, 0xbc, 0x79, + 0x33, 0xc5, 0xad, 0x5e, 0xbd, 0x9a, 0x47, 0x49, 0x7e, 0x80, 0x98, 0x11, 0x9d, 0x04, 0xe8, 0x32, + 0x04, 0x49, 0xd9, 0xba, 0x6c, 0xd9, 0x32, 0x68, 0xdb, 0xb6, 0xfe, 0x39, 0x70, 0xbf, 0x7e, 0xfd, + 0x18, 0x1b, 0x56, 0xce, 0xcd, 0x9b, 0x37, 0xa1, 0x43, 0x87, 0x0e, 0x14, 0x87, 0x17, 0x70, 0xdc, + 0x28, 0x02, 0x0f, 0xb2, 0x40, 0x18, 0x8e, 0x1e, 0x3d, 0x4a, 0xf1, 0x38, 0x9c, 0xe0, 0x9e, 0xfd, + 0x6a, 0x52, 0x44, 0x44, 0x04, 0x63, 0x6f, 0xd5, 0xaa, 0x15, 0x1d, 0x9a, 0x10, 0x11, 0x1e, 0x1e, + 0x4e, 0xf1, 0x81, 0x81, 0x81, 0x8c, 0x5e, 0x5c, 0x5c, 0xcc, 0x60, 0x57, 0x01, 0x86, 0xf5, 0x00, + 0xf2, 0xf9, 0x5a, 0x87, 0x7c, 0xc2, 0xdd, 0x41, 0xf8, 0xe4, 0xaa, 0x99, 0x10, 0xaf, 0xdf, 0x29, + 0x67, 0xd2, 0x1a, 0x35, 0x27, 0xd2, 0x9a, 0x39, 0x32, 0x8c, 0x70, 0xe4, 0xeb, 0x14, 0x6c, 0x3c, + 0xc6, 0x6f, 0x1a, 0x2e, 0x58, 0xb0, 0x80, 0xca, 0x8e, 0x8d, 0x8d, 0xe5, 0xba, 0x74, 0xe9, 0xc2, + 0x68, 0xc4, 0x31, 0xba, 0xfb, 0x02, 0xb9, 0x68, 0x5b, 0xe9, 0xde, 0xb9, 0x73, 0xa7, 0x88, 0x0f, + 0x97, 0xe8, 0x87, 0x85, 0x85, 0x71, 0x01, 0x01, 0x01, 0x22, 0x3c, 0xca, 0x48, 0x4b, 0x4b, 0xe3, + 0xf0, 0xfa, 0x41, 0x2e, 0xb2, 0x8c, 0xe6, 0xeb, 0xeb, 0xcb, 0x91, 0x4f, 0x1a, 0x50, 0xb9, 0xfc, + 0xf2, 0x7c, 0xe4, 0x45, 0xfd, 0xc7, 0x8f, 0x1f, 0x67, 0xdf, 0x64, 0x40, 0x1c, 0x99, 0x3c, 0xd0, + 0x5d, 0x1e, 0x78, 0x23, 0x56, 0xac, 0x58, 0xc1, 0x75, 0xee, 0xdc, 0x99, 0x23, 0x3d, 0x97, 0x1e, + 0x64, 0xe2, 0xc0, 0xe4, 0xe2, 0xae, 0x2a, 0x3c, 0x1e, 0xb7, 0xce, 0x98, 0x35, 0x6b, 0x16, 0x5f, + 0x4c, 0xd3, 0x59, 0x97, 0x1e, 0x80, 0x33, 0x17, 0xfc, 0xac, 0x25, 0x7e, 0x5d, 0x83, 0x4f, 0x38, + 0x97, 0xe7, 0x3f, 0x75, 0x89, 0x5d, 0x1d, 0xbf, 0xcc, 0x21, 0x4c, 0xe4, 0xb3, 0x8c, 0x56, 0x38, + 0xa4, 0xe3, 0xd4, 0x13, 0x67, 0x2c, 0x53, 0xa6, 0x4c, 0xa1, 0x9f, 0x1b, 0x21, 0x7b, 0x1e, 0x40, + 0x6a, 0x6a, 0x2a, 0x95, 0x85, 0x9f, 0x1f, 0xc1, 0xeb, 0xc5, 0xae, 0x5d, 0xbb, 0xe8, 0x78, 0x4e, + 0x2a, 0x0b, 0x50, 0xb6, 0x70, 0x28, 0xc1, 0x99, 0x17, 0xaf, 0x17, 0x67, 0x34, 0x7c, 0x42, 0xfd, + 0x38, 0x2b, 0x22, 0x81, 0x64, 0x9f, 0x31, 0xa9, 0xa8, 0xa8, 0xa0, 0x43, 0x21, 0xcf, 0x83, 0x33, + 0xa9, 0x9c, 0x9c, 0x1c, 0x76, 0x08, 0xa7, 0xd2, 0xe8, 0x23, 0x4f, 0xc3, 0x6b, 0x1b, 0xce, 0xa6, + 0xf4, 0x48, 0xe6, 0xf3, 0x00, 0x3d, 0x6a, 0x51, 0x83, 0x0c, 0x5d, 0x7a, 0x80, 0x06, 0xfd, 0xbf, + 0xf9, 0xa2, 0x66, 0x00, 0x5c, 0xdc, 0x04, 0xcc, 0x00, 0x98, 0x01, 0x70, 0x71, 0x0d, 0xb8, 0x58, + 0xbd, 0xd9, 0x03, 0xcc, 0x00, 0xb8, 0xb8, 0x06, 0x5c, 0xac, 0xde, 0xec, 0x01, 0x66, 0x00, 0x5c, + 0x5c, 0x03, 0x2e, 0x56, 0xff, 0x7f, 0x0f, 0x62, 0xce, 0xd5, 0xad, 0xd5, 0x92, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -@implementation FLEXResources +static const u_int8_t FLEXAudioIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x32, 0x39, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xa6, + 0xa8, 0x92, 0xdf, 0x00, 0x00, 0x09, 0x77, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x99, 0x57, + 0x4c, 0x94, 0x4b, 0x14, 0xc7, 0xd9, 0xa2, 0xd2, 0x44, 0x40, 0x2c, 0x14, 0x51, 0xc0, 0xa8, 0xd8, + 0x30, 0x8a, 0x77, 0xc5, 0xcb, 0xb5, 0xbc, 0x20, 0xf6, 0x68, 0xa2, 0x89, 0x3d, 0x24, 0xbe, 0x58, + 0x5e, 0x7c, 0xd0, 0x18, 0xbd, 0x46, 0xe3, 0x8b, 0x4f, 0x1a, 0x8d, 0x31, 0xea, 0x83, 0x35, 0x6a, + 0x2c, 0xb9, 0x24, 0x46, 0x0d, 0x8a, 0x41, 0x54, 0x04, 0x0d, 0x08, 0x42, 0x58, 0x69, 0xa2, 0xec, + 0x52, 0xa4, 0x08, 0xb2, 0x74, 0x41, 0x81, 0xfb, 0x93, 0xb9, 0x99, 0x7c, 0x77, 0x29, 0xba, 0x1f, + 0x4d, 0x93, 0xfd, 0xb2, 0xd9, 0x9c, 0x99, 0x39, 0x33, 0xdf, 0xf9, 0x9f, 0x36, 0x73, 0xe6, 0xd3, + 0xb4, 0xb7, 0xb7, 0x3b, 0xfc, 0xce, 0x8f, 0xf6, 0x77, 0x16, 0xfe, 0xbb, 0xec, 0x76, 0x00, 0x83, + 0x6d, 0x41, 0xbb, 0x05, 0x6c, 0xb4, 0x40, 0x65, 0x65, 0x65, 0x7e, 0x7e, 0xfe, 0xb7, 0x6f, 0xdf, + 0x6c, 0x9c, 0xd7, 0x2d, 0xbb, 0xa6, 0x6f, 0xb3, 0x50, 0x71, 0x71, 0x71, 0xb5, 0xc5, 0xa2, 0xd7, + 0xe9, 0xbc, 0xc7, 0x7a, 0xbb, 0x7b, 0xb8, 0x2b, 0x5f, 0xcb, 0x8b, 0x34, 0x1a, 0x4d, 0x5d, 0x5d, + 0xdd, 0xf3, 0xe7, 0xcf, 0x1b, 0x1b, 0x1b, 0x97, 0x2e, 0x5d, 0xea, 0xea, 0xea, 0xaa, 0x64, 0x50, + 0x47, 0xf7, 0x25, 0x80, 0x9c, 0x9c, 0x9c, 0x4c, 0xa3, 0xd1, 0xa1, 0x5d, 0xd3, 0xdc, 0xd2, 0xac, + 0xd7, 0xeb, 0x02, 0x03, 0x02, 0xa6, 0x4f, 0x9f, 0xee, 0xec, 0xec, 0x2c, 0x24, 0x43, 0xf4, 0xf2, + 0xf2, 0x72, 0x3f, 0x3f, 0x3f, 0xad, 0x56, 0xfb, 0xf0, 0xe1, 0xc3, 0xcf, 0x9f, 0x3f, 0xaf, 0x5f, + 0xbf, 0x5e, 0x8e, 0xaa, 0x93, 0x9e, 0x59, 0xba, 0x23, 0x47, 0x8e, 0xa8, 0x9e, 0xac, 0x9c, 0xd8, + 0xd0, 0xd0, 0x90, 0x9a, 0x9a, 0x86, 0x9a, 0x1f, 0x3f, 0x8e, 0x8d, 0x7f, 0x12, 0x57, 0x55, 0x59, + 0xd9, 0xd4, 0xd8, 0x44, 0xa7, 0x97, 0xd7, 0x28, 0x27, 0x27, 0x47, 0x38, 0xf5, 0x7a, 0x3d, 0x42, + 0xbf, 0x79, 0xf3, 0xc6, 0xdb, 0xdb, 0x7b, 0xda, 0xb4, 0x69, 0xa0, 0xcd, 0xcd, 0xcd, 0x9d, 0x31, + 0x63, 0x86, 0x72, 0x11, 0x15, 0x74, 0x9f, 0x01, 0x30, 0x9b, 0xcd, 0x38, 0x46, 0x7c, 0x7c, 0x7c, + 0x74, 0xf4, 0x3f, 0xc8, 0xf1, 0xb9, 0xba, 0xda, 0x64, 0x36, 0xe1, 0xeb, 0xad, 0xad, 0xad, 0x63, + 0xc6, 0x8c, 0x71, 0x72, 0x72, 0x42, 0xfd, 0x82, 0x78, 0xf5, 0xea, 0xd5, 0xf8, 0xf1, 0xe3, 0x27, + 0x4c, 0x98, 0xf0, 0xe2, 0xc5, 0x8b, 0xa1, 0x43, 0x87, 0xfa, 0xf8, 0xf8, 0xa8, 0x90, 0x5b, 0x4e, + 0xe9, 0x33, 0x00, 0x65, 0x65, 0x65, 0xb5, 0xb5, 0x75, 0x0f, 0x1e, 0xdc, 0xd7, 0x68, 0x1c, 0xc6, + 0x8e, 0x1d, 0xeb, 0xe2, 0xe2, 0x82, 0xca, 0x09, 0x09, 0x8b, 0xa5, 0x1a, 0x0c, 0xe3, 0xc6, 0x8d, + 0x1b, 0x36, 0x6c, 0x98, 0xd1, 0x68, 0x0c, 0x08, 0x08, 0xc0, 0x85, 0xc0, 0x30, 0x67, 0xce, 0x1c, + 0x7a, 0x9e, 0x3d, 0x7b, 0x36, 0x75, 0xea, 0x54, 0x47, 0xc7, 0xef, 0x26, 0x52, 0xf7, 0xf4, 0x59, + 0x1a, 0x45, 0x2c, 0x44, 0x47, 0x14, 0x6f, 0x6f, 0x1f, 0x4f, 0x4f, 0x4f, 0x0f, 0x0f, 0x8f, 0x11, + 0x23, 0x46, 0xb8, 0xbb, 0xbb, 0x17, 0x14, 0x14, 0x20, 0x6e, 0x42, 0x42, 0x02, 0xee, 0x0e, 0x0c, + 0x5c, 0x28, 0x38, 0x38, 0x18, 0x6c, 0xa9, 0xa9, 0xa9, 0xb3, 0x66, 0xcd, 0xa2, 0x93, 0x51, 0x75, + 0xa2, 0x8b, 0x59, 0x7d, 0x03, 0xa0, 0xa9, 0xa9, 0x29, 0x3b, 0x3b, 0x1b, 0xe9, 0x3d, 0x3c, 0xdc, + 0xbd, 0xbc, 0xbc, 0x46, 0x8e, 0x1c, 0x29, 0x31, 0xd0, 0x24, 0x6f, 0x26, 0x25, 0x25, 0xbe, 0x7e, + 0xfd, 0x1a, 0x6f, 0x01, 0xd5, 0xbb, 0x77, 0xef, 0x16, 0x2e, 0x5c, 0x98, 0x96, 0x96, 0x56, 0x5f, + 0x5f, 0x3f, 0x7f, 0xfe, 0xfc, 0xcc, 0xcc, 0x4c, 0xe2, 0x5b, 0x35, 0x86, 0xbe, 0x01, 0x40, 0x76, + 0x7f, 0xff, 0xfe, 0xbd, 0x4e, 0xa7, 0x77, 0x77, 0xf7, 0x70, 0x73, 0x73, 0x43, 0xf1, 0xc2, 0x02, + 0xd0, 0xc3, 0x87, 0x0f, 0x87, 0xce, 0xcb, 0x7b, 0xf7, 0xf2, 0xe5, 0x4b, 0xc2, 0x60, 0xf2, 0xe4, + 0xc9, 0x26, 0x93, 0x89, 0x90, 0x20, 0x0c, 0x92, 0x92, 0x92, 0xa6, 0x4c, 0x99, 0x82, 0x11, 0x80, + 0x34, 0xc8, 0x00, 0x4a, 0x4a, 0x3e, 0xf2, 0x23, 0x64, 0x51, 0x3c, 0xd9, 0x1d, 0xb9, 0x79, 0x80, + 0x21, 0x09, 0x9d, 0x4e, 0x47, 0xda, 0x49, 0x4c, 0x4c, 0x1c, 0x32, 0x64, 0x08, 0x59, 0x08, 0xad, + 0x13, 0x03, 0x44, 0xc8, 0xd7, 0xaf, 0x5f, 0xf1, 0xa8, 0xbc, 0xbc, 0x3c, 0xe2, 0x44, 0x1d, 0x86, + 0x3e, 0xb0, 0x00, 0xef, 0x36, 0x99, 0x0a, 0xb0, 0x40, 0x5d, 0x5d, 0x2d, 0x79, 0x86, 0x26, 0x18, + 0x04, 0x0c, 0x30, 0xe0, 0x33, 0x18, 0x61, 0xd4, 0xa8, 0x51, 0x44, 0x79, 0x46, 0x46, 0x06, 0xa2, + 0xa3, 0xf5, 0xaa, 0xaa, 0x2a, 0x8c, 0x80, 0x77, 0x7d, 0xf8, 0xf0, 0x81, 0x20, 0xa6, 0x59, 0x5b, + 0x5b, 0x3b, 0x38, 0x00, 0x2c, 0x16, 0x4b, 0x4c, 0xcc, 0xc3, 0x94, 0x94, 0x94, 0xaa, 0xaa, 0x4a, + 0x93, 0xc9, 0x4c, 0x98, 0xea, 0xf5, 0x43, 0xd8, 0x71, 0x9b, 0x9b, 0x9b, 0x09, 0x6b, 0x81, 0x44, + 0xfc, 0xe3, 0x48, 0xa4, 0x5a, 0xbc, 0x85, 0x7e, 0x68, 0xbc, 0x2e, 0x28, 0x28, 0xa8, 0xb0, 0xb0, + 0x10, 0x84, 0xc4, 0x34, 0xf0, 0x06, 0x01, 0x00, 0x81, 0x6b, 0x36, 0x97, 0x14, 0x14, 0x98, 0xd8, + 0xb0, 0xf0, 0x9f, 0x8c, 0x8c, 0x74, 0x12, 0x28, 0xe2, 0xd2, 0x24, 0xcd, 0xe3, 0xdc, 0x6d, 0x6d, + 0x6d, 0x68, 0x9a, 0x07, 0x1a, 0x77, 0xa2, 0x1f, 0xa8, 0x9f, 0x3e, 0x7d, 0x22, 0x9a, 0x2b, 0x2a, + 0x2a, 0x60, 0x26, 0x7c, 0xd9, 0xfb, 0xb0, 0x5b, 0x69, 0x69, 0xe9, 0x40, 0x03, 0xa8, 0xa9, 0xa9, + 0x49, 0x4f, 0x37, 0x56, 0x56, 0x56, 0x39, 0x38, 0x68, 0x5a, 0x5b, 0xbf, 0x7b, 0xff, 0xdb, 0xb7, + 0x6f, 0x11, 0xc8, 0xc7, 0xc7, 0x1b, 0x47, 0x9f, 0x39, 0x73, 0x66, 0x64, 0x64, 0x24, 0xbb, 0x01, + 0x62, 0xb1, 0x5b, 0x91, 0xf2, 0xc9, 0x51, 0x10, 0xd5, 0xd5, 0xd5, 0x64, 0x52, 0xd2, 0x14, 0xbb, + 0x1e, 0xa3, 0x3c, 0x98, 0x8b, 0xa8, 0x50, 0x9d, 0x88, 0xd4, 0xc7, 0x00, 0xdb, 0x56, 0x43, 0x43, + 0x3d, 0xa2, 0x18, 0x0c, 0x86, 0xc6, 0xc6, 0x26, 0xd2, 0x0b, 0x61, 0x90, 0x9c, 0x9c, 0x82, 0x63, + 0xb4, 0xb4, 0xb4, 0x20, 0x37, 0x7e, 0x42, 0xaa, 0xc1, 0x97, 0x90, 0x1b, 0x48, 0xf8, 0x09, 0xc6, + 0xe1, 0x34, 0x61, 0x36, 0x17, 0x62, 0x2e, 0x3c, 0x07, 0x5f, 0x42, 0x74, 0x2c, 0xc0, 0x22, 0x8c, + 0xaa, 0xb3, 0x80, 0xca, 0x69, 0xbc, 0xcc, 0xd5, 0xd5, 0x05, 0xd3, 0x07, 0x05, 0x05, 0xea, 0x74, + 0xd0, 0xae, 0x44, 0x2a, 0xe1, 0x88, 0x7c, 0x48, 0x8c, 0xe8, 0x29, 0x29, 0xaf, 0xbf, 0x7c, 0xf9, + 0xc2, 0xfe, 0x80, 0xac, 0xe8, 0x1e, 0x35, 0xf3, 0x20, 0x25, 0xcd, 0xb2, 0xf2, 0x52, 0xa0, 0x8a, + 0x70, 0x1f, 0x3d, 0x7a, 0x34, 0xd8, 0xf0, 0x31, 0xa6, 0x0c, 0x34, 0x00, 0x5e, 0x89, 0xe8, 0x1a, + 0x4d, 0x9b, 0xb3, 0xb3, 0xcb, 0x82, 0x05, 0x0b, 0xee, 0xdd, 0xbb, 0xb7, 0x6b, 0xd7, 0xae, 0xe6, + 0xe6, 0x96, 0xec, 0xec, 0x9c, 0xe0, 0xe0, 0x29, 0xf1, 0xf1, 0x4f, 0xb0, 0x8f, 0x88, 0x0d, 0x24, + 0x43, 0xcd, 0x3c, 0x10, 0x88, 0x5b, 0x5e, 0x56, 0x86, 0xfb, 0xe1, 0x63, 0x44, 0x08, 0x61, 0x00, + 0x2a, 0x10, 0x62, 0x2b, 0x75, 0x00, 0xd4, 0xbb, 0x10, 0xef, 0x43, 0xf1, 0x45, 0x45, 0x85, 0xc8, + 0xf5, 0xe7, 0x9f, 0xe1, 0xf8, 0x74, 0x71, 0xf1, 0x47, 0xb2, 0x26, 0x82, 0x92, 0x16, 0x03, 0x02, + 0x82, 0xb2, 0xb2, 0xb2, 0xf1, 0x6c, 0xfc, 0x07, 0xad, 0x23, 0x6b, 0x07, 0x84, 0x76, 0xdc, 0x06, + 0x7f, 0x03, 0x1a, 0x04, 0xa2, 0x33, 0xca, 0x3a, 0xc4, 0x37, 0x48, 0x06, 0x01, 0xc0, 0xa4, 0x49, + 0x93, 0xd2, 0xde, 0xa4, 0x7f, 0x2c, 0xa9, 0x68, 0x6b, 0xd3, 0x86, 0x86, 0xce, 0x4d, 0x4c, 0x4c, + 0x40, 0xe7, 0x1d, 0x19, 0xe6, 0x93, 0x9f, 0x9f, 0x2f, 0x25, 0x01, 0xc9, 0x91, 0x2d, 0x8c, 0xdd, + 0x4a, 0x60, 0x60, 0x8b, 0x00, 0x09, 0x7e, 0x65, 0xa9, 0xb1, 0x60, 0x04, 0x29, 0x31, 0x66, 0x81, + 0x4d, 0x36, 0x6d, 0x22, 0x7a, 0x65, 0x01, 0xd4, 0xe6, 0xe4, 0xe8, 0x94, 0x90, 0xf0, 0x9c, 0xfd, + 0x28, 0x34, 0xd4, 0x80, 0x7c, 0x89, 0x89, 0x2f, 0xc8, 0x8f, 0x15, 0x15, 0xe5, 0x9c, 0xe1, 0xfe, + 0x30, 0x18, 0xd8, 0x9e, 0xc0, 0x40, 0x30, 0xf0, 0x10, 0x1b, 0x04, 0x37, 0x0f, 0x04, 0xa7, 0x20, + 0xbc, 0xcb, 0x26, 0x41, 0xbb, 0x63, 0xee, 0x15, 0x00, 0x16, 0x0d, 0x0b, 0x33, 0x64, 0x65, 0x19, + 0x39, 0x48, 0xa0, 0xd7, 0xad, 0x5b, 0xa3, 0x38, 0x2f, 0xc4, 0xc6, 0x3e, 0x4a, 0x4e, 0x4e, 0xbe, + 0x7f, 0xff, 0x7e, 0x6d, 0x4d, 0x4d, 0x44, 0xc4, 0x12, 0xdc, 0x89, 0x1c, 0x8f, 0xc4, 0xf8, 0x18, + 0x0f, 0x6c, 0x18, 0x41, 0xab, 0xd5, 0xf1, 0xdf, 0x9d, 0x4c, 0x36, 0xf5, 0xf7, 0x0a, 0x00, 0x6e, + 0x4d, 0x1e, 0x5c, 0xbe, 0x2c, 0x32, 0x37, 0x2f, 0x27, 0x24, 0x64, 0xc6, 0xaa, 0x55, 0xcb, 0x0f, + 0x1e, 0xfc, 0xdb, 0xd1, 0xd1, 0xc9, 0xd7, 0xd7, 0xd7, 0xc7, 0xc7, 0x97, 0xda, 0x17, 0x7d, 0x87, + 0x87, 0xff, 0x85, 0xfa, 0x39, 0xc0, 0x61, 0x17, 0x72, 0x14, 0xff, 0x6c, 0x6a, 0xe4, 0x4d, 0xdc, + 0xc6, 0x26, 0x41, 0xbb, 0x63, 0x56, 0x5f, 0xd0, 0x20, 0x3d, 0x5a, 0x44, 0x44, 0x7f, 0x7f, 0x7f, + 0x9d, 0x4e, 0x63, 0x34, 0x66, 0xb2, 0x5f, 0x79, 0x7a, 0x8e, 0x1c, 0xee, 0xe6, 0xa6, 0xd5, 0x68, + 0xe7, 0xcd, 0x33, 0x40, 0x37, 0x35, 0x35, 0xe2, 0xdc, 0x41, 0x41, 0x13, 0x21, 0x38, 0xb1, 0x71, + 0x1a, 0x25, 0x76, 0x57, 0xad, 0x5c, 0xe5, 0xef, 0x3f, 0x8e, 0x13, 0x91, 0x6a, 0xbf, 0x57, 0x82, + 0x51, 0x59, 0xd4, 0x23, 0x3d, 0xab, 0xe0, 0xf4, 0x00, 0xc0, 0x2b, 0x68, 0xb2, 0x0d, 0xf3, 0x20, + 0x13, 0xea, 0x9f, 0x38, 0x71, 0x22, 0x99, 0x91, 0x14, 0x44, 0x0c, 0xe0, 0x36, 0xf8, 0x4f, 0x6b, + 0x6b, 0x3b, 0x2d, 0x0e, 0x11, 0x1c, 0xef, 0x28, 0x16, 0x28, 0x7a, 0xc2, 0xc2, 0xe6, 0x75, 0xf8, + 0x12, 0x65, 0x90, 0x46, 0x29, 0x90, 0xad, 0x74, 0xaf, 0x00, 0x20, 0x01, 0xe9, 0x05, 0x00, 0x88, + 0x08, 0x01, 0x18, 0x12, 0x0e, 0x18, 0xc0, 0x43, 0x7e, 0xe4, 0xf8, 0x80, 0x9f, 0xd0, 0x0f, 0x8c, + 0xfc, 0xfc, 0xf7, 0xf5, 0x0d, 0xf5, 0xe4, 0x4d, 0xac, 0x86, 0x11, 0x42, 0x43, 0x43, 0x39, 0x9f, + 0x02, 0x12, 0x7a, 0x70, 0x00, 0x08, 0x3d, 0x21, 0x28, 0x0f, 0x30, 0x04, 0x12, 0xfe, 0x69, 0x22, + 0x90, 0xc8, 0xf1, 0x82, 0x87, 0x4e, 0x80, 0x61, 0x2b, 0x40, 0x82, 0x04, 0x0c, 0x88, 0x2e, 0x8e, + 0x46, 0xbd, 0x97, 0x9e, 0x57, 0xa8, 0xb4, 0x80, 0xad, 0x86, 0xee, 0x3f, 0xfe, 0x5e, 0x65, 0xa1, + 0xfe, 0x13, 0xeb, 0xe7, 0x57, 0xb6, 0x03, 0xf8, 0x79, 0x5d, 0xf5, 0x0f, 0xa7, 0xdd, 0x02, 0xfd, + 0xa3, 0xd7, 0x9f, 0x5f, 0xd5, 0x6e, 0x81, 0x1f, 0xe9, 0x4a, 0x6c, 0x11, 0x6c, 0x67, 0x9d, 0x19, + 0xb9, 0x5d, 0x3c, 0x7a, 0xf4, 0x28, 0xe7, 0x8b, 0xce, 0x43, 0x36, 0xf4, 0x74, 0xec, 0x45, 0xfd, + 0xf5, 0x77, 0xe0, 0xc0, 0x01, 0x79, 0xe0, 0xd9, 0xb1, 0x63, 0x87, 0xd5, 0x6b, 0x36, 0x6c, 0xd8, + 0x80, 0xa0, 0x57, 0xaf, 0x5e, 0xb5, 0xea, 0xb7, 0xa9, 0xd9, 0xbf, 0x2e, 0x44, 0xa1, 0x48, 0x8d, + 0xcf, 0x85, 0x05, 0x82, 0xb2, 0x0d, 0x5b, 0xe9, 0x95, 0x32, 0x1a, 0x78, 0x14, 0xc7, 0x56, 0xfd, + 0xb6, 0x35, 0x7b, 0x86, 0x2b, 0x4e, 0x07, 0x3d, 0xf3, 0xfc, 0x70, 0xf4, 0xc4, 0x89, 0x13, 0xc8, + 0xb4, 0x79, 0xf3, 0xe6, 0xce, 0x9c, 0x9c, 0x32, 0x3a, 0x77, 0xda, 0xd4, 0xd3, 0x85, 0x05, 0xb8, + 0xae, 0xda, 0xb6, 0x6d, 0xdb, 0xdc, 0xb9, 0x73, 0xd1, 0x10, 0x67, 0x77, 0x2e, 0xc1, 0xef, 0xde, + 0xbd, 0x2b, 0xb5, 0x72, 0xec, 0xd8, 0xb1, 0x79, 0x1d, 0x0f, 0x55, 0x0b, 0x9d, 0xe7, 0xcf, 0x9f, + 0x0f, 0xa3, 0xa8, 0x31, 0x18, 0xa8, 0x60, 0x24, 0x0f, 0xc4, 0xad, 0x5b, 0xb7, 0xb6, 0x6c, 0xd9, + 0x12, 0x11, 0x11, 0xc1, 0x17, 0xa0, 0xce, 0xba, 0x8f, 0x8d, 0x8d, 0xe5, 0x82, 0x9a, 0x59, 0xe1, + 0xe1, 0xe1, 0x27, 0x4f, 0x9e, 0x54, 0x4e, 0x14, 0x74, 0x49, 0x49, 0x49, 0x54, 0x54, 0x14, 0x47, + 0x6e, 0xca, 0x6e, 0x04, 0xd8, 0xb7, 0x6f, 0x5f, 0xb7, 0x15, 0x5c, 0x67, 0xb8, 0x88, 0xc7, 0x2a, + 0x9c, 0xc9, 0xc0, 0xc0, 0xb5, 0x07, 0x34, 0x67, 0x2f, 0x2a, 0x12, 0xc1, 0x29, 0x3f, 0x0a, 0xdd, + 0xbe, 0x7d, 0x9b, 0x9e, 0x25, 0x4b, 0x96, 0x88, 0x57, 0x1e, 0x3f, 0x7e, 0x5c, 0x2e, 0xb5, 0x7d, + 0xfb, 0x76, 0xd1, 0x29, 0xfe, 0xc5, 0x79, 0x53, 0x69, 0x81, 0xfd, 0xfb, 0xf7, 0x4b, 0x06, 0x94, + 0x25, 0x27, 0x0a, 0x82, 0xe0, 0xa6, 0xcc, 0x97, 0x0c, 0x82, 0xe0, 0xcb, 0x08, 0xb7, 0x91, 0x56, + 0x9c, 0x34, 0xff, 0xbb, 0xf0, 0x50, 0x0e, 0x44, 0x47, 0x47, 0x23, 0x0d, 0x57, 0xc7, 0x74, 0x52, + 0xbf, 0x0a, 0x0c, 0x32, 0xd4, 0xb8, 0xcd, 0x0c, 0x0c, 0x0c, 0x64, 0x51, 0x01, 0x80, 0x1c, 0x32, + 0x7b, 0xf6, 0x6c, 0x9a, 0x12, 0x80, 0x34, 0x17, 0xda, 0xbd, 0x78, 0xf1, 0xe2, 0xe2, 0xc5, 0x8b, + 0x85, 0x04, 0x9b, 0x36, 0x6d, 0x92, 0x6f, 0xa1, 0x54, 0x88, 0x89, 0x89, 0x59, 0xb3, 0x66, 0x0d, + 0x43, 0x56, 0x00, 0x38, 0x90, 0xf3, 0x69, 0x90, 0x7e, 0x6a, 0xbd, 0x33, 0x67, 0xce, 0xf0, 0x6d, + 0xe1, 0xf0, 0xe1, 0xc3, 0x5c, 0x1c, 0xd1, 0xb3, 0x71, 0xe3, 0x46, 0xb9, 0x82, 0x24, 0xba, 0xb8, + 0xd8, 0x62, 0xdd, 0xb8, 0xb8, 0x38, 0x24, 0xa6, 0xfc, 0xa3, 0xfe, 0x60, 0x21, 0x08, 0x6c, 0x2a, + 0xe4, 0xe0, 0xfa, 0x96, 0x4e, 0x68, 0xa1, 0x57, 0xe0, 0x59, 0x45, 0xe1, 0xa5, 0x4b, 0x97, 0x18, + 0xa5, 0x9f, 0xcf, 0x47, 0x1c, 0x98, 0xf1, 0x04, 0xee, 0x49, 0xb9, 0xd6, 0x15, 0xd3, 0xc5, 0x3f, + 0x8e, 0xc1, 0xc5, 0xe3, 0xd3, 0xa7, 0x4f, 0x95, 0x9d, 0x82, 0xc6, 0x81, 0xf9, 0x12, 0x05, 0xbd, + 0x77, 0xef, 0xde, 0x9d, 0x3b, 0x77, 0x42, 0xe0, 0x84, 0xc0, 0xb8, 0x7e, 0xfd, 0x3a, 0x9a, 0xe5, + 0x58, 0x2e, 0xd3, 0x9a, 0xe0, 0xb7, 0x06, 0x80, 0x02, 0x56, 0xae, 0x5c, 0xf9, 0xe8, 0xd1, 0x23, + 0x86, 0x29, 0x4a, 0x90, 0x12, 0x23, 0x40, 0x33, 0x53, 0x4c, 0xf8, 0xe1, 0x3f, 0x75, 0x3d, 0x3c, + 0xcb, 0x96, 0x2d, 0x43, 0x7a, 0xc1, 0xbc, 0x62, 0xc5, 0x0a, 0x74, 0xf9, 0xc3, 0x89, 0x82, 0x41, + 0x4c, 0x87, 0x5e, 0xbd, 0x7a, 0xb5, 0x9c, 0x02, 0x0d, 0x00, 0x51, 0x5b, 0x93, 0xd6, 0x64, 0x3f, + 0x84, 0x75, 0x10, 0x5f, 0xbb, 0x76, 0x4d, 0x48, 0x7f, 0xe7, 0xce, 0x1d, 0xae, 0x6e, 0x28, 0x08, + 0xd7, 0xae, 0x5d, 0xab, 0x9c, 0x00, 0x2d, 0x74, 0xc0, 0x75, 0x83, 0xe8, 0x27, 0x3c, 0x94, 0x0c, + 0x68, 0x97, 0x26, 0xd7, 0x2a, 0xb2, 0x53, 0x49, 0xcb, 0xce, 0xee, 0x08, 0x0c, 0x2e, 0x86, 0xb8, + 0xc7, 0x96, 0x3c, 0x82, 0x46, 0x9b, 0x9d, 0xef, 0xbf, 0xac, 0x01, 0x60, 0x41, 0xa6, 0x51, 0x34, + 0xe1, 0x48, 0x94, 0x7c, 0xa4, 0x39, 0xae, 0x12, 0xe8, 0xc1, 0xe7, 0xe4, 0x72, 0x22, 0x2a, 0xf8, + 0x48, 0x4a, 0x27, 0x6e, 0x20, 0xa6, 0x48, 0x06, 0x3e, 0xbd, 0xc0, 0xc9, 0x28, 0xdf, 0x63, 0x20, + 0x78, 0x37, 0x0e, 0x29, 0xe7, 0x0a, 0x02, 0x66, 0xf6, 0x66, 0x72, 0x34, 0x4d, 0x25, 0x4d, 0x93, + 0x2b, 0x47, 0xb2, 0x1f, 0xc4, 0xe9, 0xd3, 0xa7, 0x8b, 0x8a, 0x8a, 0x20, 0xd2, 0xd3, 0xd3, 0x51, + 0x3f, 0x04, 0xe9, 0x88, 0xdb, 0x6c, 0x88, 0xff, 0x3d, 0xcc, 0x57, 0x3e, 0x97, 0x2f, 0x5f, 0x16, + 0xc3, 0x84, 0xe6, 0xba, 0x75, 0xeb, 0xa8, 0xd0, 0x45, 0x93, 0xea, 0xf6, 0xca, 0x95, 0x2b, 0x82, + 0x93, 0xfd, 0x5f, 0x74, 0xf2, 0xd9, 0x5d, 0x10, 0xfc, 0xe3, 0x6f, 0x37, 0x6f, 0xde, 0x84, 0x81, + 0x28, 0x97, 0xaf, 0x21, 0x0f, 0x4a, 0x06, 0xf4, 0x77, 0xe8, 0xd0, 0x21, 0x18, 0xb0, 0xad, 0x08, + 0x4a, 0x39, 0x24, 0xa6, 0x9f, 0x3d, 0x7b, 0x56, 0xac, 0x7f, 0xee, 0xdc, 0x39, 0x31, 0x44, 0xfd, + 0x19, 0x12, 0x12, 0x22, 0x68, 0xcc, 0xce, 0x57, 0x36, 0xc1, 0xa0, 0xfc, 0xb7, 0xce, 0x42, 0x28, + 0x66, 0xf7, 0xee, 0xdd, 0x42, 0xc7, 0xcc, 0xe4, 0x2b, 0xe2, 0xa9, 0x53, 0xa7, 0x48, 0x6a, 0x58, + 0xe3, 0xc2, 0x85, 0x0b, 0x62, 0x26, 0xce, 0x43, 0x0a, 0x17, 0xeb, 0x2e, 0x5a, 0xb4, 0x68, 0xcf, + 0x9e, 0x3d, 0xd0, 0xec, 0x18, 0xe8, 0x49, 0x30, 0xf0, 0x26, 0xbe, 0x7c, 0x09, 0x06, 0x5c, 0x82, + 0x4c, 0x2f, 0xaa, 0x64, 0x09, 0x40, 0x22, 0x14, 0x3c, 0xfc, 0x93, 0xa9, 0x25, 0x00, 0x16, 0xb9, + 0x71, 0xe3, 0x86, 0xf2, 0xba, 0x17, 0xab, 0xf2, 0xa1, 0x56, 0x29, 0xb7, 0xa4, 0xbb, 0xae, 0x89, + 0x31, 0x2e, 0xc1, 0x84, 0x82, 0x3b, 0xe7, 0x63, 0xf9, 0x4a, 0x34, 0x0d, 0x2a, 0x09, 0x55, 0xf6, + 0x4b, 0x82, 0x0b, 0x39, 0x76, 0x1f, 0x62, 0x4e, 0xe4, 0x2b, 0xd9, 0xff, 0xf3, 0x04, 0x89, 0x9f, + 0x45, 0x48, 0x62, 0xc2, 0xa9, 0xba, 0x9c, 0xd8, 0x35, 0x80, 0x2e, 0x59, 0x7f, 0xcd, 0x4e, 0xeb, + 0x20, 0xfe, 0x35, 0xa5, 0xec, 0x41, 0x2a, 0x3b, 0x80, 0x1e, 0x94, 0x33, 0x20, 0x43, 0x76, 0x0b, + 0x0c, 0x88, 0x9a, 0x7b, 0x78, 0x89, 0xdd, 0x02, 0x3d, 0x28, 0x67, 0x40, 0x86, 0xec, 0x16, 0x18, + 0x10, 0x35, 0xf7, 0xf0, 0x12, 0xbb, 0x05, 0x7a, 0x50, 0xce, 0x80, 0x0c, 0xfd, 0x0b, 0xbe, 0x35, + 0x47, 0x3f, 0x08, 0xc9, 0x3b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; + +static const u_int8_t FLEXAudioIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x1e, 0x78, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x5d, 0x09, 0x7c, 0x94, 0xd5, 0xb5, 0xff, 0x27, 0x93, 0x4c, 0x32, 0xd9, 0xc9, 0x46, 0xc8, 0x06, + 0x04, 0x12, 0x08, 0x09, 0x24, 0x40, 0x58, 0x02, 0x28, 0x9b, 0x40, 0x15, 0xaa, 0xaf, 0x08, 0x42, + 0x9f, 0xd6, 0xa5, 0x82, 0x88, 0x3f, 0xea, 0xd3, 0xb6, 0x56, 0x5b, 0x5f, 0x4b, 0x5d, 0xb0, 0x5a, + 0xab, 0x3e, 0xad, 0xc2, 0xd3, 0xa7, 0xa8, 0x45, 0x7c, 0xe2, 0x82, 0xa2, 0x65, 0x91, 0x45, 0xd9, + 0x21, 0x80, 0x81, 0x40, 0x08, 0xbb, 0x40, 0x12, 0x92, 0x90, 0x7d, 0x5f, 0x67, 0xf2, 0xbd, 0xff, + 0xf9, 0xe0, 0x1b, 0x26, 0x99, 0x49, 0x26, 0xcb, 0x84, 0xa5, 0x2f, 0xf7, 0xf7, 0x9b, 0xf9, 0xee, + 0x77, 0xef, 0xb9, 0xdb, 0x39, 0xf7, 0x9e, 0xbb, 0x9d, 0x73, 0x3e, 0x27, 0x85, 0x0e, 0xed, 0x70, + 0xce, 0xad, 0xc1, 0x7e, 0x56, 0x59, 0x6f, 0x15, 0x6d, 0x33, 0x81, 0xab, 0xab, 0x0e, 0x5e, 0x5e, + 0x5e, 0x48, 0xd6, 0x11, 0xbe, 0x59, 0x05, 0x6c, 0x26, 0xc8, 0x2d, 0xae, 0x82, 0xab, 0xab, 0x2b, + 0xe6, 0x4d, 0x9f, 0x8e, 0x06, 0xa6, 0x59, 0x5d, 0x66, 0x34, 0x97, 0xe4, 0xd4, 0xbc, 0x0d, 0x46, + 0xa3, 0x11, 0xbf, 0xfe, 0xed, 0xef, 0xd0, 0x6f, 0xc8, 0x18, 0xe4, 0x64, 0x9d, 0x06, 0x0b, 0xc3, + 0x93, 0x4f, 0xfe, 0x16, 0xde, 0xae, 0x2e, 0x97, 0x12, 0x49, 0x02, 0x4b, 0xf7, 0xe9, 0x67, 0x9f, + 0x29, 0x09, 0xc3, 0x47, 0x2a, 0xb7, 0x4d, 0x9f, 0xae, 0x2c, 0xff, 0xf4, 0x5b, 0x25, 0x36, 0x7e, + 0x88, 0x65, 0xb4, 0xc2, 0x2a, 0x5a, 0xbb, 0xe4, 0xd1, 0xa3, 0x95, 0x99, 0x3f, 0xff, 0x85, 0x75, + 0x04, 0x43, 0xac, 0xaa, 0x64, 0xae, 0x6c, 0x0b, 0x1e, 0x9b, 0x8d, 0x6e, 0x01, 0x56, 0x0d, 0x36, + 0x27, 0x58, 0xb9, 0x72, 0xa5, 0x19, 0xee, 0x77, 0xbf, 0xfb, 0x9d, 0xd9, 0xef, 0xe4, 0xe4, 0x84, + 0xc6, 0xc6, 0xc6, 0x2b, 0xef, 0x52, 0x51, 0xf3, 0x5b, 0x1b, 0x3c, 0xe6, 0x12, 0xda, 0x00, 0xab, + 0x82, 0x38, 0xae, 0xd1, 0x2b, 0x72, 0xab, 0x6d, 0x16, 0x6a, 0x55, 0xa5, 0xf7, 0x56, 0x7e, 0x01, + 0x5f, 0xbf, 0x1e, 0x38, 0xb6, 0xf4, 0x35, 0x35, 0x41, 0x63, 0xf3, 0x26, 0xda, 0xa2, 0x8e, 0xbb, + 0xbb, 0xbb, 0x12, 0x17, 0x3f, 0x58, 0x79, 0xe5, 0x1f, 0x9f, 0x5b, 0x45, 0x5f, 0xee, 0x20, 0x57, + 0x4a, 0x1f, 0x38, 0x28, 0x1e, 0x5f, 0xad, 0xf9, 0x0a, 0xe9, 0x67, 0x4b, 0x71, 0xb6, 0xb4, 0x0c, + 0x59, 0x65, 0x95, 0x88, 0xf0, 0xf5, 0x32, 0x03, 0x58, 0x35, 0x7a, 0xce, 0x3d, 0x0f, 0xa0, 0x24, + 0x2f, 0x1b, 0xd5, 0xd5, 0xd5, 0x48, 0x3f, 0x76, 0x14, 0xd1, 0x31, 0x71, 0xd8, 0x9f, 0xb2, 0xcb, + 0x9c, 0xc0, 0xaa, 0x2f, 0x99, 0x4c, 0x26, 0xe5, 0x96, 0x5b, 0x6f, 0xb7, 0xaa, 0x8a, 0x16, 0x60, + 0x55, 0xc2, 0x95, 0xac, 0x6c, 0xfb, 0xac, 0xb0, 0xa4, 0x81, 0x49, 0x97, 0xb0, 0xe5, 0xd4, 0x04, + 0x12, 0xe9, 0xe6, 0xe6, 0x06, 0x79, 0x06, 0x05, 0x05, 0x21, 0x27, 0x27, 0xa7, 0x09, 0xec, 0x5d, + 0x77, 0xdd, 0xa5, 0xc6, 0x49, 0xa0, 0xe3, 0xaa, 0xd4, 0xa4, 0x08, 0x8b, 0x97, 0x76, 0x97, 0x60, + 0x91, 0xb6, 0x4d, 0xde, 0x16, 0x91, 0xd4, 0x3c, 0xf5, 0xfb, 0x9f, 0x6d, 0xc4, 0xdf, 0xff, 0x67, + 0x25, 0x64, 0xec, 0x6c, 0x4e, 0x3f, 0xa5, 0x46, 0x37, 0xc8, 0x4b, 0xf3, 0xae, 0xd6, 0x3c, 0xa1, + 0x46, 0xbf, 0xd6, 0x9e, 0x3b, 0xf6, 0xec, 0x53, 0xa6, 0xfd, 0xf4, 0x4e, 0xc5, 0xdb, 0xc7, 0x47, + 0x09, 0x09, 0xef, 0xad, 0x3c, 0xfe, 0xbf, 0xff, 0x54, 0x16, 0xbf, 0xb6, 0xec, 0x52, 0x12, 0xf6, + 0x0b, 0xa5, 0x91, 0x3d, 0xba, 0x05, 0xd7, 0x26, 0x14, 0x09, 0x2b, 0x4c, 0xd9, 0x77, 0x00, 0x67, + 0x0b, 0x6a, 0x90, 0x90, 0x94, 0x80, 0xb4, 0xb4, 0x0c, 0x2c, 0x7d, 0x69, 0x31, 0x22, 0x07, 0xc4, + 0x62, 0xea, 0xf4, 0xdb, 0x11, 0x37, 0x65, 0x32, 0x46, 0x79, 0x08, 0x17, 0xb6, 0x76, 0x76, 0x51, + 0xf4, 0xb3, 0x59, 0x73, 0xf0, 0xe0, 0xc2, 0x47, 0xa5, 0x3f, 0x60, 0xcd, 0x47, 0xcb, 0xb0, 0x6c, + 0xc9, 0xd3, 0x28, 0xcc, 0xb9, 0x80, 0xda, 0xaa, 0x72, 0xe4, 0x5f, 0xc8, 0xc2, 0xea, 0x0f, 0x97, + 0xe3, 0xe3, 0xe7, 0x5e, 0xb0, 0xce, 0xf9, 0x72, 0x48, 0x9b, 0x5a, 0xf0, 0xcb, 0x79, 0xf3, 0xf0, + 0xf9, 0xe7, 0x5f, 0xc0, 0xd8, 0x60, 0xc4, 0xc8, 0xa4, 0xe1, 0x44, 0xbb, 0x11, 0x6f, 0xbf, 0xf3, + 0x2e, 0x76, 0x6c, 0xdf, 0x06, 0x45, 0xef, 0x03, 0x93, 0xb1, 0x1e, 0x0b, 0xe7, 0xdd, 0x67, 0xb3, + 0x90, 0x36, 0x15, 0x60, 0x33, 0x65, 0x1b, 0x03, 0xed, 0xa2, 0xa8, 0x79, 0x3e, 0xdb, 0xb7, 0x6f, + 0xc7, 0xfe, 0xfd, 0xfb, 0xcd, 0xc1, 0x06, 0x83, 0xc1, 0xec, 0xb7, 0xe9, 0xb1, 0x24, 0xfe, 0x94, + 0x29, 0x53, 0x94, 0xb4, 0xb4, 0x34, 0x65, 0xf2, 0xe4, 0xc9, 0xca, 0xf9, 0xf3, 0xe7, 0xd5, 0x4e, + 0xb8, 0x6e, 0xdd, 0x3a, 0x25, 0x30, 0x30, 0x50, 0x05, 0x63, 0x06, 0x8a, 0x87, 0x87, 0xc7, 0xa5, + 0xce, 0xc9, 0x90, 0xa7, 0x9f, 0x7e, 0xda, 0xec, 0x17, 0x00, 0x89, 0x7f, 0xef, 0xbd, 0xf7, 0x9a, + 0x86, 0xa9, 0x29, 0x2f, 0xff, 0x09, 0x80, 0xf6, 0xd3, 0x12, 0x74, 0xe4, 0xdd, 0xdf, 0xdf, 0xdf, + 0x9c, 0xed, 0xf5, 0x47, 0x03, 0xb6, 0xa8, 0x5d, 0xee, 0xc6, 0x6f, 0x41, 0xbb, 0xbb, 0xa9, 0x30, + 0xb7, 0x4f, 0xca, 0xeb, 0x50, 0x61, 0xba, 0xb2, 0x80, 0x68, 0x15, 0x67, 0x66, 0x72, 0xb7, 0xe2, + 0xd9, 0xb4, 0xeb, 0x90, 0xb2, 0x78, 0xc9, 0xab, 0x4a, 0xfa, 0xc9, 0xb3, 0x64, 0x6c, 0x64, 0x6e, + 0x97, 0xdd, 0x47, 0x67, 0xf3, 0x35, 0x6f, 0x8b, 0x4f, 0xab, 0x59, 0xb3, 0x39, 0xa4, 0xc9, 0x64, + 0x54, 0x3e, 0xdb, 0xb0, 0x57, 0xf1, 0xf6, 0xf6, 0x56, 0x7a, 0xf4, 0xf0, 0x57, 0xe6, 0xbd, 0xf1, + 0x9e, 0xb2, 0xed, 0x87, 0x23, 0xca, 0x9b, 0x27, 0x72, 0x54, 0xd0, 0x2d, 0x25, 0xb5, 0xcd, 0x93, + 0x34, 0x79, 0xb7, 0x8b, 0x22, 0x67, 0x67, 0x1d, 0x42, 0x7b, 0xf6, 0x40, 0x43, 0x43, 0x03, 0x64, + 0x99, 0x71, 0x96, 0x6b, 0xdd, 0xa7, 0x52, 0xd2, 0x70, 0x87, 0x97, 0x13, 0x3e, 0xce, 0xab, 0xc4, + 0x24, 0x3f, 0x37, 0xec, 0xaa, 0x35, 0xb5, 0x88, 0x25, 0xbb, 0x05, 0x48, 0xca, 0x5e, 0x3d, 0x3c, + 0xf1, 0x93, 0x3b, 0xe6, 0xa2, 0xae, 0xb6, 0x06, 0x91, 0x55, 0xc5, 0xb8, 0xcb, 0xcb, 0x80, 0x67, + 0x8f, 0x9c, 0xc1, 0x64, 0x5d, 0x1d, 0xbe, 0xad, 0x34, 0x62, 0xac, 0xbb, 0x0e, 0x2d, 0x51, 0xa4, + 0x4d, 0x05, 0xfc, 0x65, 0xc9, 0x33, 0x58, 0xf6, 0xf7, 0x97, 0xf1, 0xfc, 0x5f, 0xfe, 0x86, 0xc7, + 0x7e, 0xf9, 0x00, 0x6a, 0xca, 0x4b, 0x11, 0x93, 0x93, 0x8d, 0xc7, 0xd6, 0x6c, 0x82, 0xdf, 0xc9, + 0xa3, 0x6a, 0xed, 0x57, 0x56, 0xd9, 0x2e, 0xc2, 0x6e, 0x01, 0xfe, 0x81, 0x81, 0x88, 0x4d, 0x48, + 0xc2, 0x6f, 0x1f, 0x7f, 0x1c, 0x33, 0x6e, 0x9f, 0x81, 0x83, 0x07, 0xd3, 0x98, 0xa1, 0x0b, 0xb2, + 0xf3, 0xf2, 0xe0, 0x1e, 0xdc, 0x1b, 0x9f, 0xa7, 0x5e, 0x2a, 0xe0, 0x17, 0x9e, 0xb6, 0xb3, 0xb2, + 0x3b, 0xd0, 0x66, 0xfd, 0xfb, 0xbd, 0xc8, 0xc9, 0xce, 0x42, 0x6c, 0x4c, 0x7f, 0xd4, 0x70, 0x7d, + 0x35, 0xe3, 0xce, 0x39, 0xd8, 0xfd, 0xfd, 0x06, 0xae, 0xb3, 0xce, 0xc0, 0xcb, 0xc7, 0x07, 0x20, + 0x8d, 0x3e, 0x59, 0xf1, 0x01, 0xbc, 0x3c, 0xdc, 0xd5, 0x96, 0x34, 0xff, 0xb3, 0x5d, 0xac, 0x05, + 0x94, 0x8b, 0x8b, 0x1e, 0x3e, 0xbe, 0x7e, 0x38, 0x75, 0xea, 0x14, 0x8a, 0x4b, 0x8a, 0xb1, 0x72, + 0xf9, 0x7f, 0x23, 0x2f, 0x27, 0x1f, 0x81, 0x3d, 0x7b, 0xe1, 0x70, 0xea, 0x01, 0x64, 0x9d, 0xff, + 0x11, 0x9b, 0xb6, 0xa5, 0x58, 0xa4, 0x68, 0xea, 0xb5, 0x5a, 0x3e, 0x36, 0x8d, 0x06, 0xc6, 0x8f, + 0x49, 0xc2, 0x8b, 0x2f, 0xbd, 0x8c, 0x0b, 0xd9, 0x99, 0xe8, 0x1f, 0x3d, 0x10, 0xf7, 0xdd, 0x33, + 0x17, 0xf3, 0x1f, 0x5a, 0x80, 0x95, 0x1f, 0xad, 0xc0, 0x6d, 0x53, 0x26, 0x00, 0x7a, 0x5f, 0xdc, + 0x3c, 0x32, 0xae, 0x79, 0xb2, 0x2b, 0xef, 0x4d, 0x3a, 0x6d, 0x0b, 0x2f, 0xf3, 0xe6, 0xcf, 0x53, + 0x12, 0x93, 0x46, 0x2a, 0x3f, 0xbf, 0xf7, 0x41, 0x25, 0xfd, 0xe8, 0xd1, 0x16, 0xa0, 0x6c, 0x07, + 0xdb, 0xa5, 0xc1, 0x95, 0xaa, 0x74, 0xcc, 0x67, 0x97, 0x06, 0x1d, 0xcb, 0xf6, 0x4a, 0xaa, 0x76, + 0x17, 0xf0, 0xfd, 0xf7, 0xdf, 0x9b, 0x53, 0x73, 0x3a, 0x35, 0xfb, 0x5b, 0xf2, 0xb4, 0x1b, 0x45, + 0x3d, 0x7b, 0xf6, 0xc4, 0xc5, 0x8b, 0x17, 0x5b, 0xca, 0xcf, 0x3a, 0x5c, 0x23, 0xcd, 0xb4, 0x69, + 0xd3, 0xcc, 0x13, 0xbd, 0x84, 0xe9, 0x74, 0x3a, 0x35, 0x8a, 0x29, 0xcc, 0x4f, 0x59, 0x0c, 0x68, + 0xef, 0x12, 0x98, 0x94, 0x94, 0xa4, 0xc6, 0xc9, 0x5f, 0xef, 0xde, 0xbd, 0x95, 0x5b, 0x6f, 0xbd, + 0x55, 0x71, 0x76, 0x76, 0x56, 0x17, 0x0e, 0x5a, 0x84, 0x99, 0x9b, 0x4a, 0xc2, 0xc5, 0x8b, 0x17, + 0x9b, 0x33, 0xf0, 0xf4, 0xf4, 0x54, 0x61, 0xb4, 0x0c, 0xb5, 0x27, 0x37, 0x05, 0x5a, 0x5a, 0xe5, + 0xeb, 0xaf, 0xbf, 0x36, 0xfb, 0xb5, 0x78, 0x09, 0x68, 0xe2, 0xd7, 0x20, 0x24, 0x50, 0x7e, 0xdc, + 0x59, 0x28, 0x8f, 0x3d, 0xf6, 0x98, 0x5a, 0x0b, 0x2d, 0xec, 0x4f, 0x7f, 0xfa, 0x93, 0x32, 0x62, + 0xc4, 0x08, 0x35, 0xbe, 0x6f, 0xdf, 0xbe, 0x4a, 0x72, 0x72, 0xb2, 0x32, 0x75, 0xea, 0x54, 0xf5, + 0x5d, 0x60, 0x56, 0xac, 0x58, 0xa1, 0x1c, 0x3f, 0x7e, 0xdc, 0xfc, 0xae, 0xe5, 0x29, 0xcf, 0x76, + 0xd3, 0x80, 0x19, 0xb6, 0xcb, 0xb5, 0xbb, 0x17, 0xb5, 0x2b, 0x77, 0x02, 0xdf, 0xf8, 0x05, 0x74, + 0x39, 0x0d, 0xda, 0x8b, 0xd2, 0xf6, 0xc2, 0x77, 0x39, 0x09, 0x2c, 0x2b, 0x24, 0xdd, 0xd8, 0xd1, + 0xce, 0xe1, 0x0d, 0xa8, 0xad, 0xaf, 0x47, 0x5d, 0xbd, 0x1c, 0xb0, 0x5d, 0x71, 0x15, 0x46, 0x13, + 0x7e, 0x2c, 0x29, 0x87, 0x76, 0x76, 0xb0, 0xb3, 0xb8, 0x1a, 0xdb, 0x78, 0x1c, 0x07, 0xc5, 0xf6, + 0x32, 0xe1, 0x4a, 0x4a, 0xfb, 0x3e, 0x87, 0x35, 0xe0, 0xcb, 0x75, 0x9b, 0xf0, 0xe9, 0x86, 0x14, + 0x04, 0x07, 0x06, 0xc0, 0xc7, 0xdb, 0x0b, 0x3c, 0xe3, 0x81, 0x1f, 0x0f, 0x86, 0x7e, 0x36, 0xfb, + 0x6e, 0xac, 0x38, 0x78, 0x16, 0x55, 0x35, 0xf5, 0x78, 0x2f, 0xa7, 0x18, 0x07, 0xab, 0xeb, 0x31, + 0xce, 0xdf, 0x03, 0xe3, 0xfd, 0x3d, 0x59, 0x3b, 0x27, 0xfc, 0x33, 0xaf, 0x14, 0xc6, 0xc6, 0x8e, + 0xd3, 0xc6, 0x21, 0x0d, 0x20, 0x3f, 0x43, 0x75, 0x55, 0x0d, 0x7a, 0x06, 0x05, 0xc0, 0xc9, 0xd9, + 0x45, 0x3d, 0x86, 0x71, 0x63, 0x03, 0x9c, 0x9c, 0x9d, 0xb1, 0xf5, 0xbb, 0x0d, 0xd8, 0xf1, 0xc1, + 0x5b, 0x98, 0x36, 0x6e, 0x14, 0x52, 0x5e, 0x7d, 0x15, 0x21, 0xd5, 0x95, 0xe0, 0xd2, 0x19, 0x6f, + 0x1c, 0xbf, 0xa0, 0x52, 0x60, 0x46, 0x88, 0x1f, 0x5c, 0x9c, 0x9d, 0xb0, 0xa3, 0x8a, 0x54, 0xb3, + 0x38, 0xee, 0xb3, 0x8f, 0xfb, 0x4b, 0x10, 0x0e, 0x1b, 0xc4, 0xe5, 0x15, 0x95, 0x38, 0x71, 0x2e, + 0x13, 0xc5, 0xe5, 0x26, 0xcc, 0x98, 0x30, 0x94, 0x14, 0x30, 0x40, 0xe7, 0xe2, 0x02, 0x77, 0x0f, + 0x2f, 0x8c, 0xbd, 0x7b, 0x01, 0x6a, 0x4f, 0xa7, 0x43, 0xd7, 0x58, 0x8f, 0xc6, 0x39, 0x0f, 0x61, + 0x8a, 0x5e, 0xc1, 0xed, 0x23, 0x86, 0xa0, 0x4f, 0x64, 0x18, 0xbe, 0x2d, 0xab, 0xc3, 0x4f, 0x7c, + 0xdd, 0xd4, 0xda, 0xd4, 0x90, 0x12, 0x45, 0x8d, 0x4e, 0x08, 0xb7, 0xbb, 0x8e, 0xba, 0xd2, 0x3c, + 0x87, 0x50, 0x40, 0xb2, 0x93, 0x6e, 0xd3, 0x58, 0x53, 0x89, 0xe1, 0x83, 0x22, 0x70, 0x2a, 0xa7, + 0x1c, 0x3a, 0x57, 0x3d, 0x16, 0xfd, 0xc7, 0x13, 0x78, 0xe1, 0xad, 0x7f, 0x60, 0xe2, 0xb0, 0xe1, + 0x98, 0xfd, 0xe0, 0x02, 0xfc, 0x78, 0xfa, 0x0c, 0xa6, 0xa1, 0x0e, 0xeb, 0x97, 0xbd, 0x8e, 0xf7, + 0xcb, 0x6a, 0xb1, 0xe4, 0xf5, 0x77, 0x30, 0xb8, 0xae, 0x02, 0x67, 0x88, 0x7c, 0x19, 0x35, 0x06, + 0x52, 0x22, 0xdc, 0xc9, 0x84, 0x73, 0xc6, 0xb6, 0x77, 0x29, 0x87, 0x34, 0xa0, 0xa6, 0xa6, 0x06, + 0x3c, 0x44, 0xc2, 0xba, 0x4d, 0xdb, 0x71, 0xc7, 0x4f, 0x6f, 0x47, 0x61, 0xd6, 0x31, 0xa4, 0x1d, + 0x49, 0x47, 0x44, 0x74, 0x3c, 0xfa, 0x47, 0x04, 0x62, 0x78, 0x6c, 0x0c, 0x9c, 0x6b, 0x1b, 0x30, + 0xff, 0x0f, 0x7f, 0x41, 0x51, 0x51, 0x21, 0x4c, 0x9e, 0xbe, 0x28, 0x5b, 0xf5, 0x31, 0x6a, 0x43, + 0x7a, 0xe1, 0xa1, 0xf9, 0x0b, 0x51, 0x7e, 0xec, 0x04, 0xb6, 0xf0, 0x74, 0x6b, 0xdb, 0x91, 0xe3, + 0x38, 0x5a, 0x54, 0x8e, 0xbc, 0xf2, 0x9a, 0x2b, 0x28, 0xb6, 0xe3, 0xeb, 0x74, 0x17, 0xba, 0x73, + 0xd6, 0x2c, 0x14, 0x95, 0x56, 0xc2, 0xd3, 0xcb, 0x1b, 0x91, 0x11, 0xa1, 0x48, 0x1e, 0x35, 0x0a, + 0xeb, 0xd7, 0xad, 0x85, 0x9b, 0xbb, 0x1b, 0x86, 0x0d, 0x4d, 0x44, 0xd2, 0x98, 0x89, 0xd8, 0x9e, + 0x72, 0x08, 0x45, 0xb9, 0x99, 0xf0, 0xf7, 0xf3, 0xc6, 0x85, 0xac, 0x4c, 0x9c, 0x3e, 0x77, 0x1e, + 0x1e, 0x72, 0x5c, 0xc9, 0xca, 0x99, 0x74, 0x3a, 0x28, 0x75, 0x75, 0xb8, 0xff, 0xe1, 0x5f, 0xe1, + 0x67, 0x53, 0xc6, 0xda, 0xa9, 0xae, 0x75, 0x74, 0xa7, 0x1b, 0xf0, 0xe4, 0xd3, 0x8b, 0x91, 0x9b, + 0x77, 0x91, 0x95, 0x71, 0x42, 0x2d, 0x2b, 0x52, 0x54, 0x90, 0x83, 0xa9, 0xb7, 0x4c, 0x42, 0x4a, + 0xca, 0x7e, 0xee, 0x15, 0x1b, 0xd5, 0x4a, 0xd6, 0xd5, 0xd4, 0x22, 0x3e, 0x71, 0x18, 0x7a, 0xf5, + 0x4f, 0xc4, 0x2b, 0x8b, 0x1f, 0x87, 0x2b, 0x2b, 0xef, 0xd7, 0xc3, 0x1f, 0x2e, 0x6e, 0xee, 0x30, + 0xd0, 0xaf, 0xe8, 0x5c, 0xe0, 0xc5, 0x06, 0x3f, 0xff, 0xc2, 0x5f, 0x31, 0x2c, 0x3e, 0xda, 0xba, + 0x96, 0xad, 0x84, 0x74, 0xba, 0x01, 0x67, 0xce, 0x9c, 0xc1, 0xfe, 0x1f, 0x52, 0xf1, 0xf6, 0xbb, + 0x1f, 0x70, 0x63, 0x55, 0x85, 0x82, 0x8b, 0x79, 0x5c, 0xb1, 0xe6, 0xa2, 0x57, 0x48, 0x08, 0x82, + 0x03, 0x02, 0x10, 0x37, 0x38, 0x1e, 0xc5, 0x45, 0x45, 0xf8, 0x91, 0x58, 0xf7, 0xe4, 0xc0, 0xf6, + 0xf3, 0xf5, 0xc6, 0xc8, 0x71, 0x93, 0x11, 0x18, 0x1e, 0x85, 0xf5, 0x6b, 0x3e, 0xc1, 0xc1, 0xfd, + 0x29, 0x30, 0x99, 0x1a, 0x70, 0xc7, 0x5d, 0xf7, 0x61, 0xc6, 0xad, 0xd3, 0x30, 0x7d, 0xea, 0xf8, + 0x56, 0xaa, 0x6b, 0x1d, 0xd5, 0xe9, 0x06, 0x48, 0x96, 0xbc, 0xa6, 0xc1, 0x5d, 0xb3, 0xe7, 0xe0, + 0xcc, 0xe9, 0xd3, 0x38, 0x78, 0xe8, 0x20, 0xbb, 0x93, 0x17, 0x06, 0xc6, 0x0d, 0x46, 0x48, 0xaf, + 0x30, 0x62, 0x3a, 0x00, 0xf9, 0xf9, 0x79, 0xf8, 0xed, 0x63, 0x8b, 0x48, 0x99, 0x5b, 0xcc, 0x35, + 0x28, 0x2c, 0x2c, 0x44, 0x2e, 0x4f, 0xba, 0xeb, 0xea, 0x6a, 0x70, 0x31, 0x37, 0x17, 0x23, 0x46, + 0x8d, 0x46, 0x70, 0xcf, 0x10, 0x73, 0x7c, 0x5b, 0x3d, 0x0e, 0x69, 0x80, 0x65, 0x61, 0xb9, 0xb9, + 0x39, 0x38, 0x74, 0xf0, 0x20, 0x5c, 0xf5, 0xae, 0x70, 0x37, 0x78, 0x23, 0x31, 0x71, 0x08, 0xbc, + 0x3c, 0x65, 0xd2, 0xea, 0x1a, 0xe7, 0xf0, 0x06, 0x74, 0x4d, 0x35, 0x5b, 0xce, 0xd5, 0x21, 0x6c, + 0xb4, 0xe5, 0xec, 0xbb, 0x3e, 0xa6, 0x4b, 0x1b, 0xb0, 0x67, 0xcf, 0x1e, 0xf5, 0xf6, 0x46, 0x6e, + 0x77, 0xe4, 0xd7, 0xdc, 0x71, 0x6f, 0x66, 0x33, 0xbc, 0x39, 0x5c, 0xab, 0xef, 0x96, 0x1b, 0x34, + 0xcd, 0xbf, 0x79, 0xf3, 0x66, 0x99, 0x0a, 0xcd, 0x3f, 0xd9, 0x08, 0x6a, 0xee, 0xe3, 0x8f, 0x3f, + 0x36, 0x87, 0x4b, 0xd8, 0xcc, 0x99, 0x33, 0xd5, 0xf7, 0x88, 0x88, 0x08, 0x0d, 0x44, 0x7d, 0x8e, + 0x1c, 0x39, 0x52, 0x0d, 0x4f, 0x4c, 0x4c, 0x54, 0x78, 0x35, 0xa5, 0xfa, 0x2d, 0x01, 0xe4, 0x42, + 0x4f, 0x2b, 0xc3, 0x32, 0x5c, 0xf3, 0xcf, 0x9f, 0x3f, 0xdf, 0x1c, 0x2f, 0x70, 0x19, 0x19, 0x19, + 0x5a, 0x54, 0x93, 0xa7, 0x79, 0x5b, 0xdc, 0x24, 0x94, 0x2f, 0xb2, 0x53, 0x9d, 0x34, 0x69, 0x92, + 0x32, 0x6b, 0xd6, 0x2c, 0x35, 0x23, 0xcb, 0x46, 0xc8, 0x96, 0x59, 0x32, 0xd5, 0x9c, 0xf8, 0xb5, + 0x03, 0xf9, 0xaf, 0xbe, 0xfa, 0x4a, 0x8d, 0x5b, 0xbe, 0x7c, 0xb9, 0x16, 0x6d, 0xae, 0x88, 0x39, + 0xe0, 0xb2, 0x47, 0xb6, 0xd5, 0x96, 0xf9, 0x68, 0xf1, 0x12, 0x36, 0x60, 0xc0, 0x00, 0xed, 0x55, + 0x7d, 0x4a, 0x18, 0x6f, 0xc3, 0x9b, 0x84, 0xc9, 0xcb, 0x95, 0x5a, 0x5c, 0x8e, 0x22, 0x7b, 0x53, + 0x33, 0xbd, 0xff, 0xfe, 0xfb, 0xcd, 0xc0, 0x92, 0x58, 0xaf, 0xd7, 0x9b, 0xdf, 0x87, 0x0f, 0x1f, + 0xae, 0xc2, 0xf0, 0xb2, 0x58, 0xc9, 0xcd, 0xcd, 0x55, 0xfd, 0x5a, 0x03, 0xb4, 0xed, 0xf7, 0xc0, + 0x81, 0x03, 0x55, 0xf8, 0x92, 0x92, 0x12, 0x35, 0xde, 0x56, 0x45, 0x5b, 0x6b, 0x80, 0xc0, 0xd7, + 0xd5, 0xd5, 0xa9, 0x79, 0xbc, 0xf2, 0xca, 0x2b, 0x6a, 0x1e, 0xb7, 0xdd, 0x76, 0x9b, 0xb9, 0x0e, + 0x9a, 0xc7, 0xaa, 0x01, 0x5a, 0xc4, 0x81, 0x03, 0x07, 0x5a, 0x24, 0x9b, 0xc0, 0x48, 0xe6, 0x3b, + 0x77, 0xee, 0xd4, 0xc0, 0xad, 0x9e, 0x72, 0xc9, 0xba, 0x61, 0xc3, 0x06, 0xab, 0xf0, 0xf6, 0x04, + 0xe4, 0xe7, 0xe7, 0x2b, 0xd2, 0x9d, 0x05, 0x51, 0x2d, 0xb9, 0x6e, 0x36, 0x4a, 0x52, 0x5f, 0x53, + 0xd7, 0xa5, 0x6c, 0xf4, 0x6a, 0xb4, 0xec, 0x86, 0x6f, 0x40, 0xf7, 0x18, 0xb8, 0x1a, 0xdd, 0xa4, + 0xb5, 0x32, 0x6e, 0xf8, 0x2e, 0x74, 0xd5, 0x1a, 0x20, 0x47, 0x58, 0x32, 0x1b, 0x39, 0xda, 0xb5, + 0xe3, 0x00, 0xa3, 0xe3, 0x45, 0x9f, 0xab, 0x31, 0xe1, 0x50, 0xad, 0x11, 0x39, 0x44, 0xd7, 0x78, + 0x83, 0x33, 0x06, 0x71, 0xaf, 0x60, 0xbd, 0xb4, 0xeb, 0x60, 0xfe, 0x2d, 0xcd, 0x70, 0x1d, 0x09, + 0x37, 0x1a, 0x4d, 0x4a, 0x4d, 0x6d, 0x9d, 0x22, 0x4f, 0x4b, 0x97, 0x92, 0x5f, 0x66, 0x7e, 0x35, + 0x72, 0x56, 0x5d, 0x7a, 0xb6, 0x40, 0x29, 0x69, 0x30, 0x9a, 0xc3, 0x3a, 0xe3, 0x71, 0x18, 0x17, + 0x2a, 0x28, 0x2a, 0xc6, 0xe6, 0xbd, 0xc7, 0x91, 0x73, 0xee, 0x04, 0x6a, 0x79, 0xcc, 0x32, 0x68, + 0x50, 0x2c, 0x26, 0xde, 0x34, 0x0a, 0x7e, 0xde, 0x1e, 0xc8, 0x2a, 0x2a, 0x45, 0x08, 0xa5, 0xc1, + 0x5c, 0x79, 0xd0, 0xa5, 0xb9, 0x6f, 0x79, 0xa4, 0x18, 0xe5, 0xe9, 0x8e, 0x68, 0x6f, 0xdb, 0x97, + 0x90, 0x1a, 0x9c, 0xdd, 0x67, 0x67, 0x5a, 0xaf, 0xa5, 0x2d, 0x2d, 0x2b, 0x53, 0x3e, 0x5c, 0xbd, + 0x45, 0x79, 0xf0, 0xe1, 0x47, 0xd5, 0x45, 0x97, 0x9b, 0x9b, 0xbb, 0x62, 0x30, 0xb8, 0x2b, 0xfd, + 0x62, 0x06, 0x2a, 0x2f, 0xbd, 0xb5, 0x5c, 0x59, 0x7d, 0xbe, 0x54, 0xf9, 0xdb, 0x96, 0x14, 0x65, + 0x45, 0x61, 0x95, 0x62, 0x89, 0xf7, 0xfc, 0x7a, 0xa3, 0xb2, 0x31, 0xbf, 0x5c, 0xcb, 0xa6, 0x43, + 0x4f, 0x87, 0x0c, 0xe2, 0xcc, 0xec, 0x1c, 0x78, 0x7a, 0x18, 0x70, 0x2c, 0x23, 0x1d, 0x1e, 0x14, + 0x96, 0xd1, 0xbb, 0xe9, 0xf9, 0x33, 0xf0, 0x88, 0x25, 0x1f, 0xab, 0x56, 0xad, 0xc0, 0x1b, 0xbf, + 0x59, 0x84, 0x50, 0x93, 0x82, 0xd9, 0x5e, 0x2e, 0x58, 0x9d, 0x59, 0x88, 0x2c, 0x1e, 0x72, 0x89, + 0x0b, 0xa2, 0xd0, 0xe7, 0xa8, 0x00, 0x2f, 0xec, 0x28, 0xb3, 0x16, 0x49, 0xb5, 0x8b, 0xf9, 0xcb, + 0x00, 0x0e, 0x69, 0x80, 0x54, 0x5e, 0x31, 0xd5, 0x21, 0x61, 0xc4, 0x18, 0x18, 0x4d, 0x94, 0x0f, + 0x20, 0x1d, 0x64, 0x90, 0xca, 0xe1, 0x6e, 0x66, 0x5a, 0x2a, 0xc2, 0x06, 0x0d, 0xc1, 0x93, 0x73, + 0x6f, 0xc3, 0xdb, 0x6b, 0xb7, 0x60, 0x76, 0x84, 0x3f, 0x6a, 0xeb, 0x8d, 0xf8, 0xa1, 0x84, 0xc7, + 0xeb, 0x74, 0x3e, 0x3c, 0x4e, 0x1c, 0xea, 0xa3, 0x47, 0x6e, 0x5d, 0xcb, 0x72, 0x05, 0x2a, 0x60, + 0x0b, 0x7f, 0x0e, 0x69, 0x40, 0x2f, 0xde, 0x5e, 0xba, 0xb1, 0x7b, 0x4f, 0xbf, 0xfd, 0xce, 0xcb, + 0x02, 0xa5, 0x8a, 0x7a, 0xa8, 0x65, 0x6a, 0xa8, 0xc7, 0xc8, 0x3f, 0xbd, 0x0e, 0x94, 0x5c, 0x44, + 0xc2, 0xca, 0xf5, 0xf8, 0x96, 0xd7, 0xa8, 0xef, 0x7c, 0xb6, 0x16, 0xfd, 0xd9, 0xef, 0xfb, 0x52, + 0x6e, 0x21, 0xed, 0xb2, 0x30, 0x30, 0xe5, 0x23, 0x90, 0xcf, 0x0a, 0x56, 0x71, 0x7f, 0xd2, 0x5e, + 0xe7, 0x90, 0x06, 0xb0, 0xbf, 0xa3, 0x57, 0xb0, 0x3f, 0x62, 0xa3, 0xfb, 0x62, 0xdc, 0xa4, 0x69, + 0x10, 0x99, 0x38, 0x95, 0xe9, 0x73, 0x1f, 0xec, 0x55, 0x9c, 0x8b, 0xad, 0x9f, 0x7f, 0x82, 0xa4, + 0x13, 0x07, 0x51, 0x5e, 0x57, 0x8b, 0xe3, 0xbe, 0xc1, 0x78, 0x63, 0xf9, 0x2a, 0xf8, 0xbb, 0x3a, + 0x23, 0xd4, 0xe0, 0x82, 0xc2, 0x86, 0x4b, 0x97, 0x1c, 0x09, 0x6e, 0x3a, 0x6c, 0xa8, 0x60, 0x03, + 0xda, 0xdb, 0x88, 0x0e, 0x8d, 0x1c, 0x1b, 0x89, 0x2a, 0xab, 0xaa, 0x94, 0xcc, 0x9c, 0x8b, 0x4a, + 0x4a, 0x46, 0x26, 0xb7, 0x7e, 0x7a, 0x0e, 0x62, 0x83, 0x2a, 0xeb, 0xd2, 0xbb, 0x6f, 0x7f, 0x65, + 0xd1, 0xb3, 0x2f, 0x2b, 0x43, 0x86, 0x26, 0x29, 0x7f, 0xfb, 0xef, 0xf7, 0x95, 0x09, 0xb3, 0xe7, + 0x2a, 0xaf, 0xa4, 0x9d, 0x53, 0x5e, 0x7d, 0x67, 0xa5, 0x2a, 0x3d, 0xb8, 0xaf, 0xc6, 0x78, 0x45, + 0x88, 0xd0, 0x68, 0x54, 0xd2, 0x6b, 0x2d, 0x87, 0xb9, 0x8d, 0x82, 0x9a, 0x05, 0x39, 0x8c, 0x8d, + 0x72, 0x87, 0x86, 0xac, 0x0b, 0x39, 0x08, 0x08, 0xee, 0x89, 0x25, 0x2f, 0xbf, 0x89, 0xed, 0xeb, + 0xbf, 0xc0, 0xbc, 0x5f, 0x51, 0x5e, 0xd9, 0x3b, 0x10, 0x3a, 0xf6, 0xaf, 0xed, 0x9f, 0x7f, 0x88, + 0x06, 0x27, 0x17, 0xf4, 0x89, 0x8a, 0x46, 0x66, 0x55, 0x29, 0x7a, 0xc7, 0x26, 0x20, 0x86, 0x2c, + 0xf6, 0xbe, 0x19, 0x53, 0xb0, 0x9a, 0x98, 0x9f, 0xe9, 0x77, 0x89, 0xc5, 0xae, 0xae, 0x68, 0xc4, + 0xcf, 0xbc, 0x9d, 0xdb, 0x3c, 0xd1, 0x39, 0xa4, 0x0b, 0x49, 0xbf, 0x3d, 0x70, 0x60, 0x3f, 0xfe, + 0xf8, 0x9f, 0x7f, 0x44, 0x03, 0x65, 0x73, 0x9e, 0xfc, 0xf5, 0xa3, 0x1c, 0xd0, 0x63, 0x31, 0x30, + 0x76, 0x20, 0x6e, 0x4a, 0x1e, 0x8a, 0x08, 0x1f, 0x2f, 0x4c, 0xfd, 0xf7, 0xf9, 0x28, 0x2b, 0x29, + 0xe2, 0x31, 0xe2, 0x05, 0x84, 0xea, 0x0d, 0xc8, 0x0f, 0xef, 0x8f, 0x3d, 0xeb, 0xbe, 0xc1, 0xca, + 0x2d, 0x7b, 0x60, 0x28, 0xce, 0x37, 0x2f, 0x33, 0x6e, 0x31, 0x38, 0xa1, 0xba, 0x1d, 0x43, 0xc1, + 0x21, 0x14, 0xf8, 0xcd, 0x6f, 0x7e, 0x83, 0xed, 0x7b, 0xf6, 0x63, 0xca, 0xa4, 0xf1, 0x28, 0x29, + 0x2e, 0xc1, 0xa2, 0x5f, 0x3d, 0xc2, 0x53, 0x00, 0x7f, 0xec, 0xdc, 0xb5, 0x1d, 0xa3, 0xc6, 0x8e, + 0x45, 0x5e, 0x56, 0x2e, 0x4e, 0x9d, 0xcd, 0x86, 0x8b, 0xb7, 0x01, 0xbb, 0xbf, 0xdb, 0x88, 0xb2, + 0x82, 0x8b, 0x18, 0x3b, 0x75, 0x1a, 0x8e, 0x64, 0x9e, 0x47, 0x3f, 0xbd, 0x1e, 0x4f, 0xfc, 0xfa, + 0x57, 0xd8, 0x96, 0x71, 0x12, 0x21, 0xc1, 0xc1, 0xc8, 0x68, 0x70, 0xc2, 0xdd, 0xfd, 0x7a, 0x42, + 0x67, 0xe3, 0x1c, 0xc9, 0xd6, 0x00, 0xef, 0x34, 0x05, 0x5e, 0x78, 0xe1, 0x05, 0x7c, 0xb3, 0x6e, + 0x03, 0xbc, 0x3d, 0x3d, 0x10, 0x33, 0x60, 0x20, 0x32, 0x8e, 0x1d, 0xc3, 0xfe, 0x7d, 0xfb, 0x50, + 0x98, 0x7d, 0x9c, 0x42, 0x34, 0x83, 0xb0, 0x67, 0xd7, 0x2e, 0x64, 0xe6, 0xe6, 0xa1, 0x92, 0x72, + 0xa7, 0x35, 0xc4, 0xb4, 0x0b, 0x15, 0x05, 0x62, 0xc7, 0x4f, 0x44, 0x3a, 0xef, 0x30, 0x02, 0xfc, + 0x83, 0xd1, 0x18, 0x18, 0x84, 0xd7, 0xbf, 0xdb, 0x8b, 0x19, 0x49, 0x43, 0x30, 0x38, 0x3c, 0x18, + 0x3f, 0x6f, 0x47, 0xe5, 0xa5, 0x41, 0x57, 0xe6, 0x76, 0x5b, 0xcd, 0xb3, 0x13, 0x26, 0x72, 0xe0, + 0x6f, 0xbf, 0xfb, 0x3e, 0x06, 0x0f, 0x49, 0xe4, 0x49, 0x73, 0x36, 0xe2, 0xe2, 0xe3, 0x31, 0x28, + 0x36, 0x16, 0x6b, 0xd6, 0x7c, 0x83, 0xe4, 0xe4, 0x51, 0x08, 0x0b, 0x0f, 0x47, 0x78, 0x78, 0x0c, + 0xbe, 0xdf, 0xbc, 0x8e, 0x97, 0x1b, 0xfe, 0xa8, 0xe3, 0x4d, 0x65, 0x51, 0xe6, 0x19, 0xe4, 0x9e, + 0x3f, 0x8b, 0x1e, 0x1e, 0x6e, 0x38, 0x47, 0xd6, 0x4f, 0xe6, 0x03, 0x83, 0x8f, 0x3f, 0xca, 0x27, + 0x8e, 0x86, 0x0f, 0x59, 0x6b, 0x7b, 0x5d, 0xa7, 0x28, 0x20, 0x17, 0x1a, 0xd1, 0xc4, 0xba, 0x8f, + 0xaf, 0x2f, 0x62, 0x62, 0xe3, 0xb0, 0xe6, 0xcb, 0xd5, 0x18, 0x3d, 0x6a, 0xa4, 0xaa, 0x8e, 0xb1, + 0x6b, 0xd7, 0x1e, 0xec, 0xd9, 0xbd, 0x1b, 0xfb, 0xb6, 0x7e, 0x8d, 0xb1, 0xe3, 0xa7, 0xa0, 0xac, + 0x28, 0x17, 0x19, 0x69, 0x3f, 0x20, 0x9b, 0xe2, 0x4d, 0x8d, 0x75, 0xd5, 0x28, 0xe4, 0xa5, 0xa0, + 0x93, 0x91, 0x72, 0x84, 0x35, 0x75, 0x28, 0xce, 0xcb, 0xc2, 0xf6, 0xfd, 0x22, 0x11, 0xd6, 0x7e, + 0xd7, 0xa9, 0x06, 0x1c, 0x4c, 0x3d, 0x08, 0x7f, 0xff, 0x00, 0x1e, 0xa5, 0xeb, 0xa1, 0xe3, 0xac, + 0xbb, 0x6e, 0xc3, 0x46, 0x14, 0x14, 0xe6, 0xab, 0xcb, 0x0a, 0x57, 0xaa, 0x84, 0x64, 0x65, 0x65, + 0xe3, 0x58, 0xfa, 0x51, 0xfc, 0xef, 0xdb, 0x7f, 0x43, 0xf4, 0xe0, 0x11, 0x9c, 0x07, 0x9c, 0x90, + 0x9b, 0x99, 0x89, 0xdc, 0x0b, 0xd9, 0x28, 0xcc, 0xbf, 0xc8, 0x8b, 0x8f, 0x42, 0xd4, 0x56, 0x94, + 0xa1, 0xa2, 0xb2, 0x12, 0x87, 0x0e, 0x1d, 0xb9, 0x34, 0x8b, 0xb7, 0xb3, 0x0d, 0x9d, 0x6a, 0x40, + 0x5c, 0x5c, 0x2c, 0xa6, 0xf0, 0x3a, 0xa9, 0xbe, 0xae, 0x1e, 0x95, 0x95, 0x15, 0xf0, 0xf1, 0xf1, + 0xc3, 0x6b, 0xaf, 0xbf, 0x09, 0xb9, 0xf4, 0xcb, 0xcb, 0xc9, 0x95, 0x43, 0x33, 0xde, 0xda, 0xd7, + 0xa1, 0xb4, 0xb4, 0x04, 0x1f, 0xbd, 0xf9, 0x12, 0x12, 0x86, 0x24, 0xe0, 0xa9, 0x25, 0xff, 0x85, + 0x72, 0x56, 0x3a, 0xfb, 0xec, 0x29, 0x5c, 0xcc, 0xcb, 0x45, 0x71, 0x61, 0x01, 0x07, 0x7e, 0x31, + 0x2a, 0xca, 0xcb, 0x51, 0x41, 0xaa, 0xb4, 0xd7, 0x75, 0xaa, 0x01, 0x21, 0xbc, 0x65, 0xf4, 0x32, + 0xe8, 0x29, 0x31, 0xd0, 0x80, 0xb2, 0xd2, 0x52, 0x14, 0xb1, 0x32, 0x0a, 0xef, 0x7a, 0xbf, 0x59, + 0xbb, 0x96, 0x8d, 0xa8, 0x86, 0x9e, 0x03, 0x36, 0x84, 0x57, 0x4d, 0xf5, 0x94, 0xad, 0xac, 0xe5, + 0x1a, 0x69, 0xe7, 0xa6, 0xb5, 0xc8, 0xd8, 0xb3, 0x19, 0x7f, 0x7c, 0xee, 0x55, 0xfc, 0x72, 0xe1, + 0xaf, 0xc1, 0xe3, 0x4a, 0x14, 0x14, 0x70, 0x80, 0x53, 0x5a, 0x51, 0x14, 0x32, 0xb8, 0x2c, 0x6a, + 0xb7, 0xeb, 0x34, 0x1b, 0xe5, 0xd9, 0x27, 0xfe, 0xf2, 0xe2, 0x4b, 0xd8, 0xb0, 0x71, 0x13, 0xf2, + 0x79, 0x3f, 0x26, 0xd8, 0x34, 0xb2, 0xc2, 0xa1, 0xe1, 0x11, 0xf0, 0xe6, 0x55, 0xd3, 0xcd, 0xe3, + 0x92, 0x11, 0x1c, 0x14, 0x88, 0xf4, 0x8c, 0xe3, 0x78, 0xf3, 0xcd, 0x37, 0xd9, 0x55, 0x0e, 0xf1, + 0xbe, 0xf8, 0x34, 0x78, 0x40, 0x0c, 0x93, 0xb3, 0x1e, 0x8d, 0x3a, 0x37, 0x36, 0xd4, 0x0d, 0x5e, + 0xae, 0x26, 0xcc, 0x9a, 0x35, 0xf3, 0xea, 0x37, 0x40, 0x4a, 0xdc, 0x45, 0x56, 0xf9, 0x87, 0xa7, + 0xff, 0x13, 0x29, 0x7b, 0xf7, 0x10, 0xdb, 0xf5, 0x88, 0xec, 0x1d, 0x85, 0xa8, 0xfe, 0xd1, 0x08, + 0x0a, 0x0e, 0xa1, 0xf0, 0xa4, 0x4e, 0xed, 0x26, 0xeb, 0xff, 0xf9, 0x25, 0x31, 0x7c, 0x89, 0xe0, + 0xf5, 0x14, 0x08, 0xc9, 0xce, 0xca, 0x42, 0x71, 0x71, 0x11, 0x8c, 0xec, 0x62, 0x15, 0x15, 0xe5, + 0xb8, 0x65, 0xda, 0x6d, 0x1d, 0xba, 0x2b, 0xe8, 0x34, 0x05, 0x34, 0x94, 0xa5, 0x1e, 0x4c, 0xc5, + 0xbc, 0x07, 0xe7, 0x73, 0x1f, 0x20, 0xd7, 0xa6, 0x7a, 0x84, 0x86, 0x86, 0xa9, 0x77, 0xc7, 0xa2, + 0xe7, 0xb5, 0xfc, 0x9d, 0x65, 0x2d, 0x56, 0x4e, 0xc6, 0x89, 0xad, 0xcb, 0x0f, 0x2d, 0x5f, 0x7b, + 0x4f, 0x87, 0x35, 0x40, 0x0a, 0x32, 0x1a, 0x1b, 0x70, 0x80, 0x9a, 0x00, 0x85, 0x05, 0x85, 0x08, + 0xe2, 0x8d, 0xa3, 0xa7, 0x97, 0x27, 0xe2, 0xe3, 0x5a, 0x91, 0xfc, 0xb4, 0x57, 0xbb, 0x36, 0xc4, + 0x3b, 0xb4, 0x01, 0x6d, 0x28, 0xcf, 0xe1, 0x20, 0x9d, 0xe2, 0x42, 0x0e, 0xaf, 0x4d, 0x07, 0x32, + 0xec, 0x6e, 0x40, 0x07, 0x90, 0xe6, 0xd0, 0x24, 0x5d, 0x4a, 0x81, 0x8a, 0x8a, 0x0a, 0x88, 0x38, + 0xb1, 0xfc, 0x84, 0xdb, 0x34, 0x77, 0x54, 0x8c, 0xc1, 0x87, 0x1f, 0x7e, 0xd8, 0x3c, 0xb8, 0x7d, + 0xef, 0xcd, 0x76, 0x68, 0x0e, 0x7d, 0x65, 0x4d, 0xa4, 0xd6, 0xea, 0x2f, 0x25, 0x25, 0xc5, 0x2a, + 0x6f, 0x89, 0x93, 0xeb, 0xd4, 0xce, 0xb8, 0x4e, 0x2d, 0xa7, 0xed, 0xa1, 0x8a, 0x15, 0x53, 0x41, + 0x5a, 0xba, 0xe8, 0xd6, 0xe2, 0xed, 0xe5, 0xd3, 0x5a, 0xbc, 0xcd, 0x2e, 0x14, 0x13, 0x13, 0xa3, + 0x4e, 0x2e, 0x5a, 0xc1, 0x4f, 0x3c, 0xf1, 0x84, 0x39, 0x0f, 0x17, 0x1e, 0x0f, 0x4a, 0x38, 0x31, + 0xda, 0x62, 0xe5, 0xd6, 0xaf, 0x5f, 0x0f, 0x2a, 0x6f, 0x81, 0xb2, 0xda, 0xdc, 0x1b, 0xac, 0x31, + 0xa7, 0xd5, 0x3c, 0x87, 0x0f, 0x1f, 0x36, 0xe7, 0xdf, 0xab, 0x57, 0x2f, 0x2d, 0xd8, 0xfc, 0x2c, + 0x28, 0x28, 0x00, 0xe5, 0xc3, 0xcd, 0x30, 0x94, 0xa4, 0x36, 0xc7, 0x59, 0x79, 0x6c, 0x91, 0x8f, + 0x95, 0x54, 0x96, 0x2d, 0xbb, 0xa4, 0x7b, 0x18, 0x1f, 0x1f, 0xaf, 0x76, 0x01, 0x0d, 0xee, 0xe1, + 0x87, 0x1f, 0x56, 0xdf, 0xb7, 0x6e, 0xdd, 0xaa, 0x06, 0x8d, 0x1b, 0x37, 0xae, 0x49, 0xfc, 0xd2, + 0xa5, 0x4b, 0xd5, 0x77, 0xb9, 0x89, 0xb7, 0x14, 0xe1, 0xb6, 0xec, 0x42, 0x95, 0x95, 0x95, 0xca, + 0x8c, 0x19, 0x33, 0x54, 0x38, 0x5f, 0x5f, 0x5f, 0x2d, 0x6b, 0xf5, 0x69, 0x79, 0xaf, 0xfc, 0xd6, + 0x5b, 0x6f, 0x29, 0x0f, 0x3c, 0xf0, 0x80, 0x39, 0xbf, 0x26, 0x80, 0x97, 0x5f, 0x64, 0x70, 0x59, + 0xb9, 0x13, 0x27, 0x4e, 0x28, 0xf7, 0xde, 0x7b, 0xaf, 0x32, 0x61, 0xc2, 0x04, 0x65, 0xce, 0x9c, + 0x39, 0x4d, 0x2a, 0x28, 0xc0, 0xc4, 0x82, 0xa2, 0x35, 0xe0, 0x8b, 0x2f, 0xbe, 0x68, 0x12, 0x2f, + 0x71, 0xf2, 0xd3, 0xdc, 0xea, 0xd5, 0xab, 0xd5, 0x77, 0xcb, 0x06, 0x68, 0x71, 0x02, 0xd7, 0xbc, + 0x01, 0xda, 0x25, 0xba, 0xdc, 0x33, 0x6b, 0x6e, 0xee, 0xdc, 0xb9, 0x6a, 0x1e, 0xda, 0xc5, 0xb7, + 0x16, 0x2e, 0x4f, 0xab, 0x2e, 0xf4, 0xe8, 0xa3, 0x8f, 0x82, 0xd7, 0xfc, 0xdc, 0x39, 0x65, 0x43, + 0xfc, 0xd4, 0x63, 0x62, 0x39, 0xd6, 0x4e, 0x53, 0xe9, 0x96, 0x6d, 0x65, 0x6b, 0x8e, 0xaa, 0x03, + 0xad, 0x45, 0x5b, 0xc5, 0xf1, 0xa6, 0x5f, 0x0d, 0x93, 0xee, 0xa7, 0xb9, 0xa1, 0x43, 0x87, 0xaa, + 0xde, 0xd3, 0x5c, 0xc5, 0x5a, 0x39, 0xcb, 0xd6, 0x88, 0x9f, 0x00, 0x4d, 0x30, 0xf8, 0xc1, 0x07, + 0x1f, 0x34, 0x79, 0xd7, 0x60, 0x84, 0xb4, 0xe2, 0x44, 0x51, 0x4b, 0xd2, 0x68, 0x8e, 0xe3, 0x43, + 0x7d, 0x97, 0x5b, 0x76, 0x71, 0xc3, 0x86, 0x0d, 0x53, 0xdf, 0xdb, 0x4a, 0x01, 0x91, 0xd1, 0x90, + 0xfc, 0x9a, 0x8b, 0x3a, 0x58, 0x96, 0xa1, 0x95, 0x25, 0xcf, 0x2b, 0x25, 0x5f, 0x0e, 0x5d, 0xb2, + 0x64, 0x89, 0x9a, 0x81, 0xd6, 0x10, 0xcb, 0xa7, 0x96, 0xd0, 0x32, 0x8c, 0xd8, 0x31, 0xc3, 0x4b, + 0xbc, 0xf4, 0x6f, 0xcb, 0x78, 0x19, 0x4f, 0xda, 0xbb, 0xad, 0xf4, 0x5a, 0x9c, 0x3c, 0x35, 0x17, + 0x1d, 0x1d, 0x6d, 0x4e, 0xa3, 0xc5, 0x93, 0x31, 0x68, 0xd1, 0x4d, 0x9e, 0x57, 0x52, 0x59, 0x04, + 0x97, 0x97, 0x97, 0x2b, 0x6b, 0xd7, 0xae, 0x35, 0x0b, 0x5b, 0x58, 0x44, 0x99, 0xbd, 0xe4, 0x24, + 0x4a, 0x15, 0x8f, 0x13, 0x5b, 0x72, 0x32, 0x8e, 0x32, 0x33, 0x33, 0x5b, 0x8a, 0x6e, 0x53, 0xf8, + 0x8e, 0x1d, 0x3b, 0x94, 0xac, 0xac, 0xac, 0x56, 0x61, 0xbb, 0x57, 0xa3, 0x24, 0xf1, 0x35, 0x75, + 0x57, 0x86, 0xfa, 0x35, 0xad, 0x46, 0xc7, 0x0b, 0xef, 0x6e, 0x40, 0xc7, 0x71, 0xe7, 0x98, 0x94, + 0xdd, 0x14, 0x70, 0x0c, 0x1e, 0x3b, 0x9e, 0xcb, 0x0d, 0x4f, 0x81, 0x1b, 0x7e, 0x1e, 0xe8, 0x38, + 0xed, 0xae, 0x8f, 0x94, 0x37, 0x7c, 0x0f, 0xba, 0x3e, 0xd0, 0xd8, 0xf1, 0x5a, 0x74, 0x13, 0xa0, + 0xe3, 0xb8, 0x73, 0x48, 0xca, 0x2e, 0x3d, 0x92, 0x70, 0x48, 0x0d, 0xdb, 0x91, 0x89, 0xec, 0xc5, + 0x8a, 0x78, 0x6b, 0x98, 0x45, 0xb1, 0x18, 0x8a, 0x31, 0x20, 0x90, 0xc7, 0xe2, 0xbe, 0xbc, 0x31, + 0x71, 0xe7, 0x09, 0x44, 0x07, 0x2e, 0x4e, 0xda, 0x51, 0x72, 0xc7, 0x41, 0xff, 0x65, 0x08, 0x50, + 0xcd, 0x6b, 0xad, 0x3d, 0x45, 0x55, 0xf0, 0xa0, 0x9d, 0x8e, 0x64, 0xca, 0x1f, 0x89, 0xb0, 0x8f, + 0xa8, 0x35, 0x1e, 0xa3, 0x5c, 0xd2, 0xfe, 0x8a, 0x1a, 0xf8, 0xb9, 0xe8, 0x30, 0x8c, 0xd2, 0x61, + 0x91, 0x14, 0x2e, 0x71, 0x6b, 0xe3, 0x05, 0x7a, 0xc7, 0xd1, 0xda, 0xf6, 0x94, 0xd7, 0xed, 0x24, + 0x5c, 0x5e, 0x59, 0x85, 0x73, 0xd9, 0xf9, 0xa8, 0xaa, 0xad, 0xe7, 0x9d, 0x61, 0x23, 0x95, 0x5d, + 0x9d, 0x79, 0xa5, 0x46, 0xed, 0x5e, 0x8a, 0x5c, 0xf8, 0xf9, 0x78, 0x53, 0x28, 0x4c, 0xdf, 0xa4, + 0x57, 0x8b, 0x72, 0xec, 0xa9, 0x82, 0x52, 0x54, 0xd4, 0xd6, 0x62, 0x44, 0x04, 0x35, 0xb9, 0x6c, + 0x20, 0x39, 0xbf, 0xce, 0x88, 0x8d, 0x17, 0x4b, 0x79, 0x15, 0xe7, 0x82, 0x91, 0x7e, 0x1e, 0x08, + 0x75, 0x77, 0xb5, 0x09, 0xd7, 0x76, 0xf4, 0x75, 0x1e, 0xf2, 0xba, 0x23, 0x40, 0x71, 0x49, 0x29, + 0xf6, 0x1e, 0x3a, 0x8e, 0xa2, 0x2a, 0xde, 0x2e, 0x97, 0x17, 0x22, 0x65, 0xfb, 0x46, 0x1c, 0xd8, + 0xbb, 0x13, 0x25, 0xa5, 0xc5, 0xbc, 0x4a, 0x77, 0x83, 0xaf, 0x6f, 0x0f, 0x84, 0x84, 0x47, 0x22, + 0x36, 0x2e, 0x91, 0xbf, 0x41, 0x48, 0xa2, 0x86, 0x5a, 0x54, 0x64, 0x28, 0x85, 0x79, 0xf4, 0x38, + 0x57, 0x51, 0x8b, 0x43, 0xa7, 0xcf, 0xd3, 0x36, 0x9f, 0x17, 0x12, 0xfb, 0x45, 0x22, 0xc8, 0x99, + 0xac, 0xa8, 0x09, 0x99, 0x2e, 0x21, 0x4c, 0x84, 0xab, 0x0e, 0x97, 0xd5, 0xe0, 0x48, 0x51, 0x05, + 0x12, 0xa9, 0x92, 0x3d, 0xc8, 0xcf, 0x13, 0xb6, 0x8d, 0x91, 0x75, 0x1e, 0xc1, 0xf6, 0x72, 0xb8, + 0x8e, 0x08, 0x40, 0xeb, 0x42, 0xd4, 0xa4, 0xde, 0xb1, 0x2f, 0x0d, 0xae, 0x9e, 0xfe, 0xbc, 0x8b, + 0xd5, 0x61, 0xd9, 0x2b, 0x7f, 0xc6, 0xce, 0x6d, 0x9b, 0x79, 0x13, 0xee, 0xa6, 0x8a, 0xb7, 0x88, + 0xfd, 0x08, 0xb5, 0x63, 0xb3, 0xb7, 0xcb, 0x91, 0xa0, 0xa9, 0xd1, 0x04, 0x17, 0x06, 0x0c, 0x9d, + 0x3c, 0x0d, 0xc3, 0xef, 0x7d, 0x04, 0x51, 0x3a, 0x27, 0xdc, 0x3e, 0x3c, 0x1e, 0x27, 0x79, 0xd3, + 0xee, 0x13, 0xe0, 0x07, 0x5d, 0x40, 0x10, 0xf6, 0xe7, 0x97, 0xc1, 0x87, 0xec, 0x67, 0x7a, 0x58, + 0x0f, 0xf8, 0xda, 0xb8, 0x42, 0x2f, 0xa3, 0xb1, 0xa7, 0xfd, 0x25, 0xd5, 0xaa, 0x5e, 0xff, 0x84, + 0x00, 0x4f, 0x9a, 0xcd, 0xbc, 0xba, 0xb3, 0xc5, 0x75, 0x33, 0x07, 0x98, 0x88, 0x88, 0xca, 0xaa, + 0x6a, 0x9a, 0x96, 0x6b, 0x80, 0x17, 0x91, 0xe0, 0xee, 0xe1, 0x09, 0x1f, 0x51, 0xd5, 0xe5, 0x31, + 0xbe, 0x7a, 0xfe, 0x4a, 0xa4, 0x3b, 0x39, 0x89, 0x5a, 0x2f, 0x67, 0x57, 0xb2, 0x23, 0x39, 0x76, + 0x77, 0x75, 0xd2, 0xab, 0x1d, 0x2c, 0xff, 0x0c, 0x2d, 0x07, 0xa5, 0xee, 0xc1, 0xf7, 0xfb, 0xf6, + 0xe2, 0xaf, 0x19, 0x07, 0x31, 0xf1, 0xa7, 0x73, 0x30, 0xf2, 0x8e, 0x99, 0x98, 0x14, 0xef, 0x8c, + 0x87, 0x23, 0x83, 0x50, 0xa9, 0x38, 0xe1, 0x68, 0x71, 0x05, 0xf6, 0xe4, 0x97, 0x63, 0x72, 0xb8, + 0x3f, 0x06, 0x53, 0xe0, 0x4a, 0x63, 0x51, 0xbe, 0x3a, 0x67, 0xdc, 0x12, 0xe8, 0x45, 0x18, 0x20, + 0xb5, 0xc6, 0x88, 0x60, 0x96, 0xdd, 0x57, 0x64, 0x7f, 0xae, 0x92, 0xd3, 0xfd, 0x99, 0xee, 0x2a, + 0x95, 0xd5, 0x6a, 0x31, 0x72, 0x08, 0xed, 0xcc, 0x1e, 0x9a, 0x9d, 0x93, 0xa7, 0xca, 0x7a, 0x04, + 0x51, 0x66, 0x50, 0x47, 0x91, 0xba, 0x8c, 0xc3, 0x94, 0xd2, 0x24, 0xfb, 0x11, 0x49, 0x05, 0xb9, + 0x4f, 0x11, 0xc4, 0x5d, 0x7a, 0x5c, 0x5e, 0xd9, 0x34, 0x1a, 0x61, 0x88, 0x1a, 0x84, 0xf0, 0x3b, + 0x7f, 0x81, 0x24, 0x0a, 0x80, 0x21, 0x66, 0x10, 0x4e, 0x52, 0x0c, 0xe9, 0xc8, 0xca, 0xf7, 0x70, + 0x31, 0xbf, 0x18, 0xe7, 0x4b, 0xab, 0x11, 0x15, 0x12, 0x84, 0x81, 0x81, 0x7e, 0x18, 0x15, 0xe4, + 0x0b, 0x9a, 0x1a, 0xc0, 0xea, 0x9c, 0x52, 0x12, 0xd5, 0x09, 0xbd, 0x68, 0x5a, 0x4b, 0x23, 0x84, + 0x9e, 0xe1, 0xe1, 0x5c, 0x3a, 0x55, 0x33, 0xf3, 0xb4, 0x6a, 0x23, 0x7c, 0x48, 0x18, 0x4a, 0xf1, + 0x9a, 0xe3, 0x5b, 0xad, 0x7c, 0x27, 0x22, 0xaf, 0x23, 0x16, 0x24, 0xc6, 0x24, 0x1a, 0x49, 0x80, + 0x5c, 0x9c, 0x39, 0x9f, 0x0d, 0x37, 0x1a, 0x71, 0xf0, 0xa2, 0x68, 0xec, 0xe7, 0x9f, 0x7e, 0x82, + 0xa5, 0xaf, 0x2e, 0x41, 0x45, 0x59, 0xb1, 0xca, 0x8a, 0x04, 0x61, 0x42, 0x2c, 0x27, 0x8a, 0x8b, + 0x28, 0x14, 0xdc, 0xf1, 0x0b, 0x09, 0xc3, 0xf8, 0xc7, 0x17, 0xe3, 0x14, 0x8d, 0x72, 0x95, 0x1d, + 0xda, 0x85, 0x5b, 0xef, 0x5b, 0x80, 0x12, 0x4e, 0xe0, 0x67, 0x7c, 0x29, 0x7e, 0x15, 0x19, 0x85, + 0x88, 0xca, 0x52, 0xc4, 0x19, 0x28, 0x03, 0xc3, 0x34, 0x53, 0xc7, 0x26, 0xa1, 0x6f, 0xef, 0x30, + 0xa6, 0x75, 0x42, 0x09, 0x57, 0x48, 0x3b, 0x2b, 0xea, 0x10, 0x4f, 0x41, 0xd0, 0xbe, 0xee, 0xd6, + 0x8c, 0x60, 0x73, 0xb5, 0x09, 0x3d, 0x49, 0x84, 0x41, 0xa4, 0x4c, 0x57, 0x72, 0xa5, 0xeb, 0x66, + 0x04, 0x48, 0x27, 0x12, 0xc4, 0x78, 0x51, 0xe4, 0x51, 0x4f, 0x43, 0x14, 0x32, 0x77, 0xfa, 0x78, + 0xb9, 0x63, 0xe8, 0xb0, 0x91, 0xf0, 0xf6, 0x0f, 0xc1, 0xc1, 0x03, 0x29, 0xa8, 0xa4, 0x78, 0x97, + 0x7a, 0xe3, 0x47, 0x58, 0x1e, 0xb4, 0xab, 0x30, 0x75, 0x95, 0x65, 0x70, 0xa1, 0x89, 0x90, 0xa1, + 0x13, 0xa7, 0xa1, 0x98, 0x82, 0xa8, 0x07, 0x36, 0xaf, 0xa7, 0xd0, 0x5e, 0x3c, 0x46, 0x87, 0xf6, + 0x44, 0xd6, 0xc7, 0xef, 0x22, 0x2f, 0x37, 0x1b, 0xe5, 0x09, 0xa3, 0xe0, 0x16, 0x15, 0x83, 0x73, + 0x19, 0xc7, 0xb0, 0x7b, 0xe7, 0x7e, 0xf4, 0x09, 0xeb, 0x85, 0x60, 0x1f, 0x4f, 0x0c, 0x20, 0xe2, + 0x45, 0xc4, 0x79, 0x07, 0x09, 0x11, 0x4e, 0x42, 0xb8, 0x5a, 0xf4, 0xf8, 0x28, 0x8e, 0x86, 0x12, + 0xee, 0x27, 0x52, 0x6b, 0x15, 0xf4, 0x72, 0x75, 0x22, 0xbb, 0x53, 0x8b, 0xeb, 0x44, 0x5f, 0xb7, + 0x9d, 0xf4, 0xba, 0x1a, 0x01, 0x5a, 0x15, 0x6b, 0xb9, 0x94, 0xcc, 0xa5, 0xfd, 0x2e, 0x0f, 0x8e, + 0x02, 0x1d, 0x97, 0x8c, 0x4e, 0xae, 0x5e, 0x34, 0xb4, 0xb1, 0x0d, 0xcf, 0xfd, 0xe1, 0x31, 0x9c, + 0x39, 0x91, 0xce, 0xbb, 0x3a, 0x1f, 0x0a, 0x52, 0xf5, 0x41, 0xdf, 0x7e, 0xd1, 0x70, 0xf7, 0xf2, + 0x43, 0x35, 0x4d, 0x3d, 0x04, 0x45, 0xf6, 0x46, 0xc2, 0x98, 0x71, 0xc8, 0xd8, 0xf5, 0x1d, 0xb6, + 0xfe, 0xf3, 0x6b, 0x0c, 0x18, 0x3a, 0x02, 0x3f, 0x99, 0x79, 0x17, 0x0a, 0x29, 0x54, 0xb8, 0xfb, + 0x9b, 0xd5, 0x70, 0x89, 0xea, 0x83, 0xa4, 0x85, 0x8f, 0x21, 0xa0, 0xde, 0x84, 0x8a, 0xc3, 0xa9, + 0xd4, 0x26, 0xf1, 0xc2, 0xdc, 0xe9, 0x53, 0x28, 0x02, 0xea, 0xab, 0x22, 0x7a, 0x57, 0xa5, 0x09, + 0x7d, 0xdc, 0x9c, 0x39, 0x22, 0x04, 0xd3, 0xfc, 0x5d, 0x76, 0xb9, 0x84, 0xdf, 0x5e, 0xa3, 0x60, + 0x86, 0x8f, 0x0e, 0x9e, 0x16, 0xe1, 0x5a, 0x7c, 0x67, 0x9f, 0xd7, 0x25, 0x01, 0xa4, 0x51, 0xab, + 0x57, 0x7f, 0x81, 0xe2, 0xd2, 0x72, 0xfc, 0x94, 0xd6, 0x4d, 0x9c, 0xc9, 0x0a, 0xf4, 0xee, 0x9e, + 0x48, 0x3f, 0x99, 0x8d, 0x97, 0x5f, 0x7c, 0x16, 0xa6, 0x9a, 0x52, 0x4c, 0xbd, 0xf5, 0x0e, 0xf4, + 0x8e, 0x1e, 0x00, 0xf7, 0x1e, 0x41, 0x5c, 0x21, 0xe9, 0x61, 0xa4, 0x98, 0x76, 0x11, 0xcd, 0x16, + 0xe9, 0xdc, 0xf5, 0xa8, 0xa2, 0x8a, 0xc2, 0x57, 0xff, 0x78, 0x9f, 0x36, 0x8d, 0xb3, 0x10, 0x3f, + 0x6c, 0x14, 0x12, 0x46, 0x8f, 0x43, 0xee, 0xb9, 0xd3, 0x38, 0xc6, 0x49, 0x3a, 0xf0, 0xdf, 0x66, + 0xc1, 0x8d, 0x56, 0x52, 0x9c, 0x36, 0xae, 0x41, 0x04, 0xcd, 0xfc, 0xf5, 0xec, 0xd7, 0x17, 0x63, + 0x63, 0xfb, 0xd1, 0x6a, 0x44, 0x28, 0x8e, 0x42, 0x8f, 0x30, 0x72, 0xa3, 0xde, 0xcd, 0x38, 0xd2, + 0x89, 0xda, 0x46, 0x64, 0x92, 0x65, 0x4d, 0xa4, 0xd2, 0x95, 0xac, 0xba, 0x1c, 0xe9, 0xae, 0x2b, + 0x02, 0xf0, 0x3a, 0x11, 0xcf, 0x3d, 0xf7, 0x2c, 0x56, 0x7f, 0xb9, 0x06, 0x49, 0xa3, 0xc6, 0xc2, + 0xa0, 0x97, 0x49, 0x12, 0x34, 0x19, 0x33, 0x0f, 0xa1, 0x61, 0x61, 0xaa, 0x81, 0x1f, 0xc5, 0xc5, + 0x93, 0xa2, 0xe5, 0x3f, 0xe0, 0xfc, 0xe9, 0x63, 0x18, 0x92, 0x30, 0x18, 0xfd, 0x29, 0xdc, 0x2c, + 0x04, 0x68, 0xa0, 0x45, 0xa3, 0xc2, 0x82, 0x22, 0x5c, 0xc8, 0xcb, 0x47, 0x69, 0x75, 0x1d, 0x74, + 0x54, 0xc3, 0xb8, 0x70, 0xf6, 0x24, 0xd2, 0x0e, 0xec, 0x43, 0x31, 0xc5, 0x6a, 0x03, 0x69, 0x64, + 0x3a, 0x6e, 0x78, 0x12, 0xf4, 0x34, 0x7c, 0x52, 0xe0, 0xee, 0x81, 0xaa, 0xf8, 0xa1, 0x28, 0x5e, + 0xb5, 0x1c, 0x11, 0x14, 0x4b, 0x9c, 0x36, 0xe7, 0x1e, 0x04, 0xd2, 0x94, 0x53, 0x3e, 0x45, 0x6e, + 0x8b, 0x88, 0xdd, 0x71, 0x7d, 0xc2, 0xd0, 0x97, 0xd6, 0x91, 0x74, 0x24, 0xbc, 0xb8, 0x6a, 0xb2, + 0xa2, 0xcf, 0xcb, 0x1b, 0x30, 0xd3, 0xc7, 0x55, 0x5d, 0xa1, 0xa9, 0x81, 0x0e, 0xfa, 0xbb, 0x2e, + 0x08, 0x20, 0x2c, 0xe7, 0x99, 0x67, 0x9e, 0xc1, 0xd2, 0xa5, 0xcb, 0xd8, 0xd3, 0x0d, 0x18, 0x91, + 0x3c, 0x16, 0xe3, 0xb9, 0xa2, 0x71, 0xa6, 0x05, 0x25, 0xb1, 0xe5, 0x70, 0x9c, 0x22, 0xf0, 0x0b, + 0x1e, 0x9a, 0x87, 0x31, 0x63, 0xc7, 0xa8, 0xd6, 0x48, 0x83, 0x7a, 0x86, 0x21, 0xaf, 0xa4, 0x16, + 0xa9, 0x87, 0xd2, 0x68, 0x16, 0x87, 0xba, 0x2b, 0x14, 0x4a, 0x95, 0x55, 0x4d, 0x29, 0x4d, 0x96, + 0x97, 0x72, 0xd4, 0x54, 0x91, 0x25, 0x99, 0x48, 0x38, 0x03, 0x77, 0xcb, 0x26, 0x53, 0x3d, 0xad, + 0x34, 0x95, 0x73, 0x45, 0x44, 0xd9, 0x66, 0x4e, 0xf0, 0x75, 0x95, 0xe5, 0x34, 0x3d, 0x15, 0x8c, + 0xe8, 0x9f, 0xdc, 0x4e, 0x19, 0xcf, 0x5a, 0x64, 0x1d, 0xd8, 0x03, 0xa3, 0xb3, 0x2b, 0x86, 0x0c, + 0x4e, 0x40, 0x78, 0x5c, 0x3c, 0xfa, 0xf4, 0x0a, 0x20, 0x2b, 0xa2, 0xd2, 0x02, 0x05, 0xc1, 0x73, + 0x6b, 0x28, 0xc1, 0xcb, 0x2d, 0x9a, 0x27, 0x47, 0x55, 0xa2, 0x3f, 0x77, 0xdf, 0x97, 0x09, 0xe2, + 0x20, 0xdc, 0xab, 0xd9, 0x5c, 0x53, 0x02, 0xc8, 0x44, 0xba, 0x7e, 0xc3, 0x06, 0xdc, 0x77, 0xdf, + 0xfd, 0xaa, 0xaa, 0x8a, 0x88, 0x2e, 0x8b, 0x9c, 0xb5, 0x89, 0x4a, 0x43, 0x77, 0xcd, 0x99, 0x4b, + 0xd9, 0xea, 0xc1, 0xd8, 0x47, 0xb6, 0x71, 0xf6, 0xc7, 0x1f, 0x51, 0xc5, 0xde, 0xe9, 0xc9, 0x09, + 0x7a, 0xc4, 0x88, 0x24, 0xf4, 0xf0, 0xf3, 0xa3, 0x01, 0x26, 0x6f, 0x44, 0x44, 0x0d, 0x44, 0x76, + 0x7e, 0x25, 0x32, 0x8e, 0x1f, 0x43, 0x8d, 0x4c, 0xc6, 0x1c, 0x09, 0x62, 0xd3, 0x4b, 0x31, 0x19, + 0x39, 0x70, 0xb8, 0x49, 0xe3, 0x4e, 0x58, 0x34, 0x44, 0x8e, 0x1d, 0x3f, 0xc9, 0x79, 0xc4, 0x8d, + 0x3b, 0xe8, 0x50, 0xf8, 0x86, 0x85, 0xa3, 0x9c, 0xd2, 0xc1, 0x45, 0xd9, 0x59, 0x30, 0x66, 0xfe, + 0x08, 0x4f, 0x37, 0x57, 0xd5, 0x2c, 0x90, 0x89, 0xab, 0xaa, 0xd8, 0xf8, 0x44, 0xdc, 0x33, 0x73, + 0x06, 0x27, 0xe9, 0x60, 0x22, 0xc7, 0xb1, 0xac, 0xa6, 0x25, 0xa2, 0x5d, 0x53, 0x02, 0x94, 0x95, + 0x95, 0xe1, 0xe7, 0xf7, 0xfc, 0x02, 0x85, 0x54, 0xad, 0x0c, 0xa6, 0xea, 0x99, 0x58, 0x72, 0xd3, + 0xeb, 0xdd, 0x51, 0x40, 0xeb, 0x3d, 0xa2, 0x72, 0xf6, 0xfb, 0x3f, 0x3c, 0xc5, 0x5e, 0x6c, 0xc0, + 0x3a, 0xca, 0x8e, 0x8b, 0xa5, 0x1f, 0x6a, 0x39, 0x41, 0xa4, 0x94, 0x45, 0x60, 0x86, 0x86, 0x43, + 0xd4, 0x7d, 0x43, 0x30, 0xb5, 0x54, 0x06, 0x0c, 0x1e, 0x8e, 0x1a, 0x93, 0x1b, 0x8e, 0x67, 0x1c, + 0xc5, 0xd9, 0x13, 0x69, 0xe4, 0xd3, 0x5c, 0x9e, 0x92, 0x48, 0x22, 0x77, 0x7b, 0xee, 0xec, 0x79, + 0x5c, 0xa4, 0xe5, 0x1f, 0x83, 0xc1, 0x83, 0x02, 0xc4, 0xae, 0xdc, 0x07, 0x38, 0xc1, 0xe0, 0xe2, + 0xcc, 0x1d, 0xaf, 0x8e, 0xc6, 0xd5, 0x68, 0xca, 0x8b, 0xe7, 0x12, 0xa2, 0x29, 0xe0, 0x4c, 0x5b, + 0xe3, 0x82, 0xf4, 0xe4, 0x49, 0xb7, 0x61, 0xc6, 0x2d, 0x37, 0x23, 0xb6, 0x5f, 0xb8, 0xba, 0x2a, + 0x6b, 0x09, 0x71, 0x8e, 0x0a, 0xbf, 0xa6, 0x04, 0x38, 0x42, 0x55, 0x88, 0x67, 0x97, 0xbc, 0x88, + 0x3a, 0xca, 0xb6, 0xcb, 0xca, 0x46, 0x0c, 0x1f, 0xcb, 0x1c, 0xa7, 0xe3, 0xb3, 0x50, 0xb4, 0x08, + 0x0a, 0x2f, 0xaa, 0xf2, 0xeb, 0x34, 0x2e, 0x8a, 0xd4, 0x1f, 0x7e, 0x80, 0xd8, 0x8e, 0x12, 0x95, + 0x3a, 0x13, 0xed, 0x04, 0xd2, 0x0a, 0xb3, 0xaa, 0x66, 0x21, 0x44, 0x33, 0x92, 0x28, 0xa2, 0x33, + 0x32, 0x70, 0xf0, 0x30, 0x04, 0x47, 0x0e, 0x40, 0x35, 0x59, 0xda, 0xae, 0x8d, 0x5f, 0x61, 0xeb, + 0xe6, 0x0d, 0x90, 0x79, 0x25, 0x98, 0x66, 0x99, 0xbc, 0x3c, 0xbd, 0x55, 0xe1, 0x7e, 0x67, 0x2a, + 0x00, 0x34, 0x32, 0x7f, 0x77, 0x1e, 0x4f, 0xe8, 0x49, 0x04, 0x85, 0x9b, 0x3f, 0xd5, 0x6c, 0x96, + 0x88, 0xa1, 0xd3, 0xae, 0x54, 0x20, 0xc5, 0xd3, 0xc7, 0x4f, 0x99, 0x81, 0xe9, 0x93, 0xc7, 0x22, + 0x22, 0x24, 0xd0, 0x51, 0x78, 0x6e, 0x31, 0x9f, 0x6b, 0x4a, 0x80, 0x1f, 0x88, 0xd4, 0x83, 0x69, + 0x47, 0x68, 0xbf, 0x2d, 0x03, 0xa2, 0x7c, 0xec, 0x4e, 0x31, 0xf7, 0x06, 0xf6, 0xda, 0x06, 0x22, + 0x54, 0x7a, 0x7a, 0x45, 0x79, 0x19, 0x32, 0xcf, 0x9f, 0x43, 0x9f, 0x3e, 0x11, 0x48, 0x1c, 0x3c, + 0x98, 0xb2, 0xf9, 0xc5, 0xb4, 0x3e, 0x96, 0xc7, 0xc9, 0xd1, 0x85, 0xc8, 0x74, 0x55, 0x59, 0x95, + 0xb0, 0x31, 0x27, 0x22, 0x51, 0xac, 0xe6, 0xd7, 0x54, 0xd7, 0xa8, 0x87, 0x6a, 0xa1, 0x5c, 0x92, + 0x0e, 0xbf, 0x69, 0x1a, 0xfc, 0x02, 0x43, 0x70, 0x24, 0x75, 0x2f, 0x36, 0xaf, 0xfd, 0x02, 0x99, + 0x67, 0xcf, 0x70, 0x49, 0xeb, 0x0a, 0x0f, 0x4f, 0x2a, 0x31, 0x53, 0xad, 0xd6, 0x8d, 0x9a, 0x16, + 0xa2, 0x13, 0x23, 0x79, 0xc9, 0xde, 0x42, 0x21, 0x51, 0x24, 0x2f, 0x03, 0xf3, 0x1d, 0x3b, 0x69, + 0x3a, 0x6e, 0x99, 0x70, 0x33, 0x46, 0x0f, 0x1f, 0xc4, 0x53, 0xd7, 0x4e, 0x2a, 0x37, 0xb7, 0x88, + 0xfa, 0x4b, 0x11, 0xd7, 0x94, 0x00, 0x62, 0xe2, 0x7b, 0xd3, 0xa6, 0xcd, 0x70, 0x21, 0x32, 0xb6, + 0x6e, 0xdf, 0x8d, 0xb4, 0xc3, 0x47, 0x54, 0xa4, 0x88, 0x55, 0x6e, 0x99, 0x0b, 0xaa, 0xab, 0xaa, + 0x54, 0x0b, 0xdd, 0x82, 0xf8, 0xea, 0x2a, 0x7e, 0x0f, 0x24, 0x32, 0x02, 0xfe, 0xbe, 0x3e, 0xdc, + 0x90, 0x51, 0xaf, 0x86, 0x43, 0xa5, 0x87, 0x7f, 0x0f, 0x15, 0x5e, 0x88, 0x25, 0xc8, 0xa7, 0x12, + 0x36, 0x27, 0x63, 0xc0, 0x83, 0xe6, 0xdd, 0xc4, 0x56, 0x23, 0x85, 0x07, 0xd1, 0x27, 0x3a, 0x8e, + 0xb6, 0xb2, 0x65, 0x33, 0xe7, 0x8f, 0x33, 0xa7, 0x8e, 0x23, 0x65, 0xe7, 0x77, 0x38, 0x79, 0xf4, + 0xb0, 0xaa, 0x60, 0x21, 0x3b, 0x6a, 0x29, 0x5b, 0x3e, 0x78, 0xa3, 0x73, 0xb9, 0x44, 0xd0, 0xf0, + 0xc8, 0xbe, 0xaa, 0x75, 0xb5, 0x98, 0x7e, 0xbd, 0x31, 0x61, 0x74, 0x22, 0x02, 0x02, 0xfc, 0xed, + 0xa0, 0xb0, 0x73, 0xd1, 0xd7, 0x94, 0x00, 0x52, 0x75, 0x4a, 0x52, 0x62, 0x1b, 0xbf, 0x96, 0x70, + 0xf4, 0xe8, 0x51, 0x54, 0xf1, 0x30, 0x6e, 0xcb, 0xf7, 0xdb, 0x90, 0x4f, 0x5d, 0x89, 0x46, 0xb2, + 0x03, 0x8a, 0xda, 0xa9, 0x44, 0x10, 0x1b, 0xe0, 0xf5, 0x5c, 0xb1, 0x48, 0x2f, 0x17, 0x5b, 0x93, + 0x3e, 0x64, 0x57, 0x41, 0x81, 0xfe, 0xa0, 0x18, 0x1d, 0x0d, 0x07, 0x0e, 0x45, 0xf4, 0xc0, 0x18, + 0x2a, 0x0d, 0x7a, 0x91, 0x6d, 0x15, 0xaa, 0xba, 0x16, 0xa7, 0x39, 0x69, 0x8f, 0x1e, 0x9d, 0xac, + 0xea, 0x1e, 0x95, 0x71, 0x14, 0x35, 0xb2, 0x0c, 0xe9, 0xc9, 0xde, 0x3e, 0xbe, 0xf0, 0xe6, 0x11, + 0x85, 0x9b, 0x57, 0x0f, 0x4e, 0xca, 0x7a, 0x5a, 0x83, 0x6b, 0xe0, 0xf7, 0x5b, 0xaa, 0x48, 0xec, + 0xaa, 0x4b, 0xc7, 0x1a, 0xd4, 0x1e, 0xeb, 0xc9, 0xa3, 0x0d, 0x53, 0x6d, 0x15, 0xe2, 0x62, 0x22, + 0xd4, 0x45, 0x80, 0x1c, 0x06, 0x76, 0xa5, 0xbb, 0xe6, 0x04, 0xd0, 0x1a, 0x77, 0xf2, 0xd4, 0x49, + 0x75, 0x19, 0x9a, 0x47, 0x16, 0x53, 0x58, 0x58, 0x04, 0x91, 0x14, 0x2d, 0xa6, 0x2e, 0x94, 0x9c, + 0x8e, 0xca, 0xaa, 0x48, 0xd8, 0x83, 0x1b, 0x97, 0xa8, 0x72, 0x48, 0x27, 0x8a, 0x2c, 0xde, 0xde, + 0xbe, 0xea, 0x01, 0x5d, 0x4d, 0x55, 0x05, 0xaa, 0x49, 0x28, 0x13, 0x0f, 0xe5, 0x4a, 0x09, 0x1f, + 0x40, 0x3b, 0x82, 0xaf, 0xbd, 0xf6, 0x0a, 0x26, 0x4e, 0x98, 0xa8, 0x65, 0x4d, 0x44, 0xd7, 0xd1, + 0x2c, 0x5f, 0xbe, 0xaa, 0x62, 0x24, 0xcb, 0x51, 0x4f, 0x4e, 0xc8, 0x1c, 0x20, 0xaa, 0x6a, 0x52, + 0x35, 0x47, 0x5a, 0x0d, 0x97, 0xad, 0x32, 0xe2, 0x1a, 0xa8, 0x7a, 0xd4, 0x83, 0x3b, 0xe3, 0x9b, + 0x27, 0x4c, 0xe2, 0xbe, 0xe3, 0xff, 0xc1, 0x24, 0x6c, 0xc6, 0xd0, 0x65, 0x8f, 0x8c, 0x86, 0xad, + 0x5b, 0xb7, 0xe2, 0x8d, 0xbf, 0xff, 0x1d, 0x94, 0xcd, 0xa4, 0x26, 0x5c, 0x05, 0x72, 0xa8, 0xd6, + 0x27, 0x47, 0xd5, 0xc1, 0x62, 0xa4, 0x91, 0x3b, 0x57, 0x99, 0xac, 0x0d, 0x94, 0x20, 0x77, 0x27, + 0x12, 0xc5, 0x54, 0x82, 0x5c, 0xd2, 0xd4, 0x92, 0x65, 0xb9, 0x93, 0x95, 0xfc, 0xc7, 0xa2, 0x85, + 0x5c, 0xcf, 0xc7, 0xa9, 0x87, 0x75, 0xcd, 0xf3, 0xb6, 0x7c, 0x97, 0x72, 0xe4, 0x27, 0xac, 0x4b, + 0xd8, 0xa0, 0x10, 0x58, 0xe6, 0x01, 0x31, 0xc5, 0x69, 0x30, 0x78, 0x5a, 0x9e, 0x44, 0x58, 0x26, + 0xeb, 0x12, 0xff, 0x75, 0x33, 0x02, 0x2c, 0x5b, 0x27, 0xbd, 0x5d, 0x7a, 0xec, 0xaa, 0x4f, 0x3e, + 0xc1, 0xfe, 0x03, 0x07, 0xd4, 0xd5, 0x8b, 0x07, 0x11, 0x5e, 0x45, 0xdd, 0xcc, 0x32, 0x6a, 0x7f, + 0x38, 0x51, 0x85, 0x5d, 0x56, 0x4a, 0x72, 0x35, 0x10, 0xd3, 0xbf, 0x1f, 0x16, 0x3c, 0xf8, 0x00, + 0xc2, 0xc2, 0x42, 0x19, 0x7e, 0x75, 0xd6, 0xee, 0x96, 0x75, 0xed, 0xac, 0xff, 0xba, 0x24, 0x40, + 0x67, 0x1b, 0x75, 0x23, 0xa5, 0xbf, 0x74, 0xd8, 0x71, 0x23, 0xd5, 0xf8, 0x5f, 0xac, 0xae, 0xdd, + 0x04, 0xb8, 0xc6, 0x04, 0xed, 0x26, 0x40, 0x37, 0x01, 0xae, 0x1d, 0x06, 0x64, 0x05, 0x64, 0x4f, + 0xd1, 0xaa, 0xab, 0x6b, 0x77, 0xc3, 0x8e, 0x80, 0x0b, 0x17, 0x2e, 0xa8, 0xab, 0x23, 0x59, 0xf9, + 0x34, 0xff, 0xd1, 0x02, 0xaf, 0x5d, 0xbc, 0x89, 0xc9, 0x1a, 0x31, 0xfc, 0x20, 0xf6, 0x13, 0x1e, + 0x7a, 0xe8, 0x21, 0xbb, 0xf0, 0x5d, 0x05, 0xd0, 0xb5, 0xdb, 0xbc, 0xae, 0xaa, 0x35, 0xf3, 0x0d, + 0x0d, 0x0d, 0xc5, 0x4b, 0x2f, 0xbd, 0xc4, 0xe3, 0xea, 0x7d, 0xea, 0x01, 0xdd, 0x37, 0xdf, 0x7c, + 0xa3, 0x6e, 0xb8, 0xa4, 0x48, 0xd9, 0x41, 0xdb, 0x73, 0xa2, 0x41, 0xfa, 0xe5, 0x97, 0x5f, 0xaa, + 0x60, 0xad, 0x6a, 0x93, 0xda, 0xcb, 0xa8, 0x93, 0xf1, 0xed, 0x5e, 0x86, 0x52, 0x81, 0x4d, 0x55, + 0xb5, 0x2d, 0xa2, 0xc5, 0x7a, 0x39, 0x4e, 0x96, 0x63, 0x5f, 0x39, 0x1a, 0x4e, 0x4e, 0x4e, 0x56, + 0x91, 0x62, 0xab, 0x3e, 0x72, 0x22, 0x79, 0xee, 0xdc, 0x39, 0x35, 0x4a, 0x4e, 0x2f, 0x45, 0x9d, + 0xd7, 0xd2, 0xf1, 0x7b, 0x8b, 0x6a, 0x5e, 0x12, 0x26, 0xa6, 0x4a, 0xe4, 0x88, 0xb9, 0x35, 0x27, + 0x9b, 0x28, 0x49, 0x23, 0xb0, 0xa2, 0xd6, 0x2b, 0x4e, 0xbe, 0x03, 0x25, 0x7b, 0x07, 0x71, 0x42, + 0x14, 0x7e, 0xfc, 0x48, 0xf5, 0x37, 0xff, 0x93, 0xcb, 0x1f, 0xf9, 0x02, 0x99, 0xec, 0x35, 0x34, + 0x27, 0x69, 0xe5, 0xd7, 0x56, 0x27, 0xd6, 0x4a, 0x64, 0xa7, 0x2e, 0xb8, 0x90, 0xfc, 0x44, 0xb7, + 0x94, 0x56, 0x9c, 0x61, 0x4b, 0x75, 0xd8, 0x6e, 0x9e, 0xac, 0x88, 0x5d, 0xc7, 0x23, 0x60, 0x85, + 0x5b, 0x7c, 0xa9, 0x71, 0x93, 0x1f, 0x11, 0xd0, 0xe4, 0x5d, 0xe2, 0xc5, 0xf0, 0xb7, 0xa5, 0xfb, + 0xfd, 0xef, 0x7f, 0x6f, 0x05, 0xc3, 0xdd, 0xae, 0x19, 0x24, 0x2a, 0x2a, 0xaa, 0x49, 0xbc, 0x66, + 0x9e, 0xda, 0x0c, 0x40, 0x0f, 0xc5, 0x55, 0x94, 0x05, 0x0b, 0x16, 0x34, 0x81, 0x6b, 0x5e, 0x17, + 0xcb, 0x77, 0x12, 0xc0, 0x32, 0xb9, 0xd9, 0xff, 0xe9, 0xa7, 0x9f, 0xda, 0xcc, 0xa3, 0xb9, 0xc6, + 0xaf, 0x39, 0x81, 0x85, 0x67, 0xf7, 0xee, 0xdd, 0x0a, 0x3b, 0x9b, 0xcd, 0xf4, 0x96, 0x65, 0x8b, + 0xed, 0xee, 0x77, 0xdf, 0x7d, 0xd7, 0x22, 0x65, 0xeb, 0x5e, 0xe9, 0x09, 0x6d, 0x76, 0x9c, 0xb0, + 0x6c, 0xc2, 0xbe, 0xfc, 0xf2, 0xcb, 0xe6, 0x8a, 0xf5, 0xe9, 0xd3, 0xc7, 0x26, 0x8c, 0x66, 0xcc, + 0x5c, 0x2a, 0x6b, 0x49, 0x00, 0x01, 0xd6, 0x54, 0xa6, 0x25, 0xae, 0x39, 0x01, 0x44, 0x69, 0x57, + 0x53, 0xe8, 0x95, 0x78, 0xf6, 0x32, 0x25, 0x3d, 0x3d, 0xdd, 0x5c, 0xc6, 0xc9, 0x93, 0x27, 0x15, + 0x29, 0xd3, 0x12, 0x09, 0xb6, 0x14, 0x7b, 0xcd, 0x09, 0x2e, 0x7b, 0x34, 0x9b, 0xe2, 0x92, 0xce, + 0x1e, 0x01, 0xa8, 0x35, 0xdd, 0x24, 0xff, 0xe7, 0x9f, 0x7f, 0xbe, 0x79, 0x76, 0x8a, 0x7c, 0x2d, + 0x95, 0x73, 0x91, 0x19, 0x6e, 0xcc, 0x98, 0x31, 0x56, 0x30, 0xb6, 0x02, 0xda, 0x44, 0x00, 0xae, + 0x16, 0x94, 0xbb, 0xef, 0xbe, 0xbb, 0x49, 0x01, 0x96, 0x0d, 0xb6, 0xf4, 0x5b, 0x1a, 0x60, 0xb7, + 0x2c, 0xb0, 0xa3, 0x04, 0x78, 0xee, 0xb9, 0xe7, 0xcc, 0x8d, 0x92, 0x72, 0xc8, 0xca, 0x2c, 0xb3, + 0x55, 0xfd, 0x64, 0x85, 0x4d, 0x60, 0x1c, 0x49, 0x00, 0x9e, 0x17, 0xa9, 0x46, 0xe5, 0xb5, 0x36, + 0x8a, 0x1e, 0x7e, 0x4b, 0xee, 0x8d, 0x37, 0xde, 0x68, 0x52, 0x0f, 0xde, 0x77, 0xb4, 0x04, 0x6a, + 0x0e, 0xb7, 0xbb, 0x0a, 0x22, 0xa4, 0xca, 0x1f, 0xe5, 0x73, 0xe8, 0xe2, 0xa7, 0xf2, 0xbd, 0xfa, + 0x14, 0xbf, 0xf6, 0xdb, 0xbb, 0x77, 0x2f, 0xeb, 0xd7, 0xba, 0x93, 0xd5, 0x86, 0xe6, 0xc4, 0xa4, + 0x82, 0xa5, 0xe3, 0x08, 0xb0, 0x7c, 0x6d, 0xe2, 0x97, 0xdb, 0x30, 0x4b, 0x97, 0x9a, 0x9a, 0x6a, + 0xf9, 0xaa, 0xfa, 0xe5, 0x62, 0xa7, 0xab, 0x9c, 0xdc, 0x15, 0xf0, 0xd3, 0x7f, 0xe6, 0xec, 0x69, + 0xa8, 0xbe, 0xc5, 0xa5, 0xab, 0xa5, 0x79, 0x09, 0x99, 0x9b, 0x12, 0x12, 0x12, 0xcc, 0xe9, 0x5a, + 0xf4, 0x10, 0x89, 0x76, 0x9d, 0x25, 0xff, 0x97, 0x1e, 0xfe, 0xc8, 0x23, 0x8f, 0x28, 0x1f, 0xd0, + 0x0e, 0x00, 0x0d, 0xf8, 0x29, 0x13, 0x27, 0x4e, 0x6c, 0x42, 0x75, 0x16, 0xa4, 0xc8, 0xf0, 0x6b, + 0x4e, 0xfd, 0xfb, 0xf9, 0xa9, 0x02, 0x89, 0xd3, 0x7e, 0xb1, 0xb1, 0xb1, 0xaa, 0x39, 0x08, 0x4e, + 0xb8, 0xe6, 0x30, 0x89, 0xe3, 0x25, 0x89, 0x72, 0xd3, 0x4d, 0x37, 0x35, 0x61, 0x33, 0xcd, 0x59, + 0x80, 0xb0, 0xa1, 0x85, 0x0b, 0x17, 0x2a, 0x8b, 0x16, 0x2d, 0x52, 0xe4, 0xa3, 0x12, 0x5a, 0x9e, + 0xda, 0xb3, 0x7f, 0xff, 0xfe, 0x0a, 0x3b, 0x4c, 0x93, 0x76, 0x09, 0x9b, 0x93, 0xaf, 0x12, 0x86, + 0x87, 0x87, 0xab, 0x3f, 0x61, 0x75, 0x1a, 0xbc, 0xb0, 0x0e, 0x2d, 0x3c, 0x32, 0x32, 0x52, 0x35, + 0x67, 0xc1, 0x63, 0x71, 0x73, 0x7a, 0x4e, 0xb4, 0x0a, 0x91, 0x69, 0x86, 0x97, 0x74, 0xf2, 0xe9, + 0x04, 0xf9, 0xf2, 0xe1, 0x53, 0x4f, 0x3d, 0xa5, 0xb6, 0x57, 0xcb, 0x4b, 0x9e, 0xf2, 0x9d, 0xe4, + 0xb6, 0x6a, 0xda, 0x4b, 0x2f, 0xb6, 0xeb, 0xb8, 0xea, 0x50, 0xbf, 0xe7, 0x68, 0xc9, 0x46, 0xa4, + 0x20, 0xb1, 0x45, 0x20, 0x26, 0x31, 0x68, 0x93, 0x4c, 0xf9, 0xe8, 0xa3, 0x8f, 0xf8, 0x85, 0xdc, + 0x1e, 0x6a, 0x25, 0xfb, 0xf5, 0xeb, 0xa7, 0x6c, 0xd9, 0xb2, 0xc5, 0x2a, 0xdf, 0x55, 0xab, 0x56, + 0xa9, 0xfc, 0x56, 0xab, 0xac, 0xa4, 0x9f, 0x3d, 0x7b, 0xb6, 0xc2, 0x15, 0x95, 0xf9, 0x0b, 0x1c, + 0x12, 0xc7, 0x55, 0x92, 0x42, 0x71, 0x94, 0x26, 0xe9, 0x85, 0x0d, 0x3e, 0xfb, 0xec, 0xb3, 0x4a, + 0xf3, 0x3a, 0x08, 0xe2, 0xa4, 0x2c, 0xe1, 0xcb, 0x1a, 0x0f, 0x96, 0xaf, 0x79, 0xd0, 0x56, 0x5a, + 0x93, 0xf4, 0xef, 0xbf, 0xff, 0xbe, 0x3a, 0x7f, 0x68, 0x65, 0xb7, 0xf4, 0x94, 0x3c, 0xc4, 0x06, + 0x83, 0x2d, 0x04, 0x8a, 0xc9, 0x8d, 0x17, 0x5f, 0x7c, 0x51, 0x9d, 0xa7, 0x9a, 0xa7, 0x97, 0x7a, + 0x49, 0xc7, 0x94, 0xb6, 0xb4, 0xc7, 0xb5, 0x7b, 0x19, 0xca, 0x82, 0xbb, 0x9d, 0x03, 0x31, 0x60, + 0x77, 0x0e, 0x70, 0x60, 0x59, 0xdd, 0x59, 0xd9, 0xc0, 0x40, 0x37, 0x01, 0x6c, 0x20, 0xe5, 0x6a, + 0x06, 0x75, 0x13, 0xe0, 0x6a, 0x62, 0xdb, 0x46, 0x59, 0xdd, 0x04, 0xb0, 0x81, 0x94, 0xab, 0x19, + 0xd4, 0x4d, 0x80, 0xab, 0x89, 0x6d, 0x1b, 0x65, 0x75, 0x13, 0xc0, 0x06, 0x52, 0xae, 0x66, 0x50, + 0x37, 0x01, 0xae, 0x26, 0xb6, 0x6d, 0x94, 0xd5, 0x4d, 0x00, 0x1b, 0x48, 0xb9, 0x9a, 0x41, 0xff, + 0x07, 0xaf, 0xf3, 0x8d, 0x60, 0xda, 0x1b, 0x41, 0x87, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXJSIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x38, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x0e, + 0x0a, 0xaa, 0x03, 0x00, 0x00, 0x05, 0x39, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7d, + 0x48, 0x5b, 0x57, 0x14, 0xcf, 0x8b, 0x2f, 0x31, 0xd1, 0x1a, 0x4d, 0xb4, 0x06, 0xc7, 0xfc, 0x88, + 0x55, 0x59, 0x97, 0x5a, 0xf1, 0xb3, 0x43, 0x83, 0xba, 0x32, 0x97, 0x0d, 0x3a, 0x0b, 0x2b, 0x08, + 0x75, 0x65, 0x82, 0x8c, 0xc1, 0xdc, 0x1f, 0xab, 0x48, 0xdd, 0x64, 0x62, 0x19, 0x6e, 0x73, 0xc2, + 0xa6, 0x83, 0x6e, 0x38, 0x46, 0xff, 0x28, 0xc3, 0x75, 0x6b, 0x51, 0x36, 0x54, 0x56, 0x23, 0x88, + 0x3a, 0x3b, 0xa1, 0x22, 0xd4, 0xd8, 0xc9, 0x28, 0x9b, 0x1f, 0x0c, 0xad, 0x4c, 0xa3, 0xb5, 0x89, + 0x71, 0xd1, 0x7c, 0xb8, 0x63, 0x9f, 0xbc, 0x3c, 0x93, 0x98, 0x9b, 0xbc, 0x7b, 0xcd, 0x10, 0xde, + 0x23, 0x84, 0x73, 0xcf, 0xfb, 0xdd, 0x73, 0x7e, 0xbf, 0x73, 0xee, 0xbb, 0x2f, 0xb9, 0xd4, 0xce, + 0xce, 0x8e, 0xe8, 0x28, 0x5f, 0xe2, 0xa3, 0x4c, 0x7e, 0x97, 0xbb, 0x20, 0xe0, 0xff, 0xee, 0xa0, + 0xd0, 0x01, 0xa1, 0x03, 0x98, 0x15, 0x10, 0x96, 0x10, 0x66, 0x01, 0xb1, 0xa7, 0xd3, 0xd8, 0x11, + 0xf6, 0x02, 0xac, 0x8f, 0x19, 0xcc, 0x13, 0xbf, 0xba, 0xec, 0xdb, 0x30, 0x56, 0x16, 0xe9, 0xa3, + 0x5f, 0x78, 0xc9, 0x23, 0xf2, 0xfc, 0x17, 0x57, 0x18, 0x8f, 0x34, 0xfe, 0x99, 0xf8, 0x73, 0x97, + 0x68, 0xe5, 0x71, 0x0f, 0x00, 0xbf, 0x21, 0x19, 0x01, 0xb3, 0x1f, 0xbf, 0xb3, 0x74, 0xeb, 0x1b, + 0x96, 0x41, 0x58, 0x64, 0x94, 0xb7, 0x80, 0xc5, 0x1b, 0x9f, 0xb3, 0x80, 0x85, 0x6f, 0x3f, 0xc9, + 0xfc, 0xee, 0xae, 0x5c, 0xf3, 0x1c, 0xeb, 0xe1, 0x6d, 0x10, 0x78, 0x06, 0x2c, 0xc6, 0x31, 0x2e, + 0xfb, 0x40, 0xa8, 0xd8, 0xd7, 0x57, 0xe7, 0x5a, 0x2f, 0x07, 0x82, 0x44, 0x62, 0x08, 0x74, 0xc0, + 0x32, 0x39, 0xc6, 0xa6, 0x49, 0xfd, 0xe0, 0x4b, 0xa5, 0xee, 0x55, 0x5a, 0x19, 0xc7, 0x7a, 0x58, + 0x23, 0xf7, 0x97, 0x3f, 0x1d, 0xe6, 0xf5, 0xbf, 0xae, 0xbe, 0x65, 0x7d, 0x68, 0x04, 0x27, 0x77, + 0x16, 0x8b, 0xe1, 0x61, 0x10, 0xe8, 0x80, 0x63, 0xc3, 0xcc, 0x24, 0xa6, 0x15, 0x31, 0x09, 0x6f, + 0xbc, 0x27, 0x4b, 0xce, 0xa0, 0x15, 0x2a, 0x6f, 0x2a, 0xb2, 0xc4, 0xb4, 0x63, 0xda, 0xbc, 0xf8, + 0xf3, 0x55, 0xcc, 0x2d, 0x87, 0xd5, 0xe2, 0x8d, 0xe1, 0xe1, 0x21, 0x20, 0x80, 0xcd, 0x2a, 0x0e, + 0x97, 0xb3, 0xf6, 0x41, 0x46, 0x20, 0x98, 0x83, 0xe6, 0xfa, 0xf4, 0x93, 0x14, 0xe0, 0x33, 0xc1, + 0x61, 0x3b, 0x05, 0x01, 0x22, 0x91, 0x63, 0x7d, 0x95, 0x29, 0x33, 0x45, 0x4b, 0x90, 0xf5, 0x16, + 0x4b, 0xdc, 0x18, 0x87, 0x79, 0x0d, 0x89, 0x47, 0x02, 0x70, 0x3b, 0xb0, 0xbd, 0xf2, 0x68, 0x75, + 0xf0, 0x27, 0x26, 0x4d, 0xc4, 0x89, 0xe7, 0x91, 0xf9, 0xe4, 0xa9, 0x6e, 0xcc, 0xd2, 0xcd, 0xaf, + 0x90, 0x78, 0x24, 0x00, 0x4b, 0xc0, 0xc2, 0xf5, 0x4f, 0xef, 0x97, 0x9f, 0xdc, 0x5e, 0x59, 0x82, + 0x34, 0x61, 0x32, 0x79, 0xe2, 0xdb, 0x1f, 0x22, 0xf3, 0x45, 0x9d, 0x3e, 0xa3, 0x2a, 0x7d, 0x8d, + 0x81, 0xfd, 0xfd, 0xf5, 0xd5, 0xa9, 0x8b, 0xf9, 0x5b, 0x0b, 0xb3, 0xc8, 0x59, 0x7e, 0x00, 0x58, + 0x02, 0x36, 0xa6, 0xee, 0x31, 0x7b, 0xa8, 0x44, 0x75, 0x3c, 0xe3, 0xb3, 0xce, 0xa8, 0x6c, 0x9d, + 0x9f, 0x4c, 0x7b, 0xb7, 0x28, 0x71, 0x46, 0xeb, 0xf7, 0xb1, 0x2f, 0x96, 0x33, 0x43, 0xcb, 0xef, + 0x13, 0xf6, 0x27, 0x7b, 0x2b, 0x10, 0x3d, 0xd7, 0x17, 0x02, 0x4b, 0x40, 0xac, 0xbe, 0x22, 0x32, + 0x23, 0x13, 0xc2, 0xda, 0xd7, 0x56, 0xfe, 0xb8, 0x7c, 0xc1, 0x74, 0xe7, 0x07, 0x5f, 0x29, 0xf6, + 0xf9, 0x5c, 0x5b, 0xff, 0x3e, 0x78, 0x53, 0xb7, 0x3a, 0xd4, 0x03, 0x5e, 0xb1, 0x34, 0x5c, 0xfd, + 0x7a, 0x75, 0xb8, 0xfa, 0xd9, 0x7d, 0x88, 0x60, 0x07, 0x70, 0x2a, 0x81, 0x73, 0xb9, 0xb6, 0x6d, + 0xf7, 0x2f, 0x64, 0xdd, 0x3d, 0x25, 0x82, 0xcf, 0xd4, 0xa5, 0x42, 0x64, 0xa8, 0xc7, 0xbf, 0xf5, + 0x33, 0x60, 0xf8, 0x36, 0x19, 0x6e, 0x23, 0xf1, 0x48, 0x00, 0x56, 0x07, 0xa0, 0x58, 0x94, 0x24, + 0x5c, 0xa9, 0x7b, 0x85, 0xa9, 0x9a, 0x6d, 0x71, 0x0e, 0x59, 0x3e, 0xdb, 0x82, 0x1b, 0xa3, 0x3a, + 0x7b, 0x1e, 0x89, 0x47, 0x02, 0x70, 0x05, 0x40, 0x02, 0x4a, 0x22, 0x45, 0xa6, 0xf1, 0x09, 0xa0, + 0x68, 0x9e, 0x13, 0xb9, 0xd1, 0x08, 0x08, 0xe0, 0x86, 0x0b, 0xbd, 0x2d, 0x08, 0xe0, 0xd4, 0xdc, + 0x69, 0x35, 0x8b, 0x5c, 0x4e, 0x8e, 0xc3, 0x87, 0xe9, 0x34, 0x3f, 0xf6, 0xe1, 0xc5, 0x70, 0x11, + 0xf8, 0x3f, 0x20, 0x8d, 0x55, 0x33, 0x04, 0x9c, 0x9b, 0x56, 0xf8, 0xb9, 0x1f, 0x53, 0xf8, 0x72, + 0x64, 0xc6, 0x69, 0xf9, 0x09, 0xad, 0x07, 0x2b, 0x53, 0xff, 0x8f, 0x4e, 0xcb, 0x93, 0x47, 0x37, + 0xaf, 0x31, 0x7e, 0x69, 0x6c, 0xbc, 0x07, 0x80, 0xdf, 0x90, 0x80, 0x80, 0xe8, 0x33, 0x67, 0x29, + 0x9a, 0xde, 0x71, 0x38, 0x80, 0xc1, 0x3f, 0x3f, 0xdf, 0x80, 0x4f, 0xd2, 0xbb, 0x1f, 0x25, 0x7a, + 0x09, 0x78, 0x78, 0xe5, 0x22, 0x97, 0x62, 0x4c, 0xa1, 0x9e, 0x3b, 0xe4, 0x6d, 0x13, 0x78, 0x06, + 0xe4, 0x9a, 0x93, 0xa9, 0x0d, 0xd7, 0xe0, 0xad, 0x14, 0x38, 0x89, 0xa8, 0x53, 0x79, 0x9a, 0xf7, + 0xdb, 0x03, 0xc7, 0xfb, 0x41, 0x52, 0xf0, 0xa6, 0xf0, 0x73, 0x3b, 0xf0, 0x5b, 0xdb, 0xcb, 0x8b, + 0x1b, 0x0f, 0xee, 0x31, 0xa7, 0x12, 0x91, 0xe9, 0x99, 0x3e, 0x96, 0x90, 0xe1, 0x16, 0x13, 0x4d, + 0x1a, 0x97, 0xa0, 0xc8, 0xd1, 0x89, 0x28, 0x02, 0xb5, 0x83, 0x80, 0xc4, 0x04, 0x04, 0x2e, 0x95, + 0x2c, 0x92, 0x4c, 0x19, 0xc8, 0x72, 0x0a, 0x2a, 0x9a, 0x20, 0x20, 0xa8, 0x72, 0x1d, 0x02, 0x58, + 0xe8, 0xc0, 0x21, 0x14, 0x35, 0xa8, 0x90, 0x84, 0x3b, 0x70, 0xfd, 0xe9, 0x15, 0x14, 0x03, 0x4c, + 0x30, 0xc9, 0x6d, 0x74, 0x6b, 0x6b, 0x2b, 0x22, 0x22, 0x22, 0x2c, 0x2c, 0x6c, 0x73, 0x73, 0x93, + 0xa6, 0x09, 0xbc, 0xe3, 0x03, 0xd1, 0x46, 0x38, 0x4d, 0x74, 0x74, 0xb4, 0x5c, 0x2e, 0x0f, 0x19, + 0x7b, 0x50, 0x48, 0xb2, 0x03, 0x10, 0xce, 0xe5, 0x72, 0xc1, 0xb7, 0x58, 0x8c, 0x5e, 0x99, 0x80, + 0x0c, 0x04, 0x86, 0x6c, 0x02, 0x81, 0x0e, 0x8c, 0x8e, 0x8e, 0x36, 0x35, 0x35, 0xc1, 0xb2, 0x61, + 0x93, 0x55, 0x54, 0x54, 0xd4, 0xd5, 0xd5, 0xb1, 0x43, 0x30, 0x7a, 0x7b, 0x7b, 0xbb, 0xba, 0xba, + 0xfa, 0xfb, 0xfb, 0x2d, 0x16, 0x8b, 0x56, 0xab, 0x85, 0xc5, 0x96, 0x94, 0x94, 0xd4, 0xd7, 0xd7, + 0xc7, 0xc5, 0xf0, 0xb3, 0xc9, 0x08, 0x18, 0x1e, 0x1e, 0xe6, 0xa6, 0x4f, 0x4b, 0x4b, 0xe3, 0x0e, + 0x07, 0x07, 0x07, 0xcb, 0xcb, 0x77, 0xcf, 0x51, 0xf4, 0x7a, 0xbd, 0xd3, 0xe9, 0x84, 0x21, 0xfc, + 0x00, 0xb3, 0xdb, 0xed, 0x5c, 0x0c, 0x6f, 0x9b, 0x80, 0x80, 0xda, 0xda, 0xda, 0xfc, 0xfc, 0x7c, + 0xab, 0xd5, 0x0a, 0x24, 0x3a, 0x3b, 0x3b, 0xbb, 0xbb, 0xbb, 0x3d, 0xd8, 0x18, 0x0c, 0x06, 0xf0, + 0x40, 0xe1, 0xa1, 0x03, 0x60, 0xcc, 0xcf, 0xcf, 0x37, 0x37, 0x37, 0x83, 0x12, 0x0f, 0x18, 0xbf, + 0x21, 0x01, 0x01, 0xf0, 0xd4, 0x96, 0x95, 0x95, 0x31, 0xe9, 0xc7, 0xc7, 0xc7, 0xbd, 0x79, 0x14, + 0x14, 0x14, 0x80, 0x73, 0x7a, 0x7a, 0x3a, 0x2b, 0x2b, 0xab, 0xa4, 0xa4, 0x24, 0x3b, 0x3b, 0xbb, + 0xb1, 0xb1, 0x51, 0xa3, 0xd1, 0x78, 0x23, 0xf9, 0x78, 0x90, 0x07, 0x2f, 0x41, 0x01, 0x1a, 0x1a, + 0x1a, 0x80, 0x44, 0x65, 0x65, 0x25, 0x77, 0x16, 0xac, 0x16, 0x9d, 0x6e, 0xdf, 0xa1, 0x1d, 0x45, + 0x51, 0x35, 0x35, 0x35, 0x5c, 0x0c, 0x6f, 0x1b, 0xbd, 0x5d, 0xf0, 0xa9, 0xca, 0xfe, 0x39, 0xb0, + 0xab, 0x0e, 0x0c, 0x0c, 0x18, 0x8d, 0xc6, 0xfa, 0xfa, 0xfa, 0xe2, 0xe2, 0x62, 0x89, 0x44, 0x02, + 0x74, 0x3b, 0x3a, 0x3a, 0xe6, 0xe6, 0xdc, 0x67, 0x44, 0xfb, 0x67, 0x04, 0x31, 0x0a, 0x85, 0x80, + 0xb6, 0xb6, 0x36, 0xd8, 0x73, 0x60, 0x9b, 0x6a, 0x6d, 0x6d, 0x1d, 0x19, 0x19, 0x99, 0x99, 0x99, + 0x91, 0xc9, 0x64, 0xa0, 0x61, 0x68, 0x68, 0x28, 0x08, 0xa6, 0x07, 0x40, 0x09, 0x3c, 0x03, 0x07, + 0x44, 0x76, 0xbb, 0xa1, 0xd2, 0x26, 0x93, 0xa9, 0xb4, 0xb4, 0x14, 0x96, 0x4d, 0x6e, 0x6e, 0xee, + 0xe4, 0xe4, 0xa4, 0xcd, 0x66, 0x83, 0x97, 0x00, 0x3c, 0xfa, 0x6e, 0x10, 0x5f, 0x8b, 0xb0, 0x00, + 0x60, 0xe6, 0xcd, 0x44, 0xa1, 0x50, 0xc0, 0xa2, 0x87, 0x85, 0xd4, 0xde, 0xbe, 0xf7, 0x3f, 0x38, + 0x2e, 0x2e, 0xae, 0xa5, 0xa5, 0x25, 0x33, 0x73, 0xf7, 0x60, 0x18, 0xf3, 0x22, 0x2c, 0x00, 0xb6, + 0x48, 0x20, 0x94, 0x90, 0x90, 0xc0, 0xa5, 0x05, 0x4f, 0x76, 0x75, 0x75, 0x75, 0x4a, 0x4a, 0xca, + 0xec, 0xec, 0xec, 0xda, 0xda, 0x9a, 0x4a, 0xa5, 0x4a, 0x4e, 0x4e, 0x96, 0x4a, 0x09, 0x9c, 0x2b, + 0x42, 0x16, 0x02, 0x02, 0x7a, 0x7a, 0x7a, 0x26, 0x26, 0x26, 0xd4, 0x6a, 0x35, 0xec, 0xa1, 0xcc, + 0xcb, 0xb5, 0xa8, 0xa8, 0x88, 0x2b, 0xe0, 0xd8, 0xd3, 0x0b, 0x3c, 0xe9, 0xe9, 0xe9, 0x5c, 0x3f, + 0x19, 0x9b, 0xf7, 0xfe, 0xc5, 0x4e, 0x64, 0xde, 0xb2, 0x2c, 0x9b, 0xaa, 0xaa, 0x2a, 0xf6, 0x56, + 0x08, 0x0c, 0x02, 0x3f, 0xe6, 0x96, 0x97, 0x97, 0x61, 0x3f, 0x81, 0xc5, 0xa3, 0x54, 0x2a, 0xf3, + 0xf2, 0xf2, 0x72, 0x72, 0x72, 0x58, 0x31, 0x21, 0x30, 0x08, 0x08, 0x08, 0x01, 0x4b, 0x3f, 0x29, + 0x42, 0xf1, 0x1e, 0xf0, 0x93, 0x1e, 0xff, 0x96, 0x20, 0x00, 0xbf, 0x86, 0x78, 0x11, 0x84, 0x0e, + 0xe0, 0xd5, 0x0f, 0x7f, 0xb6, 0xd0, 0x01, 0xfc, 0x1a, 0xe2, 0x45, 0x38, 0xf2, 0x1d, 0xf8, 0x0f, + 0x1c, 0x65, 0x73, 0xb3, 0xdd, 0xbe, 0x50, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXJSIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0b, 0x56, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x6b, 0x6c, 0x14, 0xc7, 0xf9, 0xbb, 0xf3, 0xf9, 0x89, 0x0d, 0x7e, 0xc7, 0x02, 0x0a, 0x85, + 0x26, 0xa9, 0x04, 0x49, 0x4a, 0x69, 0x6d, 0x41, 0x84, 0x30, 0xd8, 0x16, 0x21, 0xe1, 0x51, 0x89, + 0xd6, 0x32, 0x8f, 0x52, 0x35, 0xf4, 0x87, 0x8d, 0x94, 0x54, 0xfd, 0x51, 0x54, 0x14, 0xaa, 0x2a, + 0x15, 0x34, 0xa8, 0x85, 0x16, 0x45, 0xa8, 0x56, 0x5c, 0x29, 0x45, 0x40, 0x91, 0x6a, 0x70, 0x48, + 0x7e, 0x14, 0xa2, 0xd0, 0x40, 0x51, 0xc1, 0x55, 0x15, 0x5a, 0x09, 0x1c, 0x6a, 0x51, 0xd3, 0x18, + 0x81, 0x0d, 0xc6, 0x36, 0x06, 0xe3, 0xf7, 0xe3, 0x7c, 0xdb, 0xf9, 0xd6, 0xec, 0xdc, 0x3e, 0x66, + 0x6f, 0x5f, 0xb3, 0x77, 0x7b, 0x64, 0x47, 0xb2, 0xf7, 0x9b, 0x6f, 0xbe, 0xf7, 0xb7, 0x33, 0x3b, + 0xbb, 0x3b, 0xb3, 0x17, 0x10, 0x48, 0x01, 0x0b, 0x25, 0x68, 0x81, 0x56, 0x24, 0x65, 0x32, 0x74, + 0x7f, 0x2b, 0x20, 0x36, 0x4a, 0x47, 0x85, 0x50, 0x34, 0x49, 0xaf, 0x4c, 0x75, 0x77, 0x68, 0x9a, + 0x40, 0x8d, 0xb9, 0xbf, 0x54, 0x89, 0x52, 0xd7, 0x95, 0xad, 0x2a, 0x6e, 0x96, 0x06, 0xa6, 0x0f, + 0xc3, 0xf5, 0x3f, 0x17, 0xcd, 0x1e, 0x6d, 0x7a, 0x4f, 0x61, 0x3e, 0x56, 0x02, 0x28, 0x54, 0x83, + 0x8d, 0x81, 0x60, 0x6a, 0x88, 0x41, 0x0f, 0x4c, 0x86, 0x40, 0x60, 0x3a, 0xac, 0xd2, 0x51, 0x2e, + 0x80, 0xc9, 0x20, 0x11, 0xb0, 0xac, 0x65, 0x32, 0xb0, 0x08, 0x25, 0x21, 0x09, 0x70, 0xfa, 0xf1, + 0xae, 0xef, 0x4a, 0xda, 0x21, 0xf2, 0xa0, 0x8b, 0xc2, 0x14, 0xc0, 0x3c, 0xc8, 0x8b, 0xfc, 0x54, + 0x90, 0xc3, 0x12, 0x8d, 0xc6, 0xe9, 0xac, 0xcd, 0x6f, 0x52, 0x61, 0x29, 0x05, 0xcf, 0x50, 0x98, + 0x02, 0x12, 0xa7, 0x74, 0x94, 0x4b, 0x95, 0xc3, 0x52, 0xbb, 0x36, 0x4a, 0x93, 0xe3, 0x00, 0xa9, + 0xe9, 0x54, 0xa0, 0x1a, 0xd0, 0x32, 0xa8, 0x29, 0x54, 0x75, 0x8d, 0x0f, 0xaa, 0x76, 0x4d, 0x55, + 0x97, 0x61, 0xd5, 0xaa, 0x55, 0x10, 0x0a, 0x85, 0x34, 0x0c, 0x9a, 0x0e, 0xb4, 0x75, 0xeb, 0x56, + 0xc9, 0x3f, 0xe6, 0xd1, 0xb2, 0x0f, 0x96, 0x19, 0xb4, 0x36, 0xc6, 0xc6, 0xe8, 0xfa, 0x1c, 0x9b, + 0xcd, 0x7c, 0xab, 0x29, 0x05, 0xac, 0xf1, 0x6f, 0xf0, 0x37, 0x6f, 0x00, 0x0b, 0xaf, 0x56, 0x6d, + 0x4a, 0x81, 0x9a, 0x09, 0xeb, 0x39, 0x3f, 0x7d, 0x97, 0x85, 0xd6, 0xe0, 0x6c, 0x2b, 0x60, 0xf6, + 0x44, 0x8d, 0x78, 0x60, 0x8f, 0x61, 0x0c, 0x3a, 0x18, 0xd8, 0xb3, 0x55, 0x81, 0x7e, 0xb0, 0x61, + 0x81, 0xa2, 0xae, 0x57, 0xf1, 0xce, 0x59, 0xc4, 0x1a, 0x91, 0xf5, 0xac, 0x96, 0xe3, 0x4d, 0xe5, + 0x60, 0xfd, 0xfa, 0xf5, 0x72, 0x1e, 0x40, 0x65, 0xa3, 0xa3, 0xa3, 0xb0, 0x61, 0xc3, 0x06, 0x05, + 0x9e, 0x59, 0x61, 0xf6, 0x57, 0x06, 0x92, 0x30, 0x53, 0x2c, 0xc2, 0x69, 0x69, 0x69, 0xc2, 0xd2, + 0xa5, 0x4b, 0x29, 0x4e, 0x0f, 0xf0, 0x4e, 0x0e, 0x98, 0xee, 0x9b, 0x40, 0x26, 0xbf, 0x07, 0xa6, + 0xce, 0x22, 0x13, 0x91, 0xd0, 0x25, 0xf1, 0x86, 0x02, 0x1c, 0x35, 0x7b, 0x4a, 0x53, 0xa8, 0x95, + 0x58, 0x37, 0x33, 0x92, 0x22, 0x83, 0xa1, 0x07, 0x3d, 0xcb, 0xa6, 0x2f, 0xd1, 0xc5, 0x57, 0xa6, + 0xa8, 0x82, 0x67, 0xfe, 0x6d, 0x7e, 0x92, 0x67, 0xa8, 0x40, 0x98, 0x9c, 0xa0, 0x82, 0xed, 0x00, + 0x86, 0x0a, 0x50, 0x68, 0x20, 0x33, 0x8b, 0x29, 0x7b, 0xe2, 0x1f, 0x1f, 0x33, 0xf1, 0x0a, 0xa4, + 0x5e, 0x17, 0x47, 0xfc, 0x78, 0xf3, 0x59, 0x81, 0x35, 0xdd, 0xc1, 0x36, 0x9c, 0x52, 0xeb, 0xb5, + 0x61, 0xbb, 0x54, 0xa2, 0x03, 0x8c, 0x84, 0x51, 0x1d, 0x51, 0x08, 0x4b, 0x10, 0xe2, 0x22, 0x43, + 0x8f, 0x55, 0xd4, 0xda, 0xaa, 0xa9, 0x10, 0x29, 0x5c, 0x96, 0x55, 0x02, 0x33, 0x66, 0xca, 0x6a, + 0x6c, 0xd0, 0x50, 0x41, 0xe8, 0xd9, 0x17, 0x44, 0xce, 0xe1, 0xf7, 0x7e, 0x41, 0x25, 0x48, 0x37, + 0x12, 0x14, 0x11, 0x03, 0x30, 0x54, 0x50, 0xd0, 0xf8, 0x39, 0x64, 0xd7, 0xbe, 0xad, 0x11, 0x91, + 0xfb, 0xbb, 0x8f, 0x34, 0x38, 0x16, 0xe2, 0x4b, 0x32, 0xd8, 0x91, 0x73, 0x83, 0xe5, 0xbd, 0x29, + 0x9c, 0x61, 0x0e, 0x50, 0x8a, 0xdd, 0x0b, 0x3e, 0xf2, 0x1a, 0x2a, 0xd8, 0xbb, 0x77, 0x2f, 0xe0, + 0x45, 0x3f, 0x23, 0x23, 0x03, 0xe9, 0xa9, 0xb2, 0xec, 0xec, 0x6c, 0xb1, 0x6e, 0xf4, 0xcf, 0x74, + 0x92, 0x51, 0xc1, 0xd8, 0xd8, 0x98, 0x28, 0x4f, 0xf2, 0xc8, 0x4c, 0xe8, 0x0c, 0x3d, 0x50, 0x5b, + 0x28, 0x09, 0x57, 0xe3, 0xf5, 0xea, 0x8c, 0x7b, 0x12, 0x25, 0xe9, 0xf2, 0xe5, 0xcb, 0x61, 0x60, + 0x60, 0x00, 0xea, 0xeb, 0xeb, 0xc5, 0x06, 0x33, 0x56, 0xcb, 0x25, 0x98, 0x0e, 0x91, 0x9c, 0xc9, + 0x0a, 0x6c, 0x39, 0x44, 0x56, 0x84, 0x23, 0xad, 0xeb, 0x0a, 0x5c, 0x0f, 0x91, 0x55, 0x8f, 0xad, + 0xd2, 0xbb, 0x1e, 0x21, 0xab, 0x06, 0x59, 0xa5, 0xf7, 0x1d, 0xb0, 0x1a, 0x31, 0xde, 0xf4, 0x86, + 0xe3, 0x90, 0x19, 0x85, 0xc3, 0xf5, 0x7b, 0x60, 0xe8, 0xfd, 0x77, 0x28, 0x69, 0x20, 0x18, 0x04, + 0xf9, 0x34, 0x53, 0x6a, 0x50, 0xcf, 0x65, 0xad, 0x4c, 0x3f, 0x25, 0x19, 0xea, 0x23, 0x97, 0x4e, + 0x2c, 0x37, 0xcc, 0xc8, 0xa8, 0x48, 0x77, 0x07, 0xf4, 0xbe, 0x36, 0x4f, 0xb4, 0xc3, 0x88, 0x56, + 0x6d, 0x2c, 0xab, 0x1e, 0xff, 0x3e, 0xf0, 0xe4, 0x21, 0x2b, 0xcb, 0x18, 0x3b, 0x38, 0x47, 0x0e, + 0x4c, 0xdd, 0x6d, 0x87, 0xde, 0x95, 0xd1, 0x89, 0x69, 0xde, 0xef, 0x3f, 0x31, 0xb4, 0x21, 0x58, + 0x3c, 0x97, 0xce, 0x18, 0x30, 0x73, 0x83, 0xef, 0xd4, 0x19, 0xf2, 0xc4, 0x22, 0x70, 0xe4, 0x40, + 0xca, 0x9c, 0x85, 0x90, 0xfb, 0xee, 0x5f, 0xa8, 0xfc, 0x91, 0x3f, 0xfd, 0x96, 0xc2, 0xb1, 0x00, + 0xe9, 0x7a, 0x1e, 0xcc, 0x2b, 0x84, 0x9c, 0xb7, 0xb4, 0x4f, 0xe0, 0x63, 0xf1, 0xaa, 0xdb, 0xe2, + 0xdf, 0x07, 0x7a, 0x3a, 0xa1, 0xf7, 0xd5, 0xaf, 0x88, 0x76, 0x24, 0x65, 0x1f, 0x10, 0x46, 0x86, + 0xd4, 0x41, 0x74, 0x54, 0xe7, 0x92, 0x81, 0xc8, 0x83, 0x7b, 0xd0, 0xfb, 0xca, 0x1c, 0x6a, 0x88, + 0x99, 0x61, 0x14, 0x1f, 0xe9, 0x17, 0x9e, 0xbb, 0x4f, 0x79, 0xec, 0x02, 0x5c, 0x1c, 0xb0, 0xab, + 0x9c, 0x07, 0x9f, 0xa3, 0x4e, 0xcc, 0xc3, 0x00, 0xa7, 0x32, 0x7c, 0x07, 0xe4, 0x11, 0xec, 0xe8, + 0xe8, 0x10, 0xc7, 0xf8, 0xc1, 0xc1, 0x41, 0x39, 0xda, 0x55, 0x98, 0x4b, 0x06, 0xf0, 0x16, 0x16, + 0x6f, 0x06, 0xe7, 0xcd, 0x9b, 0x9e, 0x22, 0xcc, 0x9f, 0x3f, 0x5f, 0x61, 0xf4, 0xad, 0x5b, 0xb7, + 0xc4, 0x76, 0xa4, 0xc1, 0x3f, 0x7c, 0x3d, 0xb5, 0x69, 0xd3, 0x26, 0x05, 0x8d, 0xed, 0x0a, 0xb9, + 0xa8, 0x70, 0x2d, 0xc4, 0x10, 0x21, 0x3d, 0x3d, 0x5d, 0x21, 0x13, 0x71, 0xf8, 0x47, 0x0c, 0x17, + 0x36, 0x6f, 0xde, 0x2c, 0x5c, 0xbe, 0x7c, 0x59, 0xd1, 0xee, 0xa4, 0x62, 0xf8, 0x00, 0xcd, 0xaa, + 0x70, 0x3d, 0x07, 0x4e, 0x9d, 0x3a, 0x45, 0x45, 0xe5, 0xe6, 0xe6, 0x8a, 0x0e, 0x51, 0x84, 0x03, + 0x80, 0xcb, 0x74, 0x9a, 0x18, 0xad, 0x28, 0x73, 0xe7, 0xce, 0x55, 0xd4, 0xcf, 0x9f, 0x3f, 0x0f, + 0x15, 0x15, 0x15, 0x70, 0xf1, 0xe2, 0x45, 0xc0, 0xfe, 0x71, 0xe7, 0xce, 0x1d, 0xc8, 0xc9, 0xc9, + 0x51, 0xd0, 0xd8, 0xae, 0x38, 0x70, 0x9e, 0xb2, 0xce, 0x9c, 0x39, 0x53, 0x8c, 0x28, 0x31, 0x42, + 0x38, 0x74, 0xe8, 0x10, 0xc5, 0xc7, 0x03, 0xf0, 0x2f, 0x64, 0xb6, 0x53, 0xcf, 0x89, 0x91, 0xcb, + 0x30, 0xca, 0xc9, 0x16, 0x5b, 0x62, 0xfc, 0x53, 0xc8, 0x56, 0xd8, 0x38, 0x32, 0x25, 0xfd, 0x29, + 0xe4, 0x3b, 0xc0, 0xf1, 0x6c, 0xb0, 0x25, 0xca, 0xcf, 0x80, 0xad, 0xb0, 0x71, 0x64, 0x4a, 0xfa, + 0x0c, 0x70, 0x99, 0xcc, 0xa9, 0x6f, 0xea, 0x59, 0x8f, 0x4b, 0xe4, 0x8f, 0x1f, 0x33, 0xaa, 0xbe, + 0x07, 0xb3, 0x7e, 0x7d, 0x8a, 0x4b, 0x1e, 0xb8, 0x64, 0x40, 0xfe, 0x44, 0xc2, 0x8c, 0x55, 0x63, + 0x9f, 0x36, 0x81, 0xfc, 0xed, 0xb0, 0x19, 0x1e, 0x3d, 0x1a, 0x0e, 0x0e, 0xe0, 0x44, 0x74, 0xba, + 0x64, 0x6d, 0xf9, 0x31, 0xb0, 0xa2, 0x8f, 0xad, 0x88, 0x97, 0xb7, 0x0d, 0x1f, 0x3b, 0xf0, 0x84, + 0xcb, 0xd9, 0xc1, 0xb9, 0x03, 0x91, 0x08, 0xb5, 0x60, 0xc6, 0x0f, 0x7f, 0x46, 0x61, 0x23, 0x40, + 0x18, 0x9f, 0x7e, 0xe9, 0x69, 0x44, 0x67, 0xd4, 0xee, 0xdc, 0x01, 0x85, 0x86, 0xe9, 0xe5, 0xbd, + 0x0a, 0x94, 0xcb, 0x15, 0xce, 0x0e, 0xb8, 0x6c, 0x2d, 0x43, 0xbc, 0x63, 0x07, 0x26, 0x9a, 0xa3, + 0x4b, 0x63, 0x82, 0xac, 0x15, 0xc0, 0x2a, 0xa5, 0x81, 0x8c, 0x4c, 0x15, 0xc6, 0x59, 0xd5, 0x91, + 0x03, 0xf8, 0x6c, 0xff, 0xd1, 0x4f, 0xa6, 0x97, 0x01, 0xe2, 0xf3, 0x50, 0x08, 0x18, 0x8b, 0xcb, + 0x3d, 0xf0, 0x01, 0xb5, 0xb8, 0xb7, 0x7c, 0x16, 0x4c, 0x75, 0xdc, 0xa4, 0x75, 0x3b, 0x80, 0xb1, + 0xc6, 0x18, 0x52, 0x47, 0x3e, 0x68, 0x10, 0x5b, 0x53, 0x0a, 0x4b, 0xa0, 0xf0, 0xe3, 0x8e, 0x18, + 0x94, 0xd1, 0xa6, 0xb4, 0x97, 0x5f, 0x85, 0xac, 0x9a, 0x37, 0x44, 0x44, 0x64, 0x68, 0x00, 0xc2, + 0xed, 0xad, 0xd1, 0x46, 0x1b, 0x90, 0xe3, 0x1b, 0x9a, 0xde, 0xca, 0x42, 0x88, 0xf4, 0xf7, 0x89, + 0xaa, 0xe5, 0xc3, 0xa4, 0x9e, 0x2d, 0xfd, 0x3b, 0xab, 0x60, 0xfc, 0xb3, 0xf3, 0x62, 0x73, 0xfe, + 0xfb, 0x97, 0x20, 0x75, 0xc9, 0x0a, 0x3d, 0x52, 0x53, 0x78, 0x47, 0x19, 0x40, 0x0d, 0x85, 0x1f, + 0xb6, 0x51, 0x45, 0x66, 0x56, 0xf7, 0x4a, 0xc6, 0x23, 0x93, 0x53, 0xe3, 0x51, 0x86, 0x63, 0x07, + 0x02, 0xd9, 0xb3, 0x50, 0x4e, 0xc2, 0x8a, 0x63, 0x07, 0x12, 0x66, 0xf9, 0x13, 0xc5, 0x5c, 0x1d, + 0x10, 0x46, 0xf9, 0xbe, 0x3e, 0x32, 0x13, 0x1c, 0xe7, 0x0e, 0x04, 0xa3, 0x2b, 0x4b, 0xfb, 0xaa, + 0x17, 0x83, 0xde, 0xb2, 0x3d, 0xc4, 0x3f, 0x7e, 0x6b, 0x0b, 0xb5, 0x29, 0xf5, 0xf9, 0x6f, 0x50, + 0xd8, 0x09, 0xe0, 0x78, 0x14, 0x42, 0xe5, 0xbd, 0x55, 0xc5, 0x10, 0x79, 0xd4, 0x4b, 0xed, 0x60, + 0x8d, 0x46, 0xf2, 0xe9, 0x34, 0x12, 0x16, 0x9d, 0xeb, 0x82, 0x60, 0x41, 0x09, 0xe5, 0xb1, 0x0b, + 0x70, 0xb9, 0x1f, 0x28, 0xfa, 0xb4, 0x07, 0xc6, 0x2f, 0x7e, 0x04, 0xe1, 0xd6, 0x7f, 0xe9, 0xda, + 0x91, 0xfd, 0xa3, 0x3d, 0xd3, 0x6d, 0xa9, 0x69, 0x30, 0xe3, 0xf5, 0xdd, 0x00, 0xa1, 0x34, 0x5d, + 0x5a, 0x2b, 0x0d, 0x5c, 0x32, 0x60, 0x45, 0x21, 0x6f, 0x5a, 0xe7, 0x7d, 0x80, 0xb7, 0x45, 0x16, + 0xe5, 0xf9, 0x0e, 0x58, 0x0c, 0x18, 0x77, 0x72, 0x3f, 0x03, 0xf2, 0x90, 0xae, 0x58, 0xb1, 0x02, + 0x96, 0x2d, 0x5b, 0x26, 0x47, 0xb9, 0x0e, 0x73, 0x1d, 0x85, 0xa4, 0x75, 0xb7, 0xe4, 0xd5, 0x92, + 0xeb, 0x86, 0x4b, 0x0a, 0xb8, 0x5c, 0x07, 0x24, 0x61, 0xf1, 0x34, 0x5c, 0xd2, 0xe9, 0xb8, 0x0f, + 0x48, 0x6f, 0xe7, 0xa5, 0x97, 0xd8, 0x52, 0x16, 0x24, 0x05, 0x78, 0x5c, 0xbd, 0x7a, 0xb5, 0xe2, + 0x45, 0x37, 0x8b, 0x46, 0x4e, 0x6f, 0x09, 0x76, 0xfa, 0x26, 0x71, 0x72, 0x72, 0x52, 0xd8, 0xb8, + 0x71, 0xa3, 0xb0, 0x6e, 0xdd, 0x3a, 0xa1, 0xb4, 0xb4, 0x54, 0xf3, 0xfe, 0xf7, 0xd2, 0xa5, 0x4b, + 0x22, 0xee, 0xcc, 0x99, 0x33, 0xa2, 0xaa, 0xfd, 0xfb, 0xf7, 0x6b, 0x68, 0x9c, 0xd8, 0xc0, 0xf5, + 0x45, 0xf7, 0xd9, 0xb3, 0x67, 0x35, 0xc6, 0x5d, 0xbd, 0x7a, 0x55, 0xc4, 0x91, 0xa8, 0x8a, 0xbb, + 0xdc, 0x0e, 0x1e, 0x3c, 0x28, 0x84, 0xc3, 0x61, 0x27, 0x36, 0x2b, 0x78, 0x5d, 0x77, 0x00, 0xb5, + 0x35, 0x35, 0x35, 0x09, 0x64, 0x05, 0x3f, 0x75, 0x04, 0x9d, 0x69, 0x6e, 0x6e, 0x56, 0x18, 0x62, + 0xb7, 0xe2, 0xb8, 0x0f, 0x18, 0x9d, 0xaf, 0x57, 0xae, 0x5c, 0x81, 0xed, 0xdb, 0xb7, 0x8b, 0x1b, + 0x19, 0x89, 0x91, 0x70, 0xf7, 0xee, 0x5d, 0x91, 0xe5, 0xe8, 0xd1, 0xa3, 0x46, 0xac, 0xa6, 0xda, + 0xb9, 0x8e, 0x42, 0x11, 0xd9, 0x63, 0x46, 0x49, 0xfb, 0x8d, 0x1b, 0x37, 0x44, 0xe3, 0xb1, 0xe3, + 0xe2, 0x2a, 0x15, 0x72, 0xfa, 0x88, 0x4d, 0xe4, 0x8d, 0xbe, 0x44, 0xe2, 0xe8, 0xc8, 0xd5, 0x01, + 0x34, 0x56, 0x5d, 0xb6, 0x6d, 0xdb, 0x26, 0x5e, 0xdc, 0x32, 0x33, 0x33, 0x01, 0xb3, 0xb1, 0x60, + 0xc1, 0x02, 0x58, 0xb2, 0x64, 0x89, 0x9a, 0xcc, 0x7e, 0xdd, 0xee, 0xb9, 0x27, 0xf1, 0x9d, 0x3e, + 0x7d, 0x5a, 0xa8, 0xac, 0xac, 0x14, 0x76, 0xec, 0xd8, 0x41, 0xcf, 0x71, 0xa9, 0x2d, 0x1e, 0x47, + 0x2e, 0x19, 0xc0, 0xd5, 0x28, 0x58, 0x4a, 0x4a, 0x4a, 0xe0, 0xf6, 0xed, 0xdb, 0xf6, 0xa3, 0x69, + 0x83, 0x93, 0xeb, 0x54, 0xc2, 0x86, 0x7e, 0xc7, 0x2c, 0xae, 0x8f, 0x42, 0x8e, 0x2d, 0x34, 0x10, + 0xe0, 0x3b, 0x60, 0x10, 0x20, 0xd7, 0x9b, 0xfd, 0x0c, 0xb8, 0x1e, 0x62, 0x03, 0x05, 0x49, 0x3f, + 0x0a, 0x19, 0xf8, 0xe7, 0xf9, 0xe6, 0xa4, 0xef, 0x02, 0x9e, 0x8f, 0xb0, 0x81, 0x81, 0x7e, 0x02, + 0x0c, 0x02, 0xe4, 0x76, 0xb3, 0x9f, 0x00, 0xb7, 0x23, 0x6c, 0x20, 0xdf, 0x4f, 0x80, 0x41, 0x80, + 0xdc, 0x6e, 0xf6, 0x13, 0xe0, 0x76, 0x84, 0x0d, 0xe4, 0xfb, 0x09, 0x30, 0x08, 0x90, 0xdb, 0xcd, + 0x5c, 0xee, 0xe6, 0x79, 0x1b, 0x89, 0xbb, 0xa5, 0xc3, 0x37, 0x5b, 0x40, 0x08, 0x4f, 0x46, 0x45, + 0x93, 0x07, 0x4a, 0xe9, 0xe5, 0xdf, 0x89, 0xd6, 0x63, 0x40, 0xf8, 0xaa, 0x54, 0x5e, 0x02, 0xa1, + 0x54, 0x08, 0x91, 0x17, 0xd2, 0xb8, 0x07, 0xd8, 0x6b, 0xc5, 0x3b, 0xf7, 0x01, 0x63, 0x23, 0xd0, + 0xf7, 0x83, 0x32, 0x08, 0x7f, 0xf1, 0x1f, 0x66, 0x8c, 0xf4, 0x36, 0x96, 0xb2, 0x88, 0xd5, 0x2f, + 0xd3, 0xe5, 0x34, 0xa9, 0xcf, 0xbd, 0x04, 0xf9, 0x47, 0xff, 0x09, 0x90, 0xce, 0x77, 0xc5, 0x98, + 0x5c, 0x87, 0x15, 0xd8, 0x33, 0x3d, 0xe0, 0x61, 0x5d, 0x05, 0x33, 0xf8, 0xa1, 0xf9, 0xcf, 0x03, + 0x6e, 0x18, 0x07, 0x5c, 0xc9, 0x66, 0xb2, 0xa4, 0xbf, 0xbc, 0x56, 0xa4, 0x9c, 0xea, 0xfc, 0x02, + 0xc2, 0x77, 0x94, 0x2b, 0xd9, 0x26, 0x49, 0xcf, 0x7a, 0x44, 0xd6, 0x5a, 0xe5, 0xfd, 0xb1, 0xd9, + 0xa4, 0x34, 0x77, 0xc9, 0xbc, 0xd1, 0x03, 0x22, 0x53, 0xd0, 0x5d, 0xaa, 0x3d, 0x17, 0x0a, 0x1a, + 0x5b, 0x20, 0xf4, 0xec, 0x8b, 0x8e, 0x22, 0x10, 0x6e, 0xbb, 0x0a, 0x7d, 0x5b, 0xbe, 0xa9, 0x91, + 0xc1, 0x5a, 0x86, 0xa2, 0x21, 0x8a, 0x03, 0xc2, 0xfc, 0x69, 0x15, 0x07, 0x63, 0xd4, 0x2a, 0x82, + 0xb9, 0x85, 0x6a, 0x94, 0xe5, 0x3a, 0x0f, 0x19, 0x96, 0x95, 0x5a, 0x60, 0xf0, 0x74, 0x02, 0x2c, + 0xf8, 0x91, 0xb4, 0xa4, 0x9e, 0x48, 0x80, 0x30, 0x3c, 0xc0, 0x0e, 0x20, 0x99, 0xf9, 0x38, 0x2e, + 0x3a, 0x32, 0x74, 0x75, 0x3a, 0x56, 0x68, 0x4d, 0x40, 0xc2, 0x13, 0x10, 0x79, 0xd8, 0x0d, 0x0f, + 0xb7, 0x97, 0x69, 0xac, 0x4e, 0x7b, 0x69, 0x39, 0x97, 0x65, 0x80, 0xc1, 0xa2, 0x39, 0x90, 0xfa, + 0x82, 0x56, 0xfe, 0xc3, 0xef, 0x7f, 0x1b, 0x84, 0xfe, 0xe8, 0xd2, 0x44, 0x8d, 0x01, 0x71, 0x42, + 0x24, 0xec, 0x22, 0x8c, 0xdf, 0xe0, 0x7c, 0xf4, 0xe6, 0x6b, 0x1a, 0x37, 0x53, 0x9f, 0x7b, 0x11, + 0x66, 0xec, 0xdc, 0x6b, 0x7a, 0xce, 0xaf, 0x11, 0xa0, 0x83, 0x18, 0xff, 0xdb, 0x87, 0x30, 0x44, + 0xbe, 0x43, 0x19, 0xfe, 0xdf, 0x75, 0x0d, 0x05, 0x7e, 0x2e, 0xd2, 0xec, 0x3d, 0x86, 0x86, 0xd9, + 0x21, 0x22, 0x61, 0x3d, 0x20, 0x98, 0x57, 0x04, 0xa1, 0xaf, 0x2d, 0xd6, 0x98, 0x3f, 0x79, 0xf3, + 0x73, 0x18, 0x78, 0xfb, 0x75, 0xc7, 0x1b, 0x21, 0xe4, 0x82, 0xa7, 0x6e, 0xff, 0x17, 0x06, 0x7e, + 0xb9, 0x83, 0x19, 0x7c, 0xb4, 0x21, 0x98, 0xcf, 0xf8, 0xd6, 0xbc, 0x5c, 0x80, 0x8b, 0x70, 0xc2, + 0x7a, 0x80, 0xdc, 0xa7, 0xf1, 0xbf, 0x9e, 0x84, 0xfe, 0xdd, 0x35, 0x72, 0x14, 0x04, 0xb3, 0xb2, + 0xa1, 0xe8, 0xef, 0x8f, 0x4d, 0xed, 0x62, 0x51, 0x30, 0xaa, 0x2b, 0x53, 0x61, 0xe8, 0x21, 0x3b, + 0x5b, 0x84, 0xd1, 0x11, 0x45, 0x4b, 0xee, 0x81, 0x26, 0x48, 0xaf, 0x88, 0xfe, 0xa4, 0x80, 0xa2, + 0x31, 0x8e, 0x95, 0x84, 0xf5, 0x00, 0xb9, 0x8f, 0xe9, 0x95, 0xda, 0x40, 0x44, 0xc8, 0x77, 0x9f, + 0x22, 0x7d, 0xdd, 0x72, 0x32, 0x5b, 0x70, 0xa4, 0xef, 0xbe, 0x26, 0xf8, 0x28, 0xc8, 0x0b, 0xc1, + 0x47, 0x3b, 0x3c, 0x91, 0x00, 0x34, 0xe4, 0xcb, 0x5a, 0xfc, 0x04, 0x24, 0x38, 0xf3, 0xde, 0x48, + 0x00, 0x99, 0xab, 0x8b, 0xbb, 0x16, 0x55, 0xc1, 0x18, 0x3b, 0xd7, 0xa8, 0xc2, 0x58, 0xaf, 0x8e, + 0x7d, 0xf2, 0x67, 0x0d, 0x53, 0x20, 0x25, 0xba, 0xc5, 0x47, 0xd3, 0x18, 0x67, 0x84, 0x27, 0x2e, + 0xc2, 0xe8, 0xf3, 0xe0, 0xaf, 0x6a, 0x61, 0xe4, 0xf4, 0x1f, 0x74, 0xdd, 0xe7, 0xf5, 0x34, 0x14, + 0x15, 0x64, 0x55, 0xef, 0x84, 0x9c, 0xdd, 0xf5, 0xba, 0xba, 0xe2, 0xd9, 0xe0, 0x8d, 0x1e, 0x40, + 0x3c, 0xce, 0xd9, 0xd3, 0x00, 0x05, 0xe4, 0x31, 0x31, 0x3e, 0xfd, 0x74, 0xab, 0x84, 0xbe, 0xfa, + 0x75, 0x28, 0x38, 0xfe, 0x99, 0x67, 0x82, 0x8f, 0x7e, 0x7a, 0xa6, 0x07, 0xb8, 0x15, 0x74, 0xaf, + 0xcb, 0xf5, 0x4c, 0x0f, 0xf0, 0x7a, 0xa0, 0xdc, 0xb2, 0xcf, 0x4f, 0x80, 0x5b, 0x91, 0x35, 0x29, + 0xd7, 0x4f, 0x80, 0xc9, 0x40, 0xb9, 0x45, 0xe6, 0x27, 0xc0, 0xad, 0xc8, 0x9a, 0x94, 0xeb, 0xf9, + 0x04, 0xf4, 0xf7, 0xf7, 0x9b, 0x74, 0x25, 0x39, 0xc9, 0x3c, 0x9b, 0x80, 0x7b, 0xf7, 0xee, 0x89, + 0x1b, 0x14, 0xf3, 0xf2, 0xf2, 0xc4, 0x63, 0x3c, 0x3f, 0x35, 0x1c, 0xcf, 0x54, 0x7a, 0x36, 0x01, + 0xb3, 0x67, 0xcf, 0x86, 0xb5, 0x6b, 0xd7, 0x42, 0x7e, 0x7e, 0xbe, 0xf8, 0x6b, 0x40, 0xdc, 0xbe, + 0x61, 0x1b, 0xcf, 0xe8, 0x9a, 0xd0, 0xe5, 0x99, 0xfb, 0x00, 0xb2, 0xeb, 0x15, 0xda, 0xda, 0xda, + 0x60, 0x6a, 0x2a, 0xfa, 0x13, 0x70, 0x72, 0xfb, 0x8b, 0x8b, 0x8b, 0xc5, 0x6d, 0x5c, 0x72, 0x1c, + 0x0b, 0x6e, 0x69, 0x69, 0x81, 0xeb, 0xd7, 0xaf, 0x43, 0x67, 0x67, 0x27, 0x90, 0x9f, 0x51, 0x14, + 0x79, 0xca, 0xca, 0xca, 0x20, 0x85, 0x3c, 0x7e, 0x38, 0x72, 0xe4, 0x08, 0x54, 0x57, 0x57, 0xc3, + 0xe2, 0xc5, 0xda, 0xf7, 0x10, 0x2c, 0x59, 0x71, 0xc1, 0xc5, 0x63, 0x33, 0x9d, 0x91, 0x8e, 0x0b, + 0x17, 0x2e, 0xd0, 0x4d, 0x7e, 0xc4, 0x69, 0x26, 0xac, 0xfe, 0xd6, 0xb6, 0x5c, 0x26, 0xf9, 0x41, + 0x4c, 0x81, 0x04, 0x95, 0xf2, 0x05, 0x83, 0x41, 0x61, 0xd1, 0xa2, 0x45, 0xc2, 0xca, 0x95, 0x2b, + 0x05, 0xe9, 0x13, 0xd6, 0x92, 0x5c, 0xb2, 0xad, 0x5f, 0xce, 0x9a, 0x70, 0x98, 0xeb, 0x6e, 0x61, + 0xde, 0xde, 0x48, 0xdb, 0xa7, 0x31, 0x78, 0xb1, 0x12, 0x70, 0xec, 0xd8, 0x31, 0x1a, 0x7c, 0xa4, + 0x25, 0x3f, 0x62, 0x26, 0x90, 0x5f, 0xe8, 0x52, 0x98, 0x43, 0x36, 0x40, 0x0a, 0xfb, 0xf6, 0xed, + 0x13, 0xae, 0x5d, 0xbb, 0xa6, 0xc0, 0x27, 0xba, 0xf2, 0x54, 0x24, 0x00, 0x83, 0x58, 0x57, 0x57, + 0xa7, 0x48, 0x82, 0x74, 0xc6, 0xcb, 0x8f, 0x0b, 0x17, 0x2e, 0x14, 0x1a, 0x1b, 0x1b, 0x13, 0x1d, + 0x73, 0x85, 0x7e, 0xcf, 0x5e, 0x84, 0x49, 0xe0, 0x4c, 0x17, 0xe2, 0x91, 0xf8, 0x5b, 0x05, 0xf8, + 0x1b, 0x06, 0x08, 0x8f, 0x8f, 0x8f, 0x03, 0xf9, 0xd0, 0x00, 0x90, 0x9e, 0x01, 0x64, 0x0f, 0x33, + 0xe0, 0x05, 0x1d, 0x4b, 0x7b, 0x7b, 0x3b, 0xd4, 0xd4, 0xd4, 0xc0, 0xae, 0x5d, 0xbb, 0x4c, 0xcb, + 0x76, 0x9d, 0x50, 0x91, 0x0e, 0x8f, 0x55, 0xcc, 0x0e, 0x41, 0xc7, 0x8f, 0x1f, 0xa7, 0x67, 0x3f, + 0x8e, 0xff, 0xb5, 0xb5, 0xb5, 0x42, 0x6b, 0x6b, 0xab, 0x30, 0x31, 0x31, 0x21, 0x90, 0x9f, 0x39, + 0x14, 0x4e, 0x9e, 0x3c, 0x29, 0x90, 0xed, 0xfa, 0x94, 0xa6, 0xa1, 0xa1, 0xc1, 0x33, 0x9e, 0x7a, + 0x7a, 0x08, 0x3a, 0x71, 0xe2, 0x04, 0x0d, 0x1a, 0x7e, 0x71, 0x42, 0xaf, 0x90, 0x9f, 0x5c, 0x10, + 0xe9, 0xc8, 0x4c, 0x47, 0x20, 0x1b, 0xde, 0x29, 0x0f, 0x39, 0x7b, 0x29, 0x4c, 0x3e, 0x37, 0x20, + 0x0e, 0x53, 0x5d, 0x5d, 0x5d, 0x7a, 0x62, 0x12, 0x82, 0xd7, 0xae, 0x88, 0x75, 0xbd, 0xcf, 0x99, + 0x53, 0x80, 0xd3, 0xd2, 0xc3, 0x87, 0x0f, 0x53, 0x62, 0xf2, 0x49, 0x04, 0x0a, 0xab, 0x81, 0xf2, + 0xf2, 0x72, 0x71, 0xe8, 0x51, 0xe3, 0x93, 0xa2, 0x9e, 0x90, 0xb4, 0xab, 0x94, 0xae, 0x59, 0xb3, + 0x86, 0x9e, 0xa9, 0x24, 0x68, 0x1a, 0xb8, 0xaa, 0xaa, 0x4a, 0x20, 0x5f, 0x03, 0x51, 0x71, 0x3d, + 0x1d, 0x55, 0xcf, 0xdc, 0x88, 0xe1, 0xa7, 0x54, 0xf0, 0x46, 0x0c, 0x9f, 0xfd, 0xe0, 0x4f, 0xd4, + 0x92, 0x19, 0x0b, 0x90, 0x39, 0x7c, 0x52, 0x9c, 0xc4, 0x4e, 0x8c, 0xf4, 0x4c, 0x02, 0x9c, 0x38, + 0x91, 0xcc, 0xbc, 0x4f, 0xc5, 0x34, 0xd4, 0x4f, 0x40, 0x32, 0x47, 0x20, 0xc1, 0xb6, 0xfb, 0x3d, + 0xc0, 0x4f, 0x40, 0x82, 0x23, 0x90, 0x60, 0xf5, 0x7e, 0x0f, 0x48, 0x70, 0x02, 0xfe, 0x0f, 0x63, + 0xba, 0xa3, 0x5c, 0x3e, 0x86, 0x45, 0x02, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXPlistIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x33, 0x35, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc8, + 0x4f, 0xd5, 0xc2, 0x00, 0x00, 0x06, 0xa8, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x7b, + 0x4c, 0x53, 0x57, 0x18, 0xb7, 0xef, 0x77, 0x91, 0x87, 0x82, 0x20, 0x68, 0x01, 0xd1, 0xf8, 0x20, + 0x6e, 0x09, 0xd1, 0x44, 0xc1, 0xcc, 0xa0, 0xce, 0x4c, 0x0d, 0xfc, 0xb7, 0x11, 0xa6, 0x93, 0xb0, + 0x65, 0x53, 0x18, 0x31, 0x41, 0xcd, 0x4c, 0x4c, 0x96, 0x25, 0xfe, 0xb3, 0xa0, 0x46, 0x8c, 0x61, + 0x03, 0x5f, 0x7f, 0xb0, 0x31, 0x46, 0x74, 0x31, 0x6e, 0xcb, 0x62, 0x80, 0x6c, 0x73, 0x8a, 0x12, + 0xc5, 0xa0, 0x19, 0xbe, 0x98, 0x48, 0x43, 0x71, 0x56, 0x94, 0xd2, 0x07, 0xa5, 0x94, 0xb6, 0xfb, + 0xe1, 0x71, 0xb7, 0x87, 0xdb, 0xf6, 0xda, 0x7b, 0x5b, 0x75, 0x66, 0xbd, 0x69, 0x9a, 0xef, 0x7c, + 0x8f, 0xdf, 0xf9, 0x5e, 0xe7, 0x3b, 0xed, 0x15, 0xf9, 0x7c, 0xbe, 0x69, 0xaf, 0xf3, 0x23, 0x7e, + 0x9d, 0x9d, 0x9f, 0xf4, 0x3d, 0x16, 0xc0, 0xab, 0xae, 0x60, 0xac, 0x02, 0xb1, 0x0a, 0x44, 0x98, + 0x81, 0x58, 0x0b, 0x45, 0x98, 0xc0, 0x88, 0xcd, 0x63, 0x15, 0x88, 0x38, 0x85, 0x11, 0x02, 0xc4, + 0x2a, 0x10, 0x61, 0x02, 0x23, 0x36, 0x8f, 0x55, 0x20, 0x58, 0x0a, 0x87, 0xdc, 0xde, 0x40, 0xb6, + 0xcd, 0xe3, 0xf3, 0x04, 0x72, 0x23, 0xe6, 0x44, 0xb9, 0x02, 0x5d, 0xd6, 0xf1, 0x0f, 0xba, 0x1f, + 0xcf, 0x6b, 0x37, 0x05, 0x3a, 0xf6, 0xfb, 0xe3, 0xb1, 0xcc, 0x36, 0xd3, 0x97, 0x7f, 0x59, 0x87, + 0x83, 0x85, 0x17, 0xa8, 0x1f, 0x26, 0x47, 0x14, 0x95, 0xff, 0x03, 0x48, 0xed, 0x0f, 0x0f, 0x46, + 0x0f, 0xf5, 0xd9, 0xfe, 0x78, 0x32, 0x86, 0x8d, 0x95, 0x12, 0x91, 0x73, 0x7d, 0x06, 0xcb, 0x83, + 0x9f, 0xcc, 0xce, 0x0d, 0x9d, 0x66, 0x30, 0xd5, 0x12, 0xf1, 0xfb, 0xb3, 0x35, 0x9f, 0x1a, 0x74, + 0x0b, 0xb5, 0x32, 0x96, 0x8e, 0x80, 0xa5, 0x54, 0x80, 0x0d, 0x6d, 0xf2, 0xc4, 0xed, 0x3d, 0x6a, + 0xb4, 0x1f, 0xb9, 0x6f, 0x33, 0x3a, 0x27, 0x68, 0x3e, 0x07, 0x3d, 0xea, 0xf1, 0x7e, 0xdd, 0x6f, + 0xc3, 0xa7, 0x70, 0x86, 0xaa, 0xca, 0xa0, 0x7b, 0x67, 0xa6, 0x4a, 0xc4, 0xa1, 0xfd, 0x3c, 0x91, + 0xf0, 0x00, 0xfe, 0xb4, 0xbb, 0x6b, 0xfb, 0x6c, 0x8d, 0x03, 0x0e, 0x38, 0x44, 0xef, 0x32, 0x4b, + 0x29, 0xdd, 0x9a, 0xae, 0xa1, 0x39, 0x84, 0xce, 0xd5, 0xcb, 0x4b, 0x67, 0x6b, 0x4f, 0x3d, 0x18, + 0x75, 0xfe, 0xab, 0xdf, 0xfa, 0xc8, 0x89, 0x4f, 0xb6, 0x46, 0x56, 0x31, 0x57, 0xb7, 0x35, 0x5d, + 0xab, 0x97, 0x0a, 0x09, 0x84, 0x77, 0x0b, 0xc1, 0xd9, 0x9f, 0xcd, 0x4e, 0x74, 0x0b, 0xf6, 0xa6, + 0xbd, 0x94, 0x89, 0x45, 0x1b, 0x92, 0x55, 0x65, 0xe9, 0xda, 0xf5, 0x33, 0x55, 0x12, 0x5a, 0x30, + 0x95, 0xb6, 0x4c, 0xf8, 0xbe, 0x35, 0x39, 0x8e, 0x1a, 0x6d, 0xd7, 0x46, 0xc6, 0x69, 0x89, 0x4e, + 0x2a, 0x46, 0x0c, 0x95, 0x06, 0x5d, 0xb6, 0x9a, 0x5f, 0x4e, 0x79, 0x07, 0xb0, 0xbe, 0xd3, 0xfc, + 0x8b, 0x79, 0x8a, 0xeb, 0x8b, 0xf5, 0x72, 0xf8, 0x5d, 0x9a, 0xa6, 0x99, 0x21, 0xe7, 0x31, 0x12, + 0xae, 0x59, 0xdd, 0x08, 0x03, 0xc1, 0x58, 0xa8, 0x33, 0x2d, 0x12, 0x89, 0xea, 0x73, 0x13, 0xca, + 0xd3, 0xb5, 0x74, 0x6c, 0xdc, 0x34, 0xbf, 0x70, 0x81, 0x35, 0x34, 0xee, 0x6f, 0x98, 0xe2, 0x59, + 0xea, 0xcf, 0xb2, 0xe3, 0xf2, 0xe2, 0xe4, 0xdc, 0x7b, 0x04, 0x95, 0xbe, 0xa1, 0x97, 0x1d, 0x59, + 0x9c, 0x50, 0xb3, 0x30, 0x1e, 0x4d, 0xf5, 0xc5, 0xdd, 0x91, 0xbb, 0x76, 0x37, 0xd4, 0x30, 0x51, + 0xcc, 0x2e, 0x3f, 0x7e, 0x50, 0x43, 0x16, 0x93, 0x77, 0x00, 0xb4, 0xfd, 0x8f, 0x0f, 0x9d, 0xe2, + 0x69, 0xa2, 0x8f, 0xe6, 0x68, 0xd7, 0x24, 0x29, 0x05, 0xf4, 0xaf, 0xd3, 0xeb, 0xfb, 0x7e, 0x70, + 0x14, 0x33, 0x80, 0x78, 0x4f, 0x23, 0x87, 0x4f, 0xf3, 0x0e, 0xe0, 0xc3, 0x0c, 0xad, 0xd9, 0xe5, + 0x21, 0x33, 0xc7, 0xed, 0xf5, 0x9d, 0x7a, 0xe0, 0xc0, 0x67, 0xae, 0x5a, 0x5a, 0x9e, 0x81, 0x83, + 0xa8, 0x49, 0x55, 0x70, 0xf4, 0xbf, 0xdf, 0x2b, 0xd2, 0x3f, 0xdf, 0x98, 0x1c, 0x23, 0x54, 0xff, + 0x40, 0x5c, 0x90, 0xa8, 0x5c, 0x33, 0x43, 0xe9, 0xd7, 0x0b, 0x83, 0xe2, 0x7d, 0x06, 0x80, 0xc9, + 0x9a, 0xfa, 0xcc, 0x2e, 0x52, 0xb1, 0x08, 0x33, 0x11, 0x11, 0xbe, 0x1d, 0xe2, 0x1c, 0x5b, 0x27, + 0x7c, 0x4d, 0x83, 0x8e, 0x06, 0xa3, 0xfd, 0xaa, 0xc5, 0xc5, 0x58, 0x81, 0x90, 0x8b, 0x45, 0xef, + 0xa5, 0x69, 0xaa, 0x0c, 0x7a, 0xf4, 0x15, 0xcd, 0x0f, 0x87, 0x16, 0x12, 0x00, 0x83, 0x7b, 0x75, + 0x64, 0x1c, 0xe3, 0xa8, 0x79, 0xd0, 0x31, 0xee, 0x9d, 0xf2, 0x76, 0x2c, 0x4b, 0x23, 0xeb, 0x7d, + 0x2b, 0x95, 0x51, 0x23, 0x44, 0x87, 0x65, 0xbc, 0xb0, 0xe3, 0x21, 0x6b, 0xe6, 0x26, 0x2b, 0x24, + 0x9f, 0xcc, 0xd5, 0x7d, 0x3c, 0x47, 0x97, 0xcc, 0x67, 0x00, 0xd0, 0xc8, 0x11, 0x05, 0x40, 0x80, + 0xfe, 0x76, 0x79, 0xbf, 0xea, 0xb7, 0xd5, 0xf5, 0xdb, 0xd0, 0x5a, 0x84, 0xc3, 0x7d, 0x13, 0x13, + 0x9d, 0x37, 0xe3, 0x14, 0xb8, 0xc5, 0xde, 0x4d, 0xd3, 0xc8, 0x05, 0x9c, 0x1e, 0x2a, 0x02, 0xde, + 0x67, 0x80, 0xb2, 0x7d, 0x46, 0xa6, 0x28, 0xc4, 0x9f, 0xe7, 0xc4, 0x61, 0x1c, 0x7d, 0x37, 0xe8, + 0x38, 0xd4, 0x67, 0x65, 0x0d, 0x78, 0x96, 0xbe, 0x44, 0x24, 0x2a, 0x4a, 0x51, 0xc3, 0xf5, 0xfc, + 0x04, 0x05, 0x4b, 0x24, 0x70, 0x89, 0xc9, 0x15, 0xdd, 0xe7, 0xb7, 0xc7, 0x63, 0x25, 0x5d, 0x8f, + 0x02, 0x31, 0xc1, 0xaf, 0xee, 0x19, 0xbe, 0x3f, 0x3a, 0x11, 0x28, 0x8a, 0x84, 0x13, 0x85, 0x16, + 0x12, 0x98, 0xb9, 0x28, 0x99, 0xf1, 0xb8, 0x3b, 0xa3, 0xb4, 0x63, 0x94, 0x61, 0x62, 0x01, 0x44, + 0x39, 0xa1, 0xbc, 0xe1, 0x62, 0x15, 0xe0, 0x9d, 0xb2, 0x28, 0x1b, 0xc4, 0x2a, 0x10, 0xe5, 0x84, + 0xf2, 0x86, 0xfb, 0x7f, 0x57, 0x60, 0xe2, 0xe9, 0xe3, 0xf5, 0x86, 0xfc, 0x0b, 0x02, 0xf9, 0x81, + 0x03, 0x07, 0x4e, 0x9f, 0x3e, 0xcd, 0x3b, 0xb1, 0xe1, 0x1b, 0x08, 0xbb, 0xc6, 0x7b, 0x7b, 0x7b, + 0x13, 0x12, 0x12, 0xc8, 0x2e, 0xd3, 0xa7, 0x4f, 0x0f, 0x05, 0x72, 0xfb, 0xf6, 0x6d, 0xe8, 0x64, + 0x66, 0x66, 0x86, 0x52, 0xe0, 0xe0, 0xbb, 0xdd, 0xee, 0xf6, 0xf6, 0xf6, 0xc1, 0xc1, 0x41, 0x0e, + 0x1d, 0x88, 0x04, 0xb6, 0x90, 0x4e, 0xa7, 0x9b, 0x3f, 0x7f, 0x7e, 0x6a, 0xea, 0xe4, 0x6f, 0x66, + 0x87, 0xc3, 0x11, 0x2a, 0x5f, 0x72, 0xb9, 0x5c, 0xa1, 0x50, 0xa4, 0xa5, 0xa5, 0x85, 0x52, 0xe0, + 0xe0, 0x9f, 0x3b, 0x77, 0x6e, 0xf5, 0xea, 0xd5, 0xe5, 0xe5, 0xe5, 0x1c, 0x3a, 0x93, 0x22, 0xee, + 0xf8, 0xb8, 0xa5, 0x57, 0xae, 0x5c, 0x01, 0x82, 0x4c, 0x26, 0xe3, 0x50, 0x43, 0x22, 0x39, 0xa4, + 0xb4, 0xc8, 0xe3, 0xf1, 0xd0, 0xcb, 0x93, 0x27, 0x4f, 0x02, 0x3c, 0x2f, 0x2f, 0x8f, 0x66, 0x06, + 0xd2, 0x41, 0x2a, 0xb0, 0x77, 0xef, 0xde, 0x65, 0xcb, 0x96, 0xad, 0x5d, 0xbb, 0xb6, 0xb3, 0xb3, + 0x73, 0xf9, 0xf2, 0xe5, 0x6a, 0xb5, 0x7a, 0xc9, 0x92, 0x25, 0x35, 0x35, 0x35, 0x1c, 0xbd, 0x8e, + 0x9d, 0x02, 0x9f, 0xcd, 0x9b, 0x37, 0x03, 0x67, 0xc5, 0x8a, 0x15, 0x2b, 0x57, 0xae, 0xb4, 0x58, + 0x2c, 0x2c, 0x85, 0xb3, 0x67, 0xcf, 0x6e, 0xd9, 0xb2, 0x25, 0x39, 0x39, 0x19, 0xf8, 0xf0, 0x32, + 0x37, 0x37, 0x77, 0xd3, 0xa6, 0x4d, 0x8c, 0xce, 0xcd, 0x9b, 0x37, 0x6f, 0xdd, 0xba, 0x85, 0xa5, + 0xcd, 0x66, 0xfb, 0xf5, 0xe9, 0x03, 0x67, 0x70, 0xa2, 0x18, 0x05, 0x3f, 0x11, 0x18, 0x93, 0xc1, + 0x60, 0x20, 0x62, 0x8d, 0x66, 0xca, 0xfb, 0xa9, 0xd2, 0xd2, 0x52, 0x96, 0x32, 0x47, 0x05, 0xb0, + 0xb1, 0x54, 0xea, 0xff, 0xb3, 0xd1, 0xd7, 0xd7, 0x47, 0xdb, 0xb6, 0xb6, 0xb6, 0x92, 0x2d, 0xd6, + 0xad, 0x5b, 0x57, 0x58, 0x58, 0x88, 0xb7, 0x29, 0x58, 0x2e, 0x58, 0xb0, 0x80, 0xe8, 0x74, 0x75, + 0x75, 0xf9, 0xfd, 0xa3, 0xa8, 0x7d, 0xfb, 0xf6, 0xd1, 0x20, 0x84, 0x0e, 0xd2, 0x42, 0xf7, 0xee, + 0xdd, 0x43, 0x62, 0x60, 0x18, 0x1f, 0x1f, 0x5f, 0x5f, 0x5f, 0x7f, 0xfd, 0xfa, 0xf5, 0xe2, 0xe2, + 0x62, 0x82, 0x83, 0x8d, 0x69, 0x08, 0x8e, 0x00, 0xa0, 0x76, 0xe3, 0xc6, 0x8d, 0xe6, 0xe6, 0x66, + 0x62, 0xc8, 0x0a, 0x60, 0xe7, 0xce, 0x9d, 0xe0, 0x2f, 0x5a, 0xb4, 0x88, 0xa0, 0x41, 0x5a, 0x56, + 0x56, 0x86, 0x82, 0x90, 0xa5, 0xd9, 0x6c, 0xce, 0xcf, 0xcf, 0x27, 0x3e, 0xe0, 0x08, 0xcd, 0x7b, + 0xfa, 0x2c, 0x5d, 0xba, 0x14, 0xa7, 0x82, 0x28, 0xd0, 0xdf, 0x41, 0x02, 0x80, 0x18, 0x73, 0x03, + 0x1b, 0x6c, 0xdb, 0xb6, 0x8d, 0xa8, 0x0e, 0x0d, 0x0d, 0x49, 0x24, 0x93, 0xaf, 0x1b, 0x76, 0xef, + 0xde, 0x4d, 0x1b, 0x73, 0x07, 0x00, 0x4d, 0xa7, 0xf3, 0xd9, 0x2b, 0x30, 0x56, 0x00, 0x2d, 0x2d, + 0x2d, 0x24, 0x30, 0x74, 0x4e, 0x65, 0x65, 0xe5, 0xf1, 0xe3, 0xc7, 0x91, 0x35, 0x1a, 0x19, 0xb4, + 0xf0, 0x33, 0x40, 0xa0, 0xf1, 0xbd, 0x6a, 0xd5, 0x2a, 0x42, 0x27, 0x26, 0x26, 0x22, 0x5b, 0xa0, + 0x07, 0x06, 0x06, 0x18, 0x69, 0x24, 0x44, 0x51, 0x51, 0x11, 0x0e, 0x06, 0x10, 0x50, 0xde, 0xc3, + 0x87, 0x0f, 0x23, 0xfd, 0x59, 0x59, 0x59, 0xdb, 0xb7, 0x6f, 0x17, 0x80, 0x19, 0xe4, 0x10, 0x33, + 0x28, 0x17, 0x2e, 0x5c, 0x20, 0xf4, 0xf0, 0xf0, 0x70, 0x4f, 0x4f, 0x0f, 0x68, 0xe6, 0x78, 0x30, + 0x3a, 0xc2, 0x08, 0x1c, 0x0f, 0xf4, 0x43, 0x77, 0x77, 0xf7, 0xae, 0x5d, 0xbb, 0x0a, 0x0a, 0x0a, + 0xc8, 0x1c, 0xab, 0xab, 0xab, 0x43, 0xa1, 0x18, 0x40, 0xb1, 0x78, 0xd2, 0x37, 0xbb, 0xdd, 0xce, + 0x70, 0x82, 0x13, 0xac, 0xc2, 0x91, 0x25, 0x69, 0xa1, 0xa4, 0xa4, 0xa4, 0xa6, 0xa6, 0x26, 0x14, + 0xb7, 0xa4, 0xa4, 0x84, 0x18, 0x9f, 0x3f, 0x7f, 0x9e, 0xd1, 0xc7, 0x7c, 0xbc, 0x7c, 0xf9, 0x32, + 0xf8, 0xd8, 0x1e, 0x34, 0x46, 0x04, 0x23, 0x22, 0x04, 0x38, 0x38, 0xca, 0xc4, 0x10, 0x17, 0x1f, + 0x3d, 0x4f, 0xf7, 0xef, 0xdf, 0x0f, 0xf0, 0x8e, 0x8e, 0x0e, 0xa2, 0x69, 0x34, 0x1a, 0x95, 0xca, + 0xc9, 0xf7, 0x59, 0xc7, 0x8e, 0x1d, 0x63, 0x40, 0xce, 0x9c, 0x39, 0x03, 0x0e, 0x5a, 0x17, 0x0e, + 0x8c, 0x8d, 0x8d, 0xb5, 0xb5, 0xb5, 0xa1, 0xa5, 0xd1, 0x57, 0x8c, 0x02, 0x21, 0xb8, 0xce, 0x00, + 0xd9, 0x9b, 0xf9, 0xc6, 0x58, 0x24, 0x36, 0x56, 0xab, 0x35, 0xe8, 0xdd, 0x84, 0xc9, 0xcb, 0xa0, + 0x63, 0x32, 0x32, 0x86, 0x0c, 0x91, 0x9d, 0x9d, 0xed, 0x72, 0xb9, 0xa0, 0x53, 0x51, 0x51, 0x01, + 0x26, 0x0e, 0xe8, 0x8e, 0x1d, 0x3b, 0x1a, 0x1b, 0x1b, 0xab, 0xab, 0xab, 0xb1, 0x44, 0xca, 0xd1, + 0x51, 0x0c, 0x02, 0xb9, 0xc5, 0x09, 0x5f, 0xa5, 0x52, 0x11, 0x10, 0x7a, 0x0b, 0xa2, 0xc9, 0x15, + 0xc0, 0x9e, 0x3d, 0x7b, 0x30, 0x0d, 0x52, 0x52, 0x52, 0x70, 0x1b, 0x1c, 0x3c, 0x78, 0x10, 0xf7, + 0x00, 0xb1, 0x41, 0x00, 0x19, 0x19, 0x19, 0x04, 0x91, 0xfe, 0xc6, 0x4c, 0x64, 0xb6, 0xc7, 0x0d, + 0x40, 0x8b, 0x08, 0x9d, 0x93, 0x93, 0x83, 0x5c, 0x42, 0x07, 0xc8, 0x18, 0x9d, 0xf4, 0x98, 0x46, + 0x41, 0x1a, 0x1a, 0x1a, 0x18, 0x73, 0x42, 0xd4, 0xd6, 0xd6, 0xe2, 0xca, 0x87, 0x2d, 0x62, 0xc3, + 0x90, 0xc5, 0xad, 0x6c, 0x32, 0x99, 0x58, 0x3a, 0x5c, 0x01, 0x5c, 0xbc, 0x78, 0x91, 0xa5, 0x1d, + 0xad, 0x25, 0x5a, 0x0b, 0x4d, 0x85, 0x1e, 0xbb, 0x73, 0xe7, 0xce, 0xa5, 0x4b, 0x97, 0xf0, 0x4d, + 0x2a, 0x13, 0x88, 0x8f, 0xac, 0xf5, 0xf7, 0xf7, 0x23, 0x65, 0x81, 0x22, 0xc2, 0x61, 0x07, 0x80, + 0x2b, 0x13, 0x8d, 0x88, 0xb1, 0x83, 0xb8, 0xab, 0xaa, 0xaa, 0x4e, 0x9c, 0x38, 0xc1, 0x61, 0x1c, + 0x0a, 0xf4, 0x65, 0xf2, 0xd9, 0x01, 0xe0, 0xe6, 0x62, 0x95, 0x3e, 0xf0, 0xdc, 0xbc, 0x4c, 0xff, + 0x9e, 0xbb, 0x97, 0xff, 0xb6, 0x27, 0x7e, 0x63, 0x42, 0xe3, 0xd7, 0x25, 0x33, 0x3d, 0xf4, 0x7a, + 0xfd, 0xc6, 0x8d, 0x1b, 0x59, 0x21, 0xfd, 0xa7, 0x96, 0xb1, 0x37, 0x73, 0xaf, 0xba, 0x1c, 0x5c, + 0x37, 0xf1, 0xab, 0xf6, 0x2d, 0xac, 0xfd, 0x63, 0x01, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0x14, 0xab, + 0xc0, 0x0b, 0x4c, 0x6e, 0x58, 0xd0, 0xb1, 0x0a, 0x84, 0x95, 0xa6, 0x17, 0xa8, 0xf4, 0x0f, 0x7b, + 0x3c, 0x70, 0xd0, 0xa5, 0xfc, 0x34, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXPlistIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x10, 0xc5, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x09, 0x90, 0x15, 0xc5, 0xf5, 0xb1, 0x17, 0xbb, 0x2c, 0xcb, 0x1e, 0x20, 0xec, 0xc2, 0x1e, + 0xb2, 0x1c, 0xe1, 0x46, 0x08, 0x8b, 0x20, 0x97, 0x68, 0x20, 0x80, 0x10, 0x90, 0x80, 0x80, 0xd1, + 0xa4, 0x62, 0x45, 0x41, 0x28, 0x83, 0x5c, 0x52, 0x42, 0x52, 0xa9, 0x04, 0x04, 0x2a, 0x12, 0x10, + 0xa5, 0x10, 0xca, 0x12, 0x15, 0x85, 0x0a, 0xa7, 0x84, 0x08, 0x28, 0xe7, 0x22, 0x87, 0x01, 0xe4, + 0x94, 0x4b, 0xc0, 0x05, 0xf6, 0x3e, 0x60, 0xd9, 0x5d, 0xf6, 0xbe, 0x26, 0xef, 0xf5, 0xff, 0xdd, + 0x3b, 0x33, 0x7f, 0x66, 0x76, 0xfe, 0xbd, 0xc8, 0xef, 0xaa, 0xff, 0xa7, 0x8f, 0x77, 0xf5, 0x7b, + 0x3d, 0xdd, 0x3d, 0xd3, 0xdd, 0x6f, 0x1a, 0x49, 0x18, 0xc0, 0x8e, 0xe0, 0x67, 0x07, 0x2c, 0x03, + 0x75, 0x1e, 0xa1, 0xd1, 0x57, 0x77, 0x18, 0xa5, 0xa2, 0x6a, 0x8b, 0xa4, 0x3c, 0x2d, 0x24, 0xa1, + 0x3a, 0xf0, 0x00, 0xff, 0xbd, 0xcd, 0xa3, 0x92, 0x6e, 0x5c, 0x40, 0x58, 0x23, 0x3f, 0x95, 0x54, + 0xa9, 0xb3, 0x14, 0xe9, 0x46, 0x94, 0x12, 0xec, 0x4c, 0x44, 0x5c, 0x50, 0xe9, 0x46, 0x8d, 0x34, + 0xf9, 0x3c, 0xff, 0xfc, 0xf3, 0x2c, 0x5f, 0xc1, 0x21, 0x35, 0x35, 0x55, 0x00, 0x37, 0xb2, 0x22, + 0xf2, 0xab, 0x28, 0xe0, 0x35, 0x9a, 0x31, 0x63, 0x06, 0x8f, 0x1a, 0x5e, 0xed, 0xae, 0xb4, 0xdd, + 0x08, 0x8a, 0x3a, 0x08, 0x39, 0x0d, 0x22, 0xce, 0x21, 0x5c, 0x28, 0xaa, 0x82, 0x7b, 0x55, 0xb5, + 0x8c, 0x7e, 0xe2, 0xa1, 0x4c, 0x08, 0xde, 0x5b, 0xa7, 0x35, 0xc1, 0x94, 0xab, 0xa4, 0xd9, 0xd7, + 0xa9, 0x3c, 0xaa, 0xb8, 0xbe, 0x7f, 0xab, 0x48, 0x91, 0x06, 0x45, 0xca, 0x9a, 0xe0, 0x0d, 0x2f, + 0x66, 0x7f, 0xba, 0x4d, 0x71, 0x43, 0xd5, 0x12, 0xb5, 0x97, 0x25, 0x4b, 0x96, 0x08, 0x45, 0xc8, + 0x23, 0xea, 0xb6, 0xc4, 0xea, 0x40, 0x99, 0x58, 0x3b, 0x39, 0x9c, 0x6e, 0x9c, 0x19, 0xce, 0x2c, + 0x30, 0x51, 0xb1, 0x5b, 0x4b, 0xba, 0xac, 0x75, 0x0a, 0xec, 0x6e, 0x4a, 0x3a, 0x74, 0x74, 0xb3, + 0x1d, 0x62, 0x60, 0xd3, 0xb5, 0xe9, 0x92, 0xc7, 0x02, 0x9b, 0xa6, 0x65, 0xcd, 0xa0, 0xd6, 0xd7, + 0xfd, 0x48, 0xa6, 0x4d, 0x31, 0x6f, 0x95, 0xf2, 0x02, 0xca, 0x9b, 0x7b, 0xe5, 0xbe, 0x3c, 0x4b, + 0xc4, 0x75, 0x19, 0x10, 0x04, 0x21, 0x3e, 0xb6, 0x2f, 0xad, 0x0e, 0x58, 0xd6, 0xef, 0xf2, 0x4c, + 0x82, 0x99, 0x70, 0x26, 0x8f, 0x27, 0x6d, 0xae, 0x86, 0x0c, 0xe4, 0xd0, 0x1d, 0x0f, 0x67, 0x48, + 0xb9, 0x15, 0x35, 0xf2, 0x2c, 0x53, 0x71, 0xef, 0xb7, 0xa2, 0xc3, 0x87, 0x0f, 0x2b, 0x4c, 0x18, + 0x15, 0x15, 0xa5, 0x48, 0xd7, 0x9b, 0x90, 0xd7, 0x93, 0x6c, 0x3e, 0x75, 0xea, 0x54, 0xba, 0xe5, + 0x44, 0xb6, 0x3c, 0x5e, 0x5c, 0x5c, 0xac, 0x59, 0x16, 0x1a, 0x1a, 0xca, 0xe0, 0x09, 0x96, 0xff, + 0x38, 0x01, 0x85, 0x8a, 0xe4, 0xf7, 0x39, 0x02, 0x80, 0xbd, 0x69, 0x24, 0x2e, 0x70, 0x6a, 0x6b, + 0x6b, 0x59, 0x5c, 0xc1, 0x80, 0x00, 0x5c, 0x1d, 0x1c, 0xba, 0xd1, 0xec, 0x11, 0xe2, 0xe1, 0xaf, + 0x81, 0xdb, 0x55, 0xf4, 0x08, 0x32, 0x38, 0x71, 0xbf, 0x02, 0x7e, 0x77, 0xee, 0xae, 0xf9, 0x86, + 0xc4, 0xef, 0x38, 0xad, 0x2b, 0xf5, 0x94, 0xd8, 0xf7, 0x2b, 0x8a, 0x28, 0x8f, 0x42, 0x19, 0xf6, + 0x7b, 0x14, 0xff, 0x26, 0xaf, 0x4c, 0x51, 0xae, 0x4e, 0xd4, 0xf5, 0x09, 0xb2, 0x92, 0x15, 0x29, + 0x45, 0x8a, 0x69, 0xb0, 0xac, 0x48, 0xf2, 0x57, 0x31, 0x7c, 0xf6, 0xbb, 0x1c, 0x5d, 0x58, 0xc2, + 0xd3, 0x64, 0x40, 0x92, 0xbd, 0x7d, 0xcd, 0x76, 0x00, 0xe1, 0xd2, 0xcb, 0x19, 0x32, 0x22, 0x08, + 0x1f, 0xb8, 0x5b, 0x59, 0x53, 0x0e, 0xa3, 0xd9, 0x8a, 0xa4, 0xd1, 0x09, 0x50, 0x8c, 0x33, 0x7f, + 0x1a, 0x1a, 0xa9, 0xf7, 0xd2, 0x0b, 0x1d, 0x93, 0x33, 0x2d, 0x30, 0x08, 0x5f, 0x39, 0x2a, 0x5e, + 0x1b, 0x8c, 0x73, 0xd2, 0xbb, 0x06, 0x59, 0x25, 0xd3, 0x92, 0xf0, 0x54, 0x41, 0x85, 0x1e, 0x9a, + 0xc8, 0xd7, 0xac, 0x81, 0x5c, 0x94, 0x0a, 0xab, 0x64, 0x55, 0xb5, 0xb6, 0x75, 0x49, 0x0a, 0x0f, + 0x92, 0x83, 0x6a, 0xc6, 0x7d, 0x7d, 0x91, 0xa6, 0x5a, 0xe4, 0x99, 0x86, 0x36, 0xa0, 0xf1, 0x38, + 0x27, 0x27, 0x47, 0x0e, 0x0f, 0x9f, 0x7d, 0xf6, 0x99, 0x22, 0x5d, 0x6f, 0x42, 0x98, 0x5b, 0x27, + 0x32, 0x62, 0xc4, 0x08, 0x9d, 0x12, 0xdb, 0x6c, 0x64, 0x66, 0x93, 0x29, 0x6a, 0xb0, 0x66, 0xcd, + 0x1a, 0x36, 0x86, 0x2e, 0x5a, 0xb4, 0x48, 0x8c, 0xab, 0x6a, 0xe9, 0xc6, 0x8c, 0x19, 0x03, 0x11, + 0x11, 0x11, 0x22, 0x9b, 0xc6, 0xec, 0xb2, 0xb2, 0x32, 0xa0, 0xfc, 0xfd, 0xfb, 0xf7, 0xb3, 0x7c, + 0xca, 0x3b, 0x73, 0xe6, 0x8c, 0x80, 0x51, 0xb0, 0x1c, 0x34, 0x68, 0x10, 0x93, 0x00, 0x4b, 0x85, + 0x24, 0xea, 0x1a, 0x84, 0x87, 0x87, 0x8b, 0xb2, 0x21, 0x43, 0x86, 0xb0, 0x59, 0x84, 0xbf, 0xbf, + 0xbf, 0x0d, 0x1e, 0x07, 0xaa, 0xa3, 0x84, 0x39, 0x61, 0x61, 0x61, 0x0c, 0xe1, 0xe2, 0xc5, 0x8b, + 0x02, 0x81, 0x98, 0x71, 0x86, 0x3c, 0x2e, 0x4f, 0x07, 0x05, 0x05, 0x49, 0xbd, 0x7b, 0xf7, 0x66, + 0xf0, 0xf1, 0xf1, 0xf1, 0x0c, 0x96, 0x97, 0x53, 0xa6, 0x60, 0x30, 0x6d, 0xda, 0x34, 0xa9, 0x7d, + 0xfb, 0xf6, 0x0c, 0xd0, 0x95, 0x7f, 0xbe, 0x1b, 0x0d, 0xd5, 0x6d, 0x1c, 0xdc, 0xae, 0x22, 0x63, + 0xf6, 0xce, 0x97, 0x8a, 0xfb, 0xcc, 0x79, 0x52, 0xde, 0xa1, 0xe0, 0xab, 0x80, 0x77, 0xf4, 0x5e, + 0xc7, 0xd5, 0x63, 0x16, 0xb8, 0x55, 0x56, 0x5d, 0xc7, 0xd5, 0x85, 0x31, 0xa7, 0x2b, 0x30, 0x05, + 0xe7, 0xc0, 0xf5, 0xbd, 0xb6, 0x08, 0xd8, 0x9d, 0x0a, 0x89, 0x07, 0x33, 0x14, 0x62, 0x13, 0xce, + 0xd3, 0xdf, 0x29, 0x47, 0x62, 0x05, 0x80, 0xc9, 0x84, 0x43, 0xbd, 0x50, 0x02, 0x0a, 0x93, 0x6a, + 0xd5, 0xe8, 0xea, 0xee, 0x51, 0x30, 0x23, 0x21, 0x4c, 0x97, 0x5d, 0xdb, 0x43, 0x19, 0x70, 0xbb, + 0xb4, 0x1a, 0x8a, 0x46, 0xc6, 0x43, 0x98, 0xbf, 0xf2, 0xad, 0xec, 0x97, 0xd9, 0x65, 0x30, 0xfe, + 0xfb, 0x5c, 0x86, 0x1b, 0x11, 0xe8, 0x07, 0xf9, 0xbf, 0x8e, 0x03, 0x25, 0x84, 0x2e, 0x59, 0x51, + 0x60, 0xba, 0x02, 0xfe, 0xa8, 0xc5, 0x5a, 0x1c, 0xfa, 0x28, 0x64, 0x0e, 0x8b, 0x85, 0x98, 0xc6, + 0xfe, 0x82, 0x88, 0x5e, 0x64, 0xf2, 0xd9, 0xbb, 0xb0, 0x39, 0xb3, 0x04, 0x8e, 0x0d, 0x88, 0x86, + 0x01, 0x91, 0x8d, 0xf5, 0xc0, 0x58, 0xfe, 0x83, 0x1a, 0x09, 0xa2, 0xbe, 0x49, 0x83, 0x6a, 0xeb, + 0xdc, 0x94, 0x66, 0xde, 0x66, 0x82, 0xe9, 0x0a, 0x10, 0xb1, 0xff, 0x15, 0x54, 0x42, 0xff, 0x63, + 0x59, 0x82, 0xee, 0xc5, 0x21, 0xad, 0xa1, 0x7b, 0x58, 0xa0, 0x48, 0xcb, 0x23, 0x1f, 0xdc, 0x7e, + 0x00, 0x7f, 0xbe, 0x94, 0x0f, 0xcb, 0x3a, 0x47, 0xc2, 0xfc, 0x76, 0xcd, 0xe4, 0x45, 0x8a, 0x78, + 0x46, 0x79, 0x0d, 0xc4, 0x1e, 0x48, 0x17, 0x79, 0x5f, 0x26, 0xb5, 0x84, 0x71, 0xad, 0x42, 0x44, + 0xba, 0xbe, 0x88, 0x5d, 0x15, 0x50, 0x13, 0x8b, 0xc7, 0xa6, 0x94, 0x66, 0x6d, 0x4a, 0x47, 0x9e, + 0x8a, 0x86, 0xc1, 0x51, 0x16, 0x2d, 0x9f, 0x29, 0xac, 0x84, 0x3e, 0x47, 0xb3, 0x60, 0x4c, 0xab, + 0x26, 0xb0, 0x2b, 0xe9, 0x31, 0x35, 0x1a, 0x64, 0x56, 0xd4, 0x40, 0x9b, 0xfd, 0x16, 0xa1, 0xc3, + 0xb1, 0xe9, 0xdc, 0x1d, 0x1e, 0x07, 0x01, 0xf6, 0xb6, 0x1d, 0x2b, 0x55, 0xa7, 0x2a, 0x60, 0x23, + 0x19, 0x66, 0x94, 0x62, 0x13, 0x08, 0xdd, 0x93, 0x0a, 0xd1, 0xc1, 0xfe, 0x90, 0xf5, 0xab, 0x58, + 0x2d, 0x10, 0x97, 0xe6, 0xb9, 0xbc, 0x02, 0x24, 0xdd, 0xd6, 0xac, 0x52, 0x98, 0x18, 0xd3, 0xc4, + 0xa5, 0x82, 0xea, 0x11, 0x73, 0x4b, 0x05, 0xf4, 0x98, 0xb9, 0x23, 0xdf, 0xe9, 0x71, 0xc0, 0x1d, + 0x42, 0xd9, 0x43, 0xf3, 0xd1, 0xad, 0xc0, 0xac, 0x59, 0xb3, 0x2c, 0x6f, 0x5a, 0xf1, 0x29, 0x6f, + 0xe4, 0xc8, 0x91, 0xba, 0x4a, 0xa3, 0xa7, 0xc0, 0xd7, 0x5e, 0x7b, 0x4d, 0xb7, 0xdc, 0xa8, 0x20, + 0x24, 0x24, 0x04, 0xbe, 0xf8, 0xe2, 0x0b, 0x23, 0x10, 0xd9, 0xe3, 0xa3, 0xec, 0x41, 0x2c, 0x36, + 0x36, 0x96, 0x3d, 0xbc, 0xe1, 0xa3, 0xa8, 0x78, 0x88, 0xa3, 0x07, 0x42, 0x7c, 0x3d, 0x2c, 0x83, + 0xb2, 0x44, 0x91, 0xba, 0xa4, 0x7e, 0xf2, 0xa4, 0x92, 0x0b, 0x17, 0x2e, 0x08, 0xdc, 0xe8, 0xe8, + 0x68, 0x1b, 0xbc, 0x94, 0x94, 0x14, 0x51, 0x4e, 0x34, 0xe8, 0xc9, 0x14, 0xd7, 0x49, 0x19, 0x5c, + 0x75, 0x75, 0xb5, 0xb4, 0x72, 0xe5, 0x4a, 0x56, 0xde, 0xad, 0x5b, 0x37, 0x69, 0xc5, 0x8a, 0x15, + 0xd2, 0xaa, 0x55, 0xab, 0x6c, 0x68, 0x50, 0x86, 0x78, 0xa8, 0x54, 0x97, 0x12, 0x51, 0xf9, 0x43, + 0x26, 0x2d, 0xa1, 0x52, 0x5e, 0x5e, 0x9e, 0x72, 0x71, 0x43, 0xaf, 0x02, 0x9c, 0x1e, 0x95, 0xcb, + 0x1f, 0xa5, 0xe5, 0xf9, 0x54, 0x16, 0x10, 0x10, 0x20, 0x4d, 0x9e, 0x3c, 0x59, 0x3a, 0x76, 0xec, + 0x18, 0x2f, 0x12, 0x57, 0x2a, 0x1f, 0x37, 0x6e, 0x9c, 0x48, 0x6b, 0x45, 0x0c, 0x2b, 0x40, 0x04, + 0x6e, 0xdf, 0xbe, 0x2d, 0x95, 0x96, 0x96, 0x0a, 0x6d, 0xa9, 0x89, 0x10, 0x8c, 0x96, 0x05, 0x38, + 0x1c, 0x95, 0xeb, 0x55, 0x60, 0xeb, 0xd6, 0xad, 0x1c, 0x4c, 0xc2, 0x17, 0x12, 0x8c, 0x87, 0xc8, + 0xc0, 0x08, 0xe1, 0x92, 0xe5, 0x29, 0x5c, 0xbb, 0x76, 0x4d, 0x4a, 0x4a, 0x4a, 0x62, 0x71, 0xf9, + 0x9f, 0x61, 0x05, 0x5e, 0x7f, 0xfd, 0x75, 0x39, 0xac, 0x4b, 0xe3, 0x07, 0x0f, 0x1e, 0x64, 0xf4, + 0xf0, 0xfd, 0x90, 0xb4, 0x6b, 0xd7, 0x2e, 0xa9, 0xa8, 0x48, 0xb9, 0xcc, 0xcb, 0x99, 0x51, 0x73, + 0x22, 0xeb, 0x94, 0x94, 0x94, 0xf0, 0x2c, 0xc5, 0x55, 0x73, 0x1c, 0x90, 0x2f, 0xa3, 0xa0, 0x16, + 0xa8, 0x92, 0x74, 0x69, 0x90, 0x21, 0x40, 0x4b, 0xaa, 0x86, 0x2c, 0xb0, 0x5a, 0xde, 0x47, 0x77, + 0x1c, 0x50, 0x6b, 0xc2, 0x5b, 0x69, 0xcd, 0x7b, 0xc0, 0x5b, 0xc2, 0x38, 0xc2, 0xd7, 0xd7, 0x84, + 0x1c, 0xd1, 0x9a, 0x2b, 0x71, 0x7c, 0x16, 0x70, 0xa5, 0x36, 0x1d, 0xa1, 0xe5, 0xb3, 0x80, 0x23, + 0x5a, 0x73, 0x25, 0x8e, 0xcf, 0x02, 0xae, 0xd4, 0xa6, 0x23, 0xb4, 0x3c, 0x62, 0x81, 0xb3, 0x45, + 0x95, 0x8e, 0xc8, 0x66, 0x0a, 0xc7, 0x23, 0x23, 0x31, 0x7f, 0xf9, 0x6b, 0xf6, 0x75, 0xa1, 0x29, + 0xc9, 0xad, 0x40, 0x4e, 0x59, 0x20, 0xbb, 0x02, 0x77, 0x20, 0xe1, 0x5b, 0xe6, 0x85, 0x3f, 0x16, + 0xe8, 0xf2, 0xbc, 0x5d, 0x56, 0xc3, 0xca, 0x06, 0x46, 0x05, 0x0b, 0x98, 0x4d, 0x99, 0xa5, 0x0c, + 0xef, 0x6a, 0xb1, 0xf3, 0xaf, 0xdc, 0x1d, 0xae, 0x40, 0xff, 0xe3, 0xd9, 0x10, 0xb3, 0x3f, 0x8d, + 0x09, 0x95, 0x8b, 0x15, 0xd1, 0x0b, 0x3d, 0xbf, 0xcd, 0x64, 0x45, 0xc9, 0x4f, 0xb5, 0x12, 0x20, + 0x3f, 0x16, 0x57, 0xb1, 0x78, 0x97, 0xe4, 0x0c, 0xe8, 0x70, 0xd8, 0x52, 0x2e, 0x0a, 0xed, 0x8c, + 0xd8, 0xdd, 0x84, 0x76, 0xe5, 0x94, 0xc1, 0xd8, 0xd3, 0x75, 0xaf, 0xc4, 0xef, 0xe1, 0x2b, 0x71, + 0x3d, 0x2d, 0x90, 0xee, 0x03, 0xd0, 0x42, 0xcd, 0xf0, 0xfd, 0x67, 0x21, 0xc2, 0xa9, 0x83, 0xfc, + 0x35, 0xfd, 0x87, 0x3d, 0x9a, 0xc3, 0xb4, 0xf8, 0xa6, 0x6a, 0x90, 0x7a, 0xd3, 0xa6, 0x2b, 0x40, + 0xc2, 0x44, 0x7c, 0x9d, 0x86, 0x9b, 0x4d, 0x2c, 0xda, 0x3e, 0x8a, 0xaf, 0xcc, 0x07, 0xd6, 0xf3, + 0xca, 0x7c, 0xc0, 0x89, 0x1c, 0x38, 0x91, 0x5f, 0x0e, 0xb7, 0x9e, 0x8d, 0x85, 0xc7, 0x43, 0xb4, + 0x5f, 0xc7, 0x5f, 0x2b, 0xa9, 0x86, 0xce, 0x87, 0x2d, 0x8b, 0x1f, 0x01, 0x7e, 0x8d, 0xa0, 0x00, + 0x2b, 0x1a, 0xaa, 0x5a, 0x47, 0x30, 0xaa, 0x85, 0x9e, 0xf2, 0x14, 0x38, 0x7f, 0xc1, 0x36, 0x4e, + 0x9a, 0x24, 0xe1, 0xa7, 0xb4, 0x09, 0x05, 0xba, 0x19, 0xeb, 0x13, 0x9e, 0x08, 0x90, 0xf0, 0x14, + 0xf4, 0x84, 0xa7, 0xb2, 0x4e, 0xa1, 0x01, 0x8c, 0xde, 0x1c, 0x7c, 0x05, 0x4f, 0x6b, 0x03, 0x4d, + 0x71, 0xdf, 0xf4, 0x84, 0x33, 0xe6, 0x77, 0x3e, 0x99, 0xaa, 0x40, 0x6c, 0x48, 0xdd, 0x93, 0xe7, + 0x8e, 0xec, 0x52, 0x28, 0xc1, 0xc5, 0x88, 0xfa, 0xc2, 0x5b, 0x57, 0x2d, 0x37, 0xf6, 0xa6, 0xde, + 0xb6, 0xaf, 0xd7, 0xd5, 0xb8, 0x64, 0xdd, 0x8f, 0x53, 0x8b, 0x45, 0x76, 0x62, 0x93, 0x3a, 0x7e, + 0x22, 0x53, 0x27, 0x62, 0xba, 0x09, 0x11, 0x7e, 0xd2, 0xb1, 0x6c, 0xf8, 0xbe, 0xa0, 0x82, 0x91, + 0x1a, 0xd2, 0x3c, 0x18, 0x92, 0xfb, 0xd7, 0xdd, 0x98, 0x6a, 0xfa, 0x66, 0xbb, 0x4e, 0x5a, 0x63, + 0xfb, 0x77, 0x46, 0x09, 0x43, 0x6f, 0xdb, 0x24, 0x10, 0x52, 0x9e, 0x69, 0xad, 0x26, 0x65, 0x98, + 0x36, 0x65, 0x01, 0x4e, 0xe1, 0xf4, 0xc0, 0x68, 0xb8, 0x3f, 0x22, 0x1e, 0xfc, 0xf1, 0x75, 0xe1, + 0x91, 0x7b, 0xe5, 0xac, 0x2b, 0xfc, 0x38, 0xad, 0x4e, 0x73, 0x1c, 0x6e, 0x27, 0xde, 0xe8, 0x14, + 0x66, 0x3c, 0xae, 0xbf, 0x32, 0xb3, 0x27, 0xd7, 0x82, 0xcf, 0x85, 0xbf, 0x83, 0x6b, 0x09, 0xf6, + 0x0a, 0x4f, 0x3c, 0xec, 0xb2, 0x00, 0x21, 0xf0, 0xb0, 0x05, 0xd7, 0x00, 0x26, 0x9d, 0xc9, 0x63, + 0x49, 0x7a, 0x0d, 0x53, 0xfb, 0x5c, 0xdd, 0xce, 0xb0, 0xfa, 0xb4, 0x1f, 0x82, 0xed, 0xbc, 0xdc, + 0xda, 0x0c, 0xdf, 0xeb, 0x1a, 0x05, 0x33, 0xdb, 0xea, 0x2f, 0x12, 0x72, 0x7e, 0xba, 0x57, 0xc5, + 0x5b, 0x22, 0x07, 0x12, 0xbf, 0x39, 0x9d, 0x2b, 0x5d, 0x2d, 0xae, 0x3b, 0xa6, 0x92, 0x5e, 0x86, + 0x7b, 0xe2, 0x70, 0x2f, 0xdd, 0x13, 0xdf, 0xda, 0x6e, 0xf4, 0xe6, 0xe4, 0x0b, 0x70, 0x97, 0x59, + 0xdf, 0x63, 0x59, 0x3c, 0xe9, 0xd4, 0xd5, 0x61, 0x0b, 0xe8, 0x69, 0xa4, 0xf9, 0xbe, 0x74, 0xc8, + 0xaf, 0xac, 0x81, 0x8a, 0xe7, 0x12, 0x20, 0xc8, 0xc1, 0x75, 0x2f, 0x3d, 0xda, 0x5a, 0xf9, 0x76, + 0xdd, 0x03, 0x5a, 0x04, 0xe4, 0x79, 0xd4, 0x37, 0x91, 0xf0, 0xc1, 0xd8, 0x8f, 0x7b, 0x42, 0x78, + 0xe2, 0xed, 0x72, 0x0b, 0xd0, 0x30, 0x77, 0x13, 0x07, 0xa7, 0x8e, 0xd8, 0xbf, 0x7b, 0x22, 0xb8, + 0xbc, 0x02, 0x9e, 0x10, 0x5a, 0xce, 0xc3, 0xa5, 0x4d, 0x48, 0x4e, 0xd8, 0x53, 0x71, 0x5f, 0x05, + 0x3c, 0xa5, 0x69, 0x3d, 0x3e, 0x3e, 0x0b, 0xe8, 0x69, 0xc6, 0x53, 0xf9, 0x0e, 0x5b, 0x00, 0xd7, + 0xce, 0x80, 0xb6, 0x0f, 0xab, 0x8f, 0xf4, 0xc8, 0x05, 0xdf, 0xb3, 0x67, 0x0f, 0xd0, 0x52, 0xa9, + 0x5b, 0x83, 0xa3, 0xe3, 0x38, 0x0a, 0xc5, 0x16, 0xe1, 0xe8, 0xaa, 0x17, 0x66, 0xce, 0x9c, 0xc9, + 0x60, 0xf4, 0xca, 0x8d, 0xf2, 0x93, 0x93, 0x93, 0xd9, 0x0a, 0xa6, 0x11, 0x0c, 0x95, 0xe9, 0x73, + 0xaf, 0x0f, 0x13, 0xcb, 0x67, 0xcf, 0x9e, 0xed, 0xb0, 0x80, 0xf5, 0x91, 0xc7, 0x85, 0x74, 0x53, + 0xb4, 0x6d, 0x9a, 0x10, 0xae, 0x0a, 0x8a, 0x15, 0xf8, 0xe1, 0xc3, 0x87, 0x8b, 0x38, 0xed, 0xdf, + 0xb6, 0x27, 0x50, 0xd3, 0xa1, 0x59, 0xaa, 0x7a, 0xc1, 0x90, 0xd3, 0x18, 0x3a, 0x74, 0xa8, 0x28, + 0x57, 0xc3, 0x1d, 0x38, 0x70, 0x00, 0xce, 0x9e, 0x3d, 0xcb, 0x40, 0x71, 0xc1, 0x1b, 0xe8, 0x77, + 0xf4, 0xe8, 0x51, 0x8e, 0xaa, 0xbc, 0x6a, 0x69, 0x82, 0x16, 0xb8, 0x11, 0x4a, 0xf2, 0xf3, 0xf3, + 0x93, 0x36, 0x6c, 0xd8, 0x20, 0xe1, 0x51, 0x35, 0x96, 0xc6, 0xed, 0xf1, 0x0a, 0x70, 0x23, 0x0b, + 0x2c, 0x5c, 0xb8, 0x50, 0xea, 0xd3, 0xa7, 0x8f, 0xa6, 0x16, 0x51, 0x18, 0x96, 0xbf, 0x7b, 0xf7, + 0x6e, 0x46, 0x6f, 0xe9, 0xd2, 0xa5, 0x0a, 0x38, 0xe2, 0xad, 0xf5, 0x53, 0x30, 0xb7, 0x26, 0x34, + 0x9b, 0xd0, 0x9c, 0x39, 0x73, 0x14, 0x04, 0x09, 0x96, 0x13, 0x94, 0x13, 0x31, 0xaa, 0x00, 0xc1, + 0xd1, 0xfa, 0x2f, 0xe1, 0xa9, 0xc3, 0xf9, 0xf3, 0xe7, 0x05, 0x3d, 0xda, 0x9b, 0xbe, 0x7c, 0xf9, + 0x72, 0x89, 0xd6, 0x83, 0xe5, 0xc1, 0xe1, 0x26, 0x84, 0x0c, 0xdd, 0x1e, 0x7a, 0xf6, 0xec, 0x09, + 0xdb, 0xb6, 0x6d, 0x83, 0xe0, 0xe0, 0x60, 0xd6, 0x54, 0xe6, 0xce, 0x9d, 0x0b, 0xb8, 0xe5, 0x00, + 0x4e, 0x9c, 0x38, 0x61, 0x37, 0x6f, 0x9b, 0x7b, 0x40, 0x4e, 0xa1, 0x5f, 0xbf, 0x7e, 0x2c, 0x89, + 0x9b, 0xf3, 0xd9, 0x75, 0xfa, 0xf4, 0xe9, 0xf2, 0x62, 0x87, 0xe3, 0xa7, 0x4f, 0x9f, 0x86, 0x97, + 0x5f, 0x7e, 0x99, 0x9d, 0x6f, 0x40, 0xad, 0x43, 0x46, 0x86, 0xe5, 0xb5, 0x8a, 0xfc, 0x04, 0x07, + 0x6e, 0x31, 0x60, 0xf4, 0xef, 0xdc, 0xb9, 0xc3, 0xae, 0xef, 0xbe, 0xfb, 0x2e, 0xbc, 0xf2, 0xca, + 0x2b, 0xb6, 0x3c, 0xe5, 0x66, 0xe3, 0x71, 0xde, 0x84, 0x10, 0x5a, 0x98, 0xba, 0x7b, 0xf7, 0xee, + 0xbc, 0x98, 0xed, 0x7d, 0x90, 0x97, 0xf1, 0x38, 0x1e, 0xc0, 0x67, 0x30, 0x78, 0xf3, 0x0b, 0x3c, + 0x5e, 0x46, 0xd7, 0xcf, 0x3f, 0xff, 0x9c, 0x95, 0xd3, 0x7d, 0xc5, 0xf3, 0x69, 0xb3, 0x07, 0x8f, + 0xcb, 0xb7, 0x13, 0x94, 0x97, 0x97, 0x8b, 0x7c, 0x5e, 0x3e, 0x6a, 0xd4, 0x28, 0x21, 0x03, 0x8f, + 0xd8, 0x36, 0x50, 0x2c, 0xe1, 0x15, 0xe0, 0x40, 0xae, 0xbe, 0xd6, 0xd4, 0xd4, 0x48, 0xd7, 0xaf, + 0x5f, 0x97, 0xd2, 0xd2, 0xd2, 0xa4, 0x1d, 0x3b, 0x76, 0x48, 0xe7, 0xce, 0x9d, 0xd3, 0x65, 0x41, + 0x70, 0xf4, 0xd3, 0x0b, 0x36, 0x15, 0xa0, 0xcd, 0x17, 0x9d, 0x3a, 0x75, 0x62, 0xb5, 0xa7, 0x6d, + 0x30, 0xc7, 0x8f, 0x1f, 0xd7, 0xc3, 0x6d, 0x10, 0xf9, 0x36, 0x15, 0x18, 0x36, 0x6c, 0x98, 0xc2, + 0x74, 0x7c, 0x13, 0x52, 0x83, 0x90, 0x56, 0x43, 0x08, 0xdf, 0x13, 0x19, 0xde, 0x60, 0x5e, 0x0d, + 0x86, 0xdd, 0xa8, 0x57, 0x25, 0x33, 0xc9, 0xdc, 0x57, 0x01, 0x93, 0x8a, 0x72, 0x1b, 0xd8, 0x43, + 0x6f, 0x81, 0x87, 0xbe, 0x17, 0x72, 0x9b, 0x69, 0x3d, 0x44, 0xf8, 0xa1, 0x6f, 0x41, 0x1e, 0xd2, + 0x93, 0xdb, 0xd8, 0xf8, 0x0c, 0xe0, 0x36, 0xd5, 0x9a, 0x23, 0xec, 0x33, 0x80, 0x39, 0x3d, 0xb9, + 0x0d, 0xca, 0x67, 0x00, 0xb7, 0xa9, 0xd6, 0x1c, 0x61, 0x9f, 0x01, 0xcc, 0xe9, 0xc9, 0x6d, 0x50, + 0x3e, 0x03, 0xb8, 0x4d, 0xb5, 0xe6, 0x08, 0xfb, 0x0c, 0x60, 0x4e, 0x4f, 0x6e, 0x83, 0xf2, 0x19, + 0xc0, 0x6d, 0xaa, 0x35, 0x47, 0xf8, 0x67, 0x65, 0x80, 0x27, 0x71, 0x03, 0x25, 0xf9, 0x1d, 0x98, + 0x88, 0x27, 0xe0, 0x4f, 0xe2, 0xa1, 0xf3, 0x87, 0x21, 0x34, 0x08, 0x03, 0xec, 0xbb, 0x5b, 0x0e, + 0x23, 0x4f, 0xe5, 0x42, 0xb9, 0xfe, 0xa6, 0xd3, 0x7a, 0x75, 0x49, 0x4a, 0x3f, 0x85, 0x0e, 0xd2, + 0x6a, 0xf0, 0x25, 0xfd, 0x36, 0x74, 0x3f, 0x80, 0xdb, 0x1e, 0x35, 0xc3, 0x4b, 0xe7, 0xef, 0xc1, + 0xa7, 0xe9, 0x96, 0x8d, 0x6d, 0x9a, 0x00, 0x1e, 0xce, 0xf4, 0xca, 0xab, 0x08, 0xd2, 0xf3, 0xba, + 0x3b, 0xc5, 0x80, 0x6e, 0xd4, 0xa0, 0xd0, 0xea, 0x9f, 0x96, 0xea, 0x1d, 0x88, 0x5a, 0x3b, 0x3b, + 0x28, 0x06, 0xba, 0xe9, 0xb8, 0x47, 0xd0, 0xd3, 0xcd, 0xec, 0x2b, 0xf7, 0x61, 0x65, 0x4a, 0x91, + 0x28, 0xde, 0xde, 0xa7, 0x25, 0x8c, 0x8f, 0x56, 0x2e, 0x4a, 0xe7, 0x23, 0x9f, 0xce, 0xe8, 0x31, + 0x0d, 0xbd, 0x6a, 0x0a, 0xb8, 0x20, 0xe4, 0xf7, 0x56, 0xbb, 0x70, 0x58, 0xd8, 0x21, 0x1c, 0x82, + 0xbd, 0xd4, 0x14, 0x3d, 0x66, 0x00, 0xda, 0x5f, 0xfa, 0xb7, 0xeb, 0x05, 0xf0, 0x5e, 0xca, 0x03, + 0xd6, 0x4a, 0x85, 0x16, 0x30, 0xd2, 0x3b, 0xbc, 0x31, 0xac, 0x41, 0xaf, 0x20, 0x4f, 0x46, 0x04, + 0xc9, 0xb3, 0x4d, 0xc5, 0x57, 0xde, 0x7a, 0x00, 0xb3, 0x2f, 0xe7, 0x0b, 0xd8, 0x95, 0xb8, 0x71, + 0xf0, 0x4d, 0x83, 0x8d, 0x83, 0x3f, 0xa1, 0x67, 0x91, 0x37, 0xd0, 0xc7, 0xc5, 0xde, 0x5c, 0xcb, + 0x6e, 0x4a, 0x81, 0x88, 0x11, 0xda, 0xc8, 0x4b, 0xf8, 0xad, 0x82, 0x3c, 0x67, 0x0d, 0xb7, 0x1a, + 0x20, 0x1d, 0x1d, 0x75, 0x50, 0x65, 0x77, 0xe2, 0x06, 0x5f, 0x79, 0xa0, 0xb5, 0xec, 0xdf, 0xc7, + 0x86, 0xc2, 0x3f, 0xd1, 0xd1, 0x47, 0x4b, 0x27, 0x2a, 0xbb, 0x1d, 0xe9, 0x4e, 0xf8, 0xde, 0xb2, + 0xdb, 0x93, 0xe8, 0xcf, 0x4a, 0x6c, 0x06, 0x2b, 0xba, 0x44, 0xca, 0x59, 0x19, 0xc6, 0xc9, 0xed, + 0xc5, 0xa2, 0xeb, 0x85, 0xf0, 0x2f, 0xbc, 0x7b, 0xd4, 0x1e, 0xfa, 0xfa, 0xe1, 0x56, 0xf0, 0xb5, + 0xdd, 0x9b, 0x43, 0xcf, 0x66, 0xda, 0xce, 0x4a, 0x0c, 0x09, 0xdb, 0x51, 0xe8, 0x72, 0x03, 0x9c, + 0x46, 0x47, 0x24, 0x53, 0x2f, 0xde, 0x83, 0x73, 0x78, 0x95, 0x87, 0xb0, 0x00, 0x3f, 0xf8, 0xfb, + 0x2f, 0x22, 0xe0, 0x8d, 0xc7, 0xc3, 0x1c, 0x76, 0x3c, 0x22, 0xa7, 0x77, 0x0a, 0x07, 0xd9, 0x27, + 0x65, 0x9e, 0x5d, 0x7e, 0x1b, 0x13, 0x0a, 0xdb, 0x7e, 0xd9, 0x42, 0x0e, 0x62, 0x77, 0x7c, 0x33, + 0x6e, 0xdf, 0x9d, 0x7d, 0xf9, 0x3e, 0x64, 0x96, 0x2b, 0x8f, 0x62, 0xc4, 0xe3, 0x6e, 0x71, 0xf2, + 0xdb, 0x33, 0xa6, 0xa5, 0xb2, 0x5b, 0xb3, 0x9b, 0x81, 0x06, 0x82, 0x4b, 0x0d, 0xd0, 0x0b, 0x3d, + 0xc0, 0x9c, 0x57, 0x29, 0xbe, 0x4b, 0x58, 0x10, 0xfc, 0x07, 0x3d, 0xc2, 0xb4, 0xb7, 0x63, 0x0b, + 0xba, 0x86, 0x9c, 0x8a, 0xac, 0x34, 0xbc, 0xb3, 0x12, 0xd1, 0x51, 0x11, 0xf7, 0xdd, 0xd3, 0x17, + 0x5b, 0xeb, 0x49, 0x3c, 0xc0, 0xe0, 0xaa, 0x90, 0x57, 0x59, 0x0b, 0x2f, 0xe1, 0x2e, 0xf4, 0x7d, + 0x79, 0xca, 0x6e, 0x8a, 0xc6, 0x28, 0x5d, 0x6f, 0x9b, 0x0e, 0x32, 0x77, 0xa9, 0x01, 0x48, 0x86, + 0x1c, 0x14, 0x7e, 0xfe, 0xd5, 0xfb, 0xb0, 0x01, 0x67, 0x1a, 0xb8, 0x0a, 0xaa, 0x10, 0x8b, 0xce, + 0x1d, 0x2c, 0xc7, 0x2e, 0x62, 0x92, 0x13, 0x8e, 0x62, 0x8a, 0x71, 0x2c, 0x89, 0x43, 0xff, 0x43, + 0xb8, 0xdf, 0x9a, 0xd1, 0x8e, 0x43, 0x9a, 0x29, 0xcf, 0xb4, 0x71, 0xfa, 0xae, 0x3a, 0x92, 0x5f, + 0xc1, 0xba, 0xcb, 0x1f, 0x34, 0x8e, 0x88, 0x0d, 0x7f, 0x2c, 0x04, 0x56, 0x75, 0x8b, 0x62, 0x87, + 0x33, 0x14, 0x15, 0x72, 0x41, 0xc2, 0xe5, 0x06, 0x90, 0xcb, 0x44, 0x2a, 0x5a, 0x8f, 0xc7, 0x09, + 0x16, 0x5c, 0x2b, 0x80, 0x3c, 0xd9, 0xec, 0x83, 0x60, 0xe8, 0xc8, 0xc1, 0x74, 0xec, 0x8e, 0xfe, + 0x81, 0xdd, 0x52, 0x84, 0x49, 0x67, 0x48, 0x44, 0xaf, 0x23, 0x1e, 0x72, 0xc2, 0x6f, 0x38, 0x10, + 0x09, 0x08, 0xc5, 0x6e, 0x2d, 0xed, 0xd9, 0x36, 0x10, 0x89, 0x67, 0x8a, 0xec, 0x0d, 0x95, 0xd8, + 0x36, 0xd0, 0x63, 0x2e, 0x2c, 0xbe, 0x51, 0x08, 0x25, 0xd6, 0x63, 0x40, 0x9c, 0x46, 0x88, 0xbf, + 0x1f, 0xbc, 0xdd, 0xbe, 0x19, 0xcc, 0xc3, 0x19, 0x92, 0xbb, 0x67, 0x47, 0x6e, 0x35, 0x00, 0xaf, + 0x10, 0xbf, 0x5e, 0x7a, 0x50, 0x05, 0x6f, 0xe0, 0x8c, 0x25, 0x19, 0xe7, 0xfd, 0xea, 0x90, 0x14, + 0xd1, 0x18, 0x3e, 0xc0, 0x56, 0x66, 0x34, 0x13, 0x1a, 0x82, 0x4e, 0xdc, 0xbe, 0xc5, 0x73, 0x22, + 0x14, 0x68, 0x20, 0xff, 0xf1, 0xe9, 0xd6, 0xd0, 0xc1, 0x8e, 0x2d, 0xe5, 0x34, 0x03, 0x7a, 0x13, + 0xfb, 0xf8, 0xaf, 0x72, 0x94, 0x93, 0x02, 0xa2, 0xd7, 0x15, 0xbb, 0xca, 0xf7, 0xbb, 0x45, 0xc2, + 0x33, 0x78, 0x90, 0xc6, 0x93, 0xc1, 0xa3, 0x06, 0x90, 0x57, 0x8c, 0x66, 0x20, 0x4b, 0xb0, 0xf5, + 0x2d, 0xc7, 0x56, 0x88, 0x0e, 0xef, 0x59, 0xd1, 0x20, 0xac, 0xfc, 0x11, 0x3c, 0x45, 0xa4, 0xf5, + 0x0c, 0x45, 0x0f, 0x50, 0x1b, 0xd3, 0xeb, 0x0e, 0xe7, 0x1c, 0xea, 0x1f, 0x0d, 0x43, 0x9b, 0x1b, + 0xfb, 0x79, 0x93, 0xf3, 0xa3, 0xf8, 0xb4, 0x1f, 0xf2, 0xf1, 0xf9, 0xe3, 0x01, 0xcb, 0x26, 0x03, + 0xfe, 0x31, 0x2e, 0x14, 0x96, 0x76, 0x72, 0x6e, 0x26, 0xa6, 0xe6, 0x61, 0x6f, 0xda, 0x6b, 0x06, + 0x50, 0x0b, 0x9a, 0x82, 0xad, 0x53, 0xef, 0xac, 0xd8, 0xdb, 0xd8, 0x85, 0x2d, 0xbb, 0x59, 0x28, + 0x50, 0x3e, 0x7d, 0xa2, 0x05, 0xfc, 0x01, 0xa7, 0xb1, 0x8e, 0x04, 0x3a, 0x88, 0x9a, 0x80, 0x27, + 0x08, 0xb5, 0x8c, 0xec, 0x08, 0x3d, 0x67, 0x71, 0x1a, 0x8c, 0x01, 0xf4, 0x2a, 0xf2, 0x21, 0x3e, + 0x31, 0x4f, 0xff, 0xe1, 0x9e, 0x28, 0xa6, 0x31, 0xe3, 0xaf, 0xf8, 0xe4, 0xfa, 0x73, 0x09, 0xf6, + 0x8f, 0x5e, 0x1e, 0xac, 0x39, 0xbd, 0x34, 0xa0, 0xf1, 0xb9, 0x43, 0x53, 0xcb, 0xc3, 0xd0, 0x9f, + 0xe2, 0xc3, 0x7e, 0x56, 0xca, 0x27, 0x55, 0x36, 0xf8, 0x3b, 0xc0, 0x83, 0xf6, 0xf6, 0x0a, 0xab, + 0x06, 0x7d, 0x07, 0x78, 0x45, 0x23, 0x1e, 0x66, 0xea, 0x33, 0x80, 0x87, 0x15, 0xae, 0x66, 0xe7, + 0x33, 0x80, 0x5a, 0x23, 0x1e, 0x4e, 0xfb, 0x0c, 0xe0, 0x61, 0x85, 0xab, 0xd9, 0xf9, 0x0c, 0xa0, + 0xd6, 0x88, 0x87, 0xd3, 0x0f, 0xbd, 0x01, 0xaa, 0xaa, 0xaa, 0x00, 0x5d, 0x9e, 0x7a, 0x58, 0x6d, + 0xae, 0x63, 0xe7, 0x71, 0x03, 0xac, 0x5e, 0xbd, 0xda, 0xe6, 0x90, 0x21, 0xbd, 0x16, 0x18, 0x3b, + 0x76, 0xac, 0xdd, 0xb5, 0xc2, 0xe3, 0x48, 0x80, 0x9f, 0x72, 0x01, 0xfc, 0x02, 0x9d, 0xc3, 0xae, + 0x87, 0xed, 0x66, 0x6a, 0x45, 0x20, 0xa3, 0x17, 0x14, 0xe8, 0xbb, 0x7e, 0x32, 0x4b, 0xd7, 0xe3, + 0x06, 0xa0, 0x2f, 0xf7, 0xcc, 0x9f, 0x3f, 0x1f, 0x26, 0x4c, 0x98, 0x00, 0x1d, 0x3a, 0x74, 0x10, + 0x72, 0x56, 0x56, 0x2a, 0x17, 0x70, 0x44, 0x81, 0x41, 0x84, 0x4e, 0xa3, 0xb6, 0x6d, 0xdb, 0x96, + 0xfd, 0x28, 0xee, 0xa9, 0xb0, 0x60, 0xc1, 0x02, 0x66, 0xf4, 0xc8, 0xc8, 0x48, 0x78, 0xf1, 0xc5, + 0x17, 0x9d, 0x62, 0x6b, 0xda, 0x3b, 0x05, 0x7d, 0x72, 0xf0, 0xc6, 0x8d, 0x1b, 0x50, 0x51, 0x51, + 0xc1, 0xce, 0x38, 0x76, 0xec, 0xd8, 0x11, 0x28, 0xef, 0xf2, 0xe5, 0xcb, 0x70, 0xea, 0xd4, 0x29, + 0x20, 0x05, 0xa2, 0x0f, 0x68, 0xa0, 0x73, 0x90, 0xcd, 0x9a, 0xe9, 0x7b, 0xad, 0x49, 0x48, 0x48, + 0x80, 0x65, 0xcb, 0x96, 0x31, 0xa1, 0xa9, 0x05, 0xa3, 0xcf, 0x68, 0xbb, 0x2b, 0x80, 0xa7, 0xf8, + 0x98, 0x2c, 0x31, 0x31, 0x31, 0xb0, 0x73, 0xe7, 0x4e, 0x86, 0xdf, 0xaa, 0x95, 0xbe, 0x2b, 0x20, + 0x2d, 0x06, 0xf8, 0xc1, 0x24, 0xb8, 0x74, 0xe9, 0x12, 0xa4, 0xa7, 0xa7, 0xb3, 0xbb, 0x08, 0x7d, + 0x5f, 0x43, 0xdf, 0xbe, 0x7d, 0x01, 0xfd, 0x5b, 0xc3, 0x27, 0x9f, 0x7c, 0x02, 0x13, 0x27, 0x4e, + 0x84, 0xae, 0x5d, 0xbb, 0x6a, 0xa1, 0x02, 0xf1, 0xe7, 0x81, 0x3e, 0x07, 0xe5, 0x54, 0xd0, 0x38, + 0x3a, 0x66, 0x93, 0x95, 0x95, 0x95, 0x25, 0x61, 0x37, 0xa1, 0x38, 0xff, 0x86, 0x4a, 0x56, 0xa4, + 0x51, 0x08, 0x45, 0xfa, 0x85, 0x17, 0x5e, 0xb0, 0xa1, 0xa3, 0xce, 0xe0, 0xa7, 0x75, 0x09, 0xd7, + 0xc8, 0x35, 0xb5, 0x1c, 0x6f, 0xcb, 0x96, 0x2d, 0x0a, 0x3e, 0x9c, 0xaf, 0x96, 0xeb, 0x6a, 0x39, + 0x1e, 0xc5, 0x51, 0x59, 0x12, 0x2a, 0x55, 0xe0, 0xd3, 0x71, 0xe8, 0x2e, 0x5d, 0xba, 0x48, 0x83, + 0x07, 0x0f, 0x16, 0x6e, 0xad, 0x39, 0xbd, 0x81, 0x03, 0x07, 0x2a, 0xd0, 0xf7, 0xee, 0xdd, 0x2b, + 0xf0, 0x38, 0x8c, 0xd1, 0xf5, 0xe4, 0xc9, 0x93, 0x0a, 0x7c, 0xbd, 0x84, 0xcd, 0x41, 0x43, 0x3d, + 0x40, 0xca, 0xe7, 0x47, 0x40, 0x39, 0xe3, 0xf5, 0xeb, 0xd7, 0x2b, 0xc0, 0x6f, 0xde, 0xbc, 0x29, + 0x35, 0x69, 0xd2, 0x44, 0x08, 0x1a, 0x17, 0x17, 0xa7, 0x28, 0x57, 0x27, 0x1c, 0x31, 0x80, 0x9c, + 0x06, 0x3f, 0x4e, 0x4d, 0xf2, 0x98, 0x31, 0x80, 0xfc, 0x8c, 0x2c, 0xe1, 0xe0, 0xc7, 0xcf, 0x6c, + 0xdc, 0x71, 0xe3, 0xe1, 0x5e, 0x69, 0xf1, 0xe2, 0xc5, 0xcc, 0x33, 0xbc, 0x9c, 0x17, 0x1d, 0x4f, + 0x3d, 0x74, 0xe8, 0x10, 0xf3, 0xf8, 0x4e, 0x06, 0xe3, 0x3a, 0xe0, 0x9e, 0xdf, 0xc9, 0xfb, 0x3b, + 0xf7, 0x00, 0xaf, 0xe5, 0x64, 0x5d, 0x4e, 0x4b, 0x1e, 0x77, 0xd8, 0x00, 0x38, 0x68, 0xca, 0xe9, + 0x88, 0xf8, 0xda, 0xb5, 0x6b, 0x85, 0x70, 0x24, 0xa4, 0x91, 0x30, 0x9e, 0x36, 0x00, 0x09, 0x49, + 0x9f, 0x55, 0xe3, 0xca, 0xd3, 0xbb, 0x26, 0x26, 0x26, 0x4a, 0x9b, 0x37, 0x6f, 0x16, 0x75, 0x52, + 0x47, 0xf8, 0x59, 0x78, 0xc2, 0xaf, 0xcf, 0x73, 0xbd, 0x1a, 0x57, 0x9d, 0x76, 0x78, 0x10, 0xde, + 0xb7, 0x6f, 0x1f, 0xc8, 0x3f, 0x8f, 0x8e, 0xc2, 0xb0, 0x35, 0xe0, 0x8f, 0x3e, 0xfa, 0x88, 0xa2, + 0x2c, 0xd0, 0x58, 0x30, 0x60, 0xc0, 0x00, 0x9e, 0xf4, 0xfa, 0x15, 0x2b, 0x0f, 0xe3, 0xc7, 0x8f, + 0x87, 0x5b, 0xb7, 0x6e, 0x31, 0x59, 0x69, 0x3c, 0x43, 0xe7, 0x03, 0x80, 0x77, 0x06, 0x3b, 0xca, + 0xde, 0xba, 0x75, 0x6b, 0x26, 0x23, 0x7e, 0xf7, 0x00, 0x26, 0x4d, 0x9a, 0x04, 0xf3, 0xe6, 0xcd, + 0xd3, 0x94, 0x99, 0xc6, 0x09, 0x1e, 0x9c, 0x9e, 0x09, 0xa9, 0x2d, 0x62, 0x94, 0x56, 0x77, 0x41, + 0x28, 0x04, 0x6b, 0x4d, 0xf4, 0x31, 0x88, 0xc0, 0xc0, 0x40, 0x45, 0xcb, 0x6a, 0xd3, 0xa6, 0x8d, + 0x54, 0x58, 0x58, 0xa8, 0x20, 0xf7, 0xce, 0x3b, 0xef, 0x48, 0x9d, 0x3b, 0x77, 0x96, 0x08, 0x9e, + 0x7e, 0x4d, 0x9b, 0x36, 0x15, 0x38, 0xe8, 0xbc, 0x40, 0xe4, 0xb7, 0x6b, 0xd7, 0x4e, 0x7a, 0xf5, + 0xd5, 0x57, 0x15, 0xb8, 0x94, 0xd8, 0xbe, 0x7d, 0x3b, 0xfb, 0xbc, 0x00, 0xc7, 0x6f, 0xd1, 0xa2, + 0x85, 0xc0, 0xa7, 0x31, 0x8a, 0xe7, 0xd3, 0x97, 0x05, 0x47, 0x8f, 0x1e, 0x2d, 0x65, 0x67, 0x67, + 0x2b, 0x68, 0xd0, 0x71, 0x7d, 0x2e, 0x33, 0xf5, 0xff, 0xf4, 0xd1, 0xe5, 0x2b, 0x57, 0xae, 0x48, + 0x38, 0x81, 0x90, 0xe8, 0x78, 0x3e, 0x8d, 0x2f, 0xf2, 0xb1, 0x6e, 0xdd, 0xba, 0x75, 0x0a, 0x7c, + 0x9e, 0xd8, 0xb8, 0x71, 0xa3, 0xa0, 0x43, 0xf4, 0x88, 0x16, 0x7d, 0xf6, 0x00, 0x27, 0x02, 0x8a, + 0x7c, 0x2a, 0x23, 0xfa, 0x46, 0xc1, 0xe1, 0x2e, 0x88, 0x3e, 0x9b, 0x40, 0xae, 0x59, 0x68, 0xb0, + 0xed, 0xd1, 0xa3, 0x07, 0xfb, 0x90, 0x05, 0xb6, 0x2e, 0xe6, 0xbe, 0x82, 0x2a, 0xa3, 0x15, 0xa8, + 0xcb, 0xe1, 0x9f, 0x6d, 0xe4, 0x8a, 0xd0, 0xba, 0xd2, 0x67, 0x1a, 0x49, 0x81, 0xea, 0x80, 0xb3, + 0x13, 0x09, 0x67, 0x3e, 0x36, 0x95, 0x54, 0xd3, 0x20, 0x25, 0xf6, 0xea, 0xd5, 0x4b, 0xe2, 0xfe, + 0x13, 0x38, 0x1d, 0x92, 0x97, 0x60, 0xe9, 0x4b, 0x1e, 0xf4, 0xc5, 0x0f, 0x35, 0x1e, 0xa5, 0xd1, + 0x59, 0x0a, 0xeb, 0xa6, 0x68, 0xe2, 0x61, 0x14, 0x72, 0x73, 0x73, 0xa5, 0x29, 0x53, 0xa6, 0xd8, + 0x34, 0x3c, 0x6a, 0x88, 0xe4, 0xaf, 0x61, 0xd3, 0xa6, 0x4d, 0x46, 0xe8, 0xa2, 0xcc, 0x29, 0x03, + 0x08, 0x2a, 0xbe, 0x88, 0xc3, 0x1a, 0x30, 0xb5, 0x20, 0x43, 0x0f, 0x4c, 0x38, 0xc3, 0xc1, 0x06, + 0xa2, 0x1d, 0xf0, 0x0e, 0x00, 0xfc, 0x9e, 0x8c, 0x76, 0xa1, 0x2f, 0xd7, 0x50, 0x03, 0xa6, 0x0c, + 0xc0, 0x1f, 0xb8, 0xf0, 0x0b, 0x2a, 0x36, 0xc4, 0xe8, 0x69, 0x10, 0xfb, 0x75, 0x5d, 0xff, 0x46, + 0x36, 0x08, 0xbe, 0x0c, 0x85, 0x06, 0x4c, 0x19, 0x40, 0x81, 0xe1, 0x4b, 0xb8, 0x54, 0x03, 0x0e, + 0x4f, 0x43, 0x5d, 0x2a, 0xc5, 0x23, 0x4c, 0xcc, 0x67, 0x00, 0x2f, 0x1b, 0xdf, 0x67, 0x00, 0x9f, + 0x01, 0xbc, 0xac, 0x01, 0x2f, 0xb3, 0xf7, 0xdd, 0x01, 0x5e, 0x36, 0xc0, 0xff, 0x01, 0x60, 0x99, + 0xd3, 0x96, 0x0f, 0xf3, 0xae, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; + +static const u_int8_t FLEXTextIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x33, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xd4, + 0x6c, 0xf8, 0x31, 0x00, 0x00, 0x05, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x5b, + 0x2c, 0x6c, 0x57, 0x18, 0x9e, 0x61, 0xce, 0x5c, 0x5c, 0xe2, 0x5a, 0xd7, 0x10, 0x97, 0x53, 0xd7, + 0xba, 0x3d, 0xd0, 0x3e, 0x20, 0x2a, 0x82, 0x88, 0x22, 0x1e, 0x08, 0xaa, 0x24, 0x08, 0x21, 0x12, + 0x11, 0x91, 0xf4, 0xa9, 0x69, 0x1a, 0xf5, 0x26, 0x22, 0xc1, 0x83, 0x04, 0x91, 0xa6, 0x09, 0x5e, + 0x2a, 0x8d, 0x34, 0x91, 0xa0, 0xe1, 0xd4, 0x83, 0x07, 0xd2, 0x70, 0x8a, 0xe8, 0x11, 0xe2, 0x1a, + 0x8a, 0xc1, 0x30, 0x86, 0x41, 0xbf, 0xb1, 0xcc, 0xea, 0x9c, 0x33, 0xec, 0xd9, 0x33, 0xb3, 0x9c, + 0x46, 0xb2, 0x57, 0x64, 0xe7, 0x5f, 0xff, 0xff, 0xfd, 0xf7, 0xb5, 0xd6, 0xac, 0xbd, 0x89, 0xef, + 0xee, 0xee, 0x44, 0x2f, 0x79, 0xd8, 0xbc, 0xe4, 0xe0, 0x75, 0xb1, 0x0b, 0x09, 0xfc, 0xdf, 0x1d, + 0x14, 0x3a, 0x20, 0x74, 0xc0, 0xca, 0x0a, 0x08, 0x4b, 0xc8, 0xca, 0x02, 0x5a, 0xad, 0x2e, 0x74, + 0xc0, 0xea, 0x12, 0x5a, 0x69, 0x40, 0xe8, 0x80, 0x95, 0x05, 0xb4, 0x5a, 0x5d, 0x62, 0xb5, 0x05, + 0x9d, 0x01, 0xad, 0xe8, 0x6e, 0x4a, 0xa5, 0x7c, 0xa7, 0x51, 0xdf, 0x9a, 0xba, 0x1a, 0xda, 0x88, + 0xc5, 0xaf, 0x65, 0x8a, 0x24, 0x07, 0x67, 0x89, 0x48, 0xcc, 0xc4, 0x35, 0x9b, 0x04, 0x7e, 0x3d, + 0xf9, 0x27, 0xff, 0xdd, 0x9f, 0xfc, 0x03, 0xfa, 0x25, 0x38, 0x26, 0xd7, 0xe9, 0x13, 0xfe, 0x78, + 0x0e, 0x24, 0x9b, 0x3d, 0xb0, 0xae, 0x51, 0x73, 0xf8, 0x30, 0x16, 0xad, 0x99, 0x89, 0x37, 0xb6, + 0x40, 0x39, 0x6c, 0x3a, 0x70, 0x7e, 0x7b, 0x43, 0x2c, 0xba, 0x49, 0xa4, 0x9e, 0xaf, 0xa4, 0xa0, + 0x8f, 0xb5, 0xd7, 0xbb, 0xd7, 0x1a, 0xc2, 0xf4, 0x91, 0xca, 0x9c, 0x6d, 0x5f, 0x81, 0xde, 0xbb, + 0xd6, 0x1c, 0x69, 0xaf, 0x41, 0x5c, 0xdc, 0xde, 0x12, 0x91, 0xf5, 0x4f, 0x36, 0x1d, 0x50, 0xeb, + 0x03, 0xaa, 0x76, 0xf7, 0x7d, 0x1b, 0xfe, 0x05, 0xfe, 0xbe, 0xf7, 0x09, 0xa6, 0xc1, 0xfd, 0xe0, + 0x1d, 0x4c, 0x98, 0x95, 0xee, 0xbe, 0x84, 0xa9, 0xbe, 0x7b, 0x48, 0x98, 0x62, 0x2c, 0x26, 0x18, + 0x25, 0x70, 0xf7, 0x50, 0x51, 0x99, 0x0d, 0x97, 0x41, 0xb9, 0xf8, 0x41, 0x7a, 0xa9, 0x4f, 0xd8, + 0xe2, 0xb8, 0xa9, 0x22, 0x97, 0x3f, 0x0a, 0x32, 0x49, 0xa8, 0xf5, 0x4b, 0x88, 0x86, 0xf8, 0xa8, + 0x8a, 0x42, 0x9f, 0x1e, 0xed, 0xd8, 0xa3, 0x30, 0xb3, 0x98, 0x6c, 0x12, 0x08, 0x95, 0xdb, 0x13, + 0xaf, 0x81, 0x32, 0x05, 0x87, 0xfb, 0x68, 0x85, 0x23, 0x91, 0x86, 0xc8, 0xed, 0x38, 0x60, 0x66, + 0x89, 0xd8, 0x6c, 0xe2, 0x6f, 0x5c, 0xbd, 0x4f, 0x6e, 0xb4, 0x38, 0xda, 0xbf, 0x72, 0x72, 0xe7, + 0x70, 0xff, 0xa5, 0xa3, 0xcb, 0x8f, 0xbe, 0xaf, 0x51, 0xfe, 0xaf, 0x5d, 0xbd, 0x38, 0x60, 0x66, + 0x89, 0xd8, 0x24, 0xe0, 0x6a, 0x2b, 0xf9, 0xce, 0x2b, 0xd0, 0xa4, 0x63, 0x85, 0xd8, 0xe6, 0x5b, + 0xcf, 0x00, 0x93, 0x30, 0xb3, 0x00, 0x6c, 0x96, 0x90, 0x59, 0x2e, 0xd9, 0x82, 0x85, 0x04, 0xd8, + 0xd6, 0xd3, 0x7c, 0x6b, 0x2f, 0xbe, 0x03, 0x6c, 0x36, 0x31, 0x2d, 0xdc, 0xd1, 0x8d, 0xf6, 0xaf, + 0x4b, 0x15, 0xa6, 0x7f, 0x6b, 0x2e, 0x28, 0x73, 0x55, 0x73, 0xf1, 0xe6, 0x5c, 0x29, 0x16, 0x89, + 0xc3, 0xe5, 0xf6, 0xd8, 0xee, 0x94, 0xcf, 0x84, 0x10, 0x33, 0xfc, 0x36, 0xfa, 0xf3, 0xf1, 0x5e, + 0xe9, 0xfa, 0x5b, 0x8e, 0x1b, 0x35, 0xee, 0xd2, 0x3f, 0x05, 0x7c, 0x56, 0xe4, 0xe2, 0xc9, 0x24, + 0x74, 0x62, 0x84, 0xe5, 0x12, 0xfa, 0x43, 0x75, 0xc2, 0x11, 0x3d, 0xfc, 0x41, 0xfa, 0x46, 0xa5, + 0x64, 0x18, 0x3d, 0x4c, 0xb1, 0x4c, 0xa0, 0xc4, 0xd5, 0x2b, 0x4a, 0xe1, 0xc0, 0x11, 0x1f, 0xa4, + 0xc0, 0x70, 0x00, 0x2c, 0x10, 0xb1, 0x5c, 0x42, 0x16, 0xb8, 0xb7, 0x5e, 0x85, 0x65, 0x07, 0xac, + 0x8f, 0xc6, 0x02, 0x0b, 0x42, 0x02, 0x16, 0x14, 0x8d, 0xa9, 0x8a, 0xd0, 0x01, 0xa6, 0xe5, 0xb4, + 0xc0, 0x98, 0xd0, 0x01, 0x0b, 0x8a, 0xc6, 0x54, 0x85, 0x6f, 0x07, 0xb4, 0x5a, 0xed, 0xe4, 0xe4, + 0xe4, 0xee, 0xee, 0x2e, 0x53, 0xef, 0xef, 0x19, 0xdb, 0xd8, 0xd8, 0x98, 0x9a, 0x9a, 0x32, 0xfb, + 0x6a, 0x03, 0x05, 0x3e, 0x63, 0x74, 0x74, 0x14, 0xde, 0xb2, 0xb2, 0xb2, 0xf8, 0x80, 0x2d, 0xc3, + 0xc4, 0xc7, 0xc7, 0xc3, 0xc5, 0xec, 0xec, 0xac, 0x59, 0xea, 0x7c, 0x3b, 0x70, 0x70, 0x70, 0x00, + 0xeb, 0xe4, 0xf9, 0x5e, 0xdd, 0xd8, 0x4d, 0x2c, 0x73, 0xc1, 0x2b, 0x81, 0xa5, 0xa5, 0xa5, 0xe5, + 0xe5, 0x65, 0x84, 0x7a, 0x76, 0x76, 0xf6, 0xfb, 0xfd, 0x40, 0x9d, 0xb0, 0xa8, 0x0c, 0x83, 0x3f, + 0x3d, 0x3d, 0x6d, 0x6c, 0x6c, 0x8c, 0x89, 0x89, 0x71, 0x70, 0x70, 0x88, 0x8c, 0x8c, 0x6c, 0x6e, + 0x6e, 0x3e, 0x3f, 0x3f, 0xa7, 0x80, 0xfa, 0xfa, 0xfa, 0xcf, 0xef, 0x47, 0x45, 0x45, 0x05, 0x0a, + 0x5c, 0x54, 0x54, 0x84, 0x59, 0x62, 0x62, 0xe2, 0xe0, 0xe0, 0x20, 0x30, 0x2a, 0x95, 0x6a, 0x7a, + 0x7a, 0xfa, 0xf2, 0xf2, 0x12, 0xf4, 0xc2, 0xc2, 0x02, 0x71, 0xb1, 0xb3, 0xb3, 0x43, 0xd5, 0xb9, + 0x08, 0x93, 0xfd, 0x9a, 0x9b, 0x9b, 0x7b, 0x54, 0xbf, 0xa5, 0xa5, 0x85, 0xea, 0x62, 0x6f, 0xf8, + 0xf9, 0xf9, 0x11, 0x98, 0x9b, 0x9b, 0x1b, 0x21, 0x22, 0x22, 0x22, 0x90, 0x03, 0x30, 0x48, 0xd5, + 0xde, 0xfe, 0xe1, 0xbb, 0x8b, 0x4c, 0x26, 0x53, 0x2a, 0x95, 0x36, 0xfa, 0x0f, 0x44, 0x25, 0x25, + 0x25, 0x00, 0xe4, 0xe4, 0xe4, 0x18, 0xbb, 0xb0, 0xb3, 0xb3, 0xbb, 0xba, 0xba, 0xa2, 0x2e, 0x9e, + 0x22, 0x44, 0x4f, 0x09, 0x28, 0x7f, 0x7f, 0x7f, 0x3f, 0x29, 0x29, 0xc9, 0xd3, 0x53, 0x77, 0x89, + 0x87, 0xfb, 0x4f, 0xef, 0x47, 0x6c, 0x6c, 0xec, 0xd8, 0xd8, 0x18, 0xc5, 0xe4, 0xe5, 0xe5, 0x41, + 0x9a, 0x96, 0x96, 0xb6, 0xb5, 0xb5, 0x05, 0xe6, 0xfc, 0xfc, 0xbc, 0xaf, 0xaf, 0xee, 0x2b, 0x62, + 0x53, 0x53, 0x13, 0xc1, 0xa0, 0x81, 0x65, 0x65, 0x65, 0xe0, 0x24, 0x24, 0x24, 0x1c, 0x1f, 0x1f, + 0x87, 0x87, 0x87, 0x4b, 0xa5, 0xd2, 0xde, 0xde, 0xde, 0xa3, 0xa3, 0x23, 0x00, 0x3a, 0x3a, 0x3a, + 0xc2, 0xc2, 0xc2, 0x24, 0x12, 0xdd, 0xbb, 0x8e, 0x8f, 0x8f, 0x0f, 0x71, 0x51, 0x58, 0x58, 0x48, + 0xed, 0x73, 0x10, 0xa6, 0x13, 0x20, 0xca, 0xfd, 0xfd, 0xfd, 0xb0, 0x8e, 0x7d, 0x66, 0x6c, 0x4b, + 0xad, 0x56, 0xdb, 0xda, 0xda, 0x42, 0xda, 0xde, 0xde, 0xfe, 0x9b, 0x7e, 0x60, 0xa9, 0x80, 0x13, + 0x1d, 0x1d, 0x4d, 0xf1, 0xe8, 0x43, 0x66, 0x66, 0x26, 0x98, 0x5e, 0x5e, 0xba, 0x1b, 0x75, 0x5f, + 0x5f, 0x1f, 0x15, 0x11, 0x22, 0x20, 0x20, 0x00, 0x7c, 0x9c, 0x16, 0x1f, 0xf0, 0xb9, 0xa7, 0x0c, + 0x5e, 0xf0, 0x56, 0x57, 0x57, 0x6f, 0x6e, 0x74, 0x1f, 0x6b, 0x1b, 0x1a, 0x1a, 0xf0, 0x34, 0x1c, + 0x17, 0x17, 0xff, 0xbd, 0x58, 0x22, 0xc9, 0xa1, 0xa1, 0xa1, 0xc0, 0xc0, 0xc0, 0xbd, 0xbd, 0xbd, + 0x94, 0x94, 0x94, 0xf2, 0xf2, 0x72, 0x43, 0xa4, 0xc5, 0x34, 0xdf, 0x04, 0xc8, 0xaa, 0xc5, 0x6e, + 0x33, 0xf6, 0x84, 0xa6, 0x13, 0x66, 0x4f, 0x4f, 0x4f, 0x54, 0x54, 0x14, 0x05, 0x20, 0xe2, 0x90, + 0x90, 0x10, 0x3a, 0x05, 0xd1, 0xd6, 0xd6, 0x76, 0x78, 0x78, 0x28, 0x97, 0xcb, 0xb1, 0x4d, 0x3b, + 0x3b, 0x3b, 0xeb, 0xea, 0xea, 0x0c, 0xa5, 0x1c, 0x2e, 0x0c, 0x61, 0x1f, 0xd2, 0xdc, 0x0d, 0xa2, + 0xd2, 0x91, 0x91, 0x11, 0x68, 0x22, 0xa6, 0xb5, 0xb5, 0x35, 0x1c, 0x17, 0xe3, 0xe3, 0xe3, 0xb5, + 0xb5, 0xb5, 0x58, 0x57, 0x04, 0x10, 0x1a, 0x1a, 0x0a, 0x69, 0x7a, 0x7a, 0x3a, 0xd9, 0xb5, 0x60, + 0x2e, 0x2e, 0x2e, 0x56, 0x57, 0x57, 0xb7, 0xb6, 0xb6, 0x52, 0x0b, 0xdd, 0xdd, 0xdd, 0xc0, 0xe0, + 0xe4, 0x81, 0xc8, 0xd9, 0xd9, 0x19, 0xe1, 0x0e, 0x0f, 0x0f, 0x53, 0x29, 0x88, 0xb8, 0xb8, 0x38, + 0x00, 0xaa, 0xaa, 0xaa, 0xb0, 0xd8, 0xd6, 0xd7, 0xd7, 0xbb, 0xba, 0xba, 0x4a, 0x4b, 0x4b, 0x91, + 0xb0, 0x21, 0xc6, 0x98, 0xe6, 0xbb, 0x07, 0x56, 0x56, 0x56, 0x60, 0x1d, 0x03, 0x8e, 0x15, 0x8a, + 0x87, 0x2f, 0xb8, 0x88, 0x98, 0x58, 0xc4, 0x8f, 0xb4, 0x58, 0xac, 0xfb, 0x9f, 0x17, 0x44, 0xa9, + 0xa9, 0xa9, 0x64, 0x07, 0x63, 0x5a, 0x50, 0x50, 0x40, 0x00, 0xd8, 0xdf, 0x3a, 0x65, 0x91, 0x28, + 0x3f, 0x3f, 0x1f, 0x9b, 0xd8, 0xdb, 0xdb, 0x9b, 0x4c, 0x33, 0x32, 0x32, 0x68, 0x4c, 0xc5, 0xc5, + 0xc5, 0x84, 0x49, 0x8f, 0x2c, 0x4c, 0x67, 0x66, 0x66, 0x28, 0xe0, 0x51, 0x82, 0x6f, 0x02, 0x50, + 0xc6, 0x59, 0xe1, 0xe8, 0xa8, 0xfb, 0xbc, 0x8c, 0x1c, 0x70, 0x68, 0x54, 0x56, 0x56, 0x6e, 0x6f, + 0x6f, 0x53, 0xa3, 0x13, 0x13, 0x13, 0x38, 0x9a, 0x48, 0x04, 0x00, 0xe0, 0x9c, 0xa9, 0xa9, 0xa9, + 0x21, 0x87, 0x0c, 0x30, 0xf8, 0x09, 0x27, 0xa2, 0xdc, 0xdc, 0x5c, 0x24, 0xe0, 0xe1, 0xe1, 0x81, + 0x29, 0x72, 0xce, 0xce, 0xce, 0xa6, 0x16, 0x50, 0xf5, 0xe4, 0xe4, 0x64, 0x02, 0x73, 0x72, 0x72, + 0x42, 0x21, 0x06, 0x06, 0x06, 0xa8, 0xf4, 0x29, 0xc2, 0xbc, 0x77, 0x62, 0x58, 0xd9, 0xdc, 0xdc, + 0x74, 0x71, 0x71, 0x21, 0x99, 0x10, 0x67, 0x86, 0x4f, 0xfc, 0x9c, 0xe1, 0x4a, 0x13, 0x14, 0x14, + 0x64, 0x58, 0x45, 0x43, 0x80, 0x49, 0x1a, 0xdb, 0x0c, 0xcb, 0xc6, 0xdf, 0xdf, 0x9f, 0xb4, 0xd4, + 0x24, 0xde, 0xbc, 0x04, 0x4c, 0x9a, 0xfb, 0xf8, 0x00, 0x5e, 0x57, 0x89, 0x8f, 0x1f, 0x16, 0x7f, + 0x8f, 0x42, 0x02, 0xfc, 0x6b, 0xf5, 0x3c, 0x48, 0xa1, 0x03, 0xcf, 0x53, 0x57, 0xfe, 0x56, 0x85, + 0x0e, 0xf0, 0xaf, 0xd5, 0xf3, 0x20, 0x85, 0x0e, 0x3c, 0x4f, 0x5d, 0xf9, 0x5b, 0x15, 0x3a, 0xc0, + 0xbf, 0x56, 0xcf, 0x83, 0xfc, 0x17, 0xab, 0x70, 0xa9, 0x05, 0xf0, 0x5c, 0xd1, 0x77, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXTextIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0b, 0x9d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x59, 0x6c, 0x14, 0xc9, 0xf5, 0xf9, 0x02, 0xdb, 0xd8, 0x66, 0x8d, 0xd6, 0xf6, 0x2e, 0xc1, + 0x46, 0x59, 0x41, 0x62, 0x2c, 0xc2, 0x8d, 0x20, 0x80, 0x04, 0x24, 0x8a, 0x11, 0x88, 0x0f, 0x20, + 0xc1, 0x12, 0x20, 0x21, 0x81, 0x58, 0x89, 0x0f, 0x40, 0x80, 0x20, 0x04, 0x14, 0xe0, 0x0b, 0x3e, + 0x88, 0xb8, 0x43, 0x40, 0x09, 0x87, 0x10, 0xe7, 0x86, 0x2b, 0x8a, 0x84, 0x20, 0xe6, 0x10, 0x26, + 0x2c, 0x87, 0x82, 0x62, 0x90, 0x02, 0xd8, 0x60, 0x0e, 0x1f, 0xd8, 0x6b, 0x7b, 0x85, 0xef, 0x03, + 0x7b, 0x3c, 0x9d, 0x7a, 0x65, 0x57, 0x4d, 0xf7, 0x74, 0x4f, 0x4f, 0x77, 0xbb, 0x0f, 0x1f, 0x55, + 0x52, 0x4f, 0x55, 0xbd, 0x7a, 0xf7, 0xab, 0xea, 0xee, 0xe9, 0xae, 0xaa, 0x8e, 0x90, 0x48, 0x02, + 0x13, 0x29, 0xd2, 0x04, 0x2e, 0x45, 0x8d, 0x0e, 0x26, 0xb8, 0x93, 0xfd, 0x9a, 0x82, 0x06, 0x26, + 0x47, 0x43, 0x44, 0x54, 0x04, 0x4c, 0x3f, 0xff, 0x53, 0x25, 0x0a, 0xaa, 0x14, 0x9c, 0xca, 0xff, + 0x55, 0x47, 0x41, 0xb7, 0x7f, 0x53, 0x28, 0xe1, 0x21, 0x4f, 0x61, 0x55, 0xfa, 0x75, 0xee, 0xcf, + 0x14, 0x12, 0xc2, 0x12, 0x54, 0x7f, 0xdf, 0xa8, 0x20, 0x88, 0x40, 0x71, 0x0a, 0x48, 0x98, 0x4a, + 0x58, 0x09, 0xc1, 0xf4, 0x86, 0x08, 0x9e, 0x3f, 0x7f, 0xce, 0xe9, 0x34, 0x09, 0x16, 0x2e, 0x5c, + 0x48, 0x11, 0x22, 0x22, 0x22, 0x38, 0x22, 0x2b, 0x38, 0x6f, 0x83, 0xf3, 0x12, 0x14, 0x46, 0x63, + 0x3f, 0x62, 0x07, 0x1a, 0x99, 0xff, 0xfb, 0x32, 0x66, 0x6b, 0x20, 0x97, 0xf7, 0x13, 0x2c, 0xb3, + 0xbe, 0xa3, 0xd5, 0x8f, 0xb0, 0x5d, 0x21, 0x21, 0xc0, 0x06, 0x00, 0xfb, 0x50, 0xc2, 0xf0, 0x81, + 0x72, 0x10, 0x2d, 0x87, 0x24, 0xc0, 0xd6, 0xc6, 0xe2, 0xcf, 0x2a, 0x02, 0x17, 0xbd, 0xb4, 0x71, + 0xe3, 0x46, 0x95, 0x78, 0x04, 0xd4, 0xd7, 0xd7, 0x2b, 0xe0, 0x2a, 0x1b, 0xb0, 0xff, 0xb0, 0xbe, + 0xa4, 0xc0, 0xec, 0xaa, 0x38, 0x6f, 0x83, 0x69, 0x09, 0x5a, 0x6a, 0xea, 0xc1, 0x54, 0x36, 0xeb, + 0x21, 0x5b, 0x69, 0x33, 0x24, 0x00, 0xfb, 0x6f, 0x45, 0xae, 0x32, 0x1a, 0x08, 0x7b, 0xf2, 0x6d, + 0x71, 0x58, 0x99, 0x86, 0x04, 0x84, 0xe5, 0xa2, 0x83, 0xd0, 0x73, 0x05, 0xe0, 0x60, 0xf4, 0x35, + 0xf9, 0xe9, 0xf0, 0xd7, 0x31, 0x00, 0xfa, 0x68, 0x2f, 0xc2, 0xe1, 0xc9, 0x0e, 0x34, 0x1f, 0xcb, + 0xef, 0xdf, 0xbf, 0xa7, 0x39, 0xd6, 0xa3, 0xa3, 0x3b, 0x2f, 0xba, 0x03, 0x07, 0x76, 0x9e, 0xaf, + 0x18, 0x2e, 0xe6, 0xaa, 0x84, 0x67, 0xbd, 0xe0, 0xd4, 0xda, 0xda, 0x8a, 0x97, 0x3b, 0x7a, 0x60, + 0xdb, 0xe0, 0xc1, 0x83, 0x15, 0x75, 0x6c, 0xc3, 0xc4, 0x72, 0x56, 0x96, 0xd7, 0x29, 0x02, 0xf9, + 0xe9, 0xfd, 0x31, 0xe8, 0xfd, 0x16, 0xf4, 0xdc, 0x91, 0x4c, 0x7a, 0x8c, 0xa1, 0xa4, 0xba, 0x8b, + 0x64, 0x54, 0x78, 0xb6, 0xd4, 0x4a, 0xec, 0x9e, 0xef, 0xfb, 0xa5, 0xef, 0xd5, 0x77, 0x98, 0x5a, + 0x04, 0xac, 0xbf, 0x86, 0xca, 0x0b, 0x8f, 0x54, 0xf1, 0xbb, 0x07, 0x39, 0x0e, 0xbb, 0xa3, 0x90, + 0xc3, 0xb4, 0xca, 0x96, 0x62, 0xc0, 0xac, 0x63, 0xb9, 0x96, 0xe2, 0x0c, 0x66, 0x49, 0x00, 0x73, + 0x13, 0xcb, 0x19, 0x33, 0xad, 0xdc, 0x92, 0x00, 0x2d, 0x46, 0xa1, 0x60, 0x3d, 0x5b, 0xc0, 0x9b, + 0xbf, 0x56, 0x43, 0x7b, 0x5d, 0x47, 0x28, 0xe5, 0x29, 0xdc, 0xb2, 0x05, 0x3f, 0x5f, 0x93, 0x0a, + 0x25, 0x97, 0x6b, 0xa0, 0xb5, 0xda, 0xa7, 0x2b, 0x40, 0x9c, 0x8b, 0x74, 0xdd, 0x83, 0x8d, 0x96, + 0x63, 0x10, 0x96, 0x73, 0x17, 0x82, 0xa6, 0x00, 0xcd, 0x6b, 0xab, 0x0e, 0x47, 0x3d, 0x7c, 0xd5, + 0xc9, 0x8e, 0x21, 0x63, 0x4e, 0xce, 0x2d, 0xf0, 0xe8, 0xd1, 0x23, 0x38, 0x78, 0xf0, 0x20, 0x24, + 0x25, 0x25, 0xc1, 0x90, 0x21, 0x43, 0x60, 0xdc, 0xb8, 0x71, 0xb0, 0x64, 0xc9, 0x12, 0x88, 0x89, + 0x89, 0x81, 0x93, 0x27, 0x4f, 0xc2, 0xd1, 0xa3, 0x47, 0xa9, 0x68, 0x86, 0xaf, 0xd2, 0x43, 0xeb, + 0x04, 0x45, 0x90, 0x38, 0x18, 0xcb, 0x0b, 0x16, 0x2c, 0xa0, 0xc7, 0xce, 0x9d, 0x3b, 0x29, 0x3c, + 0x27, 0x27, 0x47, 0x4a, 0x4b, 0x4b, 0x53, 0xe0, 0xf0, 0x4a, 0x50, 0x41, 0x65, 0x01, 0xd3, 0x00, + 0x35, 0x9a, 0x37, 0x6f, 0x1e, 0xb5, 0x82, 0x59, 0x35, 0x74, 0xe8, 0x50, 0xc8, 0xcc, 0xcc, 0x84, + 0xc2, 0xc2, 0x42, 0x8a, 0x26, 0xd7, 0x1a, 0xcb, 0x89, 0x89, 0x89, 0xaa, 0xbf, 0x2c, 0x62, 0x1c, + 0x30, 0x8f, 0x86, 0xcc, 0x35, 0xbb, 0x69, 0x48, 0x6c, 0x0b, 0x0d, 0x8e, 0xc7, 0xc0, 0x82, 0x4e, + 0xa6, 0x48, 0x1c, 0xf7, 0x90, 0x29, 0x6d, 0x2c, 0x20, 0x0b, 0x03, 0x2c, 0x38, 0xcd, 0x56, 0x92, + 0x90, 0x27, 0x3a, 0x3d, 0x29, 0x46, 0xee, 0xe6, 0x18, 0x3d, 0x3e, 0x25, 0x9d, 0xf1, 0xdd, 0x37, + 0xac, 0xca, 0xff, 0xf2, 0xe2, 0xb3, 0xa8, 0x29, 0x7f, 0x1b, 0xce, 0xe1, 0x56, 0x0b, 0xb6, 0x0c, + 0xe2, 0xd7, 0x7f, 0xa9, 0x86, 0xd2, 0x7f, 0xd4, 0x50, 0x1d, 0xb2, 0x36, 0x7d, 0x05, 0x5f, 0x67, + 0x27, 0xa9, 0xf4, 0xd1, 0x33, 0xda, 0xc8, 0xdd, 0xa7, 0x8a, 0x61, 0x17, 0xc0, 0x52, 0x04, 0x42, + 0x31, 0xd3, 0x83, 0x8f, 0xde, 0xf6, 0x35, 0x6d, 0xfe, 0xdf, 0xee, 0x0a, 0x9a, 0xc7, 0xa6, 0xc4, + 0xc0, 0x88, 0x6f, 0xbf, 0xd4, 0x23, 0x31, 0xd4, 0xe6, 0x9a, 0x01, 0x69, 0xb3, 0x12, 0x15, 0x06, + 0x44, 0xc7, 0x47, 0x02, 0x83, 0x19, 0xd2, 0x34, 0x04, 0x92, 0x38, 0x0b, 0x85, 0x70, 0x4c, 0x58, + 0x70, 0xeb, 0x8f, 0xfa, 0x77, 0xfb, 0x61, 0x19, 0x74, 0x21, 0xb8, 0x1e, 0x81, 0xf8, 0x9f, 0x0c, + 0xa0, 0xa2, 0x7d, 0x4d, 0x1d, 0xfc, 0x19, 0x7c, 0x7d, 0x41, 0xab, 0x51, 0x7d, 0x55, 0x78, 0xb6, + 0x9c, 0x85, 0x54, 0x5c, 0x5d, 0x04, 0xb8, 0x1e, 0x01, 0xbb, 0x6d, 0x13, 0x06, 0xd8, 0xed, 0x51, + 0xb3, 0xfc, 0x0c, 0x47, 0x20, 0x2f, 0x2f, 0x8f, 0xfe, 0xd3, 0x33, 0x2b, 0xc0, 0x0c, 0xbe, 0xfc, + 0x3f, 0x98, 0x61, 0xba, 0xa0, 0x3f, 0x81, 0x9a, 0xd5, 0x5b, 0xb7, 0x6e, 0x49, 0x33, 0x67, 0xce, + 0xa4, 0x8f, 0x8e, 0xf7, 0xed, 0xdb, 0x27, 0xe1, 0x71, 0xff, 0xfe, 0x7d, 0x05, 0xee, 0xb3, 0x67, + 0xcf, 0xf8, 0xe3, 0x66, 0x22, 0x5c, 0x3a, 0x7c, 0xf8, 0x30, 0x6f, 0x9f, 0x32, 0x65, 0x0a, 0x6f, + 0x43, 0x20, 0xb6, 0xe3, 0x31, 0x71, 0xe2, 0x44, 0x8a, 0x53, 0x52, 0x52, 0x22, 0xed, 0xde, 0xbd, + 0x9b, 0xc2, 0x36, 0x6d, 0xda, 0x44, 0xf9, 0x9f, 0x39, 0x73, 0x86, 0xd3, 0xeb, 0x15, 0x02, 0xff, + 0x7f, 0xf5, 0xb0, 0x48, 0xdb, 0x86, 0x0d, 0x1b, 0xa8, 0x00, 0x2d, 0x34, 0xa6, 0xd0, 0xe9, 0xd3, + 0xa7, 0x25, 0x76, 0x44, 0x46, 0x46, 0xaa, 0xf0, 0x11, 0x2f, 0x2a, 0x2a, 0x4a, 0x05, 0x47, 0x9e, + 0x75, 0x75, 0x75, 0x14, 0x8e, 0x8e, 0x30, 0x93, 0x0c, 0x1b, 0xb0, 0x63, 0xc7, 0x0e, 0x2a, 0xe0, + 0xc3, 0x87, 0x0f, 0x94, 0xff, 0x9e, 0x3d, 0x7b, 0xa4, 0x15, 0x2b, 0x56, 0xd0, 0xf2, 0xf4, 0xe9, + 0xd3, 0x69, 0xdb, 0xcb, 0x97, 0x2f, 0xb9, 0xec, 0xf3, 0xe7, 0xcf, 0x73, 0x0f, 0x23, 0x70, 0xd9, + 0xb2, 0x65, 0x5c, 0x71, 0x34, 0x64, 0xd8, 0xb0, 0x61, 0x1c, 0x17, 0x0b, 0x3e, 0x9f, 0x8f, 0xb6, + 0x93, 0x37, 0x90, 0x14, 0x7e, 0xfd, 0xfa, 0x75, 0x05, 0xbd, 0x02, 0x59, 0x56, 0x31, 0x7d, 0x1d, + 0x78, 0xf3, 0xe6, 0x0d, 0x91, 0x0f, 0x30, 0x72, 0xe4, 0x48, 0x9a, 0xcb, 0x7f, 0x08, 0x5f, 0xb8, + 0x7d, 0xfb, 0x36, 0x90, 0x87, 0x16, 0x30, 0x66, 0xcc, 0x18, 0x79, 0x93, 0xe1, 0x72, 0x4d, 0x4d, + 0x0d, 0x10, 0x27, 0xc1, 0xf8, 0xf1, 0xe3, 0x0d, 0xd1, 0x98, 0x36, 0xc0, 0x10, 0x57, 0x17, 0x91, + 0x0c, 0x9f, 0x85, 0x5c, 0xd4, 0xc9, 0x94, 0x28, 0x61, 0x80, 0x29, 0x77, 0x39, 0x80, 0x2c, 0xc6, + 0x80, 0x03, 0x4e, 0x35, 0xc5, 0x52, 0x8c, 0x01, 0x53, 0xee, 0x72, 0x00, 0x59, 0x44, 0xc0, 0x01, + 0xa7, 0x9a, 0x62, 0x29, 0x22, 0x60, 0xca, 0x5d, 0x0e, 0x20, 0x9b, 0x7e, 0xb0, 0xe5, 0x6b, 0xf0, + 0x43, 0xde, 0x6f, 0x8b, 0x0c, 0xab, 0x22, 0x7f, 0x6c, 0xf8, 0xfc, 0x8f, 0xe5, 0xd0, 0xf8, 0xae, + 0x73, 0xba, 0x9d, 0x6a, 0x46, 0xa9, 0x61, 0x8e, 0x4a, 0x44, 0xd3, 0x06, 0x28, 0xc9, 0xcd, 0xd5, + 0xda, 0xea, 0x7c, 0xd0, 0xfa, 0x63, 0xbb, 0x39, 0xa2, 0x30, 0xd8, 0xa6, 0x0d, 0x88, 0x4e, 0x8c, + 0xa4, 0x33, 0x1d, 0xe5, 0x7c, 0xe5, 0x0f, 0x6e, 0xe5, 0x1e, 0x97, 0xe3, 0x38, 0x55, 0x36, 0x6d, + 0x80, 0x15, 0x45, 0x8a, 0xff, 0x5e, 0x03, 0x45, 0xc7, 0xab, 0x15, 0xa4, 0x76, 0x19, 0xdd, 0xeb, + 0xcf, 0x42, 0xae, 0x44, 0x20, 0xe5, 0x97, 0x09, 0x10, 0x9b, 0x1a, 0x0d, 0x05, 0xfb, 0x2b, 0xc1, + 0xd7, 0xe2, 0xa7, 0x91, 0x60, 0x8f, 0xdb, 0x15, 0x61, 0xb1, 0x50, 0x71, 0xc5, 0x80, 0xf8, 0xf4, + 0x18, 0xc0, 0xa3, 0xf0, 0xcf, 0x55, 0x00, 0x2d, 0x9d, 0x5a, 0xda, 0xf1, 0x68, 0x1d, 0x39, 0xf5, + 0xfa, 0x2e, 0x24, 0x0c, 0xb0, 0xd0, 0x6d, 0x6d, 0x25, 0x11, 0x11, 0x30, 0xe3, 0xce, 0xc8, 0x18, + 0x8d, 0x69, 0xb2, 0x66, 0x18, 0x68, 0xe0, 0xba, 0x1a, 0x81, 0x2f, 0x7e, 0x11, 0xc7, 0x55, 0xc8, + 0x5b, 0x50, 0x04, 0x3f, 0xdc, 0xaa, 0x87, 0xca, 0x7b, 0x0d, 0x1c, 0x66, 0xa5, 0xe0, 0xaa, 0x01, + 0x59, 0x9b, 0xbf, 0xe2, 0x3a, 0xfa, 0x9a, 0xfd, 0xf0, 0xe2, 0x4f, 0x3f, 0x00, 0x7b, 0xed, 0xca, + 0x1b, 0x4c, 0x16, 0x5c, 0x35, 0x00, 0xbb, 0xd0, 0xaf, 0xae, 0x8f, 0x84, 0xc1, 0xa3, 0xe2, 0xe8, + 0x1a, 0x27, 0xd4, 0xb5, 0xbb, 0xdd, 0x4a, 0x3c, 0x56, 0x31, 0x19, 0x71, 0xdb, 0xd1, 0x5d, 0xed, + 0x42, 0xb6, 0x6b, 0x8f, 0x5d, 0xd0, 0x09, 0xa6, 0x6e, 0xf2, 0x14, 0x06, 0xb8, 0xe9, 0x6d, 0x2d, + 0x59, 0x22, 0x02, 0x5a, 0x5e, 0x71, 0x13, 0x66, 0x38, 0x02, 0x71, 0x71, 0x71, 0x70, 0xf6, 0xec, + 0x59, 0xc7, 0x74, 0x9b, 0x3b, 0x77, 0x2e, 0x64, 0x65, 0x65, 0x99, 0xe7, 0x2f, 0x7b, 0xe1, 0xa7, + 0x5b, 0x24, 0x9c, 0xe9, 0x0c, 0x64, 0x5d, 0xa4, 0x6e, 0x34, 0x22, 0x7f, 0x3c, 0xcc, 0xa6, 0xb0, + 0x11, 0xe8, 0xe8, 0xe8, 0x80, 0x03, 0x07, 0x0e, 0x50, 0xcf, 0x14, 0x15, 0x15, 0xc1, 0xfe, 0xfd, + 0xfb, 0xe1, 0xd0, 0xa1, 0x43, 0xb4, 0x2e, 0xff, 0x21, 0x2f, 0xc2, 0xf9, 0x42, 0xae, 0xe4, 0xe4, + 0x64, 0x40, 0x3a, 0x96, 0xf0, 0x0d, 0x3c, 0x1e, 0x63, 0xc7, 0x8e, 0x85, 0x63, 0xc7, 0x8e, 0x71, + 0x3c, 0xd6, 0x7e, 0xea, 0xd4, 0x29, 0x56, 0xa4, 0xfc, 0x51, 0x46, 0x65, 0x65, 0x25, 0x87, 0xe9, + 0x16, 0xc2, 0x59, 0x9c, 0x9b, 0x9b, 0x4b, 0x3d, 0x43, 0x98, 0x28, 0xf2, 0xa7, 0x4f, 0x9f, 0x72, + 0x52, 0xb2, 0xca, 0x8c, 0xb6, 0xe1, 0xbb, 0xe1, 0xcb, 0x97, 0x2f, 0xab, 0x5e, 0x66, 0x93, 0x05, + 0xa4, 0xb4, 0x7d, 0xed, 0xda, 0xb5, 0x52, 0x7e, 0x7e, 0x3e, 0x2d, 0x2f, 0x5a, 0xb4, 0x88, 0xd3, + 0x07, 0xf3, 0xc6, 0xfa, 0xfc, 0xf9, 0xf3, 0x79, 0xbb, 0x5e, 0xc1, 0x70, 0xcc, 0x90, 0x29, 0x4e, + 0x64, 0x0f, 0x4e, 0xe4, 0xbd, 0x2e, 0x55, 0x08, 0x27, 0xb7, 0xb3, 0xb7, 0xf4, 0x24, 0x42, 0x14, + 0x46, 0xde, 0x19, 0x73, 0x74, 0x9c, 0x9e, 0xc0, 0x14, 0x25, 0xb3, 0xea, 0x39, 0x9c, 0x15, 0x58, + 0x1b, 0xab, 0x1b, 0xcd, 0x0d, 0xdf, 0xcc, 0x61, 0x17, 0x20, 0x06, 0xc0, 0xb5, 0x6b, 0xd7, 0x88, + 0xac, 0x40, 0x7a, 0xf8, 0xf0, 0x21, 0x90, 0x37, 0xf5, 0x30, 0x67, 0xce, 0x1c, 0xc0, 0x81, 0xce, + 0x12, 0x2e, 0x01, 0x38, 0x71, 0xe2, 0x04, 0x9d, 0x34, 0x8f, 0x30, 0xec, 0x52, 0x6c, 0x3d, 0xe0, + 0xab, 0x57, 0xaf, 0xe8, 0x44, 0x7b, 0x86, 0x8b, 0x39, 0xf2, 0xc7, 0x44, 0x14, 0xa7, 0xb9, 0xe1, + 0x1f, 0xa3, 0x96, 0x22, 0x6f, 0x32, 0x83, 0x9f, 0xa2, 0x17, 0x14, 0x14, 0x48, 0x93, 0x27, 0x4f, + 0xe6, 0xa4, 0xd8, 0x16, 0x1b, 0x1b, 0xcb, 0xeb, 0x0d, 0x0d, 0x0d, 0xb4, 0xbd, 0xad, 0xad, 0x8d, + 0xc2, 0x88, 0xf2, 0xd4, 0xfb, 0xcb, 0x97, 0x2f, 0x97, 0xd6, 0xac, 0x59, 0x43, 0xcb, 0xef, 0xde, + 0xbd, 0xe3, 0xf8, 0x58, 0x20, 0x06, 0x50, 0x38, 0x4e, 0x39, 0x40, 0x7a, 0x9c, 0x9a, 0x70, 0xef, + 0xde, 0x3d, 0x05, 0x8e, 0x56, 0xc5, 0x70, 0x17, 0xca, 0xc8, 0xc8, 0xa0, 0x02, 0x50, 0x59, 0x76, + 0xf8, 0xfd, 0x7e, 0xca, 0xf3, 0xca, 0x95, 0x2b, 0x1c, 0xc6, 0xda, 0x30, 0x67, 0x89, 0xc1, 0xa6, + 0x4e, 0x9d, 0x2a, 0x91, 0x65, 0x0f, 0x1c, 0xf7, 0xc2, 0x85, 0x0b, 0x0c, 0x45, 0xc2, 0x6e, 0xc5, + 0xf0, 0x58, 0x8e, 0xb3, 0x64, 0xc2, 0xa5, 0x80, 0x94, 0x70, 0x98, 0xa4, 0x1d, 0xbd, 0xf3, 0xe0, + 0xc1, 0x03, 0xa9, 0xa9, 0xa9, 0x49, 0x13, 0xbb, 0xb8, 0xb8, 0x58, 0xc2, 0x41, 0x8f, 0x33, 0x4f, + 0xac, 0xa6, 0xc7, 0x8f, 0x1f, 0x4b, 0xe5, 0xe5, 0xe5, 0x86, 0xc9, 0x0d, 0x8f, 0x01, 0xe2, 0x95, + 0x1e, 0x99, 0xc2, 0x5e, 0x07, 0x7a, 0xa4, 0xd6, 0x32, 0xa5, 0x84, 0x01, 0x32, 0x67, 0x78, 0x52, + 0x14, 0x11, 0xf0, 0xc4, 0xed, 0x32, 0xa1, 0x22, 0x02, 0x32, 0x67, 0x78, 0x52, 0xec, 0xf5, 0xd7, + 0x01, 0x4f, 0xbc, 0x66, 0xa3, 0xd0, 0x5e, 0x3f, 0x04, 0x6c, 0xf4, 0x85, 0x27, 0xac, 0x44, 0x00, + 0x3c, 0x71, 0x7b, 0x40, 0xa8, 0x08, 0x40, 0xc0, 0x17, 0x9e, 0x94, 0x44, 0x00, 0x3c, 0x71, 0x7b, + 0x40, 0xa8, 0x08, 0x40, 0xc0, 0x17, 0x9e, 0x94, 0x44, 0x00, 0x3c, 0x71, 0x7b, 0x40, 0xa8, 0x2b, + 0x13, 0x85, 0x70, 0x8a, 0xe3, 0xfd, 0xdf, 0xbd, 0x0d, 0x48, 0xb5, 0xb1, 0x34, 0x60, 0x48, 0x14, + 0xcc, 0xb8, 0xf0, 0x8d, 0x8d, 0x1c, 0xdd, 0x65, 0xe5, 0x4a, 0x00, 0xd0, 0x24, 0xf2, 0x84, 0xca, + 0x19, 0xcb, 0x3a, 0x67, 0xae, 0x69, 0xf2, 0xfe, 0xcf, 0xda, 0x12, 0xa8, 0x2f, 0x54, 0xae, 0x90, + 0xb5, 0x6b, 0x0d, 0xbf, 0xa6, 0x40, 0x0b, 0x40, 0xd7, 0x02, 0x10, 0x6e, 0x2a, 0x84, 0x44, 0x5e, + 0x83, 0x48, 0x7e, 0x75, 0x90, 0x22, 0xc9, 0x76, 0xb1, 0x7a, 0x2f, 0xb1, 0x23, 0x1c, 0x98, 0xb9, + 0x63, 0xc1, 0x8f, 0x96, 0x49, 0x5c, 0x09, 0x00, 0xce, 0xf1, 0x9d, 0x4d, 0xe6, 0xa6, 0xe8, 0x25, + 0xf9, 0x86, 0x0e, 0x72, 0xbc, 0xcc, 0x0d, 0x69, 0x9a, 0x9b, 0x3b, 0xc8, 0x71, 0x58, 0xd9, 0x4f, + 0xf6, 0x10, 0xf4, 0xb5, 0x06, 0x86, 0x04, 0x06, 0x35, 0x38, 0xf9, 0xc9, 0xf3, 0xfd, 0xb6, 0x5a, + 0x75, 0xc3, 0x80, 0x2f, 0xa2, 0x82, 0x51, 0x5d, 0xa9, 0xbb, 0x12, 0x00, 0x57, 0x2c, 0x21, 0x42, + 0x4a, 0xff, 0x59, 0xab, 0x9a, 0xd7, 0x1c, 0x2c, 0xbb, 0xb9, 0xac, 0x0d, 0xfe, 0x9d, 0xa3, 0xbe, + 0x1e, 0xb9, 0x3d, 0xd1, 0x9b, 0xe9, 0x25, 0xee, 0x82, 0x98, 0x27, 0x3c, 0xca, 0xfb, 0xd4, 0x08, + 0x18, 0x9e, 0x93, 0x0c, 0x78, 0xb0, 0x84, 0x77, 0x5e, 0xed, 0xf5, 0xca, 0xd3, 0x4d, 0x4f, 0xbb, + 0x08, 0x8b, 0x11, 0xc0, 0xa2, 0xe5, 0x51, 0x2e, 0x02, 0xe0, 0x91, 0xe3, 0x99, 0x58, 0x11, 0x00, + 0xe6, 0x09, 0x8f, 0x72, 0x11, 0x00, 0x8f, 0x1c, 0xcf, 0xc4, 0xf6, 0xbb, 0x00, 0x38, 0xf6, 0x8f, + 0x9c, 0x79, 0xd4, 0x64, 0xde, 0xa7, 0x03, 0xc0, 0x36, 0xef, 0x92, 0xfb, 0xa4, 0xa9, 0xa4, 0x0d, + 0x3e, 0xfd, 0xb7, 0x59, 0x0e, 0xf2, 0xb4, 0xdc, 0xa7, 0x6e, 0x43, 0x83, 0x3d, 0x99, 0x3a, 0x23, + 0x01, 0xea, 0x5e, 0x75, 0x2d, 0x13, 0x94, 0x35, 0xe6, 0xff, 0xa1, 0x4c, 0x56, 0xeb, 0x2c, 0x4e, + 0x3e, 0x94, 0x01, 0x49, 0x99, 0xb1, 0x2a, 0xb8, 0xd3, 0x80, 0x3e, 0x3d, 0x02, 0x32, 0x16, 0x27, + 0xc3, 0xc4, 0x7d, 0xe9, 0x10, 0xfb, 0x65, 0x8c, 0xd3, 0x7e, 0xb4, 0xcc, 0xbf, 0x7f, 0xce, 0x8a, + 0x20, 0xcf, 0xfc, 0xe8, 0xf3, 0x20, 0x92, 0x47, 0xc5, 0x46, 0x40, 0x14, 0xd9, 0xa2, 0xd2, 0xab, + 0xd4, 0x3f, 0x03, 0xe0, 0x95, 0xb7, 0x35, 0xe4, 0x7a, 0x17, 0x7a, 0x0d, 0x65, 0xfa, 0x23, 0x48, + 0x04, 0xc0, 0xe3, 0xa8, 0x8b, 0x00, 0x88, 0x00, 0x78, 0xec, 0x01, 0x8f, 0xc5, 0x8b, 0x11, 0x20, + 0x02, 0xe0, 0xb1, 0x07, 0x3c, 0x16, 0xef, 0xc8, 0x08, 0x68, 0x6e, 0x6e, 0x86, 0xda, 0xda, 0x5a, + 0x8f, 0x4d, 0xeb, 0x9e, 0xf8, 0x8a, 0x8a, 0x0a, 0xe7, 0x66, 0x72, 0xc8, 0x54, 0xb3, 0x3d, 0x00, + 0xdb, 0xb6, 0x6d, 0x83, 0x41, 0x83, 0x06, 0x01, 0xae, 0xf8, 0x5c, 0xba, 0x74, 0xa9, 0x4c, 0x54, + 0xef, 0x28, 0xb6, 0xb4, 0xb4, 0x00, 0xd9, 0xb9, 0x18, 0xf0, 0xbb, 0x3d, 0x64, 0x67, 0x63, 0x78, + 0xfd, 0x5a, 0xfb, 0x13, 0x6c, 0x76, 0x59, 0x63, 0xfb, 0xb3, 0x20, 0xf2, 0x79, 0x43, 0xae, 0x1b, + 0x1a, 0x63, 0x35, 0x7d, 0xfc, 0xf8, 0x11, 0xc8, 0x92, 0x46, 0xea, 0x80, 0x84, 0x84, 0x04, 0x18, + 0x35, 0x6a, 0x14, 0x5d, 0x10, 0x1d, 0x1f, 0x1f, 0x1f, 0x92, 0xe5, 0xdb, 0xb7, 0x6f, 0x81, 0x2c, + 0xc2, 0xa3, 0xed, 0xe8, 0x44, 0xfc, 0xf0, 0x11, 0xe6, 0x98, 0xca, 0xca, 0xca, 0xe0, 0xd3, 0xa7, + 0x4f, 0xb4, 0x8c, 0x3c, 0x46, 0x8c, 0x18, 0x41, 0xcb, 0xc1, 0x3f, 0xed, 0xed, 0xed, 0x40, 0x56, + 0x20, 0x72, 0x70, 0x77, 0x6c, 0xe0, 0x4c, 0xf4, 0x0a, 0x86, 0x97, 0xf4, 0xe9, 0x20, 0xde, 0xb8, + 0x71, 0x03, 0x27, 0xf4, 0x18, 0x3e, 0x9e, 0x3c, 0x79, 0xa2, 0xc9, 0x8d, 0xac, 0xab, 0xe6, 0x4b, + 0x8d, 0xf5, 0xf8, 0xcd, 0x9e, 0x3d, 0x5b, 0x22, 0x8e, 0xe2, 0x3c, 0xf0, 0x9b, 0x96, 0x64, 0xa1, + 0xac, 0x4a, 0x3e, 0x2e, 0x63, 0xfe, 0xfc, 0xf9, 0xb3, 0xb4, 0x7a, 0xf5, 0x6a, 0x55, 0x1b, 0xf9, + 0x80, 0xa6, 0x44, 0x9c, 0xcb, 0x79, 0xc8, 0x37, 0x1f, 0xd7, 0x93, 0x8d, 0x6d, 0x64, 0x75, 0x3c, + 0xa7, 0xeb, 0x6e, 0xc1, 0x96, 0x47, 0x11, 0xd8, 0x63, 0x70, 0xeb, 0x78, 0xfc, 0x8a, 0x34, 0xae, + 0x26, 0x26, 0xbb, 0xae, 0x13, 0x3d, 0x01, 0x46, 0x8f, 0x1e, 0x0d, 0x2b, 0x57, 0xae, 0xa4, 0x65, + 0xfc, 0xc1, 0xde, 0x48, 0x76, 0x53, 0xa7, 0xab, 0x8b, 0x39, 0xb0, 0xab, 0x80, 0xb8, 0x2f, 0x5e, + 0xbc, 0xa0, 0x35, 0x5c, 0x79, 0x7c, 0xf3, 0xe6, 0xcd, 0x60, 0x14, 0x58, 0xb7, 0x6e, 0x1d, 0x90, + 0x1d, 0xdb, 0x29, 0x1c, 0x57, 0x17, 0xe3, 0x16, 0xda, 0xe4, 0x03, 0xa2, 0x0a, 0x3c, 0xfc, 0x48, + 0xd9, 0xaa, 0x55, 0xab, 0xe8, 0xf9, 0x1b, 0x3f, 0xef, 0x75, 0xe7, 0xce, 0x1d, 0xd8, 0xbc, 0x79, + 0x33, 0xd5, 0x0f, 0x4f, 0x29, 0x17, 0x2f, 0x5e, 0x84, 0xc5, 0x8b, 0x17, 0x2b, 0x68, 0xb0, 0x42, + 0x96, 0x97, 0x02, 0x59, 0xa6, 0x0a, 0x78, 0xee, 0xc7, 0xd3, 0x28, 0x4b, 0x64, 0xa7, 0x77, 0x7a, + 0x3a, 0x62, 0xf5, 0x94, 0x94, 0x14, 0xba, 0x32, 0x1a, 0x73, 0x5b, 0x52, 0x77, 0x23, 0x18, 0x4c, + 0xcf, 0x76, 0x90, 0x27, 0xca, 0x69, 0xae, 0x4f, 0x0f, 0xc6, 0xc7, 0xfa, 0xdd, 0xbb, 0x77, 0x55, + 0x3d, 0x14, 0xe9, 0xc3, 0x1d, 0xf2, 0xc5, 0xc6, 0xc1, 0x7c, 0xb7, 0x6f, 0xdf, 0xae, 0xa0, 0x27, + 0xc1, 0x0b, 0x46, 0xd1, 0xac, 0xb3, 0x1d, 0xea, 0x99, 0x6c, 0xb3, 0x3b, 0xd5, 0x6b, 0x32, 0xd5, + 0x01, 0x9a, 0x5a, 0xec, 0xac, 0xc3, 0x87, 0x37, 0xe1, 0xb7, 0x01, 0x98, 0xf2, 0xb3, 0x66, 0xcd, + 0xe2, 0x70, 0xbd, 0x42, 0x63, 0x63, 0xa3, 0xc4, 0xb6, 0xf2, 0x47, 0x5a, 0xf6, 0x65, 0x3c, 0x3d, + 0x9a, 0x50, 0x6d, 0xb8, 0x20, 0x9b, 0x7c, 0xb2, 0x8f, 0xeb, 0x30, 0x6d, 0xda, 0x34, 0x5e, 0x26, + 0x17, 0x56, 0x89, 0x6c, 0x6c, 0x1f, 0x8a, 0x94, 0xc2, 0x51, 0x17, 0xa6, 0x3f, 0xe6, 0x46, 0x96, + 0xbc, 0xeb, 0x32, 0x0c, 0xd3, 0x68, 0x7b, 0x00, 0xce, 0x9d, 0x3b, 0xa7, 0x30, 0x00, 0x1d, 0x8b, + 0x7b, 0x03, 0xe0, 0x27, 0x06, 0xe5, 0x86, 0x61, 0x59, 0xfe, 0x29, 0x02, 0x72, 0xb7, 0x21, 0x91, + 0x8b, 0x2d, 0xc7, 0xc1, 0xf5, 0xff, 0x13, 0x26, 0x4c, 0x90, 0xb6, 0x6e, 0xdd, 0x2a, 0x6d, 0xd9, + 0xb2, 0x45, 0xc2, 0x73, 0x34, 0xdb, 0x9a, 0x02, 0x69, 0xb1, 0x9d, 0x5c, 0x58, 0xb9, 0x79, 0x47, + 0x8e, 0x1c, 0x91, 0xd2, 0xd3, 0xd3, 0x15, 0xf4, 0x6c, 0x84, 0xe0, 0x67, 0x0a, 0xc8, 0x06, 0x0a, + 0xbc, 0x8d, 0x5c, 0x84, 0xa5, 0xec, 0xec, 0x6c, 0xa9, 0xba, 0xba, 0x9a, 0xd3, 0xcb, 0x0b, 0xe4, + 0xab, 0x03, 0x1c, 0x17, 0x65, 0xa5, 0xa6, 0xa6, 0x4a, 0x93, 0x26, 0x4d, 0x52, 0xc8, 0x47, 0x38, + 0x7e, 0x3a, 0xb1, 0xbb, 0xc9, 0xf6, 0x00, 0xa0, 0x42, 0x55, 0x55, 0x55, 0xb4, 0x17, 0xca, 0x8d, + 0x46, 0x85, 0xb1, 0x8e, 0x86, 0xe3, 0xde, 0x1e, 0xa1, 0x12, 0xd9, 0x6c, 0x44, 0x22, 0xd7, 0x0d, + 0x09, 0x9d, 0x84, 0x34, 0xf2, 0x03, 0xe9, 0xc9, 0xf5, 0x41, 0xba, 0x7a, 0xf5, 0xaa, 0x8a, 0x7c, + 0xd7, 0xae, 0x5d, 0x12, 0xb9, 0xf5, 0xe5, 0xf8, 0x48, 0xbf, 0x77, 0xef, 0x5e, 0x8a, 0x77, 0xfc, + 0xf8, 0x71, 0xba, 0x59, 0x04, 0xe3, 0x85, 0x9d, 0x02, 0xbf, 0xec, 0xa1, 0xb7, 0xad, 0xc0, 0xa5, + 0x4b, 0x97, 0x24, 0xad, 0x3d, 0x1a, 0x10, 0xb6, 0x7e, 0xfd, 0x7a, 0xa9, 0xb4, 0xb4, 0x54, 0xa5, + 0x83, 0x15, 0x80, 0x2d, 0x17, 0x61, 0x62, 0x98, 0x48, 0x16, 0x3d, 0x60, 0xfb, 0x1f, 0x31, 0x8b, + 0x7a, 0xf4, 0x5b, 0x32, 0x11, 0x00, 0x8f, 0x43, 0x2f, 0x02, 0x20, 0x02, 0xe0, 0xb1, 0x07, 0x3c, + 0x16, 0x2f, 0x46, 0x80, 0x08, 0x80, 0xc7, 0x1e, 0xf0, 0x58, 0xbc, 0x18, 0x01, 0x22, 0x00, 0x1e, + 0x7b, 0xc0, 0x63, 0xf1, 0xff, 0x07, 0x81, 0x2f, 0x8c, 0xaf, 0x25, 0xdb, 0xd9, 0x2e, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXVideoIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x37, 0x39, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xcc, + 0x4b, 0x33, 0xb9, 0x00, 0x00, 0x09, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x7b, + 0x4c, 0x54, 0xd9, 0x19, 0x9f, 0x99, 0x7b, 0x67, 0x18, 0x9e, 0x83, 0xc0, 0xcc, 0x30, 0x83, 0x2c, + 0xa2, 0x80, 0x3c, 0x15, 0x96, 0xe2, 0xae, 0x8f, 0xd4, 0xf5, 0x11, 0x13, 0xb7, 0xb6, 0x31, 0xa6, + 0xd5, 0x08, 0x6a, 0xb4, 0xba, 0x3e, 0x6a, 0x1a, 0x13, 0x63, 0xac, 0x35, 0x21, 0x9a, 0xfe, 0x63, + 0x62, 0x8d, 0xb1, 0x35, 0x46, 0x8d, 0xd1, 0xac, 0xa6, 0x35, 0xd1, 0xa6, 0x66, 0xdd, 0x9a, 0xad, + 0x31, 0x0d, 0x6e, 0xa3, 0x8d, 0x6f, 0x08, 0x6f, 0x99, 0x05, 0x11, 0x81, 0x85, 0x79, 0xc0, 0xbc, + 0x98, 0xc7, 0xbd, 0x33, 0xf7, 0x4e, 0x7f, 0x77, 0xce, 0xee, 0x75, 0x32, 0x28, 0x8f, 0x19, 0x08, + 0x6b, 0x32, 0x07, 0xb8, 0x7c, 0xe7, 0x9c, 0xef, 0x3b, 0xe7, 0xfb, 0x7d, 0xdf, 0x77, 0xce, 0x77, + 0xee, 0xb9, 0xd2, 0x40, 0x20, 0x20, 0xf9, 0x90, 0x8b, 0xec, 0x43, 0x56, 0x5e, 0xd0, 0x3d, 0x06, + 0x60, 0xa6, 0x3d, 0x18, 0xf3, 0x40, 0xcc, 0x03, 0x51, 0x5a, 0x60, 0x86, 0x43, 0xe8, 0xd9, 0xb3, + 0x67, 0x83, 0x83, 0x83, 0xd1, 0x60, 0x98, 0x19, 0x00, 0x0c, 0xc3, 0xb4, 0xb6, 0x77, 0x9d, 0xf9, + 0xeb, 0xc5, 0x23, 0x7f, 0xfc, 0xc3, 0xed, 0xdb, 0x5f, 0x45, 0x03, 0x80, 0x8e, 0x46, 0x78, 0xb2, + 0xb2, 0x83, 0x83, 0x16, 0xe3, 0x90, 0xcd, 0x60, 0xe8, 0xf9, 0xde, 0x62, 0x4d, 0x4e, 0x4e, 0xee, + 0x1d, 0xb4, 0xf5, 0xf5, 0x7e, 0xff, 0xe2, 0xc5, 0x8b, 0xc9, 0x8e, 0x13, 0xca, 0x1f, 0x15, 0x80, + 0xbb, 0x77, 0xef, 0x32, 0x5e, 0x6f, 0x5c, 0x42, 0xb2, 0xcb, 0xed, 0x95, 0x4a, 0xa5, 0x18, 0x97, + 0xa6, 0x69, 0xa5, 0x52, 0x91, 0x9c, 0x94, 0xa4, 0xce, 0x48, 0xcb, 0xd4, 0x6a, 0x92, 0x92, 0x92, + 0xd0, 0xd8, 0xdf, 0x6f, 0x6c, 0x6c, 0xed, 0xec, 0x37, 0x59, 0x19, 0x2f, 0x23, 0x95, 0xd1, 0x1f, + 0x65, 0xeb, 0xca, 0xb4, 0x6a, 0x9e, 0x93, 0x98, 0x4c, 0x96, 0x21, 0xab, 0xfd, 0xf1, 0xe3, 0xc7, + 0x0e, 0x87, 0x23, 0x25, 0x25, 0x25, 0x54, 0xad, 0x89, 0xd3, 0x51, 0x01, 0x18, 0x1a, 0x1a, 0xea, + 0xea, 0xfc, 0x4e, 0x9d, 0x53, 0x2e, 0x97, 0xcb, 0xe7, 0xcc, 0xce, 0xc0, 0xa1, 0x84, 0x65, 0x39, + 0x37, 0xe3, 0xb3, 0xd8, 0x6c, 0xcd, 0x86, 0x01, 0x9b, 0xfd, 0x89, 0x67, 0xc4, 0xe9, 0xb0, 0x19, + 0xfb, 0x8c, 0xb6, 0xb4, 0x0c, 0x5d, 0x41, 0x5e, 0xee, 0xec, 0xac, 0xcc, 0xa4, 0xe4, 0x44, 0xc0, + 0x18, 0x30, 0x5a, 0xad, 0x56, 0x67, 0xf7, 0xeb, 0x3e, 0xa9, 0x4c, 0x3e, 0x38, 0x68, 0xec, 0xea, + 0xea, 0xaa, 0xa8, 0xa8, 0x98, 0xb8, 0xd2, 0xa1, 0x9c, 0x51, 0x01, 0x50, 0x05, 0x8b, 0x5e, 0xa7, + 0xcb, 0xc9, 0xd6, 0xe6, 0xe7, 0xea, 0x29, 0x19, 0xdc, 0x00, 0x3f, 0x08, 0x0f, 0x9e, 0x97, 0x70, + 0x5c, 0x80, 0xf1, 0xb1, 0x76, 0xa7, 0xbb, 0x7f, 0xc0, 0xdc, 0xfa, 0xb2, 0xeb, 0xf5, 0xab, 0xae, + 0xde, 0xbe, 0x3e, 0xf4, 0x26, 0x26, 0x26, 0x3b, 0x9c, 0xae, 0xef, 0xda, 0x5b, 0xf4, 0x9a, 0xa4, + 0x3f, 0x1d, 0xaf, 0x8d, 0x53, 0x50, 0x5a, 0xad, 0x36, 0x54, 0xa7, 0x49, 0xd1, 0x51, 0x01, 0xa8, + 0xab, 0xab, 0x63, 0x3d, 0x9e, 0xf8, 0xb4, 0x5c, 0x4d, 0xba, 0xca, 0x6e, 0x77, 0xd0, 0x32, 0x4a, + 0x4a, 0x41, 0x7b, 0x19, 0x0d, 0x24, 0x40, 0x23, 0x91, 0xc4, 0xc9, 0xa9, 0xcc, 0x8c, 0x94, 0x2c, + 0xad, 0x6a, 0x51, 0x79, 0x01, 0xc3, 0xfa, 0x7b, 0x7a, 0x07, 0x9a, 0x5a, 0x0d, 0xf7, 0x1f, 0xd4, + 0x1b, 0xda, 0x1b, 0xaa, 0x7f, 0xfd, 0xf9, 0x6f, 0xb7, 0x57, 0xc3, 0x75, 0x93, 0x52, 0x77, 0x34, + 0x73, 0x54, 0x00, 0x1a, 0x1a, 0x1a, 0x1c, 0x56, 0x2b, 0x9d, 0xf2, 0x51, 0x6e, 0x4e, 0xae, 0xd5, + 0xee, 0xa2, 0x64, 0x28, 0xd0, 0x5f, 0x22, 0x10, 0xf8, 0x93, 0x0a, 0x0f, 0x50, 0x14, 0x25, 0x21, + 0xf4, 0x6c, 0x9d, 0x7a, 0xb6, 0x5e, 0xf3, 0xf3, 0x25, 0x95, 0x4f, 0xea, 0x5f, 0xb6, 0xb7, 0xb5, + 0x3e, 0x7b, 0xd1, 0xb4, 0xe4, 0xd3, 0xca, 0xd1, 0x3a, 0x4d, 0xaa, 0x25, 0x2a, 0x00, 0x1e, 0x8f, + 0x47, 0x4a, 0xd1, 0x0c, 0xcb, 0xf5, 0xf4, 0x9b, 0x38, 0xde, 0x27, 0xa7, 0x69, 0xb9, 0x9c, 0xa2, + 0x69, 0x4a, 0x4e, 0x09, 0x4f, 0xc1, 0x17, 0x14, 0x01, 0x22, 0x38, 0xe6, 0x47, 0x54, 0x52, 0x84, + 0xd8, 0xa7, 0x1f, 0x17, 0x16, 0xe4, 0xcd, 0xfe, 0xe6, 0xde, 0xa3, 0xaf, 0xbf, 0xf9, 0x0f, 0xcd, + 0x3b, 0xf7, 0xed, 0xdb, 0x97, 0x95, 0x95, 0x35, 0x29, 0xbd, 0x45, 0xe6, 0xa8, 0x00, 0x64, 0x66, + 0x66, 0x42, 0x43, 0x9b, 0xd5, 0xf2, 0x8f, 0x7f, 0xfe, 0xab, 0xb4, 0xa4, 0x38, 0x0b, 0xb1, 0x92, + 0x9c, 0xa8, 0x4a, 0x49, 0x50, 0x25, 0x27, 0xc4, 0xc7, 0x2b, 0x04, 0x00, 0xf8, 0x09, 0x16, 0xc1, + 0x1d, 0x32, 0xf8, 0x41, 0x08, 0x2c, 0x50, 0x41, 0x5a, 0xb6, 0xf8, 0x93, 0x8a, 0x53, 0xa7, 0xeb, + 0x92, 0x65, 0xce, 0xa6, 0xa6, 0xa6, 0x99, 0x01, 0x70, 0xf2, 0xe4, 0x49, 0xa4, 0xa4, 0x53, 0xa7, + 0xff, 0xd2, 0xd3, 0xd1, 0xa8, 0xd5, 0xaa, 0x0b, 0x8b, 0xe7, 0x27, 0x26, 0xd0, 0x71, 0x71, 0x4a, + 0xa8, 0xe8, 0xf7, 0x07, 0xa4, 0xd2, 0x80, 0xa0, 0x2e, 0x60, 0xc8, 0xa4, 0x3c, 0x4f, 0xd0, 0x70, + 0xa8, 0x52, 0x94, 0x54, 0xc6, 0x07, 0x38, 0xce, 0xef, 0xf3, 0xb1, 0x0a, 0x05, 0x9d, 0xae, 0x4a, + 0x17, 0x82, 0x2c, 0xd2, 0x12, 0x95, 0x07, 0x0a, 0x0a, 0x0a, 0x30, 0x6f, 0xda, 0xac, 0x59, 0x99, + 0x5a, 0xb5, 0x32, 0x4e, 0x9e, 0xa8, 0xa4, 0x52, 0x92, 0xe2, 0x3b, 0x0d, 0x2f, 0x47, 0x1c, 0xc3, + 0x89, 0x49, 0x49, 0x64, 0x3f, 0x12, 0x00, 0x08, 0x19, 0x22, 0xe8, 0x08, 0x81, 0x90, 0xb8, 0xdd, + 0x6e, 0x8d, 0x36, 0xb3, 0xb0, 0xa8, 0x94, 0xe3, 0x78, 0xaf, 0xcb, 0x5b, 0xf7, 0xfc, 0xf1, 0x2f, + 0xd6, 0xfd, 0x52, 0xe8, 0x88, 0xa8, 0x44, 0x05, 0x80, 0xcc, 0x18, 0x90, 0x04, 0x54, 0xaa, 0xd4, + 0x00, 0xcf, 0xf9, 0x18, 0x6c, 0x9b, 0x72, 0x1f, 0xeb, 0x5b, 0xbe, 0x7c, 0x79, 0x5a, 0x5a, 0x3a, + 0x72, 0x1c, 0xb4, 0x86, 0xe6, 0x34, 0x25, 0xc3, 0x53, 0x22, 0x81, 0x43, 0x64, 0xf1, 0x4a, 0x65, + 0x6f, 0x7f, 0x7f, 0x73, 0x6b, 0x1b, 0x03, 0xfb, 0xe3, 0x97, 0xf5, 0x19, 0x4d, 0xc6, 0x68, 0x5e, + 0x6b, 0xa7, 0x00, 0x00, 0x76, 0xcf, 0x0c, 0xb5, 0x9a, 0xe7, 0x39, 0xb7, 0x87, 0x89, 0x53, 0xca, + 0x19, 0x96, 0x0d, 0x48, 0xa9, 0xcb, 0x97, 0x2e, 0x74, 0xb4, 0x37, 0x05, 0xfd, 0x20, 0xc5, 0x82, + 0x86, 0xa2, 0x00, 0x33, 0x3c, 0x6c, 0x59, 0xf7, 0xab, 0xdf, 0xfc, 0x6c, 0xd1, 0x12, 0x96, 0xf5, + 0xb3, 0x00, 0xcb, 0xf8, 0x59, 0x24, 0x0a, 0xbb, 0x23, 0x1a, 0x00, 0x53, 0x70, 0x98, 0xc3, 0x8e, + 0xa3, 0xd5, 0x68, 0xfc, 0x7e, 0x0e, 0xeb, 0xc1, 0xeb, 0x15, 0xdc, 0xe0, 0x74, 0xba, 0xe5, 0x0a, + 0x79, 0x4d, 0xcd, 0xe6, 0x3d, 0xbb, 0xbf, 0x58, 0xb7, 0xee, 0x73, 0x43, 0xc7, 0x4b, 0xb3, 0xd9, + 0x58, 0x55, 0x55, 0x69, 0x36, 0x19, 0x5f, 0xf7, 0xf4, 0xb0, 0x1c, 0x0f, 0x3c, 0x5e, 0x2f, 0xcb, + 0xb0, 0x3e, 0x9e, 0x27, 0x77, 0x0a, 0x91, 0x5f, 0x2c, 0x4c, 0x01, 0x00, 0xb9, 0x9c, 0xd6, 0x68, + 0xb5, 0x7e, 0xbf, 0x1f, 0x1e, 0xf0, 0x7a, 0xa0, 0x16, 0xeb, 0x74, 0x8e, 0x28, 0xe4, 0xf2, 0xfc, + 0xfc, 0xfc, 0xd2, 0x92, 0x12, 0xbd, 0x5e, 0xf7, 0xaa, 0xfb, 0xd5, 0x67, 0x9f, 0x2d, 0x37, 0x18, + 0x0c, 0x26, 0x8b, 0xd9, 0xef, 0xe7, 0x3d, 0x6e, 0xaf, 0x00, 0x80, 0x65, 0xbd, 0x8c, 0x8f, 0xf7, + 0x73, 0x11, 0x45, 0xfe, 0x5b, 0xa1, 0x29, 0x08, 0x21, 0x8a, 0xa6, 0x34, 0x6a, 0x35, 0xc7, 0x75, + 0xc2, 0x01, 0x0c, 0x93, 0x80, 0xf0, 0xc0, 0xd9, 0xce, 0x64, 0xb6, 0x7c, 0xfb, 0x6d, 0x9d, 0x5e, + 0x9f, 0xdd, 0xd2, 0xda, 0x1c, 0x17, 0x17, 0x67, 0xe8, 0x30, 0x48, 0xa4, 0x92, 0x8a, 0xf2, 0x72, + 0x97, 0xdb, 0xed, 0x72, 0x7b, 0x58, 0x9f, 0x1f, 0xda, 0xc3, 0x09, 0x7e, 0xde, 0xff, 0x56, 0x97, + 0x88, 0xa8, 0x29, 0x00, 0x40, 0x53, 0x74, 0x7a, 0x3a, 0xb6, 0xc2, 0x60, 0xfa, 0x52, 0x20, 0x97, + 0xd1, 0xd0, 0xaf, 0xec, 0xe3, 0xa5, 0x76, 0xbb, 0xb5, 0xcf, 0xcc, 0xa4, 0xeb, 0x8a, 0x0e, 0xd7, + 0xfe, 0x19, 0x51, 0x8e, 0x83, 0x2a, 0x96, 0xad, 0x5a, 0xa3, 0x19, 0x71, 0xb9, 0x20, 0x82, 0xbd, + 0x15, 0x8d, 0x3c, 0xcf, 0xc3, 0x75, 0x08, 0xbf, 0x88, 0x94, 0x17, 0x84, 0xa6, 0x00, 0x00, 0x96, + 0xaf, 0x5e, 0xa7, 0x4d, 0x49, 0x55, 0x69, 0x35, 0x50, 0x2f, 0xdd, 0xed, 0x1c, 0x52, 0xa9, 0x52, + 0x32, 0x34, 0x6a, 0xa4, 0x01, 0x21, 0x7f, 0x61, 0xdf, 0xa7, 0x29, 0x09, 0x94, 0x0d, 0xf0, 0xd8, + 0x8b, 0xc0, 0x3c, 0x64, 0x36, 0xa5, 0xce, 0x52, 0xcd, 0x52, 0xa5, 0x3a, 0xdd, 0x01, 0x5a, 0xae, + 0x28, 0x2a, 0x2a, 0x8a, 0xf8, 0x2c, 0x1d, 0x2d, 0x00, 0x28, 0x85, 0xbd, 0x25, 0x5e, 0x19, 0xff, + 0xdf, 0xff, 0x3d, 0xf1, 0x30, 0xfc, 0x90, 0xc3, 0x23, 0xa1, 0xdd, 0x43, 0x76, 0x37, 0x6d, 0xb4, + 0x8f, 0xb0, 0x32, 0xf4, 0x06, 0x01, 0x08, 0x89, 0x80, 0xc7, 0x5e, 0x8b, 0xe5, 0x8a, 0x7f, 0x52, + 0xc9, 0x88, 0xc3, 0x6e, 0x32, 0xdb, 0xe8, 0x04, 0x4b, 0x7b, 0x5b, 0xdb, 0xc1, 0xdf, 0x7f, 0xb1, + 0x64, 0xd1, 0x02, 0x8d, 0x46, 0x13, 0xb1, 0x07, 0x04, 0x3f, 0x46, 0x26, 0xec, 0xf3, 0xf9, 0x90, + 0x92, 0x46, 0x46, 0x46, 0xcc, 0x66, 0x4b, 0x43, 0x63, 0xd3, 0xc9, 0x93, 0xa7, 0xcc, 0x96, 0x21, + 0xe4, 0x54, 0xa4, 0x58, 0xc1, 0xee, 0x38, 0x2d, 0x08, 0x23, 0x23, 0x0f, 0x08, 0xc3, 0x07, 0xa9, + 0xe0, 0x3f, 0xa1, 0xc6, 0x23, 0x85, 0xc1, 0x1b, 0xc5, 0x85, 0x05, 0x7f, 0xff, 0xdb, 0x97, 0x19, + 0x19, 0x6a, 0x9c, 0x49, 0x11, 0x60, 0x42, 0xcf, 0xe4, 0x4b, 0x84, 0x62, 0x64, 0x22, 0x44, 0x30, + 0xc7, 0x71, 0x0a, 0x85, 0x1c, 0x47, 0xb3, 0xdf, 0xed, 0xdd, 0x69, 0x32, 0x99, 0x84, 0xa0, 0x41, + 0xce, 0x22, 0x56, 0x79, 0x8f, 0x65, 0xd0, 0x8f, 0x13, 0x2a, 0xf8, 0xf2, 0xf2, 0xf3, 0x81, 0xd0, + 0xeb, 0xf5, 0x46, 0xac, 0x3d, 0xd4, 0x88, 0xdc, 0x03, 0x10, 0x86, 0x9e, 0xc0, 0x80, 0x02, 0x02, + 0x56, 0x14, 0x54, 0x9f, 0x64, 0x01, 0xfe, 0x1f, 0x30, 0x4f, 0x52, 0x50, 0x64, 0x8f, 0x0a, 0x80, + 0x38, 0xca, 0x0c, 0x12, 0x53, 0x90, 0xc8, 0x66, 0x50, 0x7b, 0x4c, 0x1d, 0x03, 0x30, 0xb3, 0xf6, + 0x8f, 0x79, 0x60, 0xa6, 0xed, 0x1f, 0xf3, 0xc0, 0x87, 0xec, 0x01, 0x9c, 0x21, 0x4f, 0x9f, 0x3e, + 0x7d, 0xeb, 0xd6, 0xad, 0xb1, 0x41, 0x20, 0xcd, 0x05, 0xcf, 0x9b, 0xd1, 0x1e, 0x9b, 0xdf, 0x3b, + 0x0b, 0x92, 0x68, 0x64, 0xa5, 0xa3, 0xa3, 0x03, 0x83, 0xce, 0x9d, 0x3b, 0x77, 0x0c, 0xf1, 0xa3, + 0x47, 0x8f, 0x8a, 0x37, 0x0e, 0xb8, 0xfc, 0x19, 0x83, 0x33, 0xe2, 0xae, 0xc8, 0xf3, 0x80, 0x42, + 0xa1, 0xc0, 0x9b, 0xca, 0xd8, 0xf7, 0x39, 0x39, 0x39, 0x39, 0xf3, 0xe6, 0xcd, 0x4b, 0x4b, 0x4b, + 0x03, 0x54, 0x5c, 0x41, 0xbf, 0xd7, 0x8a, 0xd1, 0x74, 0x44, 0x0c, 0x1d, 0x82, 0x38, 0x90, 0x4e, + 0x44, 0x1c, 0x91, 0x06, 0x0d, 0xb7, 0x6c, 0xd9, 0x32, 0x11, 0xe6, 0xc9, 0xf2, 0x84, 0x7b, 0xe0, + 0xc8, 0x91, 0x23, 0x9f, 0x04, 0xcb, 0x9a, 0x35, 0x6b, 0xda, 0xda, 0xda, 0x9e, 0x3f, 0x7f, 0xbe, + 0x6a, 0xd5, 0x2a, 0x34, 0x2c, 0x5d, 0xba, 0xf4, 0xda, 0xb5, 0x6b, 0xa2, 0xa5, 0xb6, 0x6d, 0xdb, + 0x46, 0x1a, 0x97, 0x2d, 0x5b, 0x66, 0xb3, 0xd9, 0xc4, 0x76, 0x91, 0xb8, 0x71, 0xe3, 0xc6, 0xd6, + 0xad, 0x5b, 0x31, 0xc8, 0xf1, 0xe3, 0xc7, 0x47, 0xdb, 0x1e, 0x2d, 0x07, 0x0f, 0x1e, 0x5c, 0xb8, + 0x70, 0x21, 0x3e, 0x20, 0x94, 0x94, 0x94, 0x1c, 0x3e, 0x7c, 0xd8, 0xe5, 0x72, 0x89, 0xb2, 0x20, + 0xfa, 0xfb, 0xfb, 0x77, 0xec, 0xd8, 0x51, 0x58, 0x58, 0x08, 0x86, 0xf2, 0xf2, 0xf2, 0xd1, 0x0c, + 0x6f, 0x99, 0xc3, 0x10, 0xeb, 0x74, 0x3a, 0xb1, 0xef, 0xea, 0xd5, 0xab, 0x67, 0xcf, 0x9e, 0x15, + 0xab, 0x1b, 0x36, 0x6c, 0x20, 0xcc, 0x4e, 0xa7, 0x33, 0xf4, 0x00, 0xdc, 0xdd, 0xdd, 0x1d, 0x36, + 0xc8, 0xae, 0x5d, 0xbb, 0x44, 0x29, 0x10, 0xe4, 0x94, 0x2a, 0x7a, 0x60, 0x60, 0x60, 0x20, 0x3b, + 0x3b, 0x9b, 0x30, 0xe0, 0x5d, 0x94, 0x10, 0xc5, 0xc5, 0xc5, 0xc0, 0x40, 0xc6, 0xc1, 0x37, 0x9b, + 0xd1, 0xef, 0x68, 0xb9, 0xb9, 0xb9, 0x16, 0x8b, 0x25, 0x6c, 0x22, 0x54, 0x85, 0x23, 0x71, 0x68, + 0xe9, 0xec, 0xec, 0x2c, 0x2d, 0x2d, 0xc5, 0xa0, 0xbb, 0x77, 0xef, 0x46, 0x84, 0xe0, 0xa6, 0x64, + 0xf3, 0xe6, 0xcd, 0xa8, 0x6e, 0xda, 0xb4, 0x29, 0x54, 0xbe, 0xb9, 0xb9, 0x19, 0x36, 0x26, 0x73, + 0x87, 0x01, 0xb8, 0x7d, 0xfb, 0x36, 0x69, 0x87, 0x73, 0xae, 0x5c, 0xb9, 0xb2, 0x62, 0xc5, 0x0a, + 0x52, 0xad, 0xa9, 0xa9, 0x21, 0x13, 0xad, 0x5f, 0xbf, 0x1e, 0x2d, 0xab, 0x57, 0xaf, 0xee, 0xeb, + 0xeb, 0x43, 0x0b, 0xae, 0xb8, 0xc9, 0x42, 0x3a, 0x74, 0xe8, 0x10, 0xaa, 0x98, 0x94, 0x28, 0x00, + 0x53, 0x9e, 0x3b, 0x77, 0x0e, 0xfa, 0x1c, 0x3b, 0x76, 0x2c, 0x3e, 0x3e, 0x1e, 0x22, 0xd5, 0xd5, + 0xd5, 0xa1, 0xaa, 0x12, 0x3a, 0x1c, 0x00, 0x5a, 0x2f, 0x5e, 0xbc, 0x08, 0x6e, 0x7c, 0x32, 0x01, + 0x8d, 0xf3, 0x3a, 0x16, 0x22, 0x4c, 0x88, 0x3d, 0x27, 0x4c, 0x18, 0x57, 0xd3, 0x44, 0xb3, 0x30, + 0x00, 0x44, 0x3f, 0xbc, 0x25, 0x42, 0x96, 0x88, 0x60, 0x04, 0x70, 0x12, 0x00, 0x90, 0x22, 0xfb, + 0xd2, 0x99, 0x33, 0x67, 0xfe, 0xfd, 0x63, 0xd9, 0xb9, 0x73, 0x27, 0x18, 0x16, 0x2c, 0x58, 0x00, + 0x7e, 0x5c, 0xf4, 0x92, 0x61, 0xb1, 0x72, 0xc4, 0x19, 0x21, 0x8b, 0x46, 0xa5, 0x52, 0x89, 0x1d, + 0x59, 0x6c, 0x24, 0xc4, 0x3b, 0x00, 0x20, 0x42, 0xf0, 0x05, 0x0e, 0x02, 0xf5, 0xf5, 0xf5, 0x77, + 0xee, 0xdc, 0x01, 0xb1, 0x76, 0xed, 0xda, 0x30, 0x31, 0x54, 0xdf, 0x07, 0x00, 0x81, 0x0b, 0x91, + 0xed, 0xdb, 0xb7, 0x8b, 0x22, 0xfb, 0xf7, 0xef, 0x47, 0x0b, 0x01, 0x20, 0xea, 0x87, 0x96, 0xb0, + 0x92, 0x97, 0x97, 0x07, 0x91, 0x9b, 0x37, 0x6f, 0x92, 0x76, 0x7c, 0x77, 0x12, 0x47, 0x10, 0x1b, + 0xe1, 0x10, 0xb1, 0x91, 0x10, 0xef, 0x78, 0xa5, 0xc4, 0xba, 0x41, 0xbc, 0x9e, 0x3f, 0x7f, 0xfe, + 0xf2, 0xe5, 0xcb, 0x3d, 0x3d, 0x3d, 0x18, 0xee, 0xc0, 0x81, 0x03, 0x61, 0x93, 0x8d, 0x51, 0x85, + 0x38, 0x7a, 0xe1, 0x16, 0x91, 0x27, 0x94, 0xd6, 0xeb, 0xf5, 0xa4, 0xfd, 0xd2, 0xa5, 0x4b, 0x65, + 0x65, 0x65, 0x22, 0x0f, 0xdc, 0x42, 0xae, 0x8a, 0xc5, 0x45, 0x88, 0x4f, 0xc8, 0x48, 0x32, 0x84, + 0x01, 0x34, 0x08, 0x04, 0x02, 0x2e, 0xf4, 0x45, 0x91, 0x1f, 0x88, 0x30, 0x40, 0xa4, 0xda, 0xd8, + 0xd8, 0x88, 0x6e, 0xf8, 0x01, 0xef, 0x7b, 0xb0, 0x28, 0x79, 0x69, 0x0c, 0xe5, 0x84, 0x2b, 0xe1, + 0x28, 0x32, 0x04, 0xac, 0x12, 0xba, 0x9f, 0xee, 0xd9, 0xb3, 0x07, 0xed, 0x50, 0xe8, 0xe1, 0xc3, + 0x87, 0x10, 0x79, 0xfa, 0xf4, 0x29, 0xd2, 0x05, 0x5a, 0xc4, 0x35, 0x30, 0x7f, 0xfe, 0x7c, 0x54, + 0xb1, 0x41, 0x89, 0xab, 0xb6, 0xa5, 0xa5, 0x05, 0x52, 0x27, 0x4e, 0x9c, 0x00, 0xbf, 0xdd, 0x6e, + 0x27, 0xfe, 0xc7, 0xbe, 0xf7, 0xe6, 0xcd, 0x1b, 0xb4, 0x60, 0x91, 0x10, 0xd8, 0x24, 0xaa, 0x43, + 0xd5, 0x00, 0xfd, 0x8e, 0x10, 0x22, 0x1c, 0x8b, 0x17, 0x2f, 0x26, 0xfa, 0x61, 0x25, 0x85, 0xc9, + 0x54, 0x55, 0x55, 0x91, 0xae, 0xd0, 0x27, 0x02, 0x00, 0x2b, 0x1e, 0x9c, 0x98, 0x35, 0x31, 0x31, + 0x91, 0x74, 0x91, 0x70, 0x22, 0x34, 0xec, 0x57, 0x5b, 0x5b, 0x0b, 0x86, 0xfb, 0xf7, 0xef, 0x93, + 0x7d, 0x09, 0x4b, 0x73, 0xe5, 0xca, 0x95, 0x62, 0x2a, 0xdc, 0xb8, 0x71, 0x23, 0x99, 0xe8, 0xc2, + 0x85, 0x0b, 0x44, 0x04, 0x7b, 0x1d, 0xb6, 0x5a, 0x42, 0xc3, 0x22, 0x8f, 0x1e, 0x3d, 0x0a, 0xd3, + 0x04, 0xd5, 0xf7, 0x02, 0xb8, 0x77, 0xef, 0x5e, 0x6a, 0x6a, 0x2a, 0xd6, 0x1f, 0x2e, 0x4e, 0xc2, + 0xc4, 0x90, 0x01, 0xc8, 0xa0, 0xa1, 0x4f, 0x04, 0x00, 0xee, 0x17, 0x08, 0x27, 0x66, 0xc2, 0x75, + 0x15, 0xe9, 0x45, 0x48, 0x60, 0xbd, 0xc2, 0x93, 0xd0, 0x86, 0x00, 0x00, 0x0f, 0xbe, 0x0e, 0x62, + 0x77, 0x27, 0x0c, 0xe8, 0x02, 0xf3, 0xde, 0xbd, 0x7b, 0x87, 0x87, 0x87, 0xc5, 0x89, 0xae, 0x5f, + 0xbf, 0x4e, 0x96, 0x3e, 0xe1, 0xa9, 0xac, 0xac, 0x7c, 0xf0, 0xe0, 0x81, 0xd8, 0x1b, 0x4a, 0x8c, + 0xf5, 0x52, 0x8f, 0xcf, 0xc0, 0x30, 0x15, 0x39, 0x08, 0x84, 0xea, 0x3a, 0x41, 0x1a, 0xfb, 0x3d, + 0x82, 0x04, 0x47, 0x09, 0x62, 0xef, 0xd1, 0x52, 0x48, 0x67, 0x58, 0x63, 0x08, 0x74, 0xd1, 0x63, + 0x61, 0x3c, 0xd8, 0xb8, 0x31, 0xc8, 0x9c, 0x39, 0x73, 0x48, 0x50, 0x85, 0xf5, 0x92, 0xea, 0x58, + 0x00, 0xde, 0x29, 0xf0, 0x53, 0x6b, 0x0c, 0x3f, 0x4a, 0xfc, 0xd4, 0xf4, 0x1b, 0x57, 0x9f, 0x18, + 0x80, 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, + 0x71, 0x4d, 0x34, 0xcd, 0x0c, 0x31, 0x0f, 0x4c, 0xb3, 0x81, 0xc7, 0x1d, 0x3e, 0xe6, 0x81, 0x71, + 0x4d, 0x34, 0xcd, 0x0c, 0xff, 0x07, 0x71, 0xef, 0x64, 0x50, 0x13, 0xcd, 0x1c, 0x52, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXVideoIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x1d, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x5d, 0x09, 0x5c, 0x55, 0xd5, 0xd6, 0xff, 0x33, 0x5f, 0x66, 0x10, 0x70, 0x46, 0xc0, 0x11, 0x4d, + 0x02, 0x51, 0xeb, 0xe5, 0x94, 0xa5, 0x69, 0x8e, 0x5f, 0x45, 0xa9, 0x2f, 0xfd, 0x5e, 0x59, 0xaf, + 0xb9, 0xac, 0x34, 0x9b, 0x9e, 0x59, 0x9f, 0xf6, 0x9e, 0xcd, 0xbe, 0xcc, 0x29, 0x2d, 0x7d, 0x95, + 0xe6, 0x33, 0x87, 0xd4, 0xd2, 0x1c, 0x32, 0x07, 0x1c, 0x02, 0x19, 0x84, 0x00, 0x11, 0x04, 0x19, + 0x45, 0xe6, 0x79, 0x1e, 0xce, 0xb7, 0xd6, 0xbe, 0xf7, 0x1c, 0xef, 0xbd, 0x70, 0x91, 0x0b, 0xc8, + 0xd5, 0xf7, 0xd8, 0xfc, 0x2e, 0xe7, 0xec, 0x79, 0xaf, 0xb5, 0xf6, 0xb8, 0xf6, 0x5a, 0xeb, 0x98, + 0x49, 0xe4, 0x60, 0x84, 0x33, 0x6f, 0x2e, 0xed, 0xd5, 0xac, 0x2b, 0xd8, 0xb4, 0x6e, 0xb5, 0x4e, + 0x12, 0x33, 0xfd, 0x1a, 0x96, 0xbf, 0xb5, 0x08, 0x92, 0xb9, 0x25, 0xac, 0xa8, 0xa8, 0x32, 0x95, + 0x2b, 0x8a, 0x2e, 0x9e, 0xc3, 0x9a, 0x6f, 0x77, 0x29, 0x99, 0x2c, 0x95, 0x37, 0xcd, 0xcb, 0x98, + 0xb1, 0x77, 0xa3, 0xa8, 0xb0, 0x10, 0xc5, 0x6e, 0x5e, 0x48, 0x4f, 0x4a, 0xc2, 0xc2, 0x25, 0x2b, + 0x74, 0x92, 0x34, 0x6a, 0xd2, 0xee, 0xed, 0xdf, 0x21, 0x22, 0xbb, 0x14, 0x97, 0x62, 0xa2, 0x71, + 0xcf, 0x6d, 0x03, 0x91, 0x96, 0x99, 0xa9, 0x93, 0xa1, 0x51, 0x93, 0x38, 0xf6, 0x8d, 0xbf, 0x7f, + 0x0c, 0xa9, 0xa1, 0x01, 0x97, 0x92, 0x93, 0xb1, 0x7b, 0xf3, 0x97, 0x3a, 0x19, 0x1a, 0x35, 0x89, + 0x63, 0x33, 0x2f, 0xc5, 0xc3, 0xc1, 0xc9, 0x05, 0x9e, 0x0e, 0xd6, 0x3a, 0x89, 0xd9, 0xd3, 0x64, + 0x0d, 0x8d, 0x52, 0x69, 0x05, 0x34, 0x82, 0x41, 0x2b, 0xae, 0xc9, 0x57, 0x25, 0xc3, 0xe2, 0xc5, + 0x8b, 0x45, 0x02, 0x33, 0x33, 0x33, 0xbc, 0xfe, 0xfa, 0xeb, 0x4a, 0xe2, 0x07, 0x1f, 0x7c, 0x10, + 0x0d, 0x04, 0x8f, 0xec, 0x6e, 0x7c, 0x93, 0xda, 0xaf, 0x86, 0x2d, 0xff, 0xda, 0x84, 0x2b, 0x57, + 0xae, 0xc8, 0x4d, 0x57, 0x9e, 0x8d, 0xe8, 0x50, 0x5a, 0x52, 0x0c, 0x47, 0x27, 0x67, 0x1c, 0x3f, + 0xb8, 0x17, 0x31, 0x99, 0x79, 0xe8, 0x52, 0x99, 0x87, 0xd7, 0xdf, 0xff, 0xa8, 0xe9, 0x0c, 0xc7, + 0x0f, 0xee, 0x47, 0x68, 0x42, 0x0a, 0x02, 0xc6, 0x4f, 0x84, 0xca, 0x27, 0x00, 0xdf, 0xfd, 0x73, + 0x19, 0xd2, 0xb3, 0x4b, 0x94, 0xc4, 0xfc, 0xa2, 0xa0, 0x95, 0x3d, 0xfb, 0xf6, 0xec, 0x42, 0x69, + 0x3d, 0x10, 0x7c, 0xe4, 0x30, 0x1c, 0xa9, 0xbb, 0xbe, 0xbc, 0x78, 0x29, 0xcc, 0xcd, 0x75, 0x92, + 0xe8, 0x66, 0xf8, 0x6c, 0xfd, 0x26, 0xd4, 0x56, 0x57, 0xa1, 0xa6, 0xaa, 0x12, 0xc5, 0xb5, 0x12, + 0xe2, 0x32, 0x72, 0xb8, 0x1c, 0x1d, 0xd7, 0x08, 0x86, 0xe4, 0xb8, 0x68, 0xd8, 0x58, 0x58, 0xc2, + 0xce, 0xd1, 0x19, 0x36, 0x35, 0x95, 0x3a, 0x89, 0xd9, 0xd3, 0x7e, 0x68, 0xe5, 0x2e, 0xd2, 0x94, + 0x13, 0x4d, 0xe2, 0x48, 0xed, 0xb9, 0x40, 0xc6, 0xbf, 0xb7, 0xb7, 0x37, 0x86, 0x0d, 0x1b, 0x06, + 0x2b, 0x2b, 0x2b, 0xec, 0xd8, 0xb1, 0x43, 0xa4, 0x69, 0xbf, 0x26, 0x35, 0xd5, 0x1c, 0x0e, 0x33, + 0xba, 0x06, 0x43, 0x05, 0x19, 0x0a, 0x6f, 0x44, 0x06, 0x43, 0x09, 0xe5, 0xf0, 0x7d, 0xfb, 0xf6, + 0xe1, 0xfb, 0xcd, 0x5f, 0xc0, 0xab, 0x97, 0x17, 0x60, 0x61, 0x81, 0xb2, 0xd2, 0x7c, 0xdc, 0x3f, + 0x73, 0x2e, 0x66, 0x3c, 0xf0, 0xa0, 0x9c, 0x44, 0xe7, 0xa9, 0xdb, 0x4d, 0x74, 0xa2, 0x80, 0x9f, + 0xf7, 0xed, 0xc1, 0xd1, 0x23, 0x87, 0x44, 0xe8, 0x3b, 0x8b, 0x17, 0x20, 0x37, 0x37, 0x07, 0x71, + 0x51, 0x61, 0x88, 0x88, 0x8c, 0x86, 0x95, 0x8f, 0x3f, 0xf2, 0xf2, 0x8a, 0x10, 0x7b, 0x21, 0x1e, + 0xb1, 0x11, 0x21, 0x7a, 0x39, 0xaf, 0x79, 0x5b, 0x84, 0xa2, 0x27, 0x5e, 0xfb, 0x1b, 0x06, 0xfa, + 0x0e, 0x42, 0x75, 0x45, 0x05, 0x88, 0x74, 0xc8, 0x4e, 0x4b, 0xc1, 0x50, 0xff, 0x40, 0x24, 0x44, + 0x9d, 0xc3, 0x6b, 0xaf, 0xbe, 0x82, 0xde, 0xbd, 0x7b, 0x5f, 0x2b, 0x51, 0xef, 0xed, 0xba, 0x28, + 0xaa, 0xab, 0xab, 0x43, 0x8f, 0x1e, 0xdd, 0x50, 0x52, 0x50, 0x40, 0x59, 0x69, 0x19, 0xa1, 0x0a, + 0x12, 0xe2, 0x62, 0x10, 0x7b, 0x3e, 0x02, 0x66, 0x0d, 0x75, 0xc8, 0xcd, 0xc9, 0x69, 0x5b, 0x05, + 0x96, 0x96, 0x96, 0xc8, 0xce, 0x48, 0x47, 0x55, 0x59, 0x39, 0x15, 0x2f, 0xc1, 0xa3, 0x7b, 0x0f, + 0xf4, 0xf7, 0x0b, 0xc0, 0xe3, 0x0f, 0x4d, 0xc7, 0xd6, 0x1f, 0x0f, 0x60, 0x58, 0x60, 0xa0, 0x5e, + 0x9b, 0x75, 0xbd, 0x2d, 0x42, 0x91, 0x6e, 0x16, 0xe3, 0x7c, 0xcd, 0x12, 0x99, 0x8b, 0xf2, 0xf3, + 0xf3, 0xd3, 0x29, 0xf1, 0xe4, 0xc9, 0x93, 0x38, 0x77, 0xee, 0x9c, 0x4e, 0x58, 0xb3, 0x1e, 0x5e, + 0x3d, 0xd9, 0xc5, 0xc4, 0xc4, 0xf0, 0x3a, 0x2d, 0xe5, 0xe5, 0xe5, 0x89, 0x27, 0x87, 0xcd, 0x9b, + 0x37, 0x4f, 0x79, 0x67, 0x3f, 0xc7, 0xdb, 0xd9, 0xd9, 0x29, 0x61, 0xec, 0x8f, 0x8c, 0x8c, 0xd4, + 0xf1, 0x7f, 0xfd, 0xf5, 0xd7, 0x8a, 0x5f, 0xe4, 0xe1, 0x7f, 0xda, 0x8e, 0x33, 0xc9, 0x8e, 0xdf, + 0xe5, 0x1f, 0x87, 0xc9, 0xef, 0x72, 0x1a, 0x43, 0xfe, 0x2e, 0x5d, 0xba, 0xc8, 0x45, 0x48, 0xa6, + 0xa7, 0x01, 0xb5, 0xb2, 0x4d, 0xee, 0xd6, 0x87, 0xe0, 0xba, 0xdd, 0x54, 0x1f, 0x3f, 0xbc, 0x71, + 0xf8, 0xe0, 0x9d, 0xc5, 0x28, 0x2a, 0xc8, 0xc7, 0x8a, 0x25, 0xaf, 0xa1, 0xbe, 0x9e, 0x96, 0xc1, + 0x66, 0x9c, 0xd1, 0x15, 0x14, 0xe6, 0xe7, 0x22, 0x22, 0x2a, 0x0a, 0x2f, 0x3c, 0x35, 0x17, 0x97, + 0x93, 0x13, 0x11, 0x1e, 0x16, 0xd6, 0x4c, 0xf1, 0x7a, 0xeb, 0xb2, 0x7e, 0xca, 0xed, 0x5b, 0xb7, + 0x20, 0x35, 0xe5, 0x32, 0xb2, 0xae, 0x64, 0xe2, 0xeb, 0xd5, 0x9f, 0x89, 0xd6, 0x2e, 0xfb, 0xdb, + 0x62, 0x5a, 0x55, 0x81, 0x51, 0x53, 0x1f, 0x85, 0x54, 0x5f, 0x87, 0x1d, 0xff, 0x5a, 0xa7, 0x9f, + 0x4d, 0xc7, 0x6f, 0x10, 0x82, 0xb3, 0x21, 0xa1, 0x98, 0x3d, 0x77, 0x1e, 0xb6, 0x7f, 0xfb, 0x0d, + 0x4d, 0xdb, 0xfb, 0xf0, 0xe4, 0x8b, 0x0b, 0xf1, 0xf5, 0xda, 0xcf, 0xe1, 0xd6, 0xb3, 0x0f, 0x06, + 0x4e, 0x9c, 0x85, 0xac, 0xc2, 0x22, 0xc4, 0x24, 0x26, 0x62, 0x80, 0xdf, 0x30, 0x9d, 0x02, 0xf5, + 0x3d, 0x06, 0x67, 0xd3, 0x43, 0xbb, 0xb6, 0xa2, 0xaa, 0x20, 0x07, 0xc5, 0x36, 0x4e, 0x48, 0x4e, + 0x4a, 0x47, 0x8f, 0xe3, 0x67, 0x61, 0x33, 0x20, 0x10, 0xde, 0x03, 0xcd, 0x90, 0x18, 0x1b, 0x83, + 0x72, 0xda, 0xe3, 0x4c, 0x1c, 0x35, 0x1a, 0xe9, 0xf1, 0x71, 0xfa, 0x65, 0xea, 0xf8, 0x0d, 0x42, + 0x50, 0x48, 0x7b, 0xe7, 0x7b, 0xa6, 0x4c, 0x47, 0x41, 0x72, 0x1c, 0x26, 0x3f, 0xf0, 0x30, 0xce, + 0x9d, 0x3f, 0x8f, 0xcb, 0x09, 0xf1, 0x48, 0xa1, 0x5f, 0x17, 0x7b, 0x3b, 0x54, 0xe4, 0xe7, 0xa0, + 0xd2, 0xd2, 0x01, 0xcb, 0x57, 0xe9, 0xee, 0x7a, 0x75, 0x4a, 0x27, 0x8f, 0x41, 0x08, 0x3e, 0xdf, + 0xf8, 0x2d, 0xe2, 0xe2, 0x13, 0x30, 0x60, 0xe4, 0x28, 0x44, 0x86, 0x9e, 0x15, 0x5b, 0x04, 0xd4, + 0x4b, 0x68, 0xa0, 0x2d, 0xc5, 0xb0, 0xdb, 0x06, 0x21, 0x3f, 0x23, 0x09, 0xdd, 0xbb, 0xf6, 0xd0, + 0x2f, 0xaf, 0x91, 0xdf, 0x20, 0x04, 0x9c, 0x72, 0x88, 0xef, 0x40, 0xd4, 0xd6, 0xd6, 0xa2, 0x9e, + 0x7f, 0x75, 0xfc, 0xab, 0x13, 0xbf, 0xb7, 0xdf, 0x7b, 0x0f, 0x47, 0x0e, 0x1f, 0x41, 0xf0, 0xa9, + 0x93, 0x8d, 0x0a, 0xd4, 0x0f, 0x30, 0x08, 0x81, 0x9c, 0x50, 0x5d, 0x68, 0xad, 0x1a, 0x02, 0x9a, + 0xee, 0x1a, 0xa4, 0x06, 0xb8, 0x79, 0x7a, 0x43, 0x65, 0x67, 0x8f, 0x6f, 0xa9, 0x67, 0x5d, 0xcf, + 0x5d, 0xb7, 0x82, 0xea, 0xea, 0x6a, 0x64, 0x5c, 0x4e, 0xe1, 0x0d, 0x0e, 0x1a, 0xea, 0x1b, 0xd0, + 0xb5, 0x67, 0x4f, 0x8c, 0xf6, 0xf3, 0x45, 0x45, 0x55, 0x95, 0xe8, 0xbe, 0xde, 0x3e, 0x7d, 0x9b, + 0xad, 0xe3, 0xba, 0x15, 0xf4, 0xed, 0xea, 0x81, 0xa4, 0x98, 0x18, 0xf0, 0x76, 0xce, 0x82, 0x66, + 0xec, 0x2a, 0xea, 0x3d, 0x61, 0xf1, 0xe9, 0x00, 0x55, 0x76, 0xbd, 0xc2, 0xb9, 0xe6, 0xff, 0xf0, + 0xc9, 0x6e, 0xf2, 0xe4, 0xc9, 0x8d, 0xf0, 0x7b, 0xec, 0xd8, 0xb1, 0x46, 0x61, 0xcd, 0x05, 0x18, + 0x8d, 0xa2, 0x6e, 0xdd, 0xba, 0x21, 0x3b, 0x3b, 0xbb, 0xb9, 0x32, 0x75, 0xe3, 0xe4, 0xc5, 0x93, + 0x42, 0xa5, 0x23, 0x47, 0x8e, 0x48, 0xb4, 0xf7, 0x96, 0xa8, 0x95, 0x22, 0xd8, 0xc9, 0xc9, 0x49, + 0x8e, 0x16, 0xeb, 0xf1, 0x84, 0x09, 0x13, 0xc4, 0x93, 0x03, 0xa7, 0x4f, 0x9f, 0x2e, 0x2d, 0x5f, + 0xbe, 0x5c, 0x1a, 0x3a, 0x74, 0xa8, 0x94, 0x9e, 0x9e, 0x2e, 0x79, 0x79, 0x79, 0x49, 0x53, 0xa6, + 0x4c, 0x91, 0xe8, 0xd0, 0x22, 0x45, 0x45, 0x45, 0x5d, 0xcb, 0xa7, 0xbc, 0xd1, 0x8b, 0x8f, 0x8f, + 0x8f, 0x52, 0x00, 0x87, 0x07, 0x06, 0x06, 0x2a, 0xd1, 0xdc, 0x00, 0x76, 0xd4, 0x9b, 0xc4, 0x93, + 0xfd, 0x0f, 0x3c, 0xf0, 0x80, 0xf8, 0x1d, 0x3c, 0x78, 0x50, 0x27, 0x9f, 0x9c, 0x96, 0x13, 0x5e, + 0xdb, 0x42, 0xb0, 0x47, 0x53, 0x88, 0x88, 0xa0, 0x77, 0xf6, 0xcb, 0x61, 0x23, 0x47, 0x8e, 0x14, + 0xef, 0xdc, 0x88, 0xbb, 0xee, 0xba, 0x4b, 0xaa, 0xa8, 0xa8, 0x50, 0xe2, 0xa3, 0xa3, 0xa3, 0xa5, + 0xf8, 0xf8, 0x78, 0xc5, 0xcf, 0xf9, 0x65, 0x67, 0x34, 0x0d, 0xa8, 0x42, 0xa3, 0x5c, 0xb3, 0x73, + 0x91, 0x51, 0x25, 0x19, 0x48, 0x7c, 0xeb, 0x57, 0x70, 0xc3, 0x69, 0x60, 0x00, 0x73, 0xed, 0x16, + 0x7c, 0xdd, 0xc9, 0xb4, 0xdd, 0x6a, 0xa2, 0x82, 0x78, 0xed, 0x3a, 0xfd, 0xdb, 0x6f, 0x28, 0xc9, + 0xbf, 0x0a, 0x6b, 0x07, 0x17, 0x8c, 0x9f, 0x34, 0x09, 0x2a, 0x95, 0x6d, 0x9b, 0xaa, 0xe8, 0x10, + 0x0a, 0x7c, 0xf2, 0x8f, 0x65, 0xe8, 0x41, 0x6b, 0x60, 0x7e, 0x5a, 0x12, 0xce, 0x45, 0xfe, 0x0e, + 0xda, 0xdc, 0xc3, 0x8c, 0xb8, 0x20, 0x7d, 0x3d, 0xfb, 0xa1, 0xab, 0x77, 0x7f, 0x24, 0x44, 0x47, + 0x61, 0xe9, 0x87, 0x9f, 0xb6, 0x0a, 0x90, 0x36, 0x03, 0x90, 0x97, 0x97, 0x8f, 0x90, 0x93, 0xbf, + 0x21, 0xeb, 0xea, 0x55, 0xb8, 0x51, 0xc3, 0xfc, 0x47, 0xde, 0x89, 0xbe, 0xfd, 0xfa, 0x2b, 0x8d, + 0xf9, 0xe8, 0xef, 0xef, 0xc2, 0xad, 0x6b, 0x37, 0xfc, 0xb0, 0x75, 0x13, 0x2a, 0xca, 0xcb, 0x30, + 0xe6, 0x8e, 0xd1, 0xa8, 0xb1, 0xb4, 0x81, 0x3d, 0xea, 0x71, 0x3e, 0x2e, 0x0a, 0xf6, 0xb4, 0xff, + 0x09, 0x7a, 0xf4, 0x09, 0x84, 0x1e, 0x3f, 0x86, 0x8f, 0xd6, 0x7e, 0xad, 0xe4, 0x6b, 0xe9, 0x4b, + 0xab, 0x47, 0xf1, 0x87, 0x7f, 0x5f, 0x86, 0x0b, 0xb4, 0xbb, 0x5b, 0xbf, 0xf2, 0x03, 0x0c, 0x1f, + 0x35, 0x16, 0x7f, 0x7d, 0xfe, 0x25, 0x3c, 0x38, 0x67, 0x2e, 0x7e, 0xda, 0xf6, 0x2d, 0xce, 0x9e, + 0x0e, 0xc6, 0xab, 0xcf, 0xfd, 0x55, 0xb4, 0xa1, 0xe0, 0xea, 0x15, 0x1c, 0xfa, 0x69, 0x2f, 0xac, + 0xad, 0xec, 0xd0, 0xd3, 0x6b, 0x30, 0x6a, 0x7b, 0xfa, 0x22, 0x9e, 0x98, 0x58, 0x59, 0x92, 0x3d, + 0xcc, 0xea, 0x24, 0xd4, 0x55, 0xd5, 0x62, 0xdf, 0xf6, 0xad, 0xb0, 0x6e, 0x65, 0x4b, 0x5a, 0x45, + 0x81, 0xb7, 0x16, 0xbd, 0x84, 0x15, 0x9f, 0x7e, 0xa1, 0x20, 0xe9, 0xad, 0x97, 0x9f, 0xc5, 0x80, + 0xa1, 0xc4, 0x55, 0x38, 0x1f, 0x82, 0x65, 0x2b, 0xd7, 0xc1, 0xda, 0xda, 0x1a, 0x89, 0xa9, 0x99, + 0xd8, 0xb1, 0x6b, 0x37, 0x2c, 0x89, 0x57, 0x32, 0x62, 0xe4, 0x08, 0xec, 0xf9, 0xe5, 0x20, 0x54, + 0xf6, 0x8e, 0xb0, 0xa2, 0xb8, 0xf4, 0xc4, 0x78, 0xa4, 0x47, 0x06, 0xa3, 0x9b, 0xbb, 0x1b, 0x72, + 0x8b, 0xf2, 0x28, 0xee, 0x14, 0xf1, 0x56, 0x36, 0xe2, 0x99, 0x05, 0x0b, 0x95, 0x32, 0x5b, 0xfa, + 0xd2, 0x2a, 0x00, 0xde, 0x5e, 0xf0, 0x34, 0xfa, 0xf4, 0x1d, 0x48, 0x75, 0xd0, 0x52, 0x45, 0x67, + 0x9b, 0xd3, 0x89, 0xe9, 0xc8, 0x49, 0xbd, 0x0c, 0x67, 0xda, 0xd4, 0x4f, 0x0f, 0x9a, 0x85, 0xea, + 0x1a, 0xda, 0x8e, 0xa5, 0xa5, 0x51, 0xbc, 0x9a, 0x63, 0xc6, 0xbb, 0xa9, 0x8b, 0x91, 0x61, 0x50, + 0x39, 0xbb, 0xc0, 0xd6, 0xde, 0x01, 0x76, 0xb4, 0x1f, 0xec, 0xef, 0xe3, 0x8d, 0xac, 0xf0, 0xa3, + 0xb0, 0x25, 0xc6, 0xd8, 0xa2, 0xf7, 0x3f, 0x23, 0x9e, 0x10, 0x1d, 0x37, 0x5a, 0xe1, 0x5a, 0x05, + 0xc0, 0x49, 0xda, 0xb3, 0x98, 0x99, 0x9b, 0x61, 0xec, 0xdd, 0xe3, 0x71, 0xfc, 0xf8, 0x6f, 0xf8, + 0xd7, 0xfa, 0xb5, 0x98, 0xf9, 0xc2, 0xeb, 0x88, 0x08, 0x0d, 0x11, 0x18, 0x67, 0x6e, 0x09, 0x37, + 0x9e, 0xd6, 0x4b, 0x5e, 0x7d, 0xc5, 0x80, 0xb5, 0xa0, 0x2d, 0x60, 0xd0, 0x43, 0x8f, 0x50, 0x43, + 0xad, 0x50, 0x55, 0x98, 0x0e, 0x07, 0x02, 0xc4, 0xd1, 0xc9, 0x11, 0x39, 0xb4, 0x35, 0xd1, 0xe7, + 0x53, 0x18, 0x03, 0x47, 0xab, 0x00, 0xe0, 0x0a, 0xf8, 0x94, 0xb9, 0xe2, 0xbd, 0xbf, 0x21, 0x37, + 0x35, 0x11, 0x7d, 0xc6, 0x4e, 0x43, 0x51, 0x69, 0x05, 0x6d, 0x8a, 0xe5, 0x93, 0xa6, 0x06, 0x04, + 0x6e, 0x3f, 0xfd, 0x99, 0x9b, 0x99, 0xe3, 0xfc, 0xd9, 0xd3, 0xe8, 0xd3, 0xa7, 0x0f, 0x54, 0xb6, + 0x76, 0xf8, 0xf5, 0x00, 0x8d, 0x09, 0x6b, 0x1b, 0x01, 0xdc, 0x9b, 0x6f, 0xbe, 0x81, 0xa0, 0xa0, + 0x20, 0x63, 0xda, 0xac, 0x93, 0xb6, 0xd5, 0x00, 0x68, 0x97, 0xf2, 0xd1, 0xba, 0xf5, 0x28, 0x2a, + 0xab, 0xa2, 0xee, 0xc4, 0x3c, 0x77, 0xc6, 0xfe, 0xb5, 0x87, 0xa0, 0x00, 0x01, 0x10, 0x71, 0xe6, + 0x18, 0xca, 0x68, 0xc0, 0xf2, 0x71, 0x42, 0xa5, 0xb2, 0x81, 0x87, 0x8b, 0x2b, 0x36, 0x7f, 0xb9, + 0x46, 0x9d, 0xb6, 0x0d, 0xff, 0xdb, 0x65, 0x21, 0xab, 0xa9, 0xa9, 0x45, 0x2d, 0x1d, 0x43, 0xf8, + 0x12, 0x84, 0x1d, 0xed, 0xfa, 0xe8, 0xbf, 0xfa, 0x9d, 0xfb, 0x3f, 0x77, 0x25, 0xdf, 0x80, 0x91, + 0x28, 0x2f, 0x2f, 0x27, 0x76, 0x62, 0x39, 0x9c, 0x5c, 0xba, 0xc0, 0x9a, 0xf8, 0xd6, 0x97, 0x2e, + 0x5d, 0x42, 0xff, 0xfe, 0xd7, 0xa6, 0x5c, 0x91, 0xd9, 0xc8, 0x7f, 0xed, 0x02, 0x40, 0xf6, 0x95, + 0x2c, 0x3a, 0x47, 0x55, 0xa3, 0xa2, 0xb4, 0x54, 0xa9, 0x9e, 0x1b, 0xcd, 0xdd, 0xac, 0x87, 0x67, + 0x1f, 0x11, 0x56, 0x49, 0x9c, 0xc4, 0xfb, 0x47, 0xdf, 0x01, 0xef, 0xbe, 0x3e, 0x08, 0x0b, 0x0b, + 0x47, 0x44, 0xcc, 0x45, 0xb1, 0xa0, 0x29, 0x19, 0x5a, 0xf9, 0xd2, 0x2e, 0x5d, 0x88, 0xeb, 0x8e, + 0x88, 0x3c, 0x8f, 0x6d, 0xff, 0xde, 0x86, 0xec, 0x9c, 0x5c, 0x54, 0x56, 0x6a, 0x6e, 0x03, 0x34, + 0x63, 0x40, 0xdd, 0xab, 0xd4, 0x00, 0x75, 0xe9, 0xe2, 0x8a, 0x87, 0x1f, 0x0a, 0xc2, 0xe4, 0xc9, + 0x93, 0xc4, 0x59, 0xaf, 0x95, 0xed, 0x56, 0xb2, 0xb5, 0x1b, 0x00, 0x4a, 0x89, 0x1d, 0xfc, 0xd2, + 0xca, 0xf5, 0xaf, 0x83, 0x5b, 0xd9, 0x4c, 0x75, 0x6d, 0x02, 0x80, 0x07, 0x28, 0xff, 0x0c, 0xb9, + 0xb3, 0x67, 0xcf, 0x8a, 0xf8, 0xeb, 0xa5, 0x33, 0x94, 0xbf, 0x45, 0xe1, 0xf2, 0xe1, 0x4c, 0x7e, + 0x7e, 0xfc, 0xf1, 0xc7, 0x3c, 0x0f, 0x8a, 0xdf, 0xa3, 0x8f, 0x3e, 0x2a, 0xfd, 0xfa, 0xeb, 0xaf, + 0x8a, 0xff, 0xc9, 0x27, 0x9f, 0x94, 0x93, 0x29, 0x61, 0x9c, 0xb6, 0x29, 0x77, 0xc7, 0x1d, 0x77, + 0x88, 0x34, 0x01, 0x01, 0x01, 0x92, 0x87, 0x87, 0x87, 0x78, 0xd7, 0x4e, 0xf7, 0xc1, 0x07, 0x1f, + 0xe8, 0x94, 0x71, 0xf1, 0xe2, 0x45, 0xed, 0x68, 0xe9, 0xa9, 0xa7, 0x9e, 0xd2, 0x89, 0x8f, 0x8b, + 0x8b, 0xd3, 0x89, 0x97, 0x3d, 0x4d, 0xd6, 0x2e, 0x1f, 0x73, 0xf3, 0xf3, 0xf3, 0x45, 0x3a, 0x6e, + 0xe4, 0xc6, 0x8d, 0x1b, 0xe5, 0x3c, 0xca, 0x93, 0x8f, 0xcd, 0xfa, 0x00, 0xec, 0xd9, 0xb3, 0x47, + 0x84, 0x6d, 0xda, 0xb4, 0x49, 0x49, 0x27, 0x23, 0x44, 0x0e, 0x60, 0xbf, 0xbf, 0xbf, 0xbf, 0xf4, + 0xcd, 0x37, 0xdf, 0x28, 0x3f, 0x0e, 0x1b, 0x33, 0x66, 0x8c, 0x48, 0xc2, 0xef, 0x83, 0x06, 0x0d, + 0x92, 0x93, 0x2b, 0x61, 0xcc, 0x13, 0xd0, 0x77, 0x4d, 0x02, 0xc0, 0x89, 0x96, 0x2c, 0x59, 0xa2, + 0x60, 0xe0, 0x9d, 0x77, 0xde, 0xd1, 0xcf, 0x27, 0xfc, 0x4d, 0x01, 0x20, 0x1f, 0xbf, 0x7d, 0x7d, + 0x7d, 0x45, 0x1a, 0x62, 0x25, 0x2a, 0xe5, 0xc8, 0x85, 0xc8, 0x00, 0x11, 0x8f, 0x58, 0x0e, 0x92, + 0x5e, 0x78, 0xe1, 0x05, 0x69, 0xcb, 0x96, 0x2d, 0xc2, 0x2f, 0xc7, 0x13, 0xeb, 0x4b, 0xf8, 0x3f, + 0xfd, 0xf4, 0x53, 0x51, 0xc6, 0xd4, 0xa9, 0x53, 0x95, 0xf4, 0xf2, 0x8b, 0x41, 0x00, 0x38, 0x01, + 0xb1, 0x50, 0x24, 0xba, 0x95, 0x94, 0xd3, 0x1a, 0xf5, 0xe4, 0xc6, 0x31, 0x25, 0x9b, 0x73, 0xa5, + 0xa5, 0xa5, 0xd2, 0x4f, 0x3f, 0xfd, 0x24, 0x25, 0x27, 0x27, 0x37, 0x99, 0x2c, 0x27, 0x27, 0x47, + 0x74, 0x61, 0x5a, 0x4f, 0x9a, 0x8c, 0xe7, 0xc0, 0xce, 0x69, 0x94, 0xc8, 0x6d, 0x52, 0xd7, 0xa6, + 0x69, 0xd4, 0xa4, 0x2d, 0xd7, 0x54, 0x7e, 0xcb, 0x03, 0xd0, 0x39, 0x06, 0x4c, 0xdd, 0x8d, 0x6e, + 0xf9, 0x2e, 0xd4, 0x2e, 0xe7, 0x81, 0x96, 0x50, 0x81, 0xcf, 0x06, 0x97, 0x49, 0xe2, 0xeb, 0x8f, + 0xd0, 0x33, 0xbc, 0xf6, 0x60, 0xf0, 0xb0, 0xe1, 0x18, 0x34, 0xf8, 0xb6, 0x6b, 0x7b, 0x29, 0xba, + 0x65, 0x02, 0x49, 0x21, 0x18, 0xeb, 0x3a, 0x64, 0x0c, 0x24, 0x51, 0xc3, 0x7f, 0xd9, 0xb1, 0x05, + 0x7d, 0x06, 0x0c, 0xc1, 0xb8, 0x7b, 0x27, 0xd0, 0x46, 0x41, 0xc2, 0xb1, 0xdf, 0x7e, 0xc5, 0xd5, + 0xc4, 0x58, 0x4c, 0x7a, 0x78, 0x1e, 0xfa, 0xf5, 0x1f, 0x60, 0x6c, 0xbb, 0x95, 0xf4, 0x37, 0x1c, + 0x80, 0x98, 0x98, 0x58, 0xe2, 0x87, 0x1e, 0x44, 0xd2, 0xa5, 0x24, 0xba, 0xa8, 0xaa, 0xa1, 0xc3, + 0x7f, 0x21, 0xac, 0x6d, 0x6c, 0xe0, 0xe2, 0xec, 0x06, 0x3b, 0x95, 0x3d, 0x31, 0x2f, 0xcc, 0x30, + 0x63, 0xd6, 0x3c, 0x0c, 0xb9, 0xed, 0x36, 0xa5, 0x51, 0xc6, 0xbc, 0xdc, 0xf0, 0x31, 0xb0, 0x93, + 0x58, 0x8a, 0xbe, 0xb7, 0x07, 0xd0, 0x31, 0x32, 0x18, 0xee, 0x6e, 0x1e, 0xc8, 0x2b, 0x28, 0x44, + 0x61, 0x71, 0x19, 0x1c, 0x6d, 0xed, 0x11, 0x13, 0x13, 0x86, 0x29, 0x0f, 0x06, 0xe1, 0x9b, 0x75, + 0x2b, 0xa9, 0xcd, 0xbc, 0xdd, 0x31, 0xde, 0xb5, 0x99, 0x02, 0xbf, 0x13, 0x1b, 0x31, 0x25, 0x29, + 0x11, 0x75, 0xc4, 0x79, 0xee, 0xe3, 0xe5, 0x83, 0xb1, 0x13, 0xee, 0x53, 0xfa, 0x75, 0x7c, 0xfc, + 0x05, 0xba, 0x92, 0xf5, 0xc0, 0xdc, 0xd9, 0xd3, 0x51, 0x57, 0x53, 0x87, 0xba, 0xba, 0x7a, 0x8c, + 0xfe, 0xd3, 0x68, 0xd4, 0x9b, 0x59, 0x20, 0x95, 0xba, 0x4f, 0x1d, 0x1d, 0xfc, 0x6d, 0x55, 0x96, + 0x78, 0x7b, 0xf9, 0x6a, 0x64, 0x90, 0xcc, 0xd0, 0x3d, 0x13, 0x27, 0x19, 0x0d, 0x81, 0xf1, 0xa3, + 0x46, 0x53, 0x45, 0x72, 0x72, 0x0a, 0x8e, 0xee, 0xdf, 0x09, 0xef, 0xfe, 0xbe, 0x98, 0x38, 0x75, + 0x06, 0x31, 0xb4, 0x2c, 0x51, 0x90, 0x9f, 0x8b, 0x55, 0x2b, 0xde, 0xc5, 0xf0, 0xd1, 0x13, 0x30, + 0xe6, 0xee, 0xbb, 0x71, 0x25, 0x2d, 0x15, 0x27, 0x0e, 0x1f, 0x44, 0x0f, 0x8f, 0x6e, 0xc4, 0xb1, + 0x20, 0x0c, 0x93, 0x44, 0x69, 0xbd, 0x47, 0x5f, 0x38, 0x39, 0x3a, 0xc2, 0x8d, 0xce, 0xcd, 0x35, + 0x25, 0xb9, 0xb0, 0xb6, 0xb4, 0x40, 0xf0, 0xd1, 0x43, 0x68, 0xa8, 0xad, 0x6a, 0x15, 0x00, 0xad, + 0xea, 0x42, 0x99, 0x24, 0xb7, 0xf8, 0xfd, 0xe6, 0xf5, 0x70, 0xec, 0xd2, 0x15, 0x29, 0x74, 0xd3, + 0xeb, 0xee, 0xee, 0x01, 0x17, 0x57, 0x57, 0x84, 0x45, 0x44, 0x21, 0x37, 0xbf, 0x10, 0xd5, 0x55, + 0xe5, 0x38, 0xb4, 0x7f, 0xbf, 0xa0, 0x4a, 0x4a, 0x4a, 0x12, 0xb2, 0x73, 0x0b, 0x91, 0x44, 0x00, + 0xf7, 0x1b, 0x37, 0x1d, 0xa1, 0x27, 0x8e, 0xe2, 0xdc, 0xf1, 0x5f, 0x51, 0x54, 0x54, 0x4c, 0x5c, + 0xb9, 0x5c, 0xe2, 0x6a, 0xe7, 0x20, 0x36, 0x3a, 0x42, 0x47, 0x8e, 0xd3, 0x18, 0x32, 0x18, 0x0d, + 0x00, 0x4f, 0x87, 0x1b, 0x3f, 0xff, 0x14, 0x4b, 0x96, 0x7f, 0x80, 0x59, 0x7f, 0x9e, 0x87, 0xec, + 0xf4, 0x24, 0x92, 0xac, 0x48, 0x11, 0x53, 0x63, 0x6a, 0x6c, 0x18, 0x5e, 0x7d, 0xfb, 0x3d, 0x4c, + 0x98, 0x3c, 0x95, 0x38, 0xd7, 0x91, 0x70, 0x76, 0x73, 0xc7, 0x6b, 0x6f, 0x2d, 0x45, 0x5a, 0x46, + 0x1a, 0x7a, 0x0d, 0x1d, 0x41, 0xec, 0xf5, 0x0a, 0xdc, 0x39, 0x71, 0x0a, 0xfa, 0x92, 0x80, 0x56, + 0x51, 0x56, 0x1a, 0x72, 0x8a, 0x0a, 0x50, 0x52, 0x5e, 0x8c, 0xc5, 0xef, 0xae, 0x80, 0x67, 0xbf, + 0x41, 0xc6, 0xb4, 0x5b, 0x49, 0x6b, 0x74, 0x17, 0x4a, 0xcf, 0xc8, 0xc0, 0xd0, 0x61, 0x6a, 0xa9, + 0x30, 0x16, 0xd5, 0x1c, 0x1c, 0x70, 0x27, 0x36, 0xaf, 0xfb, 0x02, 0x96, 0x34, 0xb3, 0xb0, 0x04, + 0x83, 0x9b, 0x9b, 0x1b, 0x2a, 0x2a, 0xab, 0x30, 0xf0, 0x8e, 0x7b, 0x11, 0x1e, 0x9b, 0x80, 0x90, + 0xe8, 0x0b, 0xb8, 0x67, 0xfa, 0x6c, 0xd8, 0x75, 0xf7, 0xa4, 0x1b, 0xf2, 0x06, 0x31, 0x3e, 0x7e, + 0xfc, 0x66, 0x0d, 0x1e, 0x21, 0xb6, 0xca, 0xf1, 0x90, 0xb3, 0x98, 0xf3, 0xd8, 0xf3, 0xd8, 0xb2, + 0x71, 0x2d, 0x01, 0xfe, 0xae, 0xd2, 0x28, 0x63, 0x5e, 0x8c, 0x06, 0x20, 0x3c, 0xe4, 0x77, 0x14, + 0xe7, 0xe5, 0xe2, 0x18, 0x09, 0xab, 0x32, 0x27, 0xae, 0xb0, 0xb8, 0x14, 0x35, 0xce, 0xdd, 0x51, + 0x4e, 0x83, 0x58, 0x55, 0x59, 0x84, 0x43, 0xbf, 0x1c, 0x80, 0xa3, 0xef, 0x70, 0xe4, 0x56, 0xd7, + 0xc0, 0xbe, 0x97, 0x37, 0xcd, 0x2d, 0x12, 0x7c, 0x6c, 0x9d, 0x91, 0x4a, 0x42, 0x34, 0x4e, 0xd4, + 0xcd, 0x98, 0x3b, 0xed, 0x4c, 0x5c, 0xea, 0x33, 0xe1, 0x11, 0x98, 0x3c, 0x61, 0x12, 0xc9, 0xe7, + 0x79, 0xa2, 0x57, 0x2f, 0xcf, 0x56, 0x73, 0xa7, 0x8d, 0x06, 0xa0, 0x86, 0x58, 0xe7, 0xa9, 0x29, + 0xc9, 0xa8, 0x25, 0x19, 0x0d, 0x9e, 0xf8, 0x32, 0x73, 0xf3, 0x10, 0x12, 0xfe, 0x07, 0xc9, 0x6d, + 0xd4, 0xc0, 0x7f, 0xfc, 0xfd, 0xb0, 0xe9, 0x3b, 0x04, 0x87, 0x7f, 0xde, 0xcb, 0xbc, 0x69, 0x35, + 0x22, 0x69, 0xd1, 0xaa, 0xa2, 0x9b, 0x99, 0xcc, 0xb4, 0xcb, 0xc4, 0xf0, 0xaa, 0x80, 0x8d, 0xad, + 0x2d, 0xa6, 0xcf, 0x7f, 0x19, 0xa3, 0x07, 0x7b, 0xe3, 0xec, 0xcf, 0x3f, 0xd0, 0xec, 0x54, 0x8e, + 0x69, 0x0f, 0x3c, 0x62, 0x0c, 0xd2, 0x75, 0xd2, 0x1a, 0x3d, 0x8d, 0xc6, 0xc5, 0xc5, 0xa2, 0xb8, + 0x30, 0x1f, 0x77, 0x8d, 0x1e, 0x27, 0x0a, 0x3a, 0x7c, 0xf0, 0x20, 0x7e, 0x3c, 0x7a, 0x1c, 0x6e, + 0xbd, 0x7c, 0x30, 0x7c, 0xc4, 0x30, 0x62, 0xb1, 0x9f, 0xa3, 0x1d, 0x81, 0x9a, 0xd7, 0xcf, 0x5b, + 0x06, 0x66, 0xa9, 0x94, 0x91, 0x88, 0x8d, 0xb3, 0xbd, 0x3d, 0x9c, 0xbb, 0xb8, 0xe1, 0x4a, 0x7a, + 0x0a, 0xca, 0x8a, 0x0b, 0xa1, 0x32, 0xab, 0x47, 0xf7, 0x9e, 0xbd, 0xb1, 0x68, 0xd1, 0x22, 0x9d, + 0x06, 0x19, 0xeb, 0x31, 0x9a, 0x02, 0x83, 0x07, 0x0f, 0xc1, 0x82, 0xf9, 0x73, 0x05, 0x00, 0x3c, + 0xa0, 0x7f, 0xfe, 0xf7, 0x66, 0x0c, 0xb9, 0x7b, 0x26, 0xea, 0xa9, 0xd1, 0x11, 0xe7, 0x42, 0x85, + 0x08, 0xb3, 0x8e, 0x40, 0x17, 0x11, 0xa2, 0x8a, 0xe4, 0x52, 0x1e, 0x7e, 0x68, 0x36, 0x9c, 0x48, + 0x98, 0xba, 0xa4, 0x30, 0x1b, 0x6e, 0x2c, 0xd4, 0x4e, 0x80, 0x95, 0x97, 0x11, 0x4b, 0x9e, 0xca, + 0xd0, 0x17, 0x7b, 0x36, 0x06, 0x08, 0xa3, 0x01, 0x60, 0x8c, 0xbe, 0xfa, 0xce, 0x32, 0xac, 0xfe, + 0x68, 0x05, 0xba, 0xf5, 0xf1, 0x46, 0x15, 0x2c, 0x50, 0x43, 0x97, 0x1d, 0xc5, 0xb9, 0xf9, 0xa2, + 0x5e, 0x96, 0xca, 0xe1, 0xbd, 0x8e, 0xec, 0x98, 0x0a, 0x7c, 0xd9, 0x91, 0x9f, 0x16, 0x8f, 0x6a, + 0x62, 0xad, 0x5f, 0x22, 0x25, 0x81, 0xec, 0xbc, 0x6c, 0x5a, 0x37, 0xac, 0xa8, 0xe1, 0x66, 0x18, + 0x32, 0xc4, 0xb7, 0x4d, 0x00, 0x18, 0xdd, 0x85, 0xe4, 0x86, 0x25, 0x26, 0x5e, 0xc4, 0xa7, 0x4b, + 0x5f, 0x47, 0xcf, 0x81, 0x7e, 0xb0, 0xea, 0xd5, 0x0f, 0xe5, 0xcc, 0x99, 0xd6, 0xb4, 0x5b, 0x5c, + 0x6f, 0x28, 0x30, 0xd0, 0x18, 0x28, 0x2b, 0xa3, 0x95, 0x37, 0x01, 0x3e, 0xde, 0x3e, 0x48, 0xb8, + 0x18, 0x4f, 0xdd, 0xe8, 0x32, 0xcb, 0x1f, 0x89, 0x59, 0xe9, 0x1c, 0x51, 0xad, 0xb5, 0xd7, 0x4b, + 0xdc, 0x16, 0xa3, 0x29, 0x20, 0x03, 0x30, 0x60, 0xc0, 0x20, 0xac, 0xfb, 0x7e, 0x0f, 0x7e, 0xd8, + 0xb9, 0x03, 0x49, 0xf9, 0xa5, 0xe2, 0x72, 0x43, 0xdd, 0x66, 0x05, 0x0a, 0x4d, 0x52, 0xf5, 0x0d, + 0x4d, 0x52, 0xc2, 0x05, 0xe4, 0xd0, 0x8d, 0x65, 0x25, 0xdd, 0x11, 0xa8, 0x68, 0xca, 0x75, 0x74, + 0x72, 0x42, 0x57, 0x0f, 0xf7, 0x36, 0x35, 0xbe, 0x4d, 0x00, 0x70, 0x66, 0xee, 0x4e, 0xee, 0x74, + 0x07, 0x9c, 0x90, 0x53, 0x24, 0x04, 0xba, 0xd4, 0x14, 0xb8, 0x06, 0x00, 0x53, 0x82, 0xc4, 0xb1, + 0x68, 0xba, 0xad, 0x83, 0x05, 0x5d, 0x29, 0x59, 0xd0, 0xf5, 0x92, 0xbb, 0xab, 0x1b, 0x5d, 0x33, + 0xa9, 0xf0, 0xf4, 0xbc, 0xd9, 0x98, 0x72, 0xff, 0x54, 0x0d, 0x90, 0xad, 0x7f, 0xb4, 0x9a, 0x02, + 0x72, 0x95, 0xd4, 0x07, 0x49, 0xae, 0xb1, 0x4e, 0xdc, 0x56, 0xaa, 0xbb, 0xfe, 0x35, 0x00, 0x38, + 0x0d, 0x8f, 0x09, 0x07, 0x6a, 0x74, 0xd7, 0x3e, 0x7d, 0xc5, 0x36, 0x9a, 0x45, 0xa7, 0x2d, 0x2d, + 0xad, 0x90, 0x91, 0xc3, 0xb2, 0xd9, 0x6d, 0x77, 0x6d, 0x06, 0x80, 0x9b, 0xdb, 0x40, 0xa7, 0x29, + 0xde, 0x69, 0xf2, 0xe0, 0x15, 0xcd, 0x17, 0xff, 0x1a, 0xc4, 0x3b, 0x5f, 0xf0, 0x15, 0x91, 0x20, + 0xb9, 0xef, 0xc0, 0x01, 0xe2, 0x46, 0xd2, 0x86, 0xee, 0xc7, 0x9c, 0x1d, 0x9d, 0x70, 0xe9, 0x62, + 0x62, 0xdb, 0x5b, 0x4f, 0x25, 0xb4, 0x19, 0x00, 0x96, 0x76, 0xaf, 0xa5, 0x5f, 0x16, 0xed, 0x77, + 0x64, 0x46, 0xbb, 0x9a, 0x12, 0x54, 0x38, 0xed, 0x50, 0xdd, 0xba, 0x75, 0x15, 0x8b, 0x5a, 0xfa, + 0xe5, 0x64, 0xbc, 0xf4, 0xd4, 0x7c, 0x94, 0x95, 0x94, 0x62, 0xd7, 0xc1, 0xa3, 0x70, 0xa3, 0x2b, + 0xd6, 0xf6, 0x70, 0x6d, 0x06, 0x40, 0x65, 0x6d, 0x89, 0x6a, 0xda, 0xfb, 0x88, 0x2b, 0x56, 0x0d, + 0x05, 0x18, 0x10, 0xf5, 0x22, 0x26, 0x5e, 0xa8, 0x1b, 0x49, 0xb0, 0xb5, 0xb1, 0x86, 0x0b, 0xdd, + 0x4c, 0x3a, 0x38, 0x38, 0x50, 0x77, 0xa3, 0x31, 0x61, 0x46, 0xd3, 0x6d, 0x3b, 0xb8, 0x56, 0x4f, + 0xa3, 0x72, 0xdd, 0xdc, 0xd0, 0xff, 0x99, 0x3d, 0x97, 0x4e, 0x58, 0x3c, 0xaf, 0x6b, 0xf0, 0xa1, + 0x86, 0x40, 0x5c, 0x6a, 0xf3, 0xde, 0x87, 0x01, 0xa8, 0x2e, 0x2f, 0xa5, 0x15, 0xa3, 0x01, 0x35, + 0xb4, 0xa8, 0x55, 0x56, 0xd5, 0x61, 0xf9, 0xfb, 0xef, 0x62, 0xb0, 0xef, 0x60, 0xb9, 0x98, 0x56, + 0x3f, 0x8d, 0x07, 0x80, 0xba, 0x8b, 0x3e, 0xf7, 0x80, 0x57, 0xde, 0xb5, 0xeb, 0xd7, 0x23, 0x3a, + 0xfa, 0x0f, 0x94, 0xd0, 0x7a, 0xc0, 0xab, 0xab, 0x70, 0x34, 0x16, 0xe4, 0x35, 0x41, 0xa2, 0xc1, + 0x6c, 0x61, 0x41, 0xbb, 0xd7, 0xc1, 0x83, 0xb1, 0xf0, 0x95, 0x57, 0x68, 0x43, 0xe7, 0xdc, 0xea, + 0x46, 0x6b, 0x67, 0x34, 0x1e, 0x00, 0xed, 0xdc, 0x37, 0xc1, 0xbb, 0xd1, 0x07, 0x9a, 0x9b, 0xa0, + 0xcd, 0x3a, 0x4d, 0xe8, 0x04, 0x40, 0x07, 0x1d, 0x26, 0xf0, 0xb4, 0x69, 0x1a, 0xe5, 0xad, 0x04, + 0xaf, 0x03, 0x86, 0x36, 0x63, 0x74, 0x85, 0x44, 0xfc, 0x20, 0xb5, 0x2a, 0xc3, 0xf8, 0xf1, 0xe3, + 0xc5, 0xd6, 0xa3, 0xdd, 0x61, 0xa4, 0x69, 0xb0, 0x55, 0xae, 0xa0, 0xa0, 0x80, 0xd7, 0x5b, 0x29, + 0x33, 0x33, 0xd3, 0x60, 0x7e, 0x8e, 0x97, 0x7f, 0x21, 0x21, 0x21, 0x06, 0xd3, 0xb5, 0x25, 0xa2, + 0xd5, 0x14, 0x70, 0xa5, 0xf3, 0x2d, 0x55, 0xdc, 0x2c, 0x42, 0xe5, 0x78, 0xa6, 0x14, 0xff, 0x6e, + 0x84, 0x6b, 0x34, 0x88, 0xf9, 0x74, 0xa4, 0x5d, 0x21, 0xcb, 0xbf, 0x69, 0xfb, 0xb9, 0x11, 0x74, + 0x01, 0xae, 0x84, 0x7d, 0xf9, 0x65, 0x63, 0x4d, 0x8b, 0x5f, 0x7e, 0xf9, 0x85, 0xc4, 0xca, 0xec, + 0xc4, 0x41, 0x65, 0xef, 0xde, 0xbd, 0x8d, 0xda, 0x5d, 0x53, 0x53, 0x03, 0x47, 0x62, 0x6e, 0xc9, + 0xe5, 0xea, 0x4b, 0xb2, 0xe7, 0xe6, 0xe6, 0x8a, 0x6e, 0x29, 0xc7, 0x4f, 0x22, 0xf9, 0x52, 0x83, + 0x4e, 0x9f, 0x7c, 0x8f, 0x3d, 0xf6, 0x98, 0x20, 0xfb, 0xd8, 0xb1, 0x63, 0x45, 0xd4, 0x2b, 0xaf, + 0xbc, 0x22, 0xfc, 0xd3, 0xa6, 0x4d, 0x53, 0x92, 0x1e, 0x3e, 0x7c, 0x58, 0x62, 0x3f, 0x15, 0x2a, + 0xad, 0x5c, 0xb9, 0x52, 0x09, 0xe7, 0x97, 0xb5, 0x6b, 0xd7, 0x8a, 0x70, 0x95, 0x4a, 0x25, 0x51, + 0xc5, 0xe2, 0x9d, 0xd3, 0x69, 0x77, 0x21, 0xf6, 0x93, 0xf4, 0x96, 0x14, 0x1a, 0x1a, 0x2a, 0x7d, + 0xf8, 0xe1, 0x87, 0x22, 0x0d, 0xb1, 0x63, 0x44, 0x39, 0xda, 0xf7, 0xca, 0x6b, 0xd6, 0xac, 0x91, + 0xe6, 0xcf, 0x9f, 0xaf, 0x94, 0xa7, 0x53, 0x91, 0xc6, 0xc3, 0xdd, 0xa0, 0x91, 0xe3, 0x0a, 0x6c, + 0x6d, 0x6d, 0x45, 0xf8, 0xec, 0xd9, 0xb3, 0x45, 0x01, 0x8d, 0x12, 0x51, 0x40, 0x53, 0x00, 0x70, + 0x18, 0xff, 0x64, 0xb7, 0x7b, 0xf7, 0x6e, 0xe1, 0x97, 0x01, 0x90, 0x11, 0xa2, 0x7d, 0x4b, 0x3f, + 0x71, 0xe2, 0x44, 0x25, 0xcf, 0xf0, 0xe1, 0xc3, 0xc5, 0xbb, 0xf6, 0x25, 0xf8, 0x9c, 0x39, 0x73, + 0x44, 0x98, 0x7c, 0xf1, 0x2d, 0x97, 0xcd, 0xcf, 0x46, 0x5d, 0x88, 0x2a, 0xc7, 0x86, 0x0d, 0x1b, + 0x84, 0xcc, 0x0f, 0x6f, 0x09, 0xb6, 0x6f, 0xdf, 0x8e, 0x4f, 0x3e, 0xf9, 0x84, 0x83, 0x5b, 0xe5, + 0xf4, 0xbb, 0x47, 0x6c, 0x6c, 0xac, 0x28, 0xe7, 0xc7, 0x1f, 0x7f, 0x84, 0xfc, 0xe3, 0x0d, 0xde, + 0x33, 0xcf, 0x3c, 0x23, 0xc2, 0xe9, 0xa6, 0x5f, 0x3c, 0xb5, 0x0f, 0xfa, 0xac, 0xf6, 0xcb, 0x8e, + 0x25, 0xbc, 0x1a, 0x39, 0x6d, 0x68, 0xb4, 0xdf, 0x29, 0xa1, 0x64, 0x6f, 0x6f, 0xaf, 0x60, 0x46, + 0x3b, 0x4e, 0x7e, 0xe7, 0x34, 0xfa, 0x5d, 0x88, 0xfa, 0xad, 0xc8, 0xc3, 0xb7, 0xec, 0xec, 0x64, + 0x71, 0x04, 0x99, 0x02, 0xac, 0x07, 0xc1, 0xf9, 0xb8, 0x6b, 0xc8, 0x8e, 0x05, 0x39, 0xba, 0x77, + 0xef, 0x2e, 0xbc, 0x4b, 0x97, 0x2e, 0x15, 0xf1, 0x8f, 0x3f, 0xfe, 0xb8, 0x1c, 0x2d, 0xfc, 0x9c, + 0xa7, 0x29, 0xd7, 0x74, 0x28, 0xa5, 0x94, 0xc7, 0xc2, 0x82, 0x05, 0x0b, 0x74, 0xf2, 0x9d, 0x39, + 0x73, 0x46, 0x29, 0x90, 0x0b, 0x95, 0x7f, 0xfd, 0xfa, 0xf5, 0x13, 0xe9, 0xca, 0xca, 0xca, 0x94, + 0x30, 0x8e, 0xa3, 0x13, 0x98, 0xe2, 0x97, 0x0b, 0xba, 0xef, 0xbe, 0xfb, 0x94, 0x30, 0x39, 0xbf, + 0x0c, 0x00, 0xa7, 0x19, 0x30, 0x60, 0x40, 0xa3, 0x78, 0x9a, 0x18, 0xe4, 0xec, 0x3a, 0x4f, 0x83, + 0x00, 0x70, 0xaa, 0x43, 0x87, 0x0e, 0xe9, 0x24, 0x36, 0xc6, 0xc3, 0xe2, 0x33, 0x69, 0x69, 0x69, + 0xcd, 0x66, 0x09, 0x0f, 0x0f, 0x97, 0x18, 0x21, 0xd4, 0x55, 0x9b, 0x4c, 0x17, 0x1c, 0x1c, 0x2c, + 0x34, 0x50, 0x9a, 0x8c, 0xd4, 0x04, 0x76, 0xee, 0x46, 0xa9, 0x0b, 0x98, 0xd4, 0x35, 0x39, 0x0b, + 0x99, 0xb4, 0x45, 0x46, 0x56, 0xde, 0x09, 0x80, 0x91, 0x08, 0x6b, 0xf7, 0xe4, 0x9d, 0x14, 0x68, + 0x77, 0x94, 0x1a, 0x59, 0xe0, 0x2d, 0x4f, 0x81, 0x5b, 0x7e, 0x1d, 0x30, 0x92, 0x60, 0x37, 0x5d, + 0xf2, 0x5b, 0xbe, 0x07, 0xdd, 0x74, 0x18, 0x35, 0xb2, 0x41, 0x9d, 0x04, 0x30, 0x12, 0x61, 0xed, + 0x9d, 0xbc, 0xd5, 0x2c, 0x89, 0xf6, 0x6e, 0x48, 0x7b, 0x94, 0x47, 0xdb, 0x6b, 0x30, 0xb7, 0x20, + 0x92, 0xf4, 0x5b, 0xe2, 0xff, 0x38, 0x8f, 0xab, 0x99, 0x29, 0xc4, 0xb4, 0x6a, 0x80, 0x25, 0xab, + 0x4b, 0xd1, 0x75, 0x28, 0x2b, 0xbc, 0xd5, 0x54, 0x55, 0x88, 0xcb, 0x8a, 0x9e, 0xa4, 0xd8, 0x39, + 0x74, 0xd8, 0x48, 0x0c, 0xf1, 0xf3, 0x17, 0xba, 0x60, 0xcc, 0x3d, 0x30, 0x85, 0xfb, 0x8f, 0x58, + 0x03, 0xf8, 0xdc, 0x7e, 0x81, 0xac, 0x36, 0x1d, 0xda, 0xb7, 0x1b, 0x52, 0x5d, 0x95, 0x50, 0xc4, + 0xe3, 0xdb, 0xae, 0x41, 0x43, 0xfd, 0x90, 0x4a, 0xda, 0xb3, 0xf9, 0xb9, 0x57, 0xc5, 0x0d, 0x2a, + 0x13, 0xa2, 0x47, 0x4f, 0x4f, 0x38, 0xd3, 0x7d, 0x5d, 0x66, 0x72, 0x12, 0xcc, 0xea, 0x49, 0xf3, + 0xaa, 0xa6, 0x1a, 0xb5, 0xc4, 0x16, 0xb8, 0x9f, 0x44, 0x1d, 0xfc, 0x02, 0x02, 0xda, 0x74, 0x5f, + 0xdd, 0x1a, 0x02, 0xde, 0xf2, 0x04, 0x28, 0x20, 0x3b, 0x2c, 0xdf, 0x6f, 0xda, 0x40, 0x36, 0x41, + 0x6a, 0x30, 0xff, 0xb9, 0x05, 0x38, 0x73, 0xea, 0x38, 0xbe, 0xfe, 0xf2, 0x0b, 0xf8, 0xf6, 0x1b, + 0x48, 0x42, 0x61, 0x0e, 0x64, 0xa0, 0xe4, 0x02, 0x6a, 0xea, 0xaa, 0x49, 0xe3, 0xd7, 0x9e, 0x2e, + 0x89, 0x00, 0x1b, 0x6b, 0x15, 0x7a, 0xf7, 0xe8, 0x8d, 0xda, 0xca, 0x32, 0x14, 0x94, 0x14, 0x21, + 0x68, 0xde, 0x7c, 0xf8, 0x0e, 0x09, 0xc0, 0x57, 0xab, 0x3e, 0xa1, 0x5b, 0x60, 0x5b, 0x3c, 0x49, + 0x0a, 0xb9, 0x2c, 0x2d, 0xd4, 0x51, 0xee, 0xa6, 0x23, 0x00, 0xf3, 0xb9, 0x99, 0x1b, 0xa4, 0xcd, + 0x11, 0x32, 0x84, 0x8c, 0x52, 0x12, 0x5e, 0xf8, 0x6a, 0xcd, 0x2a, 0x12, 0xd6, 0x1c, 0x8a, 0x00, + 0x52, 0xc1, 0x5e, 0xb1, 0xec, 0x4d, 0x24, 0x5f, 0x4a, 0xa0, 0x1b, 0xb8, 0x2a, 0xe2, 0x68, 0x55, + 0x23, 0xd0, 0x7f, 0x38, 0x89, 0x1b, 0x76, 0xc5, 0x05, 0x92, 0x0f, 0xc8, 0x27, 0xd9, 0x1a, 0x96, + 0x97, 0xec, 0xef, 0xd3, 0x9f, 0xf4, 0x0d, 0x2b, 0x10, 0x97, 0x10, 0x07, 0x73, 0x2b, 0x4b, 0xb8, + 0x38, 0x39, 0xc0, 0xc5, 0xbd, 0x1b, 0x96, 0x2c, 0xfb, 0x0c, 0x1b, 0x56, 0x7f, 0x4e, 0x56, 0xc5, + 0xf2, 0xc9, 0xd4, 0xe3, 0x7b, 0x42, 0x24, 0xc5, 0x50, 0xbd, 0xed, 0x19, 0x6e, 0x32, 0x02, 0x14, + 0xd3, 0x45, 0x71, 0x64, 0x78, 0x18, 0xd9, 0xe3, 0xb9, 0x40, 0x06, 0x80, 0x2e, 0xc1, 0x82, 0xae, + 0xee, 0xbb, 0x93, 0x5d, 0x18, 0x47, 0x07, 0x47, 0x61, 0xe1, 0x26, 0x3b, 0xfb, 0x2a, 0x4a, 0x48, + 0xa0, 0xa8, 0xab, 0x47, 0x57, 0x78, 0xf5, 0x1b, 0x80, 0xc1, 0xb7, 0x07, 0x92, 0xc2, 0x65, 0x3f, + 0x1d, 0xd8, 0x43, 0xce, 0x9c, 0x42, 0x44, 0x58, 0x28, 0x49, 0x4a, 0x05, 0xe1, 0xe3, 0x15, 0xef, + 0x21, 0xea, 0x7c, 0x18, 0xc9, 0x34, 0xf0, 0x5c, 0xde, 0x40, 0x92, 0x86, 0x35, 0x42, 0x14, 0x66, + 0xc4, 0x9d, 0xe3, 0xd0, 0xc5, 0xc7, 0x97, 0x64, 0x3b, 0xcd, 0x60, 0x49, 0xb7, 0xed, 0x15, 0xb9, + 0x99, 0x88, 0x8f, 0x3c, 0x8d, 0x92, 0xb2, 0x62, 0x61, 0x89, 0x80, 0xe7, 0x7e, 0xbe, 0x23, 0xf6, + 0xea, 0x7f, 0x1b, 0x16, 0xbd, 0xf9, 0x1e, 0x36, 0xaf, 0x59, 0x89, 0x6e, 0x3d, 0x7b, 0xe1, 0x09, + 0x1a, 0x4d, 0x1d, 0xe1, 0x3a, 0x9c, 0x00, 0xb1, 0x71, 0x71, 0xf8, 0x85, 0x2c, 0xf1, 0x65, 0x5c, + 0x4e, 0x84, 0xab, 0xab, 0x8b, 0x30, 0x71, 0x38, 0x3d, 0xe8, 0xcf, 0xb8, 0x3d, 0xa0, 0xb1, 0x29, + 0x27, 0xbe, 0xd9, 0x59, 0x4b, 0x92, 0x91, 0x16, 0x34, 0xaf, 0x5f, 0x25, 0xbb, 0x76, 0x2a, 0x12, + 0x51, 0xbe, 0xeb, 0x9e, 0xfb, 0x30, 0x6d, 0xc6, 0x4c, 0x71, 0x23, 0x74, 0xf4, 0xd0, 0x01, 0x44, + 0x9e, 0x39, 0x41, 0x97, 0xe5, 0xe6, 0x42, 0x4a, 0x80, 0xe5, 0x31, 0x78, 0x21, 0x6e, 0xa0, 0x05, + 0xa0, 0xa4, 0xb4, 0x04, 0xb6, 0xbd, 0xfa, 0xa2, 0xc2, 0xdc, 0x0e, 0x25, 0x57, 0xd3, 0x31, 0x6e, + 0xfc, 0xbd, 0x34, 0x3a, 0x12, 0x91, 0x45, 0xf2, 0x4c, 0x1e, 0x24, 0x68, 0x65, 0x5d, 0xc6, 0xac, + 0x7b, 0x2b, 0x16, 0x61, 0x62, 0x66, 0x25, 0xb1, 0xf8, 0xf9, 0xd6, 0xd8, 0x52, 0xb0, 0x18, 0xbb, + 0xd2, 0x3a, 0x31, 0xff, 0xa5, 0xd7, 0x3a, 0x02, 0xff, 0x6d, 0x17, 0x91, 0x68, 0x69, 0x2b, 0x79, + 0x77, 0xb2, 0x81, 0xee, 0xc0, 0xf3, 0x68, 0x67, 0xf2, 0xf8, 0xb3, 0x2f, 0x82, 0x0d, 0x13, 0x25, + 0x26, 0x5c, 0xc4, 0xde, 0x1d, 0xff, 0xc6, 0xe1, 0xbd, 0x3b, 0x49, 0xfe, 0x23, 0x07, 0x77, 0xdf, + 0x7b, 0xaf, 0x20, 0x08, 0x97, 0x19, 0x4f, 0x32, 0x20, 0xfb, 0x77, 0x6d, 0x43, 0x3d, 0x89, 0x93, + 0x7a, 0xf4, 0xf3, 0xc5, 0xc2, 0xa5, 0xff, 0x10, 0xc2, 0x30, 0x87, 0x0f, 0xfc, 0x8c, 0x37, 0x5e, + 0x7e, 0x0e, 0x73, 0x9f, 0x78, 0x86, 0xe6, 0x6a, 0x77, 0xd8, 0x38, 0xb9, 0x62, 0xca, 0xcc, 0x20, + 0x2c, 0x25, 0xe3, 0x5f, 0x31, 0xd1, 0x91, 0xa8, 0x22, 0x3b, 0x9c, 0x36, 0xb6, 0x0e, 0x98, 0x10, + 0xf4, 0xbf, 0xe8, 0xd2, 0xdd, 0x07, 0x66, 0x95, 0xe5, 0x28, 0x2d, 0xb2, 0xc5, 0x8e, 0x1f, 0xb6, + 0xc3, 0xbd, 0x7b, 0x4f, 0x58, 0x35, 0xd4, 0xe0, 0x44, 0xf0, 0x7e, 0x94, 0x55, 0x94, 0xd0, 0x7a, + 0x60, 0x23, 0xa6, 0x3a, 0x6b, 0xb2, 0xa4, 0xd0, 0x7f, 0x90, 0x1f, 0x5e, 0x7f, 0x7b, 0x19, 0xbe, + 0xdb, 0xb0, 0x16, 0x2e, 0xbc, 0x82, 0x77, 0x90, 0xeb, 0x90, 0x11, 0xc0, 0xc8, 0x5f, 0xf5, 0xcf, + 0x95, 0xa8, 0x26, 0x81, 0xfb, 0xb7, 0xfe, 0xef, 0x1f, 0x3a, 0xf3, 0x7b, 0x16, 0x09, 0x2f, 0x6f, + 0xd9, 0xb4, 0x1e, 0x12, 0x09, 0x71, 0xf6, 0x19, 0x70, 0x1b, 0x66, 0x3c, 0xf4, 0x30, 0x22, 0xc2, + 0x23, 0x71, 0xea, 0xc8, 0xcf, 0x42, 0x26, 0x72, 0xfc, 0xd4, 0x99, 0xb8, 0x9f, 0x24, 0xb2, 0x65, + 0xc7, 0x3d, 0x3c, 0xf6, 0x8f, 0x68, 0x6c, 0xfb, 0x6e, 0x33, 0x86, 0xdf, 0x39, 0x1a, 0x31, 0x64, + 0xaf, 0xf2, 0x81, 0x47, 0xe6, 0x90, 0xa1, 0x07, 0x27, 0x3c, 0xfd, 0xf8, 0x1c, 0x58, 0x3a, 0xb8, + 0x22, 0x70, 0xfc, 0x14, 0xda, 0x76, 0x9a, 0x8b, 0x6d, 0xa7, 0x19, 0x8d, 0x0e, 0x2b, 0x6b, 0x2b, + 0x21, 0xb1, 0x1d, 0x1f, 0x7e, 0x06, 0xaa, 0x0a, 0x9e, 0xd6, 0xdc, 0x11, 0x4d, 0x8b, 0x33, 0xdb, + 0x5c, 0xb0, 0x55, 0xd1, 0x68, 0x20, 0x42, 0x6c, 0xfc, 0x76, 0x27, 0xa2, 0xff, 0x88, 0x45, 0xc8, + 0xd1, 0xfd, 0x78, 0x76, 0xd1, 0xdb, 0xe8, 0xde, 0xa3, 0xa7, 0x5c, 0xe5, 0x0d, 0x7d, 0x76, 0x08, + 0x01, 0x8e, 0x90, 0x39, 0xd9, 0xe0, 0xc3, 0xfb, 0x31, 0x6b, 0xde, 0x13, 0x18, 0x34, 0x84, 0xc4, + 0x52, 0x68, 0x37, 0xc2, 0x5c, 0x7f, 0x79, 0xe7, 0x4d, 0x26, 0x1b, 0x71, 0xfc, 0xd4, 0x69, 0xd4, + 0x5b, 0xa9, 0xc8, 0x4a, 0x09, 0x84, 0xed, 0xce, 0x82, 0xd4, 0x8b, 0x98, 0x4c, 0x32, 0xf8, 0x93, + 0xa7, 0x4d, 0x17, 0x37, 0x80, 0xa5, 0x15, 0x55, 0x08, 0xbb, 0x98, 0x8c, 0xf2, 0x7a, 0x0b, 0x38, + 0xd2, 0xb5, 0x28, 0xd9, 0x4d, 0x12, 0x53, 0x0f, 0x8b, 0xbf, 0xb0, 0x71, 0x16, 0x6b, 0x92, 0x1e, + 0x49, 0x23, 0xe9, 0xf3, 0xac, 0xcc, 0x34, 0xd8, 0x68, 0x90, 0x6a, 0x4e, 0x06, 0x2a, 0x2c, 0x48, + 0x24, 0xac, 0x9c, 0x16, 0xeb, 0xe3, 0xbb, 0xb7, 0x20, 0xe2, 0xd4, 0x61, 0xb8, 0x7b, 0x74, 0xc7, + 0xe8, 0x11, 0x81, 0x70, 0x76, 0xb0, 0x47, 0x5c, 0x52, 0x32, 0x86, 0xdf, 0x35, 0x0e, 0xaf, 0x2c, + 0x7a, 0x83, 0x2c, 0xdd, 0xed, 0x05, 0x13, 0xe8, 0xb9, 0xc5, 0x4b, 0xe0, 0xd9, 0xc7, 0xeb, 0x86, + 0x22, 0x5d, 0xbb, 0xf0, 0x0e, 0x21, 0xc0, 0xce, 0xed, 0xdb, 0x10, 0xf5, 0xfb, 0x49, 0xd8, 0x58, + 0x59, 0x93, 0x78, 0x65, 0xbd, 0x98, 0xa7, 0xb9, 0x11, 0xbc, 0x7f, 0x67, 0x31, 0x65, 0x4b, 0xd7, + 0x6e, 0xb8, 0x9c, 0x57, 0x02, 0x4b, 0x42, 0xa6, 0x9f, 0xff, 0x30, 0x44, 0x87, 0x87, 0xa2, 0x9e, + 0xe6, 0x7b, 0x73, 0xb2, 0xce, 0x6b, 0x59, 0x53, 0x81, 0xb1, 0x0f, 0xcd, 0xc5, 0xe0, 0xc0, 0x61, + 0xb8, 0x9c, 0x98, 0x80, 0xcb, 0x49, 0x97, 0x85, 0x40, 0x95, 0xf6, 0xc1, 0x89, 0xb2, 0x09, 0x22, + 0x55, 0x14, 0x17, 0x91, 0xc1, 0xea, 0x04, 0xda, 0xdd, 0x58, 0x93, 0xa5, 0x68, 0x67, 0x61, 0xfa, + 0x84, 0x89, 0x60, 0x45, 0x7e, 0x7b, 0x92, 0xd1, 0xce, 0xc9, 0x48, 0x45, 0x02, 0x69, 0x8f, 0xb8, + 0x39, 0x3b, 0xa1, 0xbb, 0xb3, 0x3d, 0xdc, 0x5c, 0xc8, 0x02, 0xb0, 0x9d, 0x13, 0x0a, 0x0a, 0xf2, + 0x10, 0x38, 0x6a, 0x1c, 0x66, 0x3e, 0x4c, 0x23, 0xa8, 0x15, 0xca, 0x47, 0xda, 0x08, 0x35, 0xf6, + 0xbd, 0x43, 0x4e, 0xc2, 0x96, 0x74, 0x3f, 0x5e, 0x49, 0x5b, 0xc3, 0xfb, 0xe8, 0xb0, 0x33, 0x76, + 0xdc, 0x3d, 0xd7, 0x64, 0xa0, 0xa8, 0xb5, 0x2c, 0x5a, 0xc1, 0x23, 0xa4, 0xf4, 0xd8, 0x49, 0xe4, + 0x16, 0x16, 0x63, 0xef, 0x9e, 0x9d, 0xb0, 0xb6, 0x73, 0xc4, 0xd0, 0x11, 0xbe, 0x18, 0x33, 0x7e, + 0x3c, 0xec, 0x1d, 0xed, 0x71, 0x81, 0xa6, 0x9c, 0x9f, 0x76, 0xec, 0xa4, 0x59, 0x45, 0x7d, 0xc9, + 0x2f, 0x90, 0xcf, 0x58, 0xd7, 0x72, 0x1c, 0x56, 0x57, 0x5b, 0x4d, 0x8b, 0x73, 0x8d, 0xd8, 0x45, + 0x99, 0x93, 0x99, 0x16, 0x1b, 0x5a, 0x94, 0x2d, 0xe9, 0x59, 0x4e, 0xf2, 0xe6, 0x39, 0x39, 0x57, + 0x89, 0x20, 0x36, 0xf0, 0x1b, 0x33, 0x09, 0x56, 0x15, 0xa4, 0xaa, 0x40, 0x46, 0x0a, 0xeb, 0xad, + 0x7b, 0x60, 0xfc, 0x8c, 0x07, 0x11, 0x38, 0x7c, 0xa4, 0x56, 0x49, 0x1d, 0xfb, 0xda, 0x21, 0x04, + 0x98, 0x3a, 0x6d, 0x06, 0x22, 0x49, 0xd3, 0x20, 0xf4, 0xe4, 0x09, 0x41, 0x00, 0x6d, 0x79, 0x16, + 0x36, 0xa9, 0x74, 0x2e, 0xf8, 0x04, 0x32, 0xa3, 0xce, 0xc2, 0xaa, 0xab, 0x17, 0x66, 0x3d, 0xf5, + 0x12, 0xa9, 0x0f, 0x79, 0x22, 0x23, 0xe5, 0x32, 0xa2, 0xce, 0xfd, 0x2e, 0xb4, 0x12, 0xb8, 0x17, + 0x9b, 0x6b, 0x58, 0x05, 0xac, 0xa5, 0xa0, 0x83, 0x7a, 0x75, 0xf7, 0xa7, 0x11, 0x60, 0x2e, 0x6e, + 0xb3, 0x7b, 0xf7, 0xe9, 0x8f, 0x3b, 0xc8, 0xec, 0x92, 0x03, 0x11, 0xce, 0x82, 0xe4, 0x24, 0x39, + 0xbc, 0x24, 0x3f, 0x0b, 0xf6, 0x16, 0x75, 0xb0, 0xe3, 0xc3, 0x18, 0x9f, 0xc6, 0xa8, 0x2c, 0x47, + 0x12, 0x72, 0xcb, 0x48, 0xcf, 0x20, 0x02, 0xd9, 0x8a, 0x11, 0xa9, 0x3d, 0xa2, 0x3a, 0x92, 0x04, + 0x1d, 0x32, 0x05, 0x31, 0x40, 0xa5, 0xb4, 0x2d, 0xfc, 0xe2, 0x93, 0x0f, 0x49, 0x3d, 0xa9, 0x1a, + 0x73, 0x9f, 0x7e, 0x09, 0x3e, 0xde, 0x5e, 0x60, 0xed, 0xa1, 0x6f, 0xbe, 0x5c, 0x83, 0x2b, 0xa9, + 0x97, 0xd0, 0xd3, 0x7f, 0x14, 0x3c, 0x7d, 0xfd, 0x68, 0x0e, 0xcf, 0x40, 0x49, 0x51, 0x11, 0xcc, + 0x69, 0x4e, 0x67, 0xfe, 0x8d, 0xda, 0x26, 0x8b, 0x06, 0xe5, 0xfc, 0x60, 0x42, 0x68, 0x7a, 0x3f, + 0x2f, 0xc8, 0xea, 0x85, 0x44, 0x3d, 0x32, 0xf2, 0xc9, 0x2e, 0x96, 0x17, 0x99, 0xcc, 0x09, 0x7a, + 0xe4, 0x61, 0xd8, 0x92, 0x68, 0xbc, 0xb9, 0xb9, 0x05, 0xad, 0x0f, 0x16, 0x48, 0x4b, 0x8c, 0x47, + 0x2e, 0xed, 0xbe, 0xd8, 0x06, 0x10, 0x13, 0x93, 0x91, 0xcd, 0xd2, 0x27, 0xa5, 0xc5, 0x25, 0x74, + 0x42, 0x56, 0xe1, 0xf6, 0xdb, 0xfd, 0x95, 0xdd, 0x57, 0x47, 0x22, 0x9f, 0xeb, 0xea, 0x30, 0x02, + 0x70, 0x65, 0x8c, 0xb0, 0xa8, 0xf3, 0x91, 0xd8, 0xf2, 0xd5, 0x3a, 0x74, 0x71, 0xb0, 0x15, 0xbb, + 0x90, 0x22, 0x42, 0x76, 0x17, 0xaf, 0x41, 0x70, 0xa6, 0x9e, 0x5b, 0x4d, 0xd2, 0x99, 0xe5, 0x64, + 0x34, 0x46, 0xb6, 0x8a, 0xc3, 0x88, 0x16, 0x38, 0xe7, 0xcc, 0xe4, 0x64, 0x91, 0x4d, 0xb5, 0x4f, + 0xf3, 0x5f, 0x43, 0x04, 0x46, 0x36, 0x1b, 0xa3, 0x49, 0xf9, 0x23, 0x12, 0x36, 0xa4, 0x83, 0x66, + 0x47, 0x82, 0xe5, 0x3c, 0xd2, 0xb8, 0xac, 0x2c, 0xd2, 0xf1, 0xc9, 0xa5, 0x38, 0x1b, 0x92, 0x92, + 0x67, 0xd1, 0x67, 0x3e, 0x65, 0xf3, 0xd4, 0xc4, 0xd4, 0x7b, 0xe6, 0xd9, 0x67, 0x30, 0x63, 0x06, + 0xe9, 0xbd, 0x75, 0xf0, 0xdc, 0x2f, 0xc3, 0xd0, 0x21, 0x53, 0x90, 0x5c, 0x19, 0xf7, 0xbc, 0x00, + 0xd2, 0xd8, 0xf2, 0x5f, 0xbd, 0x81, 0x6c, 0xaa, 0x97, 0x22, 0x34, 0xe4, 0x0c, 0x19, 0xdc, 0x3f, + 0x48, 0xe6, 0xb7, 0x92, 0x61, 0xe1, 0x4a, 0x22, 0xd5, 0x36, 0x76, 0x84, 0xb0, 0x7a, 0xf5, 0x1a, + 0xa1, 0xe9, 0xf4, 0x9c, 0x57, 0xfd, 0x4a, 0xe8, 0x97, 0x3b, 0xbc, 0xa6, 0x40, 0x65, 0x04, 0x70, + 0x02, 0xfa, 0x35, 0x90, 0x1e, 0x52, 0x83, 0x15, 0x59, 0x7c, 0xa3, 0x83, 0x94, 0x9b, 0xbb, 0xbb, + 0xd8, 0x5e, 0x72, 0x8f, 0xaf, 0xa6, 0xd3, 0x76, 0x35, 0xe9, 0x1c, 0xa9, 0x48, 0xdf, 0x88, 0x91, + 0xce, 0x32, 0xb7, 0x6c, 0xab, 0xac, 0x92, 0x76, 0x52, 0x0e, 0x34, 0x2d, 0x99, 0x0a, 0xf9, 0x0c, + 0x46, 0x87, 0x8e, 0x00, 0xae, 0xb0, 0x29, 0x77, 0x22, 0x38, 0x18, 0x61, 0x71, 0x17, 0x50, 0x55, + 0x4f, 0x6a, 0x40, 0x84, 0x14, 0xa2, 0x80, 0x1a, 0xeb, 0x9a, 0xd9, 0x86, 0x15, 0xb8, 0x18, 0xc7, + 0xe4, 0x15, 0x8e, 0x09, 0xa1, 0x38, 0xf2, 0x70, 0x38, 0xcf, 0xf5, 0xcc, 0x6a, 0x8e, 0x0e, 0xff, + 0x1d, 0xb9, 0xa4, 0xd0, 0xc8, 0x06, 0x0f, 0x2d, 0xa8, 0x97, 0xf3, 0x3a, 0x20, 0x0a, 0xa3, 0x44, + 0xd6, 0xb4, 0x1b, 0x72, 0xa2, 0xed, 0xe7, 0x8c, 0xa9, 0x93, 0x31, 0x93, 0x4e, 0xd3, 0x2c, 0x20, + 0xed, 0xe2, 0xe2, 0x62, 0x52, 0x02, 0x74, 0xe8, 0x08, 0x50, 0x90, 0xa6, 0xf7, 0xc2, 0xfa, 0x88, + 0xb5, 0xb5, 0xf5, 0x64, 0x49, 0x99, 0x50, 0xcd, 0xc8, 0xe7, 0x1f, 0x3b, 0x41, 0x07, 0x35, 0xf2, + 0x99, 0x02, 0x9a, 0x37, 0x75, 0x9c, 0x42, 0x04, 0x0a, 0xe5, 0x75, 0x81, 0xf2, 0xd0, 0x4a, 0x40, + 0x73, 0xbe, 0x25, 0x6a, 0xe9, 0xdd, 0x42, 0x50, 0x8c, 0xfd, 0x34, 0xdd, 0xd0, 0xf4, 0xc2, 0xd3, + 0x11, 0x13, 0xc4, 0x52, 0x65, 0x27, 0x90, 0xce, 0x22, 0x96, 0x37, 0x83, 0xbb, 0x29, 0x08, 0xc0, + 0x53, 0x02, 0x9f, 0x0f, 0xd8, 0xa2, 0x9b, 0x50, 0x9a, 0xd0, 0x10, 0xe0, 0x5a, 0x4f, 0x57, 0xb0, + 0xad, 0x8b, 0x33, 0x26, 0x8a, 0x48, 0x44, 0x44, 0xa0, 0x77, 0x6b, 0x95, 0x0a, 0x7f, 0xba, 0x67, + 0x92, 0x50, 0x89, 0xac, 0xa7, 0xc2, 0xb8, 0x87, 0x73, 0x38, 0x8b, 0xf8, 0x5b, 0x10, 0x21, 0xc4, + 0x30, 0x22, 0x7f, 0x58, 0x6c, 0x22, 0x02, 0xfc, 0x53, 0xe0, 0xe5, 0xe5, 0xad, 0x5b, 0x9e, 0x09, + 0x7c, 0x37, 0x09, 0x01, 0xd4, 0xc6, 0xce, 0xea, 0x6a, 0x1b, 0x50, 0x40, 0x9f, 0xc8, 0xa8, 0x22, + 0xc5, 0x6e, 0x81, 0x39, 0x0d, 0x42, 0xb8, 0x83, 0xcb, 0xc8, 0x23, 0xfc, 0x09, 0x0f, 0x8f, 0x14, + 0x4b, 0x9a, 0x52, 0x5c, 0x69, 0xae, 0xe7, 0x45, 0x95, 0x0f, 0x75, 0x15, 0xe5, 0xb5, 0xb4, 0x88, + 0x97, 0x22, 0x3f, 0x3f, 0x0f, 0xb5, 0xb4, 0xeb, 0xf2, 0xed, 0xef, 0x03, 0x57, 0x9a, 0x62, 0xb2, + 0x49, 0x37, 0xf5, 0x6a, 0x61, 0x09, 0x11, 0x88, 0xec, 0xf1, 0x91, 0xd6, 0x8b, 0x8a, 0xb4, 0x3a, + 0x79, 0xd4, 0xdd, 0x0c, 0xee, 0xa6, 0x20, 0x40, 0x2d, 0x69, 0xd0, 0x94, 0x14, 0x17, 0xc3, 0x8c, + 0x0e, 0x4a, 0x3c, 0x5d, 0xd8, 0xd2, 0xfc, 0xad, 0xee, 0xd9, 0x6a, 0x14, 0xf1, 0x3b, 0xd3, 0x80, + 0x9d, 0xe8, 0xf0, 0xe4, 0x11, 0x53, 0x15, 0xcd, 0xfb, 0x0d, 0x34, 0x72, 0x04, 0x7d, 0x34, 0x08, + 0x2d, 0x25, 0x36, 0xb7, 0x05, 0x1d, 0xc6, 0xe6, 0xcc, 0x0e, 0x42, 0xaf, 0xde, 0x9e, 0xe2, 0x8a, + 0x92, 0x17, 0xdc, 0x18, 0x92, 0x4c, 0x3d, 0x75, 0x2e, 0x02, 0x55, 0xbc, 0x00, 0x13, 0xfb, 0x59, + 0x8c, 0x08, 0x75, 0x91, 0x26, 0xfd, 0x7f, 0x53, 0x10, 0x20, 0x90, 0x58, 0xd1, 0x07, 0x8f, 0x9d, + 0xa0, 0xcb, 0x90, 0x22, 0xfa, 0xa4, 0x4a, 0x03, 0x8d, 0x80, 0x0a, 0x42, 0x30, 0xe1, 0x45, 0xee, + 0xf9, 0x02, 0x45, 0x72, 0xdf, 0x57, 0xe3, 0x4b, 0x8c, 0x00, 0x42, 0xa4, 0x9d, 0x1d, 0xed, 0x6c, + 0xcc, 0x79, 0x04, 0xa9, 0x39, 0x98, 0xb6, 0x36, 0x56, 0xa4, 0x4e, 0x5e, 0x8b, 0xe3, 0x27, 0x83, + 0x71, 0xf7, 0xb8, 0x71, 0x74, 0xb1, 0xe2, 0x84, 0xb4, 0xf4, 0x74, 0x84, 0x86, 0x45, 0x90, 0x96, + 0x75, 0x2d, 0x2a, 0x4b, 0xcb, 0x70, 0xfb, 0x9d, 0x81, 0xf0, 0xd4, 0xd8, 0x4a, 0x34, 0x29, 0xf6, + 0x19, 0x44, 0xea, 0x5d, 0x6a, 0xc8, 0x4c, 0xdc, 0x12, 0xb6, 0x78, 0xf9, 0xe5, 0xc6, 0x8d, 0xd8, + 0x4f, 0x26, 0x6c, 0xa9, 0x51, 0xc4, 0x2a, 0xb6, 0x16, 0x97, 0x34, 0xbc, 0xb0, 0x32, 0x0b, 0xe2, + 0xda, 0x1e, 0x88, 0x1b, 0xaa, 0x6e, 0xb2, 0x39, 0x19, 0xd2, 0x30, 0x63, 0x2d, 0x71, 0xe1, 0xd5, + 0x10, 0x88, 0x1e, 0x75, 0xc4, 0xe5, 0xac, 0x25, 0xb6, 0x34, 0xdf, 0xae, 0xd5, 0x13, 0x6b, 0x99, + 0x17, 0x6f, 0x3e, 0x00, 0xfb, 0xf9, 0xfb, 0xe3, 0x89, 0x27, 0xe6, 0x83, 0x4c, 0xc1, 0x89, 0x69, + 0xcb, 0xc4, 0x20, 0x8b, 0xea, 0x6f, 0x1a, 0x02, 0xdc, 0x0c, 0xc8, 0x30, 0x45, 0x1b, 0x68, 0x6b, + 0xd0, 0xe9, 0x4c, 0x89, 0x81, 0x4e, 0x02, 0x98, 0x12, 0xfb, 0x54, 0x77, 0x27, 0x01, 0xfe, 0x9b, + 0x09, 0xc0, 0x8c, 0xb8, 0xff, 0x76, 0x67, 0x92, 0x11, 0xc0, 0xd2, 0x0e, 0xcc, 0x98, 0x63, 0x76, + 0x00, 0x3f, 0xe5, 0x8f, 0x41, 0x1a, 0x43, 0x0c, 0x52, 0x33, 0x15, 0x1f, 0x02, 0xe0, 0xfc, 0xfa, + 0x3f, 0x52, 0xdc, 0x32, 0xa6, 0x28, 0x93, 0xa6, 0x35, 0xc9, 0x39, 0x80, 0x35, 0x3d, 0xe9, 0x43, + 0x3b, 0xe0, 0xef, 0x05, 0xd2, 0x37, 0x72, 0xc0, 0x9f, 0x10, 0x32, 0xd6, 0xf5, 0x24, 0x19, 0x22, + 0x52, 0xb4, 0x04, 0x29, 0x5c, 0x8a, 0xed, 0x26, 0xd9, 0xb6, 0x05, 0x7f, 0x7f, 0x8a, 0x1d, 0x29, + 0xab, 0x19, 0x5b, 0x9c, 0xc9, 0xd2, 0xb7, 0x68, 0x1b, 0x4a, 0xdf, 0x45, 0xd4, 0xe9, 0xa5, 0xfc, + 0x95, 0x12, 0xed, 0x8f, 0x5b, 0xf2, 0x05, 0x79, 0x52, 0x52, 0x92, 0x72, 0x7a, 0x65, 0xd1, 0xbe, + 0x5e, 0xbd, 0x7a, 0x35, 0x09, 0x14, 0x7d, 0x3a, 0x09, 0xfc, 0xd1, 0x34, 0xd9, 0xf1, 0xc9, 0x97, + 0x4c, 0x30, 0x0b, 0x66, 0x99, 0x1c, 0x76, 0xbd, 0x27, 0xf3, 0x78, 0x52, 0x53, 0x53, 0x41, 0xda, + 0x7d, 0xe2, 0x62, 0x85, 0xd3, 0x33, 0x11, 0x49, 0xbd, 0x51, 0x64, 0x65, 0xa2, 0x30, 0x61, 0x0d, + 0x39, 0xb6, 0xfd, 0x9e, 0x90, 0x90, 0x00, 0xd6, 0xcb, 0xe4, 0x3c, 0x6c, 0x61, 0x7f, 0xc8, 0x90, + 0x21, 0xc4, 0x1b, 0xf2, 0x32, 0x94, 0x45, 0x27, 0x9c, 0xdb, 0xcf, 0x79, 0x49, 0x99, 0x8f, 0xc4, + 0x60, 0xaa, 0x44, 0xfb, 0xc9, 0x8a, 0x33, 0xd9, 0x03, 0xeb, 0xa1, 0x93, 0xae, 0x45, 0x1e, 0x3e, + 0x88, 0x35, 0xe7, 0xe6, 0xce, 0x9d, 0xcb, 0x27, 0x9c, 0x46, 0x3f, 0xd9, 0x6c, 0xf4, 0xaa, 0x55, + 0xab, 0x1a, 0xc5, 0x71, 0x7a, 0x52, 0x30, 0x6d, 0x54, 0x2c, 0x01, 0xd9, 0x64, 0x5a, 0x7d, 0x7d, + 0x51, 0xfd, 0x8c, 0xac, 0x89, 0x48, 0xca, 0xac, 0x4d, 0xe6, 0x6d, 0xaa, 0x6d, 0xac, 0x86, 0xac, + 0xef, 0x48, 0x87, 0x5a, 0xd8, 0xda, 0x6e, 0x2a, 0xbd, 0x76, 0x18, 0xe9, 0x77, 0x4b, 0x07, 0x0e, + 0x1c, 0xd0, 0xcf, 0x2e, 0x34, 0x22, 0x89, 0x75, 0x7d, 0xdd, 0x36, 0xb0, 0xed, 0xee, 0xaf, 0xbe, + 0xfa, 0xaa, 0x51, 0x7e, 0x43, 0x01, 0xdc, 0x6b, 0x5b, 0xe4, 0xb4, 0x75, 0xaf, 0xb5, 0x2d, 0xac, + 0x73, 0x66, 0x56, 0xa4, 0x95, 0x81, 0x60, 0x3d, 0x53, 0x6d, 0x55, 0x65, 0x43, 0x85, 0xcb, 0x4a, + 0xb8, 0x9c, 0xaf, 0x39, 0x02, 0xb0, 0xd2, 0x2e, 0x4d, 0x59, 0x4a, 0xf9, 0xd4, 0xcb, 0xc4, 0x17, + 0x4b, 0xe5, 0x72, 0xa9, 0x27, 0x4b, 0xde, 0xde, 0xde, 0x4a, 0x3c, 0x97, 0x27, 0x2b, 0xf6, 0xca, + 0x69, 0xe8, 0xe3, 0xc2, 0x4a, 0x3c, 0xad, 0x17, 0xd2, 0xe9, 0xd3, 0xa7, 0xe5, 0x28, 0xe5, 0xc9, + 0x6a, 0xa9, 0xb2, 0x72, 0x31, 0x97, 0xb1, 0x70, 0xe1, 0x42, 0x25, 0x8e, 0xf5, 0x75, 0x65, 0xf8, + 0xf8, 0xf9, 0xfe, 0xfb, 0xef, 0x2b, 0x71, 0xf2, 0x0b, 0x13, 0x8d, 0xcb, 0x96, 0xd3, 0x8d, 0x1a, + 0x35, 0x4a, 0x8e, 0x6a, 0xf6, 0xd9, 0x62, 0x02, 0x70, 0x2f, 0xd4, 0xee, 0xc1, 0x6c, 0x02, 0x9f, + 0x1d, 0x4d, 0x05, 0x8a, 0x42, 0x30, 0xcd, 0xcb, 0x52, 0x53, 0x3a, 0xe1, 0x4d, 0xb5, 0xa0, 0xa5, + 0x04, 0xe0, 0xaf, 0xbe, 0xc9, 0x40, 0xf1, 0x33, 0x25, 0x25, 0xa5, 0x51, 0x71, 0xc5, 0xc5, 0xc5, + 0x3a, 0x69, 0xf4, 0x09, 0x30, 0x6e, 0xdc, 0x38, 0x9d, 0x78, 0xed, 0xf2, 0x0c, 0xbd, 0xcb, 0x96, + 0xe9, 0x49, 0xa8, 0x4c, 0xe2, 0x51, 0x21, 0xa7, 0xfb, 0xcb, 0x5f, 0xfe, 0xd2, 0xa8, 0x7e, 0x39, + 0x40, 0x7f, 0x36, 0x60, 0x5d, 0xe2, 0xeb, 0xb9, 0x16, 0xef, 0x82, 0x78, 0xa7, 0x41, 0x05, 0x92, + 0xd9, 0x4d, 0x77, 0x6a, 0x0b, 0xc0, 0x9f, 0x47, 0xdf, 0xb6, 0x6d, 0x1b, 0x5d, 0x68, 0xdf, 0x2e, + 0x16, 0x41, 0xde, 0xd1, 0xf0, 0x9c, 0xc8, 0x26, 0x1a, 0xda, 0xd3, 0xe9, 0xcf, 0xcb, 0x11, 0x11, + 0x11, 0x8d, 0x8a, 0xe7, 0x76, 0x35, 0xe7, 0xe8, 0x03, 0x78, 0x4a, 0x34, 0xaf, 0x4f, 0xbc, 0xa6, + 0x11, 0x62, 0x9a, 0xfd, 0xc9, 0x7a, 0xfb, 0xfc, 0x79, 0xee, 0x11, 0x23, 0x46, 0x28, 0xf9, 0xe9, + 0x5b, 0x0b, 0x42, 0x28, 0x4c, 0x09, 0xd0, 0x7a, 0xd1, 0x36, 0x2f, 0xc1, 0x97, 0xfe, 0xcc, 0x73, + 0xba, 0xae, 0xbb, 0x1e, 0x85, 0xf4, 0xe3, 0xb3, 0xb2, 0xb2, 0x74, 0x7a, 0x04, 0x55, 0x20, 0x3e, + 0x4e, 0xcc, 0x73, 0xac, 0x21, 0xc7, 0xa3, 0x62, 0xd6, 0xac, 0x59, 0xe2, 0x93, 0x84, 0xb4, 0x78, + 0x4b, 0xfc, 0xe3, 0xb9, 0x92, 0xf3, 0xf2, 0x8f, 0xe7, 0x56, 0x39, 0x9c, 0x08, 0x2a, 0xcc, 0x4e, + 0x68, 0x97, 0xa5, 0x3f, 0x05, 0xf0, 0x34, 0xf4, 0xdc, 0x73, 0xcf, 0x49, 0x2f, 0xbe, 0xf8, 0xa2, + 0xe4, 0xe9, 0xe9, 0xa9, 0x94, 0x23, 0x97, 0x47, 0x8b, 0xaa, 0xb4, 0x75, 0xeb, 0x56, 0xed, 0x22, + 0xa4, 0xa7, 0x9f, 0x7e, 0x5a, 0x27, 0x1d, 0x7f, 0xcb, 0x98, 0xdb, 0xc4, 0x1f, 0x99, 0x60, 0xab, + 0x12, 0xac, 0xae, 0x2f, 0xe7, 0xe7, 0x27, 0xa7, 0x97, 0x1d, 0x2d, 0xb4, 0xe2, 0x5b, 0x0e, 0xda, + 0xf1, 0xbc, 0x06, 0xb2, 0xf5, 0x88, 0x37, 0xdf, 0x7c, 0x53, 0xe2, 0xe9, 0x46, 0x3b, 0x8e, 0xcb, + 0xbe, 0x9e, 0xa6, 0xbd, 0x5c, 0x76, 0x8b, 0xa7, 0x20, 0x39, 0x03, 0x3f, 0x13, 0x13, 0x13, 0x25, + 0x32, 0x1e, 0x25, 0x2a, 0x65, 0x64, 0x34, 0x87, 0x7c, 0x4e, 0x4f, 0xbb, 0x0e, 0xf1, 0xe1, 0x09, + 0xda, 0xf1, 0xe8, 0x34, 0x54, 0xbb, 0xd1, 0xf2, 0x3b, 0x8d, 0x24, 0xf1, 0xb1, 0x49, 0xce, 0xa7, + 0xed, 0xe8, 0x43, 0x77, 0xd2, 0xb2, 0x65, 0xcb, 0x74, 0xe6, 0x69, 0xce, 0xc3, 0x84, 0x3b, 0x7a, + 0xf4, 0xa8, 0x98, 0x97, 0xe5, 0x39, 0x98, 0xbf, 0xe6, 0xb1, 0x7a, 0xf5, 0x6a, 0xed, 0xec, 0xca, + 0xfb, 0xae, 0x5d, 0xbb, 0x0c, 0x2e, 0xc6, 0x6c, 0x47, 0xe4, 0xd5, 0x57, 0x5f, 0x95, 0x64, 0x63, + 0x11, 0x4a, 0x26, 0xcd, 0x0b, 0x77, 0x24, 0x26, 0x18, 0xcd, 0x02, 0x8d, 0xe0, 0xe0, 0xf5, 0xe3, + 0xf9, 0xe7, 0x9f, 0x97, 0xe4, 0x0f, 0x7a, 0xe8, 0xe7, 0x35, 0xe4, 0x6f, 0xd1, 0x36, 0x94, 0x00, + 0xed, 0x74, 0x37, 0x08, 0x03, 0x2d, 0x5e, 0x03, 0x6e, 0x50, 0xfd, 0xff, 0xf5, 0xc5, 0x76, 0x12, + 0xc0, 0xc4, 0x5d, 0xa0, 0x93, 0x00, 0x9d, 0x04, 0x30, 0x31, 0x06, 0x4c, 0x5c, 0x7d, 0xe7, 0x08, + 0xe8, 0x24, 0x80, 0x89, 0x31, 0x60, 0xe2, 0xea, 0x3b, 0x47, 0x40, 0x27, 0x01, 0x4c, 0x8c, 0x01, + 0x13, 0x57, 0xff, 0xff, 0x2d, 0xb1, 0x75, 0xfd, 0xe9, 0xfe, 0xa1, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXXMLIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x32, 0x3a, 0x30, 0x39, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x9d, + 0x3c, 0x78, 0xe3, 0x00, 0x00, 0x05, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x58, 0x59, + 0x4c, 0x1b, 0x57, 0x14, 0xc5, 0x0b, 0xbb, 0xc1, 0x26, 0xa2, 0x31, 0x56, 0x58, 0x4c, 0xb1, 0x1b, + 0x37, 0x15, 0x8e, 0x42, 0x05, 0x94, 0x25, 0x88, 0x25, 0x6c, 0x05, 0x52, 0x14, 0x0a, 0xfd, 0xa8, + 0x08, 0x1f, 0x91, 0xe0, 0x83, 0x02, 0xa2, 0x2a, 0x6a, 0xfb, 0xd3, 0x82, 0x00, 0x15, 0x3e, 0x8a, + 0x8a, 0x10, 0x42, 0x42, 0x4a, 0xbf, 0x10, 0x12, 0x84, 0x06, 0xd5, 0x12, 0x15, 0x5b, 0x49, 0x0a, + 0x51, 0x31, 0x34, 0xdd, 0x00, 0xa5, 0xb5, 0x4d, 0x42, 0x83, 0xa1, 0x24, 0x0a, 0xc4, 0x94, 0x60, + 0x03, 0xb6, 0xb1, 0x7b, 0x9d, 0x57, 0xdc, 0x67, 0x9b, 0x24, 0xe3, 0x19, 0x3b, 0x08, 0x69, 0x46, + 0x23, 0xfb, 0xbe, 0xf3, 0xee, 0xbd, 0xef, 0xdc, 0x7b, 0xdf, 0x32, 0x33, 0x0c, 0xb3, 0xd9, 0xec, + 0x71, 0x9c, 0x2f, 0xe6, 0x71, 0x26, 0x6f, 0xe1, 0x4e, 0x07, 0x70, 0xd4, 0x15, 0xa4, 0x2b, 0x40, + 0x57, 0x80, 0x62, 0x06, 0xe8, 0x29, 0x44, 0x31, 0x81, 0x94, 0xcd, 0xe9, 0x0a, 0x50, 0x4e, 0x21, + 0x45, 0x07, 0x74, 0x05, 0x28, 0x26, 0x90, 0xb2, 0x39, 0x5d, 0x81, 0xc3, 0x52, 0xa8, 0xff, 0x67, + 0xdb, 0x11, 0x36, 0xea, 0x76, 0x3d, 0x4c, 0xae, 0x7f, 0xf2, 0x75, 0x71, 0x05, 0x36, 0x15, 0xcb, + 0xb7, 0x9b, 0xbe, 0x1e, 0x2e, 0xfe, 0xd4, 0x31, 0x80, 0xf5, 0xdf, 0x94, 0xdf, 0x15, 0x7d, 0xac, + 0xec, 0x19, 0x36, 0x3c, 0xd1, 0x39, 0xf6, 0x92, 0x46, 0xd8, 0xa4, 0x2d, 0x6d, 0x0c, 0x4d, 0xe6, + 0xd5, 0x1f, 0x7e, 0x51, 0xf5, 0x8d, 0xad, 0xff, 0xae, 0x02, 0x9c, 0xe5, 0xed, 0x69, 0xd3, 0x7b, + 0xd0, 0xd0, 0x3d, 0xd8, 0x98, 0xeb, 0xbc, 0x76, 0xe7, 0xaa, 0x2c, 0x3c, 0x37, 0x41, 0x5c, 0x72, + 0x21, 0x40, 0x28, 0x38, 0xe8, 0x21, 0xff, 0x4f, 0x35, 0x00, 0xc3, 0x96, 0x76, 0x49, 0x36, 0xb5, + 0xf8, 0xcd, 0x04, 0x90, 0x23, 0xc8, 0xc2, 0xb8, 0xbb, 0x77, 0x6f, 0xf0, 0x26, 0xdc, 0xfc, 0xb8, + 0x33, 0xa2, 0x92, 0x4c, 0x41, 0x92, 0x94, 0xa0, 0xe1, 0xa1, 0x6a, 0xe4, 0x03, 0xd8, 0x5a, 0xfa, + 0x7b, 0xb1, 0x7f, 0x7c, 0x79, 0x58, 0x0e, 0x84, 0x70, 0xd7, 0xbe, 0xc1, 0x3c, 0x61, 0x7e, 0x32, + 0x8e, 0x20, 0x99, 0x2b, 0x0a, 0x8b, 0xc8, 0x49, 0x58, 0xb9, 0xf9, 0xf3, 0xfe, 0xae, 0x1e, 0x21, + 0x0f, 0x67, 0xef, 0xc0, 0xcd, 0x09, 0xe3, 0x8b, 0xde, 0x4d, 0x07, 0x13, 0xb6, 0x9f, 0x8f, 0xa3, + 0xd5, 0x0b, 0x11, 0x86, 0xd3, 0xaf, 0x94, 0x66, 0xf3, 0xda, 0x8f, 0xf3, 0x8b, 0xfd, 0x63, 0x30, + 0x36, 0xee, 0x9d, 0xc9, 0x66, 0x0b, 0x92, 0xa5, 0xc2, 0xfc, 0xf3, 0x82, 0x84, 0x68, 0x0f, 0x26, + 0x03, 0xef, 0xc2, 0x65, 0xc3, 0xf6, 0x8e, 0x7a, 0x54, 0x0e, 0x45, 0xd3, 0x28, 0xee, 0xe3, 0xb8, + 0xa7, 0xbf, 0xaf, 0x30, 0x2f, 0x49, 0x54, 0x9c, 0xe1, 0x1f, 0x7a, 0x12, 0xc7, 0x5f, 0x28, 0x3b, + 0x1d, 0xc0, 0xad, 0x0f, 0xbf, 0x7a, 0x30, 0x3d, 0x8f, 0xfb, 0xe5, 0x46, 0x85, 0x42, 0xfe, 0x20, + 0xbb, 0x5e, 0x3c, 0x0e, 0x8e, 0x3f, 0x5f, 0xde, 0x54, 0x2e, 0x43, 0x18, 0x10, 0x8c, 0x1e, 0x5b, + 0xd3, 0x0c, 0x06, 0xe3, 0xcd, 0x4f, 0xca, 0x84, 0x17, 0xcf, 0x3f, 0xdf, 0x16, 0xef, 0x75, 0x7a, + 0x0a, 0xe9, 0x37, 0xff, 0xdf, 0x22, 0x4f, 0xa5, 0xc6, 0x48, 0x2e, 0xe7, 0x05, 0xbd, 0x2e, 0xc4, + 0x3d, 0x12, 0x94, 0x79, 0xaf, 0x85, 0x9f, 0xfb, 0xe8, 0xfd, 0xb3, 0x55, 0x25, 0x30, 0xa9, 0xfe, + 0xb8, 0x2a, 0x7b, 0xa2, 0x7e, 0x08, 0x86, 0x30, 0x1d, 0x76, 0x35, 0x5b, 0x04, 0x3d, 0x20, 0x35, + 0xa7, 0x03, 0xc0, 0xbd, 0xaf, 0xdd, 0x9a, 0x63, 0x30, 0x98, 0x91, 0x85, 0x29, 0xfc, 0xb8, 0x37, + 0x70, 0x9c, 0xa0, 0x6c, 0xda, 0x33, 0xa8, 0xbf, 0xff, 0x69, 0x49, 0x36, 0x89, 0xd8, 0x13, 0xb4, + 0xb2, 0x53, 0x73, 0x3a, 0x80, 0xc8, 0x77, 0x52, 0x20, 0x49, 0x68, 0xcf, 0x31, 0x19, 0x8d, 0x2b, + 0x37, 0x6e, 0xc3, 0xed, 0x2f, 0x08, 0x06, 0x1c, 0x26, 0xb1, 0x4f, 0x30, 0xcf, 0x6e, 0x80, 0x43, + 0x9b, 0x68, 0xfe, 0x2c, 0x8f, 0xc8, 0x0d, 0xdb, 0x36, 0x67, 0xc2, 0x2b, 0xe7, 0x4e, 0x3b, 0x9b, + 0x0b, 0xa7, 0xd7, 0x80, 0x85, 0x90, 0xed, 0xae, 0x6f, 0xa5, 0xc8, 0x64, 0xb3, 0x04, 0x89, 0x52, + 0x88, 0x24, 0xe4, 0xad, 0xc3, 0xd7, 0x31, 0x1c, 0xc6, 0xea, 0xd1, 0x99, 0x7b, 0xdf, 0x4e, 0x6a, + 0xfe, 0xfc, 0xcb, 0x6a, 0x05, 0x02, 0xd3, 0x93, 0x1d, 0x9e, 0x15, 0x2f, 0x2a, 0xb9, 0x00, 0xf3, + 0x0a, 0xc7, 0x89, 0xc8, 0xa4, 0x02, 0x38, 0x70, 0xbc, 0xa9, 0xb8, 0xaf, 0xea, 0x1b, 0x57, 0x8f, + 0xcf, 0x9a, 0x0c, 0xc6, 0x03, 0xcc, 0xf2, 0xcf, 0x09, 0x3d, 0x99, 0x73, 0xed, 0x0b, 0x1c, 0x01, + 0xf9, 0xf1, 0xc2, 0xdd, 0xc9, 0xaa, 0x2f, 0xed, 0xf6, 0x5c, 0x9f, 0x13, 0xdc, 0xa8, 0x4b, 0xa9, + 0xaf, 0x5e, 0x4a, 0xf5, 0x0e, 0x0a, 0xb4, 0xd3, 0x27, 0xd8, 0x74, 0x7a, 0x0a, 0xe1, 0x7e, 0x79, + 0xa7, 0x23, 0x62, 0x3f, 0xbb, 0x22, 0xfd, 0xa0, 0xf8, 0x2e, 0x1c, 0x4c, 0xd7, 0x6f, 0xec, 0x3e, + 0xfe, 0x6f, 0xfd, 0xed, 0x3c, 0xd2, 0xe0, 0x6a, 0x48, 0xd6, 0x6f, 0x69, 0x71, 0xf6, 0x41, 0x92, + 0x08, 0x71, 0x49, 0x66, 0x58, 0x66, 0x1c, 0x83, 0xcd, 0x72, 0x54, 0x26, 0x8e, 0x50, 0x0a, 0x00, + 0x0d, 0xe3, 0x7d, 0x22, 0xf0, 0xcc, 0x95, 0x8b, 0x92, 0xcb, 0x6f, 0xab, 0xc7, 0x66, 0xe1, 0x68, + 0xb3, 0xdb, 0xe0, 0xed, 0xa8, 0x30, 0x58, 0xcc, 0x53, 0x29, 0x31, 0xa2, 0xf7, 0x2e, 0x04, 0x9f, + 0x15, 0xdb, 0x75, 0x91, 0x6c, 0xc2, 0xce, 0xe5, 0xda, 0xeb, 0xd1, 0xaf, 0x8a, 0x99, 0xcf, 0xbb, + 0x1d, 0x7d, 0x02, 0x3e, 0xd7, 0xd1, 0xaf, 0x5d, 0x5b, 0x77, 0xec, 0xa2, 0x82, 0x50, 0x5a, 0x03, + 0x24, 0x73, 0xe6, 0x52, 0x33, 0x17, 0x3f, 0x4e, 0xbb, 0x94, 0x1b, 0x21, 0x67, 0x74, 0x00, 0x84, + 0xd2, 0xe4, 0x46, 0x25, 0xba, 0x02, 0x6e, 0x4c, 0x2e, 0x21, 0xd7, 0x74, 0x05, 0x08, 0xa5, 0xc9, + 0x8d, 0x4a, 0xc7, 0xbe, 0x02, 0x2e, 0x78, 0x94, 0x20, 0x9d, 0xde, 0xfd, 0xfd, 0x7d, 0x38, 0x83, + 0xc1, 0x9c, 0xcd, 0x26, 0x4f, 0xe3, 0xc8, 0x2a, 0x50, 0x5d, 0x5d, 0xed, 0xe5, 0xe5, 0xe5, 0xf9, + 0xf4, 0x6a, 0x6f, 0x6f, 0x27, 0x9d, 0x85, 0x23, 0x0b, 0x20, 0x32, 0x32, 0x32, 0x2a, 0x2a, 0xca, + 0xd7, 0xd7, 0x17, 0xa8, 0x6b, 0xb5, 0xda, 0xe3, 0x17, 0x40, 0x6d, 0x6d, 0xad, 0x52, 0xa9, 0xcc, + 0xc8, 0xc8, 0x20, 0x4d, 0x1d, 0x19, 0x92, 0xa9, 0xc0, 0xf4, 0xf4, 0x74, 0x7a, 0x7a, 0x7a, 0x7c, + 0x7c, 0x7c, 0x72, 0x72, 0xf2, 0xd4, 0xd4, 0xd4, 0xc8, 0xc8, 0x48, 0x62, 0x62, 0x22, 0x34, 0x8b, + 0x8a, 0x8a, 0x76, 0x76, 0x76, 0x64, 0x32, 0x59, 0x52, 0x52, 0x52, 0x5a, 0x5a, 0x5a, 0x67, 0x67, + 0x27, 0x9f, 0xcf, 0x17, 0x8b, 0xc5, 0xbd, 0xbd, 0xbd, 0x31, 0x31, 0x31, 0x21, 0x21, 0x21, 0xf5, + 0xf5, 0xf5, 0x7b, 0x7b, 0x36, 0x1f, 0x91, 0x28, 0xb2, 0xb7, 0x98, 0x93, 0x78, 0x94, 0x6d, 0x69, + 0x69, 0xb1, 0x0e, 0xdc, 0xd4, 0xd4, 0x54, 0x57, 0x57, 0x67, 0x6d, 0xaa, 0x54, 0xaa, 0xaa, 0xaa, + 0x2a, 0x6b, 0xd3, 0x51, 0x80, 0x60, 0xf0, 0x11, 0xf3, 0xf3, 0xf3, 0x41, 0xa7, 0xb9, 0xb9, 0x19, + 0x07, 0x9d, 0x92, 0xc9, 0x54, 0xa0, 0xa6, 0xa6, 0x66, 0x70, 0x70, 0x90, 0xc7, 0xb3, 0xbc, 0xbf, + 0x4b, 0xa5, 0x52, 0x89, 0x44, 0x02, 0x42, 0x6e, 0x6e, 0xee, 0xcc, 0xcc, 0x8c, 0x48, 0x24, 0x6a, + 0x6c, 0x6c, 0x84, 0x6a, 0x00, 0x52, 0x5a, 0x5a, 0x3a, 0x3e, 0x3e, 0x0e, 0x02, 0x5c, 0x43, 0x43, + 0x43, 0xe5, 0xe5, 0xe5, 0x20, 0xcc, 0xcf, 0xdb, 0x7c, 0x53, 0x7a, 0xda, 0x49, 0xe9, 0x87, 0xcc, + 0xfe, 0xe5, 0xe3, 0xe3, 0x53, 0x58, 0x58, 0xc8, 0xe5, 0x72, 0xb3, 0xb3, 0xb3, 0xcb, 0xca, 0xca, + 0x74, 0x3a, 0x5d, 0x74, 0x74, 0x74, 0x5f, 0x5f, 0x5f, 0x40, 0x40, 0x00, 0x70, 0x01, 0x1c, 0x66, + 0x0b, 0x08, 0x79, 0x79, 0x79, 0xb1, 0xb1, 0xb1, 0x20, 0xc0, 0x4e, 0x93, 0x95, 0x95, 0xb5, 0xb2, + 0xb2, 0x02, 0xb2, 0x46, 0x73, 0xc8, 0xdb, 0x26, 0xe0, 0xa4, 0x2f, 0x32, 0x15, 0x40, 0x83, 0xc1, + 0x2c, 0x6f, 0x68, 0x68, 0x00, 0x42, 0x30, 0xad, 0x3b, 0x3a, 0x3a, 0x10, 0x7b, 0x9c, 0x87, 0x9f, + 0x9f, 0x1f, 0x7c, 0x69, 0x03, 0x04, 0x02, 0x80, 0x9d, 0x1e, 0xc9, 0x26, 0x93, 0x09, 0xd7, 0xa1, + 0x2e, 0x93, 0x0f, 0x00, 0x32, 0xda, 0xd5, 0xd5, 0x05, 0xd5, 0x00, 0x12, 0x15, 0x15, 0x15, 0x1b, + 0x1b, 0x44, 0xbf, 0x4e, 0x53, 0x27, 0x8d, 0x7b, 0x20, 0x19, 0x00, 0xd0, 0xcd, 0xc9, 0xc9, 0x59, + 0x5d, 0x5d, 0x1d, 0x18, 0x18, 0xa8, 0xac, 0xac, 0x54, 0x28, 0x14, 0x05, 0x05, 0x05, 0xd6, 0xed, + 0x1c, 0x56, 0x21, 0x8c, 0x81, 0x7e, 0xf1, 0xc1, 0x70, 0x19, 0x4a, 0x61, 0x34, 0x1a, 0x91, 0x0e, + 0x2e, 0xe3, 0x3a, 0x84, 0x64, 0xa7, 0x96, 0x3c, 0x52, 0x86, 0xa5, 0x89, 0x12, 0x0f, 0xc7, 0x90, + 0x5c, 0x2e, 0x6f, 0x6d, 0x6d, 0x45, 0x23, 0x41, 0x73, 0x62, 0x62, 0xa2, 0xad, 0xad, 0x0d, 0xcd, + 0x96, 0xc0, 0xc0, 0xc0, 0x85, 0x85, 0x05, 0xd4, 0x05, 0x4b, 0xbc, 0xbb, 0xbb, 0x1b, 0x64, 0x16, + 0x8b, 0xd5, 0xd3, 0xd3, 0x03, 0x26, 0x8e, 0x8f, 0x0f, 0x1c, 0x0e, 0x67, 0x74, 0x74, 0xd4, 0x59, + 0x3e, 0x64, 0x2a, 0x00, 0xfc, 0xe0, 0x29, 0x00, 0xd8, 0x80, 0x00, 0x59, 0xd4, 0xeb, 0xf5, 0x88, + 0xb1, 0x15, 0x64, 0x32, 0x2d, 0x6e, 0x81, 0x22, 0x5c, 0xe8, 0xac, 0x05, 0x04, 0x2d, 0x12, 0x08, + 0x00, 0x28, 0x82, 0x3e, 0x32, 0x41, 0xe1, 0xa1, 0x5f, 0x47, 0x04, 0xef, 0x7d, 0x96, 0x4c, 0x7f, + 0x95, 0x78, 0x56, 0x66, 0x5e, 0x16, 0x4e, 0x66, 0x0a, 0xbd, 0x2c, 0x6e, 0x84, 0xc6, 0xa1, 0x03, + 0x20, 0x94, 0x26, 0x37, 0x2a, 0xd1, 0x15, 0x70, 0x63, 0x72, 0x09, 0xb9, 0xa6, 0x2b, 0x40, 0x28, + 0x4d, 0x6e, 0x54, 0xa2, 0x2b, 0xe0, 0xc6, 0xe4, 0x12, 0x72, 0x4d, 0x57, 0x80, 0x50, 0x9a, 0xdc, + 0xa8, 0xf4, 0x2f, 0x8a, 0xf9, 0x6c, 0x7c, 0x9d, 0x47, 0x95, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +static const u_int8_t FLEXXMLIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0e, 0x6d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x1d, 0x69, 0x74, 0x54, 0xd5, 0xf9, 0x9b, 0xcc, 0x64, 0x9f, 0xec, 0x54, 0x16, 0x13, 0xb6, 0x20, + 0x02, 0x0a, 0x28, 0x2a, 0x04, 0xb1, 0x2d, 0x50, 0x6c, 0x2d, 0x16, 0xb4, 0x28, 0x76, 0x53, 0xaa, + 0xb5, 0x96, 0x9e, 0x23, 0x15, 0x0a, 0x47, 0xa4, 0x2d, 0x82, 0x4b, 0xed, 0xb1, 0xd5, 0x42, 0x6b, + 0x51, 0xb1, 0x0b, 0xf0, 0xc3, 0x96, 0xd3, 0x5a, 0x2c, 0x16, 0x5a, 0x6c, 0xd5, 0x42, 0x85, 0xb0, + 0x06, 0x01, 0x29, 0x90, 0xb0, 0x19, 0x16, 0xc3, 0x96, 0xc9, 0x64, 0x9b, 0x2c, 0x93, 0x99, 0x79, + 0xfd, 0xbe, 0x1b, 0xef, 0xcd, 0xbc, 0x37, 0xf3, 0xde, 0xcc, 0x7b, 0x33, 0xef, 0x91, 0xe0, 0x7b, + 0xe7, 0x24, 0xef, 0xdb, 0xee, 0x77, 0xbf, 0xe5, 0x2e, 0x6f, 0xb9, 0xef, 0x8e, 0x43, 0xc2, 0x03, + 0x74, 0x1c, 0x29, 0x3a, 0x64, 0x99, 0x68, 0xe2, 0x05, 0x6a, 0xb7, 0x8d, 0x65, 0x9a, 0xa4, 0xa0, + 0x8f, 0x9d, 0x39, 0x2e, 0x2c, 0x21, 0x1f, 0xf8, 0x71, 0x69, 0xeb, 0x2d, 0x1c, 0x94, 0xd4, 0x60, + 0x07, 0x49, 0x88, 0xd2, 0x08, 0x84, 0xda, 0x6a, 0x20, 0x25, 0xa3, 0x5f, 0x38, 0x49, 0x06, 0x47, + 0x14, 0x90, 0x71, 0xa3, 0x20, 0x89, 0x3b, 0xad, 0x54, 0xea, 0x70, 0x38, 0x64, 0xa4, 0x88, 0x1a, + 0xb8, 0x00, 0x3f, 0xcb, 0xa4, 0x11, 0x31, 0xdf, 0x07, 0xf3, 0x6b, 0x88, 0x70, 0x5a, 0xe9, 0xa4, + 0x12, 0x97, 0x15, 0x08, 0xfa, 0x8e, 0x81, 0x14, 0x68, 0x60, 0x32, 0xde, 0x8a, 0xaf, 0x82, 0x67, + 0xfb, 0x6d, 0x4a, 0x79, 0x00, 0xde, 0x78, 0x3c, 0x3b, 0x26, 0x71, 0x50, 0x76, 0x6e, 0xad, 0xf9, + 0xb3, 0x0c, 0x17, 0x05, 0xc2, 0xa9, 0xbc, 0xe1, 0x79, 0x76, 0x7d, 0x39, 0x9c, 0xcc, 0xe0, 0xee, + 0x1e, 0x25, 0x1e, 0x92, 0x8a, 0x8a, 0x0a, 0x18, 0x36, 0x6c, 0x18, 0x47, 0x65, 0x67, 0xf3, 0x7d, + 0xd0, 0x5d, 0x83, 0xcc, 0xbe, 0x38, 0x10, 0x59, 0xcb, 0x88, 0x43, 0x5e, 0xb7, 0x88, 0xa1, 0x0a, + 0x22, 0x86, 0x36, 0xad, 0x6a, 0x23, 0x9a, 0xd6, 0x27, 0x04, 0x6a, 0x7d, 0xde, 0x0f, 0xbe, 0x11, + 0xc1, 0xe6, 0xad, 0x32, 0x9c, 0x41, 0x34, 0xdf, 0x47, 0xbf, 0x0e, 0x27, 0x09, 0x38, 0x6a, 0xd3, + 0xe6, 0x5c, 0x2a, 0xe8, 0xd9, 0xf9, 0x45, 0x8e, 0xca, 0xc6, 0x5a, 0x4e, 0x24, 0x99, 0xc6, 0x23, + 0x8b, 0x38, 0x1a, 0x71, 0xd6, 0xac, 0x20, 0x5c, 0xba, 0xae, 0xe2, 0x5e, 0x29, 0xd4, 0xe1, 0x0d, + 0x27, 0xc5, 0x05, 0x77, 0xef, 0x56, 0x54, 0x5d, 0x5d, 0x0d, 0x9b, 0x37, 0x6f, 0xd6, 0x4a, 0x71, + 0xd7, 0x78, 0x14, 0xcd, 0x5f, 0x2c, 0xc9, 0xc8, 0xd7, 0x5f, 0x7f, 0xbd, 0xf4, 0xec, 0xb3, 0xcf, + 0x4a, 0x03, 0x07, 0x0e, 0xa4, 0x69, 0x8d, 0xfd, 0x71, 0x79, 0x2e, 0xc3, 0x71, 0xe5, 0x59, 0x33, + 0x07, 0x54, 0x78, 0xf7, 0xee, 0xdd, 0x42, 0x29, 0x57, 0x7e, 0xed, 0xb5, 0xd7, 0x4a, 0x4f, 0x3d, + 0xf5, 0x94, 0x8c, 0xae, 0x54, 0xcc, 0xf1, 0xee, 0x9d, 0x03, 0xf4, 0x28, 0xe6, 0xd1, 0xf3, 0x3d, + 0x30, 0x34, 0x16, 0xc5, 0x8c, 0x4b, 0x98, 0xc0, 0xa7, 0xb0, 0x82, 0x40, 0xd3, 0x41, 0x68, 0x3e, + 0xba, 0x24, 0x2c, 0x08, 0x31, 0x40, 0xde, 0x21, 0xa2, 0x9d, 0x69, 0xa4, 0xc4, 0xb1, 0x5f, 0xc6, + 0x22, 0x1a, 0x3b, 0x42, 0xed, 0x6c, 0x74, 0xf5, 0x7b, 0x77, 0xca, 0xf8, 0x4a, 0x24, 0x6a, 0x4f, + 0x6e, 0xfd, 0xf8, 0x4f, 0x51, 0x87, 0x66, 0x2a, 0x5c, 0xbb, 0xad, 0x4c, 0xa6, 0xa3, 0xe1, 0xe0, + 0xa3, 0xaa, 0xb2, 0x24, 0x18, 0xb5, 0x02, 0xb2, 0xd2, 0x57, 0xfd, 0xb2, 0x4c, 0x11, 0x21, 0xc2, + 0x7a, 0x05, 0x87, 0x79, 0x5a, 0x3e, 0x5e, 0x41, 0xed, 0x44, 0xa3, 0x56, 0x40, 0xac, 0xe6, 0x13, + 0x2f, 0x46, 0x28, 0x54, 0x56, 0x50, 0x57, 0x71, 0x4f, 0x84, 0x8c, 0xb2, 0x16, 0xd5, 0x0a, 0xb8, + 0x60, 0x6d, 0xf9, 0xad, 0x0c, 0xac, 0x8d, 0x62, 0x61, 0x47, 0xd3, 0x61, 0x2e, 0xa6, 0x7a, 0x8e, + 0xd9, 0x0f, 0x8a, 0x6e, 0x2d, 0x67, 0xcd, 0x44, 0x0a, 0x05, 0x22, 0x9a, 0x8b, 0xcb, 0x3d, 0x3c, + 0x82, 0xa6, 0x24, 0xd8, 0x63, 0x91, 0x32, 0x22, 0x11, 0x78, 0xcc, 0x1c, 0x44, 0x94, 0x08, 0x23, + 0xc4, 0x9c, 0x8f, 0x51, 0x36, 0xa1, 0x0a, 0x36, 0x6e, 0xdc, 0x18, 0x56, 0x5d, 0x74, 0x50, 0xb5, + 0x82, 0x79, 0xf3, 0xe6, 0x41, 0x6e, 0x6e, 0x2e, 0xd0, 0x3d, 0xde, 0xd9, 0xb3, 0x67, 0xd9, 0x79, + 0xcc, 0x98, 0x31, 0x40, 0x74, 0x97, 0xcb, 0x15, 0x5d, 0x5b, 0x34, 0xaa, 0x6a, 0x03, 0x46, 0x86, + 0xdb, 0xed, 0x96, 0xe6, 0xce, 0x9d, 0xcb, 0x44, 0xb0, 0xac, 0xf4, 0xc6, 0x1b, 0x6f, 0x08, 0x98, + 0x80, 0xf9, 0xf3, 0xe7, 0x33, 0x5c, 0xeb, 0x9f, 0x6a, 0x47, 0x23, 0x85, 0xfc, 0x8f, 0xae, 0x22, + 0x78, 0x05, 0x9c, 0x96, 0x97, 0x97, 0x27, 0xf8, 0xa7, 0x4f, 0x9f, 0x56, 0xad, 0xc3, 0xee, 0x07, + 0x18, 0x31, 0xed, 0x43, 0xb5, 0x15, 0x69, 0x17, 0x8b, 0x9f, 0x6b, 0x7a, 0x0e, 0xe2, 0x37, 0xc5, + 0x98, 0xa4, 0xe9, 0x11, 0x32, 0x66, 0x56, 0xfc, 0xa5, 0x6c, 0x07, 0xe2, 0x8f, 0x95, 0x39, 0x92, + 0x96, 0x65, 0x20, 0xd4, 0x5e, 0x63, 0x8a, 0x07, 0x09, 0x3b, 0xd0, 0x54, 0xb5, 0x18, 0x62, 0x3d, + 0xb6, 0xf0, 0x94, 0x8f, 0x87, 0xba, 0x3d, 0x77, 0xcb, 0x1c, 0xa0, 0x32, 0x0d, 0x07, 0xbf, 0x2f, + 0xa3, 0x19, 0x41, 0x0c, 0x8d, 0x42, 0xde, 0x8a, 0xe9, 0x10, 0x6c, 0x3b, 0xcf, 0xea, 0x73, 0x97, + 0x2e, 0x84, 0x8c, 0xbe, 0xf7, 0xaa, 0xd6, 0xed, 0xad, 0xb8, 0x1b, 0x65, 0x6b, 0xa0, 0x68, 0xfc, + 0x16, 0x70, 0x38, 0xb3, 0x64, 0x72, 0x7e, 0xcf, 0x16, 0x68, 0x3c, 0xb2, 0x90, 0xd1, 0x52, 0x5c, + 0x39, 0x50, 0x58, 0xf6, 0x9e, 0x8c, 0x1f, 0x0f, 0x12, 0xb7, 0x03, 0x9e, 0xf2, 0x32, 0x9c, 0x57, + 0x43, 0x4c, 0x67, 0xd1, 0xb8, 0x4d, 0xe0, 0x48, 0x2d, 0x8a, 0xa9, 0xbf, 0xa9, 0xea, 0x27, 0xd0, + 0x7e, 0xe9, 0x1d, 0xc8, 0x1f, 0xfd, 0x7b, 0x70, 0xe5, 0x8c, 0xd2, 0x94, 0x97, 0x82, 0x2d, 0x50, + 0xb7, 0x73, 0x0a, 0xd6, 0xd1, 0x79, 0x6d, 0xda, 0xeb, 0xb6, 0xdd, 0x9a, 0xf2, 0x9c, 0x19, 0xb7, + 0x03, 0x54, 0x20, 0xd0, 0xf4, 0x3f, 0xa8, 0x3f, 0xf0, 0x1d, 0x5e, 0x16, 0x0a, 0xc6, 0xac, 0x05, + 0x67, 0x56, 0xa9, 0xc0, 0xc3, 0x81, 0xb6, 0x73, 0x7f, 0x01, 0xbc, 0xf4, 0x87, 0xec, 0x81, 0x73, + 0x20, 0xb3, 0x78, 0x56, 0x38, 0x4b, 0x06, 0x87, 0xfc, 0x97, 0xa0, 0x6e, 0xf7, 0x9d, 0x82, 0x96, + 0x3b, 0xe2, 0x05, 0x48, 0x2b, 0xfc, 0xbc, 0xc0, 0x63, 0x01, 0xba, 0x1c, 0x50, 0x2a, 0xf3, 0xee, + 0x99, 0x06, 0xc1, 0xf6, 0x0b, 0x8c, 0x9c, 0x3f, 0xea, 0x35, 0x70, 0xe5, 0xde, 0xc8, 0xe0, 0x40, + 0x73, 0x25, 0xd4, 0xef, 0x9f, 0x05, 0xe9, 0x45, 0x9f, 0x85, 0x9c, 0xe1, 0xbf, 0x54, 0x16, 0x83, + 0x90, 0xbf, 0x16, 0x8d, 0x9e, 0xca, 0xe8, 0x29, 0x2e, 0x37, 0x36, 0x9d, 0x77, 0x10, 0x76, 0x46, + 0xc8, 0xc5, 0x43, 0x48, 0xc8, 0x81, 0xa8, 0x15, 0x84, 0xda, 0xa1, 0x76, 0xfb, 0x67, 0x21, 0x25, + 0xad, 0x17, 0x14, 0x8e, 0xfd, 0x67, 0x54, 0x91, 0x64, 0x12, 0x93, 0xef, 0x00, 0x5a, 0xe7, 0xaf, + 0x7d, 0x0f, 0xd2, 0x7a, 0x7d, 0x21, 0x99, 0x76, 0xaa, 0xea, 0x32, 0xc5, 0x01, 0xd5, 0xda, 0x4c, + 0x60, 0x24, 0x3c, 0x0f, 0x98, 0x60, 0x93, 0x2e, 0x95, 0x3d, 0xde, 0x01, 0x1d, 0xb7, 0x6f, 0xba, + 0x02, 0x13, 0x53, 0x38, 0xfc, 0x8d, 0x21, 0xde, 0x70, 0xc5, 0x94, 0x57, 0x13, 0x30, 0x94, 0x81, + 0xb4, 0xb4, 0x34, 0x76, 0x1b, 0xeb, 0x74, 0x3a, 0x21, 0x10, 0x08, 0x30, 0x98, 0x0c, 0x5a, 0xbf, + 0x7e, 0x3d, 0x14, 0x15, 0x15, 0x31, 0x7c, 0xd6, 0xac, 0x59, 0xec, 0x3c, 0x63, 0xc6, 0x0c, 0xc1, + 0x7f, 0xff, 0xfd, 0xf7, 0x85, 0x1d, 0x64, 0x34, 0xde, 0x95, 0x0a, 0xdc, 0x30, 0xa0, 0x7a, 0xbb, + 0x19, 0x83, 0x71, 0xe1, 0xc2, 0x05, 0x76, 0xd7, 0x8a, 0x4e, 0x48, 0x23, 0x46, 0x8c, 0x90, 0x49, + 0xa3, 0x31, 0xd2, 0xb6, 0x6d, 0xdb, 0xd8, 0x6d, 0x34, 0xc1, 0x74, 0xf0, 0x3b, 0xdf, 0x70, 0x41, + 0xba, 0xad, 0xe6, 0xfc, 0x70, 0xba, 0x1e, 0xd8, 0x50, 0x06, 0x28, 0x5a, 0x43, 0x87, 0x0e, 0x85, + 0x9c, 0x9c, 0x1c, 0x38, 0x74, 0xe8, 0x10, 0x1c, 0x3e, 0x7c, 0x18, 0x16, 0x2f, 0x5e, 0x4c, 0x64, + 0x71, 0xa4, 0xa7, 0xa7, 0x0b, 0xd8, 0x4c, 0xc0, 0x1e, 0x46, 0xcd, 0x8c, 0x6e, 0x3c, 0xba, 0x0d, + 0x37, 0xa1, 0x78, 0x94, 0x5b, 0x21, 0x63, 0x3b, 0x60, 0x45, 0x94, 0xb5, 0xea, 0xb0, 0x3b, 0xb1, + 0x56, 0x74, 0xac, 0xe0, 0xd9, 0x7d, 0xc0, 0x8a, 0x28, 0x6b, 0xd5, 0x61, 0x67, 0x40, 0x2b, 0x3a, + 0x56, 0xf0, 0xec, 0x0c, 0x58, 0x11, 0x65, 0xad, 0x3a, 0xec, 0x0c, 0x68, 0x45, 0x87, 0xf3, 0x82, + 0xbe, 0x2a, 0x0e, 0x26, 0xfd, 0x6c, 0xc9, 0x4c, 0xcc, 0x1f, 0xfe, 0xc6, 0xfb, 0xb8, 0x50, 0x8f, + 0x97, 0x09, 0x35, 0x21, 0xa9, 0xc3, 0xc3, 0x9e, 0x4c, 0xb7, 0x9c, 0x7a, 0x55, 0xb5, 0xce, 0x50, + 0xfb, 0x39, 0xc6, 0x4b, 0xcd, 0xbb, 0x41, 0xc8, 0xb4, 0x5f, 0xfa, 0x17, 0x2b, 0x17, 0x6c, 0xad, + 0x16, 0x34, 0xa3, 0x80, 0xe1, 0x9b, 0xfa, 0x86, 0x0f, 0x1f, 0x86, 0x8e, 0xc6, 0x83, 0xac, 0x5e, + 0x5c, 0xfa, 0xa6, 0x5a, 0x7f, 0xfd, 0xbe, 0x6f, 0x31, 0x5e, 0xde, 0xc8, 0x95, 0x42, 0x26, 0xd8, + 0x7a, 0x8a, 0xc1, 0xde, 0xbd, 0xf7, 0x81, 0x33, 0xb3, 0x04, 0x0a, 0x6e, 0x5a, 0x27, 0x78, 0x7a, + 0x01, 0xdd, 0x4d, 0xc8, 0x5f, 0xb7, 0x15, 0x1a, 0x0f, 0x2f, 0x60, 0xf5, 0x74, 0x3e, 0x12, 0x7f, + 0x17, 0x61, 0xf9, 0xe2, 0xe5, 0x2e, 0x23, 0x42, 0x18, 0xe9, 0x32, 0xe8, 0x7c, 0xfe, 0xf9, 0x9f, + 0x2e, 0xf2, 0x27, 0x90, 0xec, 0x31, 0xfd, 0x90, 0x45, 0x90, 0xd1, 0x67, 0x46, 0x84, 0x4c, 0x2c, + 0x82, 0x0e, 0x07, 0x42, 0xe0, 0xd9, 0x31, 0x19, 0xe8, 0x31, 0x38, 0x1d, 0xf9, 0xa3, 0x7e, 0x87, + 0x0f, 0x73, 0x47, 0x6b, 0xea, 0x6f, 0xf8, 0xf0, 0xbb, 0x98, 0xa5, 0x0f, 0xa1, 0xf0, 0x96, 0xb7, + 0x20, 0x25, 0xbd, 0x6f, 0x54, 0x59, 0xca, 0x86, 0x77, 0xef, 0x4c, 0xc6, 0x73, 0x38, 0x5c, 0xf8, + 0x1e, 0x01, 0x1d, 0x4d, 0xc9, 0x88, 0x2a, 0x1b, 0x8d, 0x18, 0x57, 0x1f, 0x68, 0x39, 0xb5, 0x92, + 0x45, 0x92, 0x8c, 0x4f, 0xff, 0xcc, 0x97, 0x80, 0x3a, 0x63, 0x2c, 0xe3, 0xa9, 0x32, 0x32, 0x9e, + 0x0e, 0x35, 0xe3, 0x89, 0xe7, 0xcc, 0x1c, 0xc0, 0xf4, 0x65, 0x15, 0xdf, 0xcf, 0xde, 0x0d, 0xd4, + 0x6e, 0xff, 0x1c, 0x34, 0x55, 0x2e, 0x22, 0x56, 0x5c, 0x47, 0x5c, 0x0e, 0xa4, 0xa4, 0x5f, 0x25, + 0x94, 0xf9, 0x3d, 0x9b, 0x69, 0x4d, 0xbe, 0xc0, 0xd5, 0x80, 0x96, 0xea, 0xdf, 0x30, 0x56, 0xee, + 0xb0, 0x9f, 0xaa, 0x89, 0x84, 0xd1, 0x43, 0xd0, 0x76, 0xfe, 0x2d, 0x81, 0x3b, 0x33, 0xae, 0x16, + 0x70, 0x2c, 0x40, 0x47, 0x13, 0x02, 0x68, 0x38, 0xf0, 0x20, 0xe0, 0x52, 0x21, 0xa6, 0x33, 0x35, + 0x6f, 0x0c, 0x84, 0x77, 0x4c, 0x65, 0x45, 0xf1, 0x0e, 0x9d, 0xf4, 0x8e, 0xad, 0xfd, 0xd2, 0xbf, + 0x59, 0x71, 0x32, 0xbc, 0xe0, 0xe6, 0xbf, 0x29, 0x55, 0x69, 0xe2, 0xba, 0x1c, 0x20, 0x4d, 0x52, + 0xb0, 0x19, 0x5f, 0x05, 0xdd, 0x8e, 0xe9, 0x0e, 0x32, 0xc5, 0x39, 0xd7, 0x2c, 0x86, 0xf4, 0xde, + 0xd3, 0x65, 0x95, 0xf8, 0xeb, 0xfe, 0x8b, 0x1d, 0xfd, 0x71, 0xc8, 0xec, 0x37, 0x13, 0xb2, 0x07, + 0x3f, 0x2e, 0xe3, 0x71, 0xa4, 0xc3, 0xbb, 0x1d, 0x1a, 0x0e, 0xcd, 0xe3, 0x28, 0xf6, 0x93, 0x0d, + 0xd8, 0xd4, 0x7a, 0x0b, 0x3c, 0x5e, 0x40, 0xb7, 0x03, 0x5c, 0xb1, 0xbf, 0xf6, 0x5d, 0x68, 0xac, + 0xfc, 0x31, 0x43, 0xe9, 0xb1, 0x62, 0xd1, 0x84, 0x5d, 0x9c, 0xc5, 0xc6, 0x78, 0x42, 0xd4, 0x26, + 0x2e, 0x0f, 0xbe, 0x00, 0x91, 0xf0, 0x45, 0x08, 0x1d, 0xee, 0xc1, 0x0b, 0x20, 0xa3, 0xdf, 0xd7, + 0x18, 0x6c, 0xe8, 0x9f, 0x9e, 0xc7, 0x78, 0xd1, 0x64, 0x71, 0x48, 0x95, 0x02, 0x2d, 0xd5, 0x82, + 0x15, 0x6c, 0xbf, 0xc8, 0x96, 0xbb, 0x79, 0xf7, 0xdd, 0x2f, 0x68, 0x4a, 0x20, 0x14, 0x68, 0x96, + 0xea, 0xf7, 0x3f, 0xa8, 0x24, 0x1b, 0xc2, 0x0d, 0x67, 0x40, 0x2d, 0x5a, 0x75, 0xbb, 0x6e, 0x87, + 0x50, 0x47, 0x03, 0xf4, 0x9a, 0xb0, 0x1d, 0xa7, 0x07, 0xc3, 0xf3, 0xa4, 0x9a, 0xfa, 0x08, 0x7a, + 0x5c, 0xa3, 0x50, 0x44, 0x29, 0x0d, 0x02, 0x19, 0xef, 0x48, 0xc1, 0xe7, 0xa2, 0x16, 0x18, 0x4f, + 0x66, 0x24, 0x3d, 0x03, 0xb4, 0x14, 0x2b, 0xd4, 0x76, 0x06, 0xe7, 0xa2, 0xfe, 0x1a, 0x6e, 0x26, + 0x8f, 0x65, 0x82, 0x03, 0xc9, 0x33, 0x2e, 0x1e, 0x4d, 0x49, 0x6f, 0x42, 0xf1, 0x54, 0x9a, 0x4c, + 0x19, 0xdb, 0x81, 0x64, 0x46, 0xd3, 0x88, 0x2e, 0x3b, 0x03, 0x46, 0xa2, 0x96, 0xcc, 0x32, 0xe6, + 0xcf, 0x34, 0x2a, 0xd6, 0xf2, 0xa5, 0xc5, 0xf8, 0x82, 0x10, 0x7a, 0xf7, 0xd6, 0x7f, 0x0d, 0x24, + 0xd4, 0x1a, 0x9a, 0xbf, 0x13, 0x2c, 0x84, 0x2b, 0x8c, 0xd9, 0xdb, 0x49, 0x34, 0x42, 0xba, 0xe3, + 0x8e, 0x3b, 0x12, 0xd2, 0x76, 0x59, 0xfa, 0xc0, 0xf2, 0xe5, 0xcb, 0xf1, 0x6a, 0x96, 0x7c, 0x48, + 0xfc, 0xd0, 0xed, 0xc0, 0x86, 0x0d, 0x1b, 0xc4, 0x8b, 0xeb, 0x75, 0xeb, 0xd6, 0x41, 0x49, 0x49, + 0x09, 0xc3, 0x53, 0x53, 0x53, 0xa1, 0xa5, 0xa5, 0x85, 0xc1, 0xc3, 0x87, 0x0f, 0x17, 0x32, 0xfc, + 0x45, 0x37, 0xae, 0x86, 0x4e, 0xdc, 0xda, 0x68, 0x1a, 0xf4, 0xe6, 0xaf, 0xa6, 0xa6, 0x46, 0xc2, + 0x77, 0xc4, 0xac, 0x09, 0xe0, 0x67, 0x6b, 0xd2, 0xcc, 0x99, 0x33, 0x19, 0x3c, 0x67, 0xce, 0x1c, + 0xa6, 0x2a, 0x3f, 0x3f, 0x9f, 0xe1, 0xab, 0x56, 0xad, 0x62, 0x67, 0xac, 0x53, 0x7a, 0xe6, 0x99, + 0x67, 0x18, 0x1c, 0x0c, 0x06, 0x65, 0xd5, 0x11, 0x2f, 0xd1, 0x26, 0x44, 0xa9, 0x34, 0x74, 0x70, + 0x27, 0xc8, 0x08, 0x8f, 0xc7, 0x23, 0x74, 0x8c, 0x1d, 0x3b, 0x96, 0x19, 0x4b, 0x84, 0x70, 0x03, + 0x09, 0x3e, 0x7a, 0xf4, 0xa8, 0x90, 0x53, 0xf2, 0x65, 0x0c, 0x1d, 0x88, 0xee, 0x26, 0x84, 0x86, + 0xb0, 0x63, 0xf5, 0xea, 0xd5, 0x1c, 0x84, 0xc2, 0xc2, 0x42, 0x01, 0x2b, 0x01, 0xb3, 0xdf, 0xd8, + 0x1b, 0x72, 0x60, 0xcf, 0x9e, 0x3d, 0x30, 0x61, 0xc2, 0x04, 0xd8, 0xb7, 0x6f, 0x9f, 0x58, 0xdc, + 0xa1, 0x34, 0xdc, 0x32, 0x5c, 0x47, 0xb6, 0x98, 0xe8, 0xda, 0xb5, 0x6b, 0x59, 0xd3, 0x40, 0x03, + 0xa5, 0xb7, 0xdf, 0x7e, 0x5b, 0xc0, 0x84, 0x1f, 0x3f, 0x7e, 0x5c, 0xe0, 0x8f, 0x3d, 0xf6, 0x98, + 0x80, 0x1b, 0x1b, 0x1b, 0x05, 0x4c, 0x4a, 0x48, 0x36, 0xda, 0x9f, 0x5e, 0x5b, 0x48, 0xde, 0xbe, + 0x9c, 0xc6, 0x48, 0x5e, 0xd6, 0xc3, 0x50, 0x1f, 0xb8, 0xac, 0x16, 0x2b, 0x2a, 0xb7, 0x1d, 0x50, + 0x04, 0xc4, 0x72, 0xd4, 0xce, 0x80, 0xe5, 0x21, 0x57, 0x54, 0x68, 0x67, 0x40, 0x11, 0x10, 0xcb, + 0xd1, 0x1e, 0x3f, 0x91, 0x59, 0x1e, 0xb1, 0x24, 0x57, 0xd8, 0xe3, 0xbb, 0x40, 0x92, 0xe3, 0x61, + 0xb9, 0x3a, 0x3b, 0x01, 0x96, 0x87, 0x5c, 0x5e, 0xa1, 0x9d, 0x00, 0x79, 0x3c, 0x2c, 0xc7, 0xec, + 0x04, 0x58, 0x1e, 0x72, 0x79, 0x85, 0x76, 0x02, 0xe4, 0xf1, 0xb0, 0x1c, 0xb3, 0x13, 0x60, 0x79, + 0xc8, 0xe5, 0x15, 0xda, 0x09, 0x90, 0xc7, 0xc3, 0x72, 0xcc, 0x4e, 0x80, 0xe5, 0x21, 0x97, 0x57, + 0x78, 0xd9, 0x5e, 0x8d, 0xc9, 0xcd, 0x48, 0x0e, 0xd6, 0x70, 0xe0, 0x21, 0xa0, 0x6f, 0xb0, 0xd3, + 0x8a, 0x26, 0xe2, 0xc7, 0xe3, 0xf7, 0x83, 0xcb, 0x7d, 0x5d, 0x72, 0x14, 0x9b, 0xa8, 0xa5, 0x5b, + 0xf4, 0x80, 0x8e, 0xfa, 0x5d, 0xd0, 0x48, 0x6b, 0xb6, 0x24, 0xbf, 0x61, 0x57, 0x9b, 0x2a, 0x7f, + 0x84, 0x8b, 0xe0, 0x0e, 0xe1, 0x6b, 0x9a, 0x20, 0xb4, 0xe3, 0x67, 0xd8, 0x6a, 0x9b, 0x26, 0x35, + 0x1f, 0x5d, 0x0a, 0xed, 0x17, 0x63, 0xef, 0x88, 0x64, 0xd8, 0x10, 0x9d, 0x05, 0x2f, 0xd3, 0xa3, + 0x08, 0x09, 0x97, 0x26, 0xbe, 0x09, 0x2d, 0xd5, 0x2f, 0x03, 0x2e, 0xd9, 0x12, 0x26, 0x3b, 0x52, + 0x5c, 0x90, 0x7f, 0xc3, 0xeb, 0xb8, 0x3d, 0xc2, 0x60, 0x41, 0x8b, 0x07, 0xf0, 0x7d, 0xf4, 0x2b, + 0xc0, 0x7d, 0xdf, 0x84, 0x68, 0xee, 0xf0, 0x5f, 0xb0, 0x5e, 0x20, 0x08, 0x08, 0x48, 0x81, 0x46, + 0xf0, 0x7e, 0x70, 0x1f, 0xee, 0x42, 0x50, 0x27, 0xc8, 0x8e, 0x94, 0x54, 0xb6, 0xcd, 0x42, 0x56, + 0xc9, 0x43, 0xb8, 0xda, 0x28, 0x4d, 0xd0, 0xad, 0x04, 0xac, 0x4b, 0x00, 0xae, 0x2f, 0x6d, 0x39, + 0xfd, 0x5b, 0x0c, 0xd4, 0x5a, 0xd6, 0x4a, 0xc3, 0x9d, 0x74, 0xb9, 0x87, 0x81, 0x7b, 0xc8, 0x13, + 0x86, 0x86, 0x8c, 0xb6, 0x9a, 0xb5, 0xd0, 0x7c, 0x72, 0xb9, 0x50, 0xe7, 0x1e, 0x3c, 0x1f, 0x17, + 0x0e, 0x7e, 0x5d, 0xe0, 0x4a, 0x20, 0xd4, 0xf6, 0x31, 0xca, 0xbf, 0x00, 0xfe, 0x3a, 0x5c, 0x06, + 0xa7, 0x38, 0x68, 0x21, 0xaf, 0x7b, 0xf0, 0x0f, 0x71, 0xa3, 0x0f, 0xf5, 0xf7, 0x7c, 0x8a, 0x22, + 0x09, 0xa3, 0xa6, 0x26, 0x20, 0xe4, 0xbf, 0x08, 0x3e, 0xdc, 0xd0, 0xa3, 0x1d, 0xb7, 0x4d, 0x09, + 0x3f, 0x68, 0x65, 0x66, 0xfa, 0x55, 0x77, 0xe2, 0x46, 0x1f, 0x3f, 0x40, 0x67, 0x0b, 0xc2, 0x59, + 0xba, 0x60, 0x5a, 0x38, 0xdc, 0x78, 0xe4, 0x09, 0x51, 0x26, 0xf3, 0xea, 0x6f, 0x42, 0xf6, 0xa0, + 0xae, 0xe5, 0xa7, 0x82, 0xa1, 0x06, 0xe0, 0x6a, 0xcf, 0x96, 0x33, 0x7f, 0xc0, 0x46, 0xf1, 0x3a, + 0xae, 0xfc, 0x94, 0xef, 0xd0, 0x97, 0x9a, 0x3b, 0x12, 0xdc, 0xa5, 0x8b, 0xc0, 0x99, 0x7d, 0x8d, + 0x5a, 0xe9, 0xa4, 0xd0, 0x93, 0x9e, 0x80, 0x40, 0xf3, 0x11, 0x68, 0x3e, 0xfe, 0x33, 0x9c, 0x0c, + 0xe5, 0x1f, 0x9a, 0xa4, 0xb8, 0xb2, 0x21, 0xab, 0xff, 0xf7, 0xb0, 0x75, 0xde, 0x87, 0x86, 0x1b, + 0xdb, 0x78, 0x24, 0xdc, 0xe3, 0x40, 0xf3, 0x61, 0xdc, 0xf0, 0xe4, 0x41, 0x41, 0x4a, 0xef, 0x35, + 0x19, 0x72, 0x86, 0x3d, 0x2f, 0x70, 0x23, 0x00, 0x2d, 0xdf, 0xf5, 0x7d, 0xb4, 0x1c, 0x37, 0x58, + 0xb9, 0x24, 0x2b, 0xee, 0xcc, 0xe8, 0x83, 0x6b, 0x8e, 0x17, 0xe2, 0x2e, 0x2f, 0xb7, 0xc9, 0xe8, + 0xc9, 0x40, 0x92, 0x9a, 0x80, 0xfa, 0xfd, 0x0f, 0x44, 0x04, 0xde, 0x85, 0xe3, 0x79, 0xee, 0x88, + 0x17, 0x71, 0xdd, 0x65, 0x71, 0x32, 0xec, 0x65, 0x3a, 0xa8, 0x67, 0x79, 0x71, 0x87, 0x25, 0xbe, + 0x77, 0x4f, 0x6a, 0xce, 0x75, 0x90, 0x37, 0x7a, 0x75, 0xd2, 0xf4, 0x4b, 0x81, 0x7a, 0x68, 0xaa, + 0x5a, 0x02, 0xb8, 0x09, 0xa9, 0x4c, 0x27, 0xcd, 0x51, 0x45, 0xb7, 0x46, 0x0e, 0x5d, 0x32, 0x21, + 0x9d, 0x48, 0x52, 0x13, 0x40, 0x75, 0x4b, 0x1d, 0x75, 0xe0, 0xab, 0x5e, 0x81, 0x57, 0x1a, 0xff, + 0xa0, 0x85, 0x23, 0x32, 0x73, 0x9c, 0xb8, 0x1a, 0x3d, 0x7b, 0xd0, 0x5c, 0xdc, 0x28, 0x66, 0x8a, + 0x8c, 0xae, 0x0b, 0x09, 0xb5, 0xe2, 0x56, 0x3e, 0x5f, 0xc1, 0xc9, 0xbb, 0x89, 0x15, 0x23, 0x9d, + 0x05, 0xb7, 0xac, 0x47, 0x38, 0xb1, 0x5e, 0x15, 0x68, 0xdc, 0x87, 0xfb, 0x1f, 0xbd, 0x00, 0x01, + 0xdf, 0xf1, 0x08, 0x73, 0xd2, 0x0a, 0xca, 0xb0, 0x07, 0x2c, 0x60, 0x1f, 0x67, 0x44, 0x30, 0x13, + 0x24, 0x24, 0x3d, 0x01, 0x72, 0x7b, 0x24, 0x68, 0xbf, 0xf0, 0x77, 0x4c, 0xc8, 0x2b, 0xb8, 0xfe, + 0xdb, 0x2b, 0x63, 0x39, 0x1c, 0x4e, 0xb6, 0x15, 0x57, 0xd6, 0x80, 0xd9, 0xb8, 0xd5, 0x96, 0x5b, + 0xc6, 0x53, 0x47, 0x24, 0xfc, 0xbc, 0xe6, 0x1e, 0x08, 0xb6, 0x9e, 0x65, 0x22, 0x0e, 0x67, 0x26, + 0x7e, 0x66, 0xb0, 0x11, 0x57, 0x65, 0xe7, 0xa8, 0x17, 0x51, 0xe3, 0xe0, 0xce, 0x57, 0xad, 0x1f, + 0xff, 0x11, 0xe7, 0x80, 0x55, 0xf8, 0x09, 0x44, 0xab, 0x4c, 0xca, 0xe1, 0xcc, 0x80, 0xac, 0xe2, + 0x6f, 0xe3, 0x15, 0xd2, 0x03, 0xa6, 0x5f, 0x1d, 0x99, 0x9c, 0x00, 0x99, 0x5f, 0x10, 0x6c, 0x39, + 0x09, 0x3e, 0xba, 0x02, 0xa9, 0xdf, 0x2b, 0x67, 0x20, 0x96, 0x9a, 0x33, 0x02, 0xb2, 0x4b, 0x1f, + 0xd7, 0xbc, 0x12, 0xa2, 0x4d, 0xdc, 0x3a, 0x1a, 0x3e, 0x60, 0x65, 0x69, 0x22, 0x2f, 0xb8, 0xe9, + 0xaf, 0x38, 0xb4, 0x95, 0x44, 0xe8, 0x52, 0x23, 0x74, 0x5e, 0x01, 0x2d, 0xc3, 0x2b, 0xa0, 0xad, + 0x11, 0x22, 0xae, 0xec, 0x52, 0xd6, 0xca, 0x53, 0xf3, 0x6e, 0x8e, 0xe0, 0x99, 0x49, 0xb0, 0x34, + 0x01, 0x32, 0x47, 0xd8, 0x15, 0xc8, 0xea, 0x4f, 0xae, 0x40, 0x3a, 0x6f, 0xc0, 0x52, 0xf3, 0x6e, + 0xc4, 0xaf, 0x88, 0x5e, 0x93, 0x89, 0x71, 0x84, 0x6e, 0xa0, 0xda, 0x2e, 0x6e, 0xe2, 0x28, 0xca, + 0xbd, 0x0a, 0xa9, 0x79, 0x37, 0x09, 0x3c, 0x1e, 0xc0, 0x77, 0xe2, 0x79, 0x68, 0x3d, 0xf7, 0x26, + 0x13, 0x65, 0x57, 0x62, 0xbd, 0xa7, 0x41, 0xf6, 0x80, 0x47, 0x13, 0xba, 0x12, 0x8b, 0xa7, 0x5e, + 0x2d, 0x99, 0xcb, 0x97, 0x00, 0x85, 0x55, 0x5a, 0x3f, 0x0d, 0xd3, 0x72, 0xea, 0x15, 0x1c, 0x2a, + 0xd6, 0x88, 0x12, 0x39, 0x43, 0x97, 0xb2, 0xcb, 0x58, 0x41, 0xd0, 0x01, 0xd0, 0x87, 0xa8, 0x5a, + 0x1f, 0xe1, 0xe9, 0x50, 0x95, 0x14, 0xd1, 0x6e, 0x93, 0x00, 0x35, 0x6f, 0xda, 0xce, 0xaf, 0xc3, + 0xcb, 0xda, 0x9f, 0x0b, 0x76, 0x36, 0xce, 0x19, 0x99, 0x25, 0x0f, 0x0b, 0xbc, 0xa7, 0x03, 0xdd, + 0xe2, 0x59, 0x90, 0x7a, 0x10, 0x43, 0xb8, 0x58, 0xd9, 0x89, 0x57, 0x1f, 0x9d, 0x9f, 0x0e, 0x65, + 0xf4, 0xb9, 0xfb, 0x8a, 0x0a, 0x3e, 0xf9, 0xdd, 0xed, 0x7b, 0x80, 0x7a, 0x72, 0xae, 0x0c, 0x4e, + 0x37, 0xef, 0x01, 0x57, 0x46, 0x90, 0xb5, 0xbc, 0xb0, 0x13, 0xa0, 0x15, 0x1d, 0x0b, 0x78, 0x76, + 0x02, 0x2c, 0x08, 0xb2, 0x56, 0x15, 0x76, 0x02, 0xb4, 0xa2, 0x63, 0x01, 0xcf, 0x4e, 0x80, 0x05, + 0x41, 0xd6, 0xaa, 0xc2, 0x4e, 0x80, 0x56, 0x74, 0x2c, 0xe0, 0x7d, 0xaa, 0x12, 0xb0, 0x62, 0xc5, + 0x0a, 0xf1, 0x11, 0x24, 0x3d, 0x8a, 0xe0, 0x7f, 0x77, 0xdd, 0x75, 0x97, 0x05, 0xa1, 0x8e, 0x5e, + 0xc5, 0x15, 0xb5, 0x2a, 0x22, 0xba, 0x8b, 0x5d, 0xd4, 0x69, 0xd3, 0xa6, 0xb1, 0x5f, 0x16, 0x3a, + 0x71, 0xe2, 0x04, 0x1c, 0x38, 0x70, 0x00, 0x8e, 0x1d, 0x3b, 0xc6, 0x98, 0x7e, 0xbf, 0xf1, 0xc5, + 0x00, 0x5d, 0xda, 0x8d, 0x41, 0x96, 0xdd, 0x88, 0x35, 0x37, 0x37, 0xc3, 0xc9, 0x93, 0x27, 0x85, + 0x95, 0xf4, 0x95, 0x36, 0xff, 0x52, 0xbb, 0xa3, 0xa3, 0x03, 0x2a, 0x2b, 0x2b, 0xc5, 0xfb, 0x83, + 0x41, 0x83, 0x06, 0xb1, 0x1d, 0x93, 0x49, 0x98, 0x78, 0x55, 0x55, 0x55, 0x10, 0x0a, 0x85, 0x80, + 0xd3, 0xb7, 0x6e, 0xdd, 0x0a, 0x7b, 0xf7, 0xee, 0x85, 0xd2, 0xd2, 0x52, 0x98, 0x3a, 0x75, 0x2a, + 0xd0, 0xfe, 0xd6, 0xe5, 0xe5, 0xe5, 0x40, 0x3f, 0xab, 0x8a, 0x5f, 0xcb, 0xc2, 0xa4, 0x49, 0x93, + 0xa0, 0x7f, 0x7f, 0xed, 0x8d, 0x37, 0x16, 0x2c, 0x58, 0x00, 0xcb, 0x96, 0x2d, 0x63, 0xf6, 0xe0, + 0x17, 0xb3, 0xb0, 0x69, 0x53, 0xd7, 0x83, 0x3e, 0x61, 0xa4, 0x15, 0x80, 0x91, 0xcf, 0x13, 0xf5, + 0x96, 0x79, 0xfa, 0xe9, 0xa7, 0xa3, 0x7e, 0x1a, 0xf9, 0xe4, 0x93, 0x4f, 0x4a, 0xe7, 0xcf, 0x9f, + 0x8f, 0xca, 0x5b, 0xba, 0x74, 0xa9, 0x84, 0x2d, 0x34, 0x2a, 0x0f, 0xe3, 0x12, 0x93, 0x3e, 0x71, + 0xe2, 0x44, 0x4d, 0x33, 0xf9, 0x9e, 0xdc, 0xa4, 0x2b, 0xd1, 0x4f, 0x96, 0x35, 0x2b, 0x8a, 0xc1, + 0xb4, 0x64, 0x0e, 0x58, 0xb2, 0x64, 0x09, 0x6b, 0xdd, 0x5e, 0xaf, 0x17, 0x46, 0x8f, 0x1e, 0x2d, + 0xda, 0xd5, 0x99, 0x33, 0x67, 0x00, 0x7f, 0x04, 0x54, 0xfc, 0xc0, 0x58, 0x59, 0x59, 0x19, 0x50, + 0x4f, 0x41, 0x9b, 0x01, 0x7f, 0x04, 0x14, 0x86, 0x0c, 0x19, 0xc2, 0x60, 0xfc, 0x84, 0x5a, 0x94, + 0x79, 0xe9, 0xa5, 0x97, 0x18, 0x8d, 0xce, 0xfc, 0xe8, 0xd3, 0xa7, 0x0f, 0xa3, 0x51, 0x2f, 0xe1, + 0x1f, 0xb6, 0x6f, 0xd9, 0xb2, 0x05, 0x70, 0xf3, 0x74, 0x2e, 0xd2, 0x6d, 0xcf, 0x96, 0x24, 0x80, + 0x7b, 0x4f, 0xc3, 0xc3, 0xfe, 0xfd, 0xfb, 0xe1, 0xd4, 0xa9, 0x53, 0x50, 0x5c, 0x5c, 0x0c, 0x6b, + 0xd6, 0xac, 0x81, 0xe9, 0xd3, 0xa7, 0x03, 0x7d, 0xd2, 0x4d, 0xc9, 0xd8, 0xb1, 0x63, 0x07, 0x64, + 0x67, 0x67, 0x73, 0xf1, 0xa8, 0xe7, 0xf1, 0xe3, 0xc7, 0x33, 0x7a, 0xdf, 0xbe, 0x7d, 0x05, 0x7f, + 0xdc, 0xb8, 0x71, 0x0c, 0xa6, 0x49, 0x95, 0x92, 0xc1, 0x0f, 0xfc, 0x48, 0x99, 0x83, 0xdd, 0xf6, + 0x6c, 0x69, 0x02, 0x28, 0x0a, 0x3b, 0x77, 0xee, 0x84, 0x91, 0x23, 0x47, 0xb2, 0xc9, 0xb0, 0x5f, + 0xbf, 0x7e, 0x30, 0x60, 0xc0, 0x00, 0xf0, 0xf9, 0x7c, 0x6c, 0xeb, 0x86, 0x85, 0x0b, 0x17, 0x76, + 0xdb, 0x40, 0x99, 0x66, 0x58, 0x8c, 0x21, 0x2a, 0x29, 0x6c, 0xfa, 0x1d, 0x85, 0xc9, 0x93, 0x27, + 0x4b, 0xf8, 0xa3, 0x10, 0x62, 0xec, 0xc6, 0x96, 0x2c, 0xe1, 0x90, 0x24, 0xe1, 0x3e, 0x19, 0xd2, + 0x94, 0x29, 0x53, 0x04, 0x1d, 0x1d, 0x95, 0x70, 0x72, 0x95, 0x56, 0xae, 0x5c, 0x29, 0xe1, 0x90, + 0xc2, 0xb6, 0xa4, 0x08, 0x2f, 0x87, 0xbf, 0x5d, 0x2e, 0xe1, 0x8f, 0x44, 0x88, 0xdf, 0x5d, 0x20, + 0xf9, 0xcc, 0xcc, 0x4c, 0x69, 0xf6, 0xec, 0xd9, 0xcc, 0x56, 0xfe, 0x1b, 0x0c, 0x44, 0x1f, 0x35, + 0x6a, 0x94, 0x84, 0x7b, 0x12, 0x30, 0xfa, 0x73, 0xcf, 0x3d, 0x27, 0xe1, 0x5e, 0x1c, 0x12, 0xf6, + 0x3c, 0xf6, 0x47, 0x3f, 0x87, 0x48, 0x32, 0xf4, 0x97, 0x91, 0x91, 0x21, 0xe8, 0x54, 0xf7, 0x23, + 0x8f, 0x3c, 0x92, 0x14, 0xbf, 0xe3, 0x51, 0x62, 0xc9, 0x65, 0x28, 0x5d, 0xc9, 0xd0, 0xf8, 0x4f, + 0x67, 0x7e, 0x34, 0x34, 0x34, 0x00, 0xee, 0xe1, 0xc1, 0x50, 0xe2, 0x85, 0x1f, 0xf5, 0xf5, 0xf5, + 0x40, 0x7f, 0xe8, 0x00, 0x1b, 0xc7, 0xc3, 0xcb, 0x11, 0x9d, 0xe6, 0x09, 0x1a, 0x6a, 0xe8, 0x57, + 0x3e, 0xe8, 0x12, 0x92, 0xfe, 0x70, 0x32, 0x67, 0x2a, 0x68, 0x13, 0x14, 0xba, 0x6a, 0xa2, 0xa3, + 0xae, 0xae, 0x8e, 0xc9, 0x12, 0x8c, 0xdb, 0x72, 0xb0, 0x5e, 0xd7, 0xd4, 0xd4, 0xb9, 0x9a, 0x82, + 0x68, 0xfc, 0x68, 0x6b, 0x6b, 0x63, 0x3c, 0xc2, 0x49, 0xe7, 0xb9, 0x73, 0x9d, 0xdb, 0xb7, 0x72, + 0xbe, 0x99, 0x67, 0xcb, 0x2e, 0x43, 0xcd, 0x74, 0xa2, 0x27, 0xeb, 0xb6, 0x7c, 0x0e, 0xe8, 0xc9, + 0xc1, 0x32, 0xc3, 0x76, 0x3b, 0x01, 0x66, 0x44, 0x55, 0x87, 0x4e, 0x3b, 0x01, 0x3a, 0x82, 0x65, + 0x86, 0xa8, 0x9d, 0x00, 0x33, 0xa2, 0xaa, 0x43, 0xa7, 0x9d, 0x00, 0x1d, 0xc1, 0x32, 0x43, 0xd4, + 0x4e, 0x80, 0x19, 0x51, 0xd5, 0xa1, 0xd3, 0x4e, 0x80, 0x8e, 0x60, 0x99, 0x21, 0x6a, 0x27, 0xc0, + 0x8c, 0xa8, 0xea, 0xd0, 0xf9, 0x7f, 0xbe, 0xc9, 0xb9, 0x8c, 0x96, 0x81, 0xf7, 0x5a, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXBinaryIcon2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x02, 0x00, 0x00, 0x00, 0x25, 0x0b, 0xe6, + 0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x04, 0x24, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x2f, + 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x64, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x70, 0x75, 0x72, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x64, 0x63, 0x2f, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x31, 0x2e, 0x31, 0x2f, 0x22, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, + 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, + 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, + 0x74, 0x3e, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, + 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x36, 0x34, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, + 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, + 0x64, 0x66, 0x3a, 0x42, 0x61, 0x67, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x63, 0x3a, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3e, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x35, 0x2d, 0x30, 0x32, + 0x2d, 0x32, 0x31, 0x54, 0x32, 0x31, 0x3a, 0x30, 0x32, 0x3a, 0x38, 0x31, 0x3c, 0x2f, 0x78, 0x6d, + 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, + 0x6f, 0x72, 0x20, 0x33, 0x2e, 0x33, 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xce, + 0xc3, 0x0a, 0xd6, 0x00, 0x00, 0x05, 0xc2, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x59, 0x6f, + 0x48, 0x64, 0x55, 0x14, 0x3f, 0x33, 0xe3, 0x8c, 0x63, 0xce, 0x44, 0x6e, 0x5b, 0xae, 0xd9, 0x22, + 0xa8, 0x59, 0xae, 0x08, 0x91, 0x9a, 0x1b, 0xea, 0x87, 0x30, 0xd1, 0x45, 0x03, 0x29, 0x58, 0x61, + 0x2b, 0xe9, 0x93, 0x89, 0x84, 0x44, 0x11, 0x51, 0x7d, 0x0b, 0x4a, 0x21, 0xb2, 0xed, 0x8b, 0xfa, + 0x29, 0xa8, 0x2c, 0xf1, 0x83, 0x4a, 0x1b, 0xad, 0x6c, 0x61, 0x05, 0x9b, 0xc9, 0x36, 0xba, 0x9b, + 0xe8, 0x1a, 0xa2, 0x28, 0xfe, 0xd7, 0x36, 0xf3, 0xcf, 0x6c, 0x3a, 0xce, 0x8c, 0x33, 0x9d, 0x3b, + 0xf7, 0xcd, 0x9d, 0xf7, 0xe6, 0xcd, 0xcc, 0xfb, 0x3b, 0xc4, 0xc2, 0xbb, 0x1f, 0xc6, 0x73, 0xcf, + 0xfd, 0x9d, 0xdf, 0xb9, 0xe7, 0x9c, 0xfb, 0xe7, 0x71, 0x35, 0x05, 0x83, 0x41, 0xb8, 0x97, 0x9b, + 0xf9, 0x5e, 0x9e, 0x3c, 0x99, 0xbb, 0x11, 0xc0, 0xff, 0x5d, 0x41, 0xa3, 0x02, 0x46, 0x05, 0x34, + 0x66, 0xc0, 0x58, 0x42, 0x1a, 0x13, 0xa8, 0xd9, 0x5c, 0x46, 0x05, 0x0e, 0xff, 0x82, 0xe0, 0x89, + 0x66, 0x47, 0x3c, 0x02, 0x5d, 0x09, 0x53, 0x78, 0xc4, 0x42, 0x71, 0x67, 0x16, 0x7e, 0x7a, 0x13, + 0xb6, 0x26, 0xe0, 0x68, 0x07, 0x52, 0xec, 0x70, 0xfa, 0x1c, 0x94, 0xbc, 0x01, 0x45, 0xaf, 0x08, + 0x41, 0xbc, 0x1e, 0x06, 0x39, 0xf0, 0x1c, 0x78, 0xdd, 0x60, 0x3f, 0x05, 0x17, 0x7f, 0xe0, 0x0d, + 0x84, 0x45, 0xa5, 0x84, 0xb3, 0x7d, 0x30, 0x71, 0x99, 0x18, 0x9f, 0x7f, 0x17, 0x0a, 0x5e, 0x0c, + 0xb3, 0x44, 0xff, 0x8d, 0x13, 0x00, 0x1a, 0x5f, 0x7b, 0x0d, 0x7c, 0x87, 0x1c, 0xdc, 0xef, 0x81, + 0xad, 0x9b, 0xf0, 0x7d, 0x33, 0x2c, 0xff, 0x08, 0x17, 0x3e, 0x07, 0x53, 0x2c, 0xab, 0xc5, 0xab, + 0xb0, 0xf2, 0x0b, 0xc1, 0xa7, 0x67, 0x72, 0x56, 0xfc, 0x3f, 0x8a, 0x09, 0x83, 0x30, 0xf9, 0x19, + 0x6c, 0x4d, 0x12, 0x8e, 0xc3, 0x3b, 0x7c, 0xa6, 0x28, 0x39, 0xd6, 0x12, 0x3a, 0xdc, 0x86, 0x6b, + 0x2d, 0xdc, 0xec, 0x6d, 0xe9, 0x90, 0xf3, 0x2c, 0x38, 0x1f, 0xe1, 0xcc, 0x66, 0xbe, 0x82, 0x99, + 0x2f, 0xa2, 0x28, 0x48, 0x77, 0x7d, 0x0c, 0xae, 0xbe, 0x1a, 0x43, 0x4f, 0x55, 0x4a, 0x09, 0x4f, + 0x3c, 0x84, 0x6d, 0x73, 0x22, 0x2e, 0x21, 0x6f, 0x20, 0x56, 0x2e, 0x7f, 0xff, 0x18, 0x7c, 0x47, + 0x04, 0xe3, 0xcc, 0x86, 0x97, 0xc7, 0xc1, 0x79, 0x96, 0xec, 0x81, 0x2b, 0x4d, 0x30, 0x37, 0x48, + 0x94, 0xe3, 0x1f, 0x42, 0x51, 0x33, 0x98, 0xad, 0x44, 0x9e, 0xfd, 0x1a, 0xb6, 0x27, 0x61, 0xfd, + 0x37, 0xd8, 0xb8, 0x41, 0xba, 0xf1, 0x9a, 0x4c, 0xc2, 0xbb, 0xeb, 0x70, 0xab, 0x1b, 0xdc, 0xab, + 0xb0, 0xf0, 0x1d, 0x78, 0xf6, 0xe2, 0x91, 0x45, 0xe9, 0x45, 0x15, 0x08, 0x78, 0xe1, 0x56, 0x0f, + 0x07, 0x2a, 0x7f, 0x87, 0xcc, 0x1e, 0x9b, 0xc9, 0x02, 0xd5, 0x97, 0xc1, 0x6c, 0x21, 0xf2, 0xde, + 0x12, 0x2c, 0x5c, 0x21, 0x02, 0xb6, 0xdb, 0x5f, 0x82, 0xeb, 0x53, 0x89, 0xd9, 0xcb, 0x27, 0x3c, + 0x58, 0x81, 0xf1, 0x8f, 0x00, 0x8b, 0x2c, 0x7b, 0xf6, 0x38, 0x05, 0x51, 0x00, 0xee, 0xb5, 0xc8, + 0xd2, 0xcf, 0xbd, 0x10, 0x9a, 0x66, 0xe8, 0xc7, 0xf1, 0x28, 0x3c, 0x54, 0xcc, 0x75, 0xff, 0x99, + 0x8b, 0xe8, 0x25, 0x25, 0xdd, 0x09, 0x85, 0x1e, 0x45, 0x4b, 0x08, 0xd3, 0x40, 0x1b, 0xe6, 0xfb, + 0x81, 0x3c, 0x01, 0xf8, 0xd4, 0xe3, 0xb0, 0xfd, 0x07, 0xd1, 0x30, 0xcc, 0xf3, 0xdf, 0x80, 0xff, + 0x98, 0xc3, 0xb8, 0x3e, 0x01, 0x57, 0x97, 0x00, 0x4f, 0x3b, 0x0c, 0x2c, 0x49, 0x78, 0xa6, 0x04, + 0xda, 0xd6, 0x23, 0x0c, 0xdd, 0xd9, 0x11, 0x39, 0xbe, 0x24, 0x0e, 0x60, 0x99, 0x03, 0xdb, 0xee, + 0xc7, 0xa5, 0x23, 0x30, 0xc4, 0xf3, 0x91, 0xb6, 0x83, 0x30, 0xc6, 0xfe, 0x60, 0x04, 0x60, 0x73, + 0x46, 0x64, 0xbe, 0xc4, 0xc0, 0x92, 0x84, 0x66, 0x1b, 0x38, 0xc2, 0xa7, 0x05, 0x9f, 0x21, 0xa1, + 0x2c, 0x5a, 0x42, 0x77, 0x37, 0x38, 0xbc, 0x59, 0x14, 0x1b, 0xd3, 0x30, 0x4c, 0x42, 0x6a, 0x6e, + 0x90, 0x81, 0x99, 0x39, 0xb3, 0x62, 0x1a, 0x86, 0x61, 0x43, 0xb2, 0x05, 0x51, 0x00, 0x16, 0x3b, + 0x67, 0x7b, 0xe2, 0x8d, 0x26, 0x61, 0x1a, 0x86, 0x89, 0x46, 0xc4, 0xea, 0x33, 0x30, 0x33, 0x67, + 0x28, 0xa6, 0x61, 0x18, 0x36, 0x24, 0x5b, 0x10, 0x05, 0x90, 0x8a, 0x2b, 0x27, 0xd4, 0x7c, 0xff, + 0x42, 0xd0, 0x2f, 0xe0, 0x39, 0x0e, 0x1f, 0x6d, 0x0c, 0x23, 0x18, 0x8e, 0xd3, 0x61, 0x60, 0xbd, + 0x08, 0x85, 0x7e, 0x44, 0x01, 0x64, 0x3c, 0xc6, 0x01, 0x02, 0x7e, 0x72, 0x62, 0xf2, 0xdb, 0xee, + 0x3c, 0xd7, 0x63, 0x18, 0xfe, 0x68, 0x3c, 0x99, 0x81, 0xf5, 0x22, 0x14, 0x3a, 0x12, 0x05, 0xf0, + 0xf0, 0x93, 0xc0, 0x96, 0xe6, 0xca, 0xcf, 0x11, 0x30, 0xde, 0xa6, 0x7f, 0xdf, 0xe6, 0xba, 0x67, + 0x4a, 0x23, 0x7a, 0x49, 0x49, 0x77, 0x42, 0xa1, 0x47, 0x51, 0x00, 0x78, 0x56, 0x9c, 0xbb, 0xc4, + 0x61, 0x6e, 0x74, 0x82, 0x3f, 0x74, 0x25, 0x63, 0x1f, 0x2f, 0x60, 0x7a, 0x62, 0xde, 0x77, 0x1a, + 0x9e, 0xb8, 0x28, 0x24, 0x49, 0xd8, 0xd3, 0x9d, 0x50, 0xe8, 0x4d, 0x74, 0xd4, 0xe0, 0xf0, 0x33, + 0xef, 0x93, 0x6f, 0x84, 0xc0, 0x09, 0x59, 0x42, 0x3d, 0x67, 0xc9, 0x74, 0xd7, 0xae, 0xc3, 0x9d, + 0x19, 0xce, 0xb0, 0xec, 0x2d, 0xb0, 0x3a, 0x84, 0x24, 0x52, 0x3d, 0xdd, 0x09, 0x79, 0x0e, 0x45, + 0x15, 0xc0, 0xb1, 0x8c, 0x02, 0x38, 0xff, 0x1e, 0x87, 0xc1, 0x6f, 0x69, 0xfc, 0xb2, 0x60, 0xb3, + 0xcf, 0x7a, 0x1a, 0x9e, 0x7a, 0x9d, 0x67, 0x2e, 0x4f, 0xd4, 0x9d, 0x90, 0xe7, 0x36, 0x56, 0x00, + 0x38, 0x5c, 0xf9, 0x01, 0xbc, 0xf0, 0x6d, 0xe4, 0x23, 0x14, 0x35, 0xd6, 0x34, 0x28, 0x7f, 0x1b, + 0x5e, 0xfa, 0x55, 0x71, 0xfa, 0xa9, 0x33, 0xdd, 0x09, 0xc3, 0x31, 0x98, 0x24, 0x9e, 0x16, 0xf1, + 0x8a, 0xd9, 0xf9, 0x93, 0x7c, 0x96, 0xe2, 0x61, 0x82, 0x9f, 0x74, 0xda, 0x9b, 0xde, 0x84, 0x52, + 0x01, 0x68, 0x9f, 0x71, 0x92, 0x19, 0xe2, 0x2c, 0xa1, 0x24, 0x7b, 0xd5, 0x91, 0xde, 0x08, 0x40, + 0xc7, 0x64, 0xaa, 0xa2, 0x32, 0x2a, 0xa0, 0x2a, 0x6d, 0x3a, 0x1a, 0x19, 0x15, 0xd0, 0x31, 0x99, + 0xaa, 0xa8, 0x8c, 0x0a, 0xa8, 0x4a, 0x9b, 0x8e, 0x46, 0x6a, 0x2a, 0x70, 0x12, 0x6a, 0x92, 0x93, + 0xf0, 0xfb, 0xfd, 0x5d, 0x5d, 0x5d, 0x43, 0x43, 0x43, 0x92, 0x48, 0x4d, 0x00, 0xfc, 0x16, 0x52, + 0xd4, 0xaa, 0xaa, 0xaa, 0xd0, 0x9f, 0xc9, 0x64, 0x1a, 0x1d, 0x1d, 0x4d, 0x6c, 0x38, 0x37, 0x47, + 0x9e, 0x8f, 0x72, 0x73, 0x73, 0x13, 0xc3, 0x34, 0x8e, 0x2a, 0xae, 0x40, 0x41, 0x41, 0x41, 0x4a, + 0x4a, 0x0a, 0x7a, 0x3d, 0x38, 0x38, 0x48, 0x9c, 0x39, 0x9b, 0xcd, 0x96, 0x9a, 0x9a, 0x9a, 0x9d, + 0x2d, 0xeb, 0x79, 0x27, 0x31, 0x55, 0xa2, 0x51, 0x15, 0x09, 0xc0, 0xa4, 0x22, 0xe3, 0xf0, 0xf0, + 0xb0, 0xa4, 0xad, 0xcf, 0xe7, 0x93, 0xc4, 0x68, 0x04, 0x28, 0xae, 0x00, 0x4b, 0xc6, 0xc6, 0xc6, + 0x46, 0x7b, 0x7b, 0x7b, 0x75, 0x75, 0x75, 0x6b, 0x6b, 0xeb, 0xd8, 0xd8, 0x18, 0xd3, 0x53, 0xa1, + 0xb9, 0xb9, 0xb9, 0xbc, 0xbc, 0xbc, 0xa2, 0xa2, 0xa2, 0xb2, 0xb2, 0x72, 0x6f, 0x2f, 0xfc, 0x9c, + 0x01, 0xb0, 0xbb, 0xbb, 0xdb, 0xd8, 0xd8, 0x88, 0x43, 0x6d, 0x6d, 0x6d, 0x83, 0x83, 0x83, 0xc5, + 0xc5, 0xc5, 0xe9, 0xe9, 0xe9, 0x75, 0x75, 0x75, 0x9b, 0x9b, 0x9b, 0x51, 0x0c, 0x72, 0xbb, 0x2a, + 0x12, 0x40, 0x2b, 0x80, 0xdb, 0x80, 0xf9, 0xb0, 0x58, 0x2c, 0x3d, 0x3d, 0x3d, 0x8c, 0xca, 0xed, + 0x76, 0xe3, 0x32, 0x63, 0xa3, 0x4b, 0x4b, 0x4b, 0x6c, 0x68, 0x62, 0x82, 0x7b, 0x34, 0x77, 0x3a, + 0x9d, 0x7c, 0x4c, 0x53, 0x53, 0x13, 0xc3, 0x28, 0x12, 0x40, 0x11, 0x9a, 0x82, 0x69, 0x00, 0x38, + 0x69, 0x4c, 0x73, 0x77, 0x77, 0x77, 0x5e, 0x1e, 0x79, 0x42, 0x4d, 0x4b, 0x4b, 0x5b, 0x5e, 0x5e, + 0x66, 0x6c, 0xd3, 0xd3, 0xd3, 0x03, 0x03, 0x03, 0x34, 0x06, 0x7e, 0x00, 0x08, 0xe8, 0xeb, 0xeb, + 0xa3, 0xfa, 0xda, 0xda, 0x5a, 0x8c, 0xa7, 0xa5, 0xa5, 0x05, 0xbb, 0x58, 0x07, 0x66, 0xab, 0x48, + 0x50, 0x1f, 0x00, 0xcb, 0xd9, 0xfc, 0x3c, 0xf7, 0x5e, 0xd4, 0xd9, 0xd9, 0xc9, 0xf7, 0x7d, 0x74, + 0xc4, 0xbd, 0x68, 0x44, 0x05, 0x30, 0x35, 0x35, 0x45, 0x03, 0x70, 0xb9, 0x5c, 0x88, 0x9f, 0x9c, + 0x0c, 0xfd, 0x1b, 0x06, 0x60, 0x7f, 0x7f, 0x9f, 0x6f, 0x2e, 0x53, 0x56, 0xbf, 0x07, 0x1a, 0x1a, + 0x1a, 0xe8, 0x3c, 0xf2, 0xf3, 0xf3, 0x0b, 0x0b, 0x0b, 0x51, 0xa6, 0xe7, 0x26, 0x55, 0xca, 0xf9, + 0x2d, 0x29, 0x29, 0x41, 0x58, 0x4e, 0x4e, 0x0e, 0x05, 0x7b, 0x3c, 0x1e, 0x39, 0x56, 0x51, 0x18, + 0xf5, 0x01, 0x60, 0x5e, 0x29, 0x97, 0xd7, 0xeb, 0x5d, 0x5b, 0x5b, 0x43, 0xd9, 0x6e, 0x0f, 0xbf, + 0xab, 0x46, 0x39, 0x89, 0xd3, 0xa5, 0xbb, 0x88, 0xbf, 0x97, 0xe2, 0x00, 0x13, 0xa9, 0xd5, 0x07, + 0xd0, 0xdf, 0xdf, 0xbf, 0xba, 0xba, 0x8a, 0x85, 0xee, 0xed, 0xed, 0xc5, 0x5d, 0x8b, 0x4e, 0x4a, + 0x4b, 0x23, 0x2f, 0x76, 0x78, 0x59, 0xe3, 0x4d, 0x4c, 0x3d, 0xf3, 0x65, 0xd4, 0xa0, 0x09, 0xd5, + 0x53, 0x21, 0x10, 0x08, 0xf0, 0xbb, 0x54, 0x56, 0xf0, 0x2b, 0x73, 0xa9, 0x31, 0x58, 0x4d, 0x4d, + 0x0d, 0x63, 0xc7, 0xab, 0x8a, 0x6e, 0x68, 0xd4, 0x14, 0x15, 0x15, 0x61, 0x29, 0x28, 0xac, 0xac, + 0xac, 0x8c, 0x61, 0x98, 0x80, 0x2b, 0xed, 0xf8, 0xf8, 0x18, 0x37, 0x7a, 0x46, 0x46, 0x06, 0x55, + 0xa2, 0x06, 0x4f, 0xd8, 0xac, 0xac, 0x2c, 0xda, 0xcd, 0xcc, 0xcc, 0xc4, 0xcb, 0x91, 0x39, 0x92, + 0x29, 0x28, 0xae, 0x80, 0xd9, 0x4c, 0x4c, 0x1c, 0x0e, 0x47, 0x47, 0x47, 0x07, 0x26, 0x6f, 0x71, + 0x71, 0x11, 0xd7, 0x40, 0x7d, 0x7d, 0xfd, 0xc8, 0xc8, 0x88, 0xd5, 0x6a, 0xa5, 0x53, 0xa1, 0x18, + 0x2a, 0xb3, 0x5f, 0x54, 0xe2, 0x9c, 0xb0, 0x8b, 0x61, 0x53, 0x25, 0xde, 0xd3, 0xc8, 0xc0, 0xef, + 0x52, 0x00, 0x33, 0x91, 0x23, 0x68, 0x7a, 0x56, 0xc1, 0x6d, 0xb7, 0xb0, 0xb0, 0x80, 0xbb, 0x10, + 0x0f, 0x75, 0x39, 0xce, 0x92, 0x81, 0xd1, 0x14, 0x40, 0x32, 0x26, 0xa4, 0x94, 0x53, 0xf1, 0x12, + 0x52, 0xea, 0x20, 0xd9, 0x78, 0x23, 0x80, 0x64, 0x67, 0x58, 0x8a, 0xdf, 0xa8, 0x80, 0x54, 0x86, + 0x92, 0x3d, 0x6e, 0x54, 0x20, 0xd9, 0x19, 0x96, 0xe2, 0x37, 0x2a, 0x20, 0x95, 0xa1, 0x64, 0x8f, + 0x1b, 0x15, 0x48, 0x76, 0x86, 0xa5, 0xf8, 0xff, 0x03, 0xf5, 0x1a, 0x5a, 0xe0, 0xcf, 0xeb, 0xd5, + 0xa2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXBinaryIcon3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x08, 0x06, 0x00, 0x00, 0x01, 0x95, 0x9f, 0x47, + 0xae, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x60, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x8a, 0xfb, 0x7d, 0x74, 0x00, 0x00, 0x0e, 0x68, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, + 0x5d, 0x09, 0x90, 0x15, 0xc5, 0x19, 0xfe, 0x39, 0xe4, 0x94, 0x1b, 0x24, 0xc8, 0x11, 0x8e, 0x04, + 0x90, 0x80, 0x18, 0x29, 0x54, 0x02, 0x05, 0x2b, 0x09, 0x87, 0x2b, 0x44, 0x70, 0x03, 0x16, 0xa9, + 0x84, 0xc2, 0x58, 0x20, 0x26, 0x9a, 0x22, 0xa1, 0xa2, 0x22, 0x11, 0x10, 0x22, 0x18, 0xc3, 0x12, + 0x23, 0x72, 0x54, 0x59, 0x31, 0x72, 0x48, 0x09, 0xca, 0x21, 0x97, 0x82, 0xc8, 0x11, 0x90, 0x2b, + 0x40, 0x10, 0x10, 0x50, 0x14, 0xd0, 0x05, 0x21, 0x28, 0xc7, 0x22, 0xb0, 0xdc, 0x93, 0xff, 0x9b, + 0x7e, 0x3d, 0xd3, 0x73, 0xbd, 0x37, 0x33, 0xef, 0xbd, 0x1d, 0x57, 0xe7, 0xaf, 0x7a, 0xd3, 0x7f, + 0xff, 0xfd, 0x1f, 0xdd, 0xfd, 0x77, 0xf7, 0xf4, 0xcc, 0x74, 0xf7, 0x2b, 0xa5, 0x31, 0x50, 0x00, + 0x28, 0x1d, 0x80, 0x57, 0x67, 0x4d, 0x43, 0xa0, 0xc5, 0x28, 0xa2, 0xae, 0x93, 0x84, 0x41, 0xe0, + 0x00, 0x84, 0x2a, 0xce, 0xa4, 0xb2, 0x7a, 0x82, 0xbc, 0xcc, 0x1b, 0x22, 0x31, 0x11, 0xde, 0x58, + 0x81, 0xa8, 0x57, 0x1b, 0x0b, 0xcd, 0xcc, 0xd2, 0xad, 0x0d, 0x88, 0x3a, 0x3e, 0x6f, 0x49, 0xa4, + 0xcb, 0x57, 0x89, 0x5e, 0xff, 0x8f, 0x85, 0x56, 0xea, 0x9b, 0x5c, 0x4b, 0x96, 0x9c, 0x12, 0x95, + 0x2a, 0x55, 0xca, 0x46, 0x11, 0x51, 0xb3, 0xd0, 0xb6, 0x64, 0xaf, 0x06, 0xe0, 0x29, 0x60, 0x93, + 0x37, 0xa2, 0xdf, 0xf8, 0x5a, 0xea, 0x3c, 0x51, 0xb4, 0x9d, 0x99, 0x9b, 0x89, 0x0a, 0x8b, 0x44, + 0xbe, 0xdf, 0xd8, 0x6e, 0xd2, 0x98, 0x22, 0x0a, 0xbd, 0xef, 0xb8, 0x48, 0xfc, 0xdf, 0x59, 0xa2, + 0x8f, 0xc6, 0x0a, 0x7c, 0xc4, 0x42, 0x11, 0xfe, 0xf9, 0x2d, 0x93, 0x06, 0x0a, 0x9a, 0x86, 0x0e, + 0xcd, 0x9f, 0x96, 0x98, 0xa6, 0xcd, 0xd8, 0xe4, 0x49, 0x2b, 0xe6, 0x5a, 0xf2, 0x6a, 0x0e, 0xa2, + 0x30, 0xe2, 0xea, 0xf0, 0xb4, 0x2a, 0x04, 0x5c, 0x8d, 0x43, 0x24, 0xfb, 0x65, 0x08, 0x6c, 0x41, + 0x2d, 0x8f, 0x1f, 0xdc, 0x51, 0x66, 0x3f, 0x42, 0x41, 0x78, 0x9c, 0x06, 0x30, 0x94, 0xa9, 0xc3, + 0x97, 0xd4, 0x76, 0x37, 0xd3, 0xd1, 0x24, 0x25, 0x48, 0x1e, 0x39, 0xcc, 0x49, 0xba, 0x8d, 0xcf, + 0x6a, 0x60, 0xcf, 0x17, 0x44, 0x47, 0xcf, 0x88, 0xa6, 0xb9, 0xf9, 0x49, 0x73, 0x8c, 0x84, 0xf0, + 0x17, 0x4c, 0x97, 0xf0, 0xf0, 0x6b, 0x44, 0x35, 0x2a, 0x09, 0xbe, 0x5f, 0xdd, 0xe9, 0xcd, 0xc7, + 0xfc, 0x56, 0x03, 0xad, 0x6f, 0x96, 0x2a, 0xc4, 0xa0, 0xdc, 0xac, 0x8e, 0x19, 0x57, 0xb1, 0x17, + 0xfa, 0x13, 0x9d, 0xbe, 0x20, 0x28, 0xb3, 0xb7, 0x10, 0xfd, 0x9d, 0xe3, 0x1e, 0xf0, 0x6d, 0x74, + 0xb2, 0x52, 0xd4, 0x35, 0x6b, 0xd6, 0x28, 0x31, 0x81, 0x56, 0xac, 0x58, 0xd1, 0x41, 0x4b, 0x4a, + 0x30, 0xc7, 0x14, 0x27, 0xc6, 0x82, 0x5a, 0xdf, 0xbe, 0x7d, 0x71, 0xff, 0xd6, 0x13, 0x47, 0x8e, + 0x1c, 0x69, 0xe0, 0x20, 0x80, 0x3e, 0x7e, 0xfc, 0x78, 0x0b, 0xcd, 0xae, 0xc5, 0x1c, 0xbf, 0x6c, + 0x29, 0x05, 0x05, 0x05, 0xba, 0x20, 0x94, 0x70, 0xff, 0xd7, 0x53, 0x81, 0xcb, 0x1f, 0x08, 0xc0, + 0x77, 0xee, 0xdc, 0x99, 0xd4, 0x40, 0xc9, 0x77, 0x72, 0xc9, 0x2f, 0x81, 0xb5, 0x27, 0xb3, 0xd7, + 0x32, 0x0d, 0xdf, 0x46, 0x03, 0x72, 0x18, 0xfe, 0xd7, 0x46, 0x6b, 0x6d, 0xa9, 0xc3, 0xf2, 0x95, + 0x6b, 0xe6, 0x90, 0x5e, 0x70, 0xda, 0x9b, 0x8f, 0x53, 0xac, 0xb3, 0x54, 0x28, 0x79, 0x83, 0x67, + 0xaa, 0x98, 0x80, 0x02, 0x7f, 0xf0, 0x27, 0xd6, 0xa1, 0x58, 0xaa, 0x6a, 0xfd, 0x8c, 0x39, 0xdb, + 0x00, 0x1f, 0x66, 0x23, 0x6a, 0x06, 0x24, 0x1f, 0x87, 0x4e, 0x1f, 0x40, 0xb9, 0x0a, 0x10, 0x96, + 0xd3, 0x19, 0x95, 0x6e, 0xc7, 0x3d, 0xf8, 0x9c, 0x06, 0xec, 0x82, 0x69, 0xc6, 0x9d, 0x06, 0x16, + 0xee, 0xf4, 0xa7, 0xf2, 0xda, 0x75, 0x7f, 0x7c, 0xb6, 0x31, 0x4e, 0xd3, 0x30, 0x69, 0xc3, 0xef, + 0xdd, 0xbd, 0xd6, 0x24, 0x75, 0x32, 0x87, 0x14, 0xc9, 0x57, 0x58, 0x94, 0x94, 0x2f, 0x1e, 0x2a, + 0x52, 0xfa, 0xc1, 0xe9, 0xe4, 0x94, 0x22, 0xc1, 0x18, 0x3c, 0x0d, 0x6c, 0xdc, 0x68, 0xeb, 0xc9, + 0xac, 0x77, 0xf9, 0xf2, 0xe5, 0xc1, 0xb4, 0x83, 0xdb, 0xda, 0x04, 0xcc, 0xd8, 0xf0, 0xe1, 0xc3, + 0xcd, 0x48, 0x1a, 0x98, 0x67, 0x09, 0x60, 0x5c, 0xce, 0xc7, 0x0f, 0x1f, 0x3e, 0x8c, 0x28, 0xb5, + 0x6f, 0xdf, 0x5e, 0x0f, 0x71, 0xe9, 0xda, 0xb5, 0xab, 0x91, 0x6e, 0x10, 0x5d, 0x90, 0xa4, 0x06, + 0x38, 0xe3, 0x28, 0x21, 0x35, 0x69, 0xd2, 0x44, 0x17, 0x1d, 0x35, 0x8a, 0xc7, 0x9d, 0x04, 0x8c, + 0x18, 0x31, 0x42, 0x4f, 0x7b, 0xe8, 0xa1, 0x87, 0x24, 0xc9, 0x3d, 0xf4, 0x2a, 0x3d, 0x73, 0x5b, + 0x66, 0x10, 0xdd, 0xbb, 0x77, 0x37, 0xe2, 0xb3, 0x66, 0xcd, 0x32, 0x70, 0xc9, 0xe7, 0xa5, 0x27, + 0xee, 0x68, 0xee, 0xf5, 0xae, 0x50, 0x93, 0x3a, 0x59, 0xe1, 0x0b, 0x8d, 0x66, 0xdd, 0x07, 0xa1, + 0x73, 0xe6, 0x53, 0x30, 0xeb, 0x35, 0xe4, 0x33, 0x1f, 0xa1, 0xd9, 0xe2, 0x02, 0x84, 0xae, 0xba, + 0x0c, 0x09, 0xfa, 0xf3, 0x00, 0x9e, 0x87, 0x5f, 0xdd, 0x44, 0xb4, 0x6a, 0x5f, 0x6a, 0xb3, 0x78, + 0xfd, 0xf8, 0xe5, 0x39, 0xa2, 0xa2, 0x2b, 0xde, 0xbc, 0x9f, 0x7c, 0x49, 0xf4, 0x8f, 0xd5, 0x44, + 0x3b, 0x0b, 0xbc, 0x79, 0x64, 0x4a, 0x0a, 0x7d, 0xc9, 0x3b, 0xf1, 0x83, 0x33, 0x88, 0x36, 0x7e, + 0x2a, 0x54, 0x0d, 0xef, 0x46, 0xb4, 0xeb, 0x28, 0xd1, 0xbb, 0x7b, 0x45, 0x7c, 0xed, 0x70, 0xa2, + 0x7a, 0xd5, 0xa4, 0x19, 0x11, 0x3e, 0xc9, 0x2f, 0xc9, 0x16, 0xfe, 0x57, 0xe0, 0x23, 0x73, 0x89, + 0x06, 0xde, 0x65, 0x4d, 0x97, 0x53, 0xd7, 0x72, 0x3c, 0x1b, 0x1e, 0xf7, 0x73, 0xa2, 0x17, 0xde, + 0x23, 0x3a, 0x56, 0x28, 0x78, 0xdc, 0x66, 0xa6, 0xa9, 0xf4, 0xb1, 0xa4, 0x75, 0x5e, 0xad, 0x9a, + 0xbb, 0xca, 0x93, 0x42, 0x99, 0x79, 0x55, 0xf9, 0xea, 0x8f, 0x88, 0x1e, 0xe1, 0xd7, 0x20, 0x39, + 0xf9, 0xe6, 0x74, 0x58, 0x66, 0x4c, 0x95, 0xb7, 0xe3, 0x53, 0xd7, 0x99, 0x94, 0xdd, 0x89, 0x7b, + 0x62, 0x9f, 0xdb, 0x88, 0xfa, 0x4e, 0x23, 0xda, 0x7b, 0x8c, 0x28, 0x77, 0x32, 0xcf, 0x27, 0x1e, + 0x13, 0x3c, 0x7e, 0xf4, 0x25, 0xb4, 0x79, 0x17, 0x40, 0x66, 0xde, 0x34, 0x2b, 0xb0, 0x8e, 0xcd, + 0xec, 0x14, 0xb3, 0x20, 0x48, 0xf1, 0x32, 0xbe, 0x86, 0x0b, 0x0e, 0xb0, 0x7b, 0xad, 0xe3, 0x0f, + 0x44, 0x01, 0x3e, 0xe5, 0x66, 0x25, 0x41, 0xad, 0x30, 0x2f, 0x7d, 0x09, 0x5e, 0xef, 0x3e, 0xd0, + 0xf9, 0x87, 0x52, 0x9d, 0x35, 0x7c, 0xe7, 0x43, 0x6b, 0xdc, 0x6f, 0x2c, 0xb7, 0xb5, 0xe0, 0x94, + 0x4d, 0x46, 0xca, 0x49, 0x7d, 0xea, 0x3b, 0x2a, 0x99, 0xe6, 0x23, 0xf4, 0x2e, 0x00, 0x84, 0xef, + 0x4d, 0x7c, 0x3c, 0x40, 0x2d, 0xa0, 0xbd, 0xa2, 0x4f, 0x3c, 0x3e, 0x5f, 0xa8, 0xdd, 0x32, 0xc2, + 0x87, 0x7a, 0x85, 0x05, 0x8f, 0x79, 0x65, 0xcb, 0x08, 0x42, 0xcb, 0xd1, 0x44, 0x78, 0xb6, 0xbc, + 0x63, 0x02, 0x51, 0xc1, 0x29, 0x41, 0x9b, 0x3f, 0x54, 0x61, 0xf6, 0x8f, 0x26, 0xef, 0xc4, 0xaa, + 0x9e, 0xf7, 0xf6, 0x13, 0x35, 0xa8, 0xc1, 0x4d, 0xa4, 0xae, 0x4a, 0x0d, 0x87, 0x63, 0x84, 0x7a, + 0x7b, 0x0f, 0x51, 0x97, 0xe6, 0x44, 0xb5, 0x2a, 0x87, 0xd3, 0x91, 0x90, 0xf2, 0x5f, 0x80, 0xb4, + 0xcc, 0x64, 0x4f, 0x38, 0x79, 0x13, 0xca, 0x9e, 0xdd, 0x8c, 0x69, 0x8e, 0x0b, 0x90, 0xb1, 0xaa, + 0x0c, 0xa9, 0x28, 0xb0, 0x07, 0x8e, 0x1c, 0x39, 0xe2, 0xeb, 0x69, 0x0f, 0xf9, 0x19, 0x36, 0x6c, + 0x98, 0xe3, 0x2b, 0x4e, 0xc8, 0x7c, 0x7a, 0x8b, 0x79, 0x3d, 0xac, 0x25, 0xa3, 0xe3, 0x99, 0x99, + 0x35, 0x6a, 0xf9, 0xf9, 0xf9, 0x7a, 0x58, 0xa7, 0x4e, 0x1d, 0xed, 0xd0, 0xa1, 0x43, 0x16, 0x91, + 0x0a, 0x15, 0x2a, 0x18, 0x0f, 0x86, 0x96, 0x04, 0x8e, 0x40, 0x16, 0xbf, 0x05, 0x0b, 0x16, 0x18, + 0xf8, 0x8a, 0x15, 0x2b, 0xec, 0x6c, 0xbe, 0xe2, 0x9e, 0x0f, 0xf6, 0xc9, 0xa4, 0x65, 0x01, 0x0a, + 0x0b, 0x0b, 0x0d, 0x36, 0x64, 0x08, 0x99, 0x56, 0x61, 0xf1, 0xe2, 0xc5, 0x7a, 0x06, 0x55, 0x1a, + 0xf0, 0x95, 0x2b, 0x57, 0xea, 0x74, 0xfe, 0x5a, 0xa0, 0x27, 0xe5, 0xe5, 0xe5, 0xb9, 0xf2, 0xe9, + 0x89, 0x29, 0x2e, 0x81, 0x9b, 0x10, 0x67, 0xd4, 0x80, 0x09, 0x13, 0xf8, 0x46, 0xc4, 0xb0, 0x6a, + 0xd5, 0x2a, 0x3d, 0x6c, 0xd6, 0xcc, 0x65, 0x9a, 0xa1, 0xa7, 0xb8, 0x5f, 0x72, 0x72, 0x72, 0xf4, + 0x84, 0xea, 0xd5, 0xab, 0xbb, 0x33, 0xf8, 0xa0, 0xa6, 0x7d, 0x1f, 0xd8, 0xb4, 0x69, 0x13, 0xb5, + 0x68, 0xd1, 0x82, 0x6a, 0xd6, 0xac, 0xe9, 0xc3, 0x5c, 0xe6, 0x59, 0xd2, 0x2e, 0x40, 0xe6, 0xb3, + 0x14, 0x4c, 0x63, 0x5a, 0x4d, 0x28, 0x98, 0xa9, 0xec, 0x70, 0xc7, 0x05, 0xc8, 0x4e, 0xbd, 0xfa, + 0xd7, 0x1a, 0xf7, 0x01, 0xff, 0x75, 0x95, 0x1d, 0xce, 0xb8, 0x0f, 0x64, 0xa7, 0x5e, 0xfd, 0x6b, + 0x8d, 0x3d, 0xe0, 0xbf, 0xae, 0xb2, 0xc3, 0x19, 0x7b, 0x20, 0x3b, 0xf5, 0xea, 0x5f, 0xeb, 0x77, + 0xc4, 0x03, 0x9b, 0x0e, 0x12, 0x4d, 0x59, 0x4b, 0x74, 0xc4, 0xf6, 0xfd, 0xdf, 0xad, 0xa2, 0xf0, + 0x62, 0x17, 0x3f, 0x2f, 0xc0, 0x77, 0xec, 0xa5, 0xbb, 0xc5, 0xfa, 0xd3, 0xf3, 0x97, 0xbd, 0xb8, + 0x4c, 0x7a, 0x0a, 0x7d, 0xc9, 0xef, 0xc4, 0x78, 0x7b, 0xfc, 0xc0, 0xcb, 0xa6, 0x32, 0x60, 0x37, + 0xf0, 0xcb, 0xa9, 0x3d, 0xa3, 0xad, 0x34, 0x19, 0xc3, 0xc3, 0x16, 0x5e, 0x5a, 0x01, 0xd4, 0xd7, + 0x83, 0x82, 0xc2, 0x2f, 0x74, 0xf9, 0x53, 0xea, 0x6c, 0x65, 0x1d, 0x1b, 0xe8, 0x6d, 0xea, 0x13, + 0xbd, 0xf9, 0xb0, 0xe4, 0xb0, 0x86, 0xa9, 0xf4, 0x31, 0x77, 0xf2, 0x26, 0x24, 0x33, 0x7f, 0x4b, + 0x3d, 0xf1, 0x36, 0x19, 0xea, 0xb1, 0x22, 0xe3, 0xb6, 0xbf, 0x58, 0x0d, 0x21, 0xf6, 0x39, 0xbf, + 0x61, 0x93, 0x99, 0x77, 0xa6, 0x12, 0x6d, 0xff, 0xcc, 0xcc, 0x7c, 0xff, 0x76, 0x44, 0x0f, 0x77, + 0x16, 0x5c, 0xbb, 0xf9, 0x8d, 0xf7, 0xb8, 0x65, 0x4e, 0x89, 0x54, 0xfa, 0x12, 0x12, 0xde, 0x2f, + 0x77, 0xff, 0xba, 0xc2, 0x54, 0xba, 0xe8, 0x11, 0x81, 0xf7, 0x63, 0xc3, 0xc8, 0x64, 0x91, 0xe2, + 0xfa, 0xf3, 0x97, 0x88, 0x6e, 0x7f, 0xd6, 0xe4, 0xf5, 0xc2, 0x06, 0xf1, 0x6b, 0x49, 0x00, 0xde, + 0xb9, 0x8e, 0xbb, 0x4f, 0xe0, 0xdf, 0xaf, 0x45, 0xf4, 0x14, 0xbf, 0x92, 0xc7, 0x3a, 0xbc, 0xa7, + 0xef, 0x15, 0x34, 0xbf, 0xfa, 0x04, 0x77, 0x12, 0x0f, 0x40, 0x29, 0xe0, 0xbe, 0xb6, 0x22, 0xc4, + 0x55, 0x5d, 0x7b, 0xfc, 0x76, 0xc0, 0x97, 0xbc, 0xf8, 0x50, 0x01, 0x18, 0xd5, 0x4b, 0x84, 0xb8, + 0xe6, 0xfd, 0xd8, 0xc4, 0x43, 0x62, 0xde, 0x1e, 0x90, 0x06, 0xdb, 0xda, 0x96, 0xc9, 0x48, 0x43, + 0xbb, 0x8e, 0x10, 0xdd, 0xf3, 0x23, 0xa2, 0xca, 0xe5, 0xcd, 0xf6, 0xbe, 0xf5, 0x30, 0xd1, 0xaf, + 0x5f, 0x91, 0x1c, 0xee, 0x61, 0x43, 0x7e, 0xbf, 0xea, 0x06, 0xe8, 0xd0, 0x95, 0xcb, 0x05, 0xd6, + 0x97, 0xbc, 0x0f, 0xc0, 0x50, 0x05, 0x56, 0xea, 0x06, 0x27, 0x93, 0x8c, 0x34, 0x6e, 0xfc, 0xa9, + 0x68, 0xa7, 0xce, 0xa7, 0xe2, 0x70, 0x4d, 0x4f, 0x5d, 0x80, 0xaf, 0x2f, 0xba, 0x0a, 0x52, 0x9d, + 0x2a, 0xee, 0xf4, 0xb0, 0xd4, 0x3a, 0x37, 0x86, 0x92, 0xf4, 0x2e, 0x00, 0x36, 0x17, 0x00, 0xbc, + 0xbe, 0xd4, 0xb4, 0x6f, 0xac, 0x27, 0x07, 0xbe, 0x60, 0xd4, 0x71, 0x83, 0x0a, 0x37, 0xb8, 0x51, + 0x53, 0xd2, 0xbc, 0x0b, 0xf0, 0x1b, 0xfe, 0x20, 0x01, 0x58, 0xf7, 0xb1, 0x08, 0x71, 0x95, 0xab, + 0x77, 0x81, 0xe7, 0xf0, 0xbb, 0xfd, 0x20, 0x80, 0xbe, 0x02, 0xf8, 0xe3, 0x1b, 0x22, 0xc4, 0x75, + 0xe2, 0xbb, 0x26, 0x1e, 0x12, 0xf3, 0x2e, 0xc0, 0xef, 0x72, 0x4c, 0x95, 0x3f, 0x7b, 0x81, 0xe8, + 0xe5, 0x0d, 0x44, 0x77, 0x3d, 0x27, 0x68, 0x58, 0xe7, 0x1c, 0x14, 0x5e, 0x1f, 0x2c, 0x24, 0x30, + 0xbe, 0x0f, 0x7f, 0x93, 0xe8, 0xb9, 0x77, 0x58, 0xe7, 0x7a, 0x41, 0x7b, 0xac, 0x6b, 0x50, 0x6d, + 0x06, 0xbf, 0x77, 0x01, 0xc0, 0xf2, 0xde, 0x1f, 0x04, 0x23, 0x3e, 0x03, 0x4d, 0x5c, 0x29, 0xf0, + 0x6a, 0x15, 0x89, 0xb0, 0x90, 0x3b, 0x28, 0x34, 0xbf, 0x89, 0x68, 0xc4, 0x3d, 0x42, 0x6a, 0xe9, + 0x2e, 0xf1, 0x89, 0x09, 0xb1, 0x6e, 0xad, 0x88, 0x1e, 0xcd, 0x11, 0xf4, 0x10, 0xd7, 0xe4, 0x53, + 0x09, 0xa9, 0xf0, 0xc8, 0x19, 0xa2, 0x1d, 0x9f, 0x8b, 0x61, 0x13, 0x53, 0x89, 0x74, 0xe1, 0x03, + 0x1e, 0x82, 0xcf, 0xf1, 0x0d, 0xd0, 0xed, 0x8b, 0x67, 0x40, 0xdd, 0xfe, 0x0a, 0x10, 0x50, 0x69, + 0x71, 0xb2, 0x27, 0x6f, 0x42, 0xc5, 0x99, 0x93, 0x90, 0xb6, 0xe2, 0x02, 0x84, 0xac, 0xb8, 0x8c, + 0x89, 0xc5, 0x1e, 0xc8, 0x58, 0x55, 0x86, 0x54, 0x14, 0x7b, 0x20, 0x64, 0xc5, 0x65, 0x4c, 0x2c, + 0xb0, 0x07, 0x8a, 0x8a, 0x8a, 0x08, 0x5b, 0x79, 0x4e, 0x9e, 0x3c, 0x99, 0x32, 0x13, 0xf8, 0xec, + 0x34, 0x63, 0x46, 0xe2, 0x49, 0x2c, 0x25, 0x77, 0x48, 0x86, 0x14, 0x1f, 0x01, 0x1d, 0xc9, 0x6c, + 0x86, 0x9f, 0xdc, 0x49, 0xeb, 0xd1, 0xa3, 0x87, 0x23, 0xcd, 0x4e, 0x00, 0xdf, 0xe0, 0xc1, 0x83, + 0xed, 0xe4, 0x8c, 0xc6, 0xbd, 0x9f, 0xc8, 0x3c, 0x2a, 0x84, 0xad, 0xfb, 0xfe, 0x78, 0x0d, 0xde, + 0x6c, 0x43, 0xe0, 0x26, 0x24, 0x33, 0x74, 0xf9, 0xf2, 0x65, 0xaa, 0x57, 0xaf, 0x9e, 0x5e, 0x98, + 0xfb, 0xef, 0xbf, 0x5f, 0x92, 0xf5, 0x70, 0xd7, 0xae, 0x5d, 0x3a, 0x1d, 0xeb, 0xbb, 0xc1, 0xa3, + 0xc2, 0xc0, 0x81, 0x03, 0xf5, 0xb4, 0x3e, 0x7d, 0xfa, 0x10, 0x7f, 0x57, 0xd6, 0x71, 0xfe, 0x50, + 0xae, 0xb2, 0x04, 0xc3, 0xc3, 0xf8, 0x93, 0x2d, 0xe8, 0xcd, 0xa8, 0x61, 0xc3, 0x86, 0x5a, 0xdb, + 0xb6, 0x6d, 0x75, 0xbc, 0x72, 0xe5, 0xca, 0x86, 0xaa, 0x73, 0xe7, 0xce, 0x69, 0xbd, 0x7a, 0xf5, + 0xd2, 0xe9, 0xd5, 0xaa, 0x55, 0x33, 0xe8, 0x40, 0xf0, 0x45, 0x5e, 0xca, 0xb7, 0x6b, 0xd7, 0x4e, + 0x6b, 0xd3, 0xa6, 0x8d, 0x1e, 0x9f, 0x3d, 0x7b, 0xb6, 0x85, 0xcf, 0x6f, 0x24, 0xd4, 0x97, 0x7a, + 0x64, 0xa0, 0x46, 0x8d, 0x1a, 0x86, 0x8d, 0xdc, 0xdc, 0x5c, 0x3d, 0x13, 0x57, 0xaf, 0x5e, 0x35, + 0x68, 0x40, 0xc0, 0x67, 0x2f, 0x80, 0xa4, 0x23, 0x4d, 0x02, 0xf0, 0xb0, 0x7d, 0x25, 0x74, 0x13, + 0xea, 0xd0, 0xa1, 0x03, 0xdb, 0x15, 0xd0, 0xb3, 0x67, 0x4f, 0x1d, 0xd9, 0xba, 0x75, 0xab, 0x24, + 0x05, 0x0e, 0x2f, 0x5d, 0xe2, 0xe9, 0x75, 0x18, 0x90, 0xb5, 0x10, 0x24, 0x64, 0x3b, 0x7a, 0xed, + 0x4a, 0x99, 0xd2, 0xa5, 0x4b, 0x5b, 0xe2, 0x92, 0x0e, 0x3e, 0xbf, 0x1e, 0xe0, 0xbe, 0x21, 0xc5, + 0x02, 0x85, 0xa6, 0x1f, 0x7d, 0x8a, 0xc9, 0xcc, 0x37, 0x68, 0xd0, 0x40, 0xcf, 0xb4, 0x8c, 0x8f, + 0x1e, 0x3d, 0xda, 0xd0, 0x20, 0x69, 0xf6, 0x10, 0x0c, 0xad, 0x5a, 0xb5, 0x32, 0xe4, 0x78, 0x39, + 0x8e, 0x81, 0x83, 0x77, 0xc7, 0x8e, 0x1d, 0x86, 0x0e, 0xbf, 0x48, 0x5a, 0x0f, 0x34, 0x17, 0x2e, + 0x5c, 0xa0, 0x6d, 0xdb, 0xb6, 0x51, 0xe7, 0xce, 0x89, 0xf7, 0x9c, 0x9c, 0x8b, 0xe2, 0x86, 0xb4, + 0x0a, 0x50, 0xdc, 0x99, 0x75, 0xb3, 0x17, 0xba, 0x13, 0xbb, 0x29, 0x8b, 0x82, 0x16, 0x17, 0x20, + 0x8a, 0x5a, 0x57, 0x6d, 0xc6, 0x1e, 0x50, 0x6b, 0x23, 0x0a, 0x3c, 0xf6, 0x40, 0x14, 0xb5, 0xae, + 0xda, 0x2c, 0xf1, 0xf7, 0x01, 0xb5, 0x30, 0x25, 0x11, 0x2f, 0xf1, 0x5d, 0xa0, 0x24, 0x56, 0xba, + 0x9a, 0xe7, 0xd8, 0x01, 0x6a, 0x6d, 0x44, 0x80, 0xc7, 0x0e, 0x88, 0xa0, 0xd2, 0x55, 0x93, 0xb1, + 0x03, 0xd4, 0xda, 0x88, 0x00, 0x8f, 0x1d, 0x10, 0x41, 0xa5, 0xab, 0x26, 0x63, 0x07, 0xa8, 0xb5, + 0x11, 0x01, 0x1e, 0x3b, 0x20, 0x82, 0x4a, 0x57, 0x4d, 0xc6, 0x0e, 0x50, 0x6b, 0x23, 0x02, 0x3c, + 0xf0, 0x87, 0x19, 0x47, 0x1e, 0xcf, 0xf2, 0x42, 0xae, 0x91, 0x8b, 0x88, 0x56, 0x26, 0xce, 0x08, + 0xb0, 0x33, 0x60, 0x41, 0xe2, 0xa4, 0x7e, 0x44, 0x21, 0x37, 0x6a, 0xeb, 0xfb, 0xaf, 0xa7, 0xad, + 0x33, 0xb5, 0xba, 0x9d, 0x31, 0x60, 0xa6, 0x3a, 0xb1, 0x55, 0xfb, 0x45, 0xfe, 0xce, 0x5c, 0x70, + 0xa6, 0x61, 0xed, 0x22, 0xf6, 0x67, 0xe3, 0x9c, 0x83, 0xb2, 0x21, 0xdb, 0x22, 0xf6, 0x87, 0xa7, + 0x91, 0xbf, 0xf0, 0x0e, 0xf8, 0x8c, 0x57, 0x0e, 0xf5, 0x9e, 0x42, 0x74, 0x89, 0xf7, 0x64, 0x27, + 0x83, 0xcf, 0xf8, 0x1b, 0x66, 0xde, 0x74, 0xc1, 0xf1, 0x24, 0x7f, 0x3d, 0x40, 0x81, 0xfd, 0x02, + 0xd6, 0x71, 0xc9, 0xa5, 0x50, 0x7e, 0x65, 0x24, 0x1f, 0x4e, 0x4d, 0xc5, 0x51, 0xab, 0xc9, 0x00, + 0x5f, 0x5e, 0x5e, 0x79, 0x5f, 0xfc, 0xea, 0x56, 0xe5, 0xbd, 0xe5, 0x8f, 0x89, 0xb5, 0x92, 0xc9, + 0x64, 0xd4, 0xb4, 0x74, 0xf2, 0x97, 0xd0, 0x13, 0xce, 0x01, 0x07, 0x4e, 0xf0, 0x11, 0xc3, 0x2f, + 0xa9, 0x59, 0xe1, 0x35, 0xc8, 0x0d, 0xf9, 0xc8, 0x8f, 0x41, 0x44, 0x15, 0x95, 0x15, 0x7b, 0x2f, + 0xad, 0x25, 0x9a, 0xbc, 0xda, 0xe4, 0xc3, 0xda, 0x32, 0x9c, 0x43, 0x3b, 0xec, 0xa7, 0x26, 0x0d, + 0x18, 0xd6, 0x30, 0xe7, 0x73, 0x65, 0x63, 0x21, 0xde, 0x21, 0x76, 0xd8, 0x07, 0x05, 0xd6, 0xf4, + 0xa0, 0xb1, 0xdf, 0xcf, 0x25, 0x5a, 0xf1, 0xa1, 0x29, 0x85, 0x96, 0xfe, 0xe2, 0x03, 0x44, 0xdd, + 0x79, 0x49, 0x98, 0x04, 0x1c, 0xa9, 0xf0, 0xcb, 0x7f, 0x9a, 0x67, 0x85, 0xe2, 0xe8, 0xdb, 0x8e, + 0x7f, 0x23, 0x7a, 0xff, 0x4f, 0x4e, 0x27, 0x64, 0x3a, 0x7f, 0x32, 0x0f, 0x1c, 0x86, 0xeb, 0x77, + 0x4f, 0xf1, 0x90, 0xa3, 0x42, 0xd3, 0xda, 0x44, 0x73, 0x79, 0x21, 0x9f, 0x5a, 0xf9, 0x48, 0xc7, + 0xfa, 0xb7, 0xdf, 0xf2, 0x4f, 0x05, 0x74, 0x57, 0xfb, 0xd1, 0x7d, 0x58, 0x19, 0x8c, 0xa3, 0x19, + 0x16, 0xed, 0x4c, 0xbf, 0xf2, 0xff, 0x7d, 0xc0, 0x5a, 0xf9, 0xb0, 0x8d, 0x21, 0x50, 0xad, 0x7c, + 0xd0, 0x70, 0x28, 0x07, 0x5a, 0x3c, 0x8e, 0x46, 0x91, 0x80, 0x75, 0xe0, 0xcf, 0x2c, 0x95, 0x31, + 0x33, 0xcc, 0x64, 0xfe, 0x4c, 0xad, 0x3a, 0xa6, 0x58, 0xb7, 0xa5, 0x78, 0x45, 0x31, 0xf4, 0x60, + 0xa9, 0xb4, 0x0a, 0xbd, 0x6e, 0x55, 0x63, 0x56, 0xbc, 0x37, 0xa7, 0x4d, 0x5d, 0x6b, 0xa5, 0x2d, + 0xfe, 0x80, 0x48, 0x5d, 0xc9, 0x89, 0x65, 0xa4, 0x7b, 0xc7, 0x58, 0x79, 0x10, 0xdb, 0x7a, 0x98, + 0x68, 0xd0, 0xab, 0xc0, 0xfc, 0x03, 0x74, 0xab, 0x50, 0x86, 0xdb, 0x98, 0x3c, 0x48, 0x44, 0xa5, + 0x03, 0xc7, 0xfa, 0xda, 0x6e, 0xb7, 0x10, 0x2d, 0xdb, 0x6d, 0xa6, 0x2c, 0x61, 0xfc, 0xf9, 0x3c, + 0x33, 0x0e, 0x2c, 0x93, 0xf9, 0xb3, 0x6a, 0x4e, 0x72, 0x9e, 0x8d, 0x8d, 0xd1, 0x88, 0xda, 0x4f, + 0x43, 0x41, 0x02, 0xc6, 0x4f, 0x2f, 0xb8, 0x99, 0x5b, 0x9a, 0x1d, 0x8e, 0x73, 0xf7, 0xb7, 0x03, + 0x2a, 0xca, 0x0e, 0x6e, 0x34, 0x3b, 0x8f, 0x3d, 0x7e, 0x8c, 0x87, 0x12, 0x15, 0x52, 0xad, 0xea, + 0xb6, 0x1f, 0x4f, 0x73, 0xfd, 0x3a, 0xd1, 0x89, 0xaf, 0x89, 0x6e, 0xaa, 0xa2, 0x6a, 0x21, 0x72, + 0xcb, 0x8b, 0x1b, 0xcd, 0x2a, 0x95, 0x32, 0xe6, 0x52, 0xea, 0x14, 0x32, 0x65, 0x78, 0x3c, 0xb5, + 0x03, 0xc6, 0x48, 0x2f, 0x70, 0x4b, 0x2b, 0x1d, 0xdc, 0xac, 0x97, 0x7a, 0x07, 0xdd, 0x9e, 0x3f, + 0x37, 0xfb, 0xaa, 0x90, 0x5b, 0x7a, 0x69, 0x97, 0x32, 0xaa, 0x32, 0x19, 0xc4, 0x83, 0xd7, 0x44, + 0xfd, 0x1a, 0x4e, 0xf3, 0x87, 0xf9, 0xc6, 0xe9, 0x05, 0x6e, 0x69, 0xf5, 0xab, 0x7b, 0x71, 0xa7, + 0x4f, 0xb7, 0xeb, 0xc6, 0xc6, 0x0c, 0x2c, 0x6b, 0xf6, 0x02, 0x7b, 0xfe, 0x70, 0x4f, 0xa8, 0x1d, + 0x6e, 0xef, 0x82, 0x97, 0x89, 0x64, 0xf4, 0xe0, 0x0e, 0xc0, 0x90, 0xd2, 0xbe, 0xb1, 0x55, 0xe7, + 0x72, 0x1e, 0x37, 0xbd, 0xce, 0x65, 0x7d, 0xcb, 0x36, 0x26, 0x43, 0x12, 0x47, 0x69, 0x65, 0x0b, + 0xdc, 0x74, 0xdb, 0xef, 0x0b, 0xd2, 0x36, 0x66, 0x5d, 0xeb, 0x3f, 0x91, 0x31, 0x11, 0xba, 0xc9, + 0x5b, 0x39, 0x32, 0x1a, 0x0b, 0xee, 0x00, 0x98, 0xc7, 0x4d, 0x4a, 0xdd, 0x80, 0x85, 0x31, 0xb3, + 0xe7, 0x8b, 0x44, 0xd8, 0xf1, 0xa5, 0xc2, 0xd8, 0x65, 0x44, 0xb3, 0x36, 0xab, 0x14, 0x3e, 0xd0, + 0xaa, 0x87, 0x73, 0x7c, 0xb5, 0x72, 0xa4, 0x17, 0xbb, 0xb3, 0x09, 0xd1, 0x2f, 0x6e, 0xb7, 0xea, + 0xc0, 0xcc, 0xe6, 0x35, 0xdb, 0xca, 0x25, 0x6c, 0x20, 0xc0, 0x39, 0xf9, 0x18, 0xf3, 0x25, 0x54, + 0xaf, 0xc4, 0x9b, 0xc2, 0x12, 0xbb, 0xd7, 0x24, 0x2d, 0xcb, 0x61, 0xf0, 0x59, 0x10, 0x32, 0x84, + 0x5e, 0xf0, 0xfe, 0xe3, 0x7c, 0x62, 0xd8, 0x64, 0x73, 0x13, 0x0d, 0xf6, 0x91, 0xa4, 0xda, 0xbe, + 0x97, 0xcf, 0xd3, 0x41, 0xdb, 0x5f, 0x94, 0x64, 0xa5, 0x7c, 0xcf, 0xf6, 0x21, 0x7d, 0x4b, 0x95, + 0xfa, 0x84, 0x3a, 0x96, 0x9d, 0x80, 0x9f, 0x17, 0x34, 0xe7, 0x83, 0xc2, 0x16, 0x0c, 0x15, 0x1b, + 0x43, 0xbd, 0x78, 0xb2, 0x40, 0x0f, 0xe7, 0x00, 0x64, 0x04, 0x27, 0x91, 0x61, 0xdf, 0x0c, 0x4e, + 0xff, 0x9b, 0xb4, 0x8a, 0x9f, 0x03, 0xb6, 0xf1, 0x58, 0x7b, 0xd1, 0x9a, 0x45, 0x6c, 0x4d, 0xb9, + 0x83, 0x5b, 0xe4, 0x78, 0xae, 0x90, 0xef, 0x25, 0x99, 0x29, 0x59, 0xa5, 0x32, 0x13, 0xc3, 0xc3, + 0x1e, 0x7e, 0xf8, 0xc3, 0x06, 0xbc, 0x2a, 0xf9, 0x98, 0x1f, 0x1e, 0xd5, 0xd6, 0x0e, 0x2b, 0xb5, + 0x78, 0xac, 0x7f, 0x34, 0x87, 0x1f, 0xc8, 0xee, 0xc8, 0x8c, 0xcd, 0x10, 0x5a, 0xe2, 0x8f, 0xf2, + 0x21, 0x2a, 0x2d, 0x93, 0x22, 0xe1, 0xee, 0x01, 0x99, 0xcc, 0xc1, 0x77, 0x5c, 0x57, 0xec, 0x80, + 0x88, 0x1b, 0x40, 0xec, 0x80, 0xd8, 0x01, 0x11, 0xd7, 0x40, 0xc4, 0xe6, 0xe3, 0x1e, 0x10, 0x3b, + 0x20, 0xe2, 0x1a, 0x88, 0xd8, 0x7c, 0xdc, 0x03, 0x62, 0x07, 0x84, 0xaf, 0x81, 0x2b, 0x57, 0xae, + 0x10, 0x76, 0xba, 0x94, 0x64, 0xc8, 0x7a, 0x0f, 0xb8, 0x78, 0xf1, 0x22, 0xf1, 0xb6, 0x38, 0x63, + 0xf3, 0x21, 0x36, 0x20, 0xf6, 0xef, 0xdf, 0x3f, 0xed, 0x3a, 0xe3, 0x83, 0x71, 0xa9, 0x5c, 0xb9, + 0x72, 0xc4, 0x7b, 0x04, 0x69, 0xc8, 0x90, 0x21, 0x69, 0xeb, 0x8b, 0x4a, 0x41, 0xd6, 0x1d, 0x80, + 0x1d, 0x9d, 0x13, 0x27, 0x4e, 0xa4, 0x96, 0x2d, 0x5b, 0x1a, 0x65, 0x3c, 0x7b, 0xd6, 0xf6, 0xd1, + 0xc4, 0x48, 0xf1, 0x8f, 0xf0, 0x7f, 0xeb, 0xe8, 0x7f, 0xe2, 0x83, 0x3f, 0xf2, 0x01, 0x5e, 0x52, + 0x21, 0xfc, 0xbb, 0xa0, 0x00, 0x25, 0xc6, 0x3f, 0x1a, 0xed, 0xdb, 0xb7, 0x8f, 0xf6, 0xef, 0xdf, + 0xef, 0x90, 0x3a, 0x71, 0xe2, 0x04, 0x5d, 0xbb, 0x76, 0xcd, 0xb1, 0x2d, 0xd7, 0xc1, 0x98, 0x20, + 0xa0, 0x47, 0x1d, 0x38, 0x70, 0x40, 0xe7, 0x5f, 0xb4, 0x88, 0xdf, 0xf1, 0x30, 0xd4, 0xad, 0x9b, + 0xfa, 0xc4, 0x7d, 0x1c, 0xe8, 0x7d, 0xea, 0x14, 0xbf, 0x30, 0x64, 0x68, 0xdc, 0xb8, 0x31, 0x55, + 0xad, 0x5a, 0x55, 0x8f, 0x6f, 0xd9, 0xb2, 0x45, 0xcf, 0x5b, 0xd3, 0xa6, 0x4d, 0xa9, 0x53, 0xa7, + 0x4e, 0x54, 0xbb, 0x76, 0x6d, 0x9d, 0xa7, 0xd8, 0x2e, 0x7e, 0xb7, 0x24, 0xa6, 0xcb, 0x27, 0xcf, + 0xd2, 0xe6, 0x82, 0x59, 0xb6, 0x47, 0xda, 0xe3, 0x55, 0xaa, 0x54, 0xd1, 0xe6, 0xce, 0x9d, 0xeb, + 0x6a, 0x6e, 0xde, 0xbc, 0x79, 0xae, 0xb2, 0x6e, 0xfb, 0x49, 0x55, 0x05, 0xdc, 0xfb, 0x2c, 0x72, + 0x5c, 0xc9, 0x5a, 0x99, 0x32, 0x65, 0x2c, 0x34, 0x99, 0x0f, 0x76, 0xa6, 0xc6, 0xf7, 0x15, 0x55, + 0x3c, 0xab, 0x78, 0xe0, 0xbd, 0xaa, 0x61, 0x73, 0x63, 0x77, 0xc0, 0x80, 0x01, 0x03, 0x34, 0x6e, + 0xcd, 0x86, 0xba, 0x69, 0xd3, 0xa6, 0x59, 0x2a, 0xa4, 0x77, 0xef, 0xde, 0x46, 0x9a, 0x1b, 0x22, + 0x0f, 0x3d, 0x47, 0xc5, 0xa5, 0x72, 0x00, 0xe4, 0xe5, 0x61, 0xe8, 0xb2, 0xa2, 0xd5, 0xed, 0xd5, + 0xd7, 0xaf, 0x5f, 0xd7, 0xb8, 0x57, 0x18, 0xf6, 0xc7, 0x8c, 0x19, 0xe3, 0x66, 0x32, 0x2b, 0xb4, + 0xac, 0xdf, 0x03, 0xb8, 0xc0, 0x0e, 0xe8, 0xd6, 0xad, 0x1b, 0xcd, 0x99, 0x33, 0x87, 0xca, 0x97, + 0x4f, 0x1c, 0xaa, 0xc5, 0x1c, 0x43, 0x87, 0x0e, 0x25, 0x3e, 0x2a, 0xdf, 0xe0, 0x5d, 0xb2, 0x64, + 0x89, 0x3e, 0xd4, 0x18, 0x84, 0x0c, 0x23, 0xec, 0x70, 0x43, 0x23, 0x26, 0x06, 0xf8, 0x87, 0x39, + 0x09, 0x07, 0x0f, 0x1e, 0x94, 0x68, 0xd6, 0xc3, 0x48, 0x1c, 0xb0, 0x67, 0xcf, 0x1e, 0xc2, 0x91, + 0x0d, 0x76, 0xd8, 0xbe, 0x7d, 0xbb, 0x41, 0x42, 0xa5, 0xf8, 0x19, 0xdb, 0x0d, 0x81, 0x80, 0x08, + 0x0f, 0x41, 0x16, 0x09, 0xd8, 0x8b, 0x04, 0xb2, 0xd2, 0xaf, 0x6c, 0x4a, 0x79, 0x9a, 0xa8, 0x0f, + 0x13, 0x5c, 0x40, 0xa3, 0x9b, 0x03, 0xe7, 0x9b, 0x9e, 0xf6, 0xc4, 0x13, 0x4f, 0x68, 0x3c, 0x2d, + 0xb5, 0x8c, 0xc9, 0x5c, 0x19, 0xda, 0xea, 0xd5, 0xab, 0x2d, 0x5a, 0xe6, 0xcf, 0x9f, 0xaf, 0xf1, + 0x7f, 0x22, 0x6a, 0xd8, 0xa6, 0x8f, 0x1f, 0xc6, 0x71, 0xa9, 0x0f, 0xfc, 0x92, 0xde, 0xa8, 0x51, + 0x23, 0xfd, 0xb8, 0x8a, 0xe3, 0xc7, 0x8f, 0x1b, 0xf2, 0xd3, 0xa7, 0x4f, 0xd7, 0x70, 0xbc, 0x85, + 0xe4, 0x47, 0x88, 0xe3, 0x2a, 0x36, 0x6f, 0xde, 0xac, 0xf1, 0x04, 0x40, 0xeb, 0xd7, 0xaf, 0x9f, + 0x56, 0xa9, 0x52, 0x25, 0x23, 0x9d, 0xff, 0xcd, 0x59, 0xc3, 0xff, 0x35, 0xd8, 0x4f, 0x90, 0x30, + 0x14, 0x66, 0x10, 0x29, 0x96, 0x59, 0xd0, 0xd1, 0xa3, 0x47, 0x09, 0xe7, 0xdd, 0x00, 0xf0, 0x57, + 0xd5, 0xeb, 0xd7, 0xaf, 0xa7, 0x29, 0x53, 0xa6, 0xd0, 0xcc, 0x99, 0x33, 0x69, 0xc3, 0x86, 0x0d, + 0x3a, 0x1d, 0x17, 0x3e, 0xcb, 0x80, 0xa6, 0x4e, 0x9d, 0x4a, 0x5d, 0xba, 0x74, 0x31, 0x68, 0x12, + 0xc1, 0xd4, 0x15, 0x33, 0x99, 0x63, 0xc7, 0x8e, 0x49, 0x92, 0x11, 0x72, 0x7d, 0xe8, 0x69, 0x20, + 0xa0, 0x25, 0xd7, 0xaa, 0x55, 0xcb, 0xd2, 0xc3, 0xce, 0x9c, 0x39, 0x43, 0xe7, 0xcf, 0x9f, 0x37, + 0xf8, 0x81, 0x9c, 0x3e, 0x7d, 0x5a, 0x7f, 0x88, 0xe3, 0xf1, 0x9f, 0xbe, 0xfa, 0xea, 0x2b, 0xc2, + 0x43, 0x9d, 0x04, 0xe0, 0xa0, 0x21, 0xcd, 0xde, 0x53, 0x24, 0x4f, 0xa6, 0xc2, 0xf8, 0x8b, 0x58, + 0xa6, 0x6a, 0x32, 0xa4, 0x9e, 0x48, 0xee, 0x01, 0x21, 0xf3, 0xfa, 0xad, 0x14, 0x8b, 0x1d, 0x10, + 0xb1, 0x5b, 0x63, 0x07, 0xc4, 0x0e, 0x88, 0xb8, 0x06, 0x22, 0x36, 0x1f, 0xf7, 0x80, 0xd8, 0x01, + 0x11, 0xd7, 0x40, 0xc4, 0xe6, 0xe3, 0x1e, 0x10, 0x3b, 0x20, 0xe2, 0x1a, 0x88, 0xd8, 0xfc, 0xff, + 0x01, 0xdc, 0xb2, 0xfe, 0x66, 0x57, 0x2f, 0x5a, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82 +}; + + +#pragma mark - 3D Explorer Icons + +static const u_int8_t FLEXToggle2DIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5d, 0x3f, 0x5b, + 0x66, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xdf, 0xdc, 0x41, 0x00, 0x00, + 0x02, 0x1f, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x98, 0xcf, 0x2b, 0x44, 0x51, 0x14, 0xc7, + 0x3d, 0xbf, 0x86, 0x92, 0x8d, 0x3f, 0x60, 0xc4, 0xc2, 0xd6, 0x8f, 0xb2, 0x40, 0x2c, 0xc9, 0x46, + 0xcd, 0x82, 0x94, 0x7f, 0x40, 0x52, 0xca, 0x4a, 0x12, 0x4a, 0x76, 0xca, 0x42, 0xc9, 0xc6, 0xc6, + 0x02, 0x0b, 0x25, 0x8b, 0xd9, 0x48, 0xc6, 0xc6, 0x0e, 0x65, 0x37, 0x7e, 0x65, 0x83, 0x0d, 0x2b, + 0xbf, 0xc2, 0x68, 0x7c, 0x8e, 0x86, 0x5e, 0xd7, 0x79, 0x79, 0xca, 0xdc, 0xa1, 0xee, 0xa9, 0x6f, + 0xf7, 0x9e, 0x73, 0xcf, 0x7d, 0xe7, 0x7b, 0xce, 0xbb, 0xef, 0xbe, 0xfb, 0x5e, 0x5e, 0x1e, 0x92, + 0x4e, 0xa7, 0x63, 0x60, 0x1d, 0xac, 0x82, 0x26, 0xb1, 0xfd, 0x57, 0xf1, 0x48, 0xa0, 0x07, 0xf2, + 0x2b, 0xbe, 0x04, 0x52, 0xf4, 0x1b, 0x3d, 0xcf, 0x3b, 0xf0, 0xd9, 0x24, 0xe9, 0x32, 0xf4, 0x29, + 0xd0, 0x01, 0xf2, 0xfd, 0x63, 0x59, 0xec, 0xa7, 0xb9, 0x76, 0x02, 0x8c, 0xc2, 0xe7, 0x3a, 0x54, + 0x1c, 0x88, 0x6e, 0x02, 0x53, 0x66, 0xcd, 0xc9, 0x38, 0xf4, 0x9b, 0x4e, 0x16, 0xf5, 0x09, 0x93, + 0x4f, 0x90, 0x2e, 0x95, 0x7e, 0x51, 0x06, 0x35, 0xdb, 0x83, 0xe2, 0x67, 0xcb, 0x14, 0x3a, 0xb6, + 0x2c, 0xb9, 0x76, 0x58, 0xc5, 0xc1, 0xc7, 0x32, 0xba, 0xa7, 0x5f, 0xcf, 0x2d, 0x3e, 0xf2, 0xb3, + 0xc5, 0x2f, 0x82, 0x3e, 0x04, 0x72, 0xb1, 0xe4, 0x66, 0xe0, 0x73, 0xeb, 0xe7, 0x13, 0xd4, 0xf7, + 0x64, 0x00, 0xb2, 0xcd, 0x34, 0x7d, 0xe0, 0x09, 0xcc, 0x33, 0x39, 0x49, 0xeb, 0xc4, 0x55, 0xc0, + 0x55, 0xc0, 0x55, 0xc0, 0x55, 0xe0, 0xcf, 0x55, 0xe0, 0x7d, 0xdb, 0xd6, 0x58, 0xb1, 0x95, 0x17, + 0x61, 0x6f, 0x03, 0xc5, 0x20, 0xc1, 0x56, 0x1e, 0xfa, 0xe5, 0xa6, 0x5d, 0xcf, 0x96, 0x4d, 0x4d, + 0x88, 0x64, 0xca, 0x21, 0xb0, 0x03, 0x6a, 0x33, 0x44, 0xce, 0x68, 0x5b, 0x49, 0xea, 0x22, 0xa3, + 0x7f, 0x36, 0xf8, 0x46, 0x51, 0xba, 0x80, 0xbc, 0x78, 0x6d, 0xc9, 0x1e, 0x81, 0xb6, 0xe1, 0x23, + 0x67, 0xbd, 0xef, 0x05, 0x92, 0xe3, 0xc0, 0x94, 0x05, 0x73, 0x26, 0x0e, 0x51, 0x90, 0x32, 0x1d, + 0x2d, 0xe9, 0x23, 0x26, 0x1f, 0xd1, 0x3f, 0x8e, 0x3b, 0xe6, 0x58, 0x95, 0x69, 0x40, 0xaf, 0x56, + 0x6c, 0xf2, 0xa9, 0x51, 0xa0, 0xd8, 0x6d, 0x98, 0x5a, 0xb4, 0x20, 0x41, 0x09, 0x6d, 0x29, 0xce, + 0x9a, 0x6d, 0x03, 0xbf, 0x7d, 0xc5, 0x37, 0xdb, 0xa6, 0x1b, 0x02, 0xcc, 0x69, 0x41, 0x82, 0x9e, + 0x21, 0xb1, 0x4f, 0x83, 0x41, 0x20, 0x77, 0x60, 0x09, 0x0c, 0xb0, 0x66, 0xb5, 0x53, 0xb8, 0x9c, + 0x05, 0x2b, 0x19, 0xb7, 0xf9, 0x0c, 0x9d, 0xc3, 0x45, 0xce, 0x9d, 0x3f, 0x13, 0x88, 0xe6, 0x83, + 0xc2, 0x9f, 0xcd, 0x72, 0xde, 0xae, 0x02, 0xae, 0x02, 0xae, 0x02, 0xae, 0x02, 0xd9, 0xab, 0x80, + 0xfa, 0x1e, 0x0a, 0x0a, 0xc7, 0x16, 0xde, 0xcd, 0xd8, 0x24, 0xa8, 0x00, 0x6b, 0x60, 0x98, 0xf7, + 0x81, 0x7a, 0x68, 0xc5, 0xb7, 0x94, 0x71, 0x39, 0xd8, 0xda, 0x92, 0x3b, 0xb8, 0xbc, 0x86, 0x0e, + 0x06, 0xc1, 0x06, 0xf0, 0x0a, 0xfc, 0xf2, 0xe5, 0xff, 0x9d, 0x5c, 0x10, 0x87, 0x45, 0xf0, 0xec, + 0x77, 0xb4, 0xd0, 0xbf, 0x24, 0x86, 0xfc, 0x34, 0x0d, 0x27, 0x38, 0x8f, 0x29, 0xa4, 0x4e, 0xcd, + 0xd9, 0xf8, 0x48, 0xe2, 0xb9, 0x92, 0x64, 0xd0, 0x59, 0xce, 0xe4, 0x29, 0xfa, 0x95, 0x62, 0xd4, + 0x6c, 0x27, 0xf8, 0xa9, 0xcb, 0x50, 0x99, 0xff, 0xdb, 0xa6, 0xc3, 0xd0, 0xcf, 0x10, 0x25, 0x2f, + 0x21, 0xfa, 0x2e, 0xa8, 0xcb, 0xb0, 0x78, 0xa4, 0xed, 0x64, 0xdd, 0x26, 0x32, 0xfa, 0x67, 0x83, + 0x6f, 0x0d, 0x4a, 0x2f, 0x90, 0xff, 0xe1, 0xb6, 0xe4, 0x98, 0x40, 0xcb, 0xa1, 0x13, 0x12, 0x56, + 0x10, 0x8d, 0xd0, 0xc4, 0x80, 0x6c, 0x0a, 0x71, 0x92, 0x91, 0x0f, 0x3f, 0x27, 0xd9, 0xac, 0xc0, + 0x1b, 0xa1, 0x20, 0xca, 0x34, 0x04, 0xe9, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, + 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXToggle2DIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0xbf, 0x82, 0x4c, + 0xac, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xa7, 0x5a, 0xe9, 0x00, 0x00, + 0x03, 0x33, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, 0x9b, 0x4d, 0x88, 0x4e, 0x61, 0x14, 0xc7, + 0xe7, 0x1a, 0x5f, 0x65, 0xe3, 0x23, 0x8a, 0xed, 0x64, 0x61, 0x22, 0x5f, 0xc9, 0x57, 0xc8, 0x42, + 0x29, 0x0b, 0xe5, 0x63, 0x43, 0xd9, 0x20, 0x11, 0x29, 0x9b, 0xd9, 0xb3, 0xb0, 0xd5, 0xac, 0x24, + 0x42, 0xd9, 0x48, 0xb3, 0xf3, 0x11, 0x0d, 0x09, 0x35, 0x44, 0x61, 0x43, 0xde, 0xb1, 0x20, 0x29, + 0x43, 0xb2, 0x41, 0xa9, 0xe9, 0x7d, 0xfd, 0xce, 0x64, 0xa6, 0x3b, 0x6f, 0xf7, 0x39, 0xe7, 0xbe, + 0xf3, 0xbc, 0xf1, 0xdc, 0x9c, 0x53, 0xff, 0xee, 0xbd, 0xcf, 0xff, 0x39, 0xe7, 0x39, 0xe7, 0x7f, + 0xef, 0x7d, 0x6e, 0xf7, 0xb9, 0xef, 0x9b, 0x75, 0x60, 0x8d, 0x46, 0x63, 0x32, 0x9b, 0x3d, 0x60, + 0x35, 0xf8, 0x09, 0xfa, 0xb3, 0x2c, 0xbb, 0xcd, 0xd6, 0x2d, 0xa0, 0x40, 0x86, 0x68, 0xf3, 0xe0, + 0x6e, 0x81, 0x15, 0x4d, 0x7d, 0xae, 0x70, 0xbc, 0x0f, 0x01, 0x1b, 0x4d, 0xed, 0xe3, 0x0e, 0xf1, + 0x9f, 0x46, 0xc3, 0x32, 0x30, 0x73, 0x1c, 0x91, 0xe6, 0xc1, 0x0f, 0xd2, 0x7a, 0x4e, 0x4d, 0xb2, + 0x8d, 0x33, 0x0a, 0xef, 0x03, 0x21, 0x3b, 0xa6, 0x45, 0xc7, 0xa9, 0x0b, 0xbc, 0x0d, 0x39, 0x27, + 0xda, 0x3e, 0x44, 0x5e, 0x6b, 0xb4, 0xba, 0xca, 0x70, 0x72, 0xc5, 0xd5, 0xe9, 0x98, 0x05, 0x3a, + 0x3f, 0xe3, 0xec, 0xac, 0x0a, 0x70, 0x72, 0x8b, 0xf7, 0xc1, 0xed, 0x08, 0xf1, 0x09, 0xb7, 0xbf, + 0xa4, 0x2e, 0xb9, 0x4b, 0x26, 0x6c, 0x93, 0xf0, 0x0c, 0x89, 0x26, 0x41, 0xbb, 0x8c, 0xc8, 0xdd, + 0x06, 0x9f, 0x2a, 0xbd, 0x88, 0x93, 0xae, 0xd5, 0x6d, 0xe6, 0x2d, 0xc2, 0x0d, 0x2b, 0xbd, 0x5e, + 0x29, 0x9c, 0x50, 0x03, 0x06, 0x9f, 0x2a, 0xfd, 0xd8, 0x9a, 0xbb, 0xad, 0xc4, 0x45, 0xb8, 0x73, + 0x4a, 0xa7, 0x5e, 0x85, 0x13, 0xaa, 0x07, 0xdc, 0x33, 0xfa, 0xa4, 0x46, 0xbf, 0x20, 0xa1, 0x03, + 0xb1, 0x49, 0xc9, 0x1c, 0x37, 0x83, 0x20, 0x97, 0xc1, 0xce, 0x5c, 0x30, 0xb9, 0x0a, 0x4f, 0x72, + 0x56, 0x4e, 0xe5, 0xda, 0x82, 0xbb, 0xc4, 0x98, 0x0d, 0x59, 0x85, 0xa7, 0xea, 0x77, 0x6a, 0xfa, + 0x1c, 0x2c, 0xa4, 0x05, 0x62, 0xec, 0x3e, 0xa7, 0x78, 0x79, 0xd2, 0x08, 0xe4, 0x51, 0x7d, 0x9f, + 0x01, 0x06, 0x5b, 0x88, 0xe3, 0x5d, 0x5d, 0x01, 0x57, 0xc0, 0x15, 0x70, 0x05, 0x5c, 0x01, 0x57, + 0xc0, 0x15, 0x70, 0x05, 0x5c, 0x01, 0x57, 0xc0, 0x15, 0xf8, 0xa3, 0x00, 0x6f, 0x17, 0x53, 0x5d, + 0x8c, 0x92, 0x0a, 0x20, 0x96, 0xbc, 0xcf, 0x1e, 0x05, 0x35, 0x50, 0x07, 0x1f, 0xc0, 0x69, 0x20, + 0x2b, 0xbf, 0xff, 0xad, 0x8d, 0xbd, 0xab, 0x86, 0x14, 0x40, 0x20, 0x59, 0x21, 0x29, 0x5a, 0x09, + 0xbe, 0x43, 0xfb, 0x56, 0x6d, 0x79, 0x06, 0xdf, 0x29, 0xf4, 0x39, 0x02, 0xd6, 0x82, 0x2a, 0x08, + 0xfd, 0x89, 0x3c, 0x2f, 0x51, 0xd3, 0x13, 0xb6, 0x13, 0x37, 0x0a, 0x5f, 0x0a, 0xe4, 0x2a, 0x0b, + 0xd9, 0x6e, 0x2d, 0x3a, 0x4e, 0xd7, 0x42, 0x8e, 0x09, 0xb7, 0x0f, 0x93, 0xdb, 0x3a, 0xad, 0x2e, + 0xe1, 0x64, 0x3d, 0x4e, 0xb3, 0x0d, 0x90, 0xda, 0x55, 0xb9, 0x29, 0xe4, 0xcc, 0xe0, 0xf2, 0x11, + 0x68, 0x57, 0x88, 0x4f, 0xb8, 0xbd, 0x93, 0xdc, 0x0e, 0x59, 0xf9, 0x59, 0xc2, 0x49, 0x10, 0xcd, + 0x34, 0x7f, 0x8d, 0xd3, 0x62, 0xa6, 0xc0, 0x69, 0x17, 0xcb, 0x48, 0x7e, 0x56, 0x71, 0x0f, 0x8d, + 0x2a, 0x1e, 0x85, 0x78, 0xe6, 0x09, 0x99, 0x2f, 0xae, 0x87, 0xf8, 0x84, 0xdb, 0xe5, 0x73, 0xe8, + 0x05, 0x2b, 0x3f, 0x53, 0x59, 0x6e, 0x39, 0x59, 0x5a, 0x3f, 0x58, 0x10, 0xe8, 0x01, 0x6d, 0x9b, + 0x11, 0x48, 0xbe, 0x92, 0x15, 0x1a, 0xbe, 0xd3, 0x21, 0x4e, 0x80, 0x2a, 0x3d, 0x1c, 0xce, 0x53, + 0x93, 0xd4, 0x16, 0x67, 0x14, 0xdf, 0x09, 0x7a, 0xc0, 0x47, 0x20, 0xf6, 0x15, 0xf4, 0x02, 0x59, + 0x72, 0x77, 0x2b, 0xa3, 0x00, 0x62, 0x55, 0xe1, 0xbb, 0x42, 0x99, 0x52, 0xbc, 0x8f, 0x2b, 0xe0, + 0x0a, 0xb8, 0x02, 0xae, 0x80, 0x2b, 0xe0, 0x0a, 0xb8, 0x02, 0xae, 0x80, 0x2b, 0xe0, 0x0a, 0xb4, + 0xa2, 0x80, 0xf9, 0xae, 0x5a, 0x26, 0x18, 0x6f, 0x14, 0x73, 0xe8, 0xb7, 0x11, 0xcc, 0x07, 0xf2, + 0x33, 0xaa, 0x01, 0xde, 0xf7, 0xd4, 0xdf, 0x0e, 0xd3, 0xa7, 0xd2, 0x16, 0x2d, 0x1c, 0xa2, 0xc9, + 0x9a, 0x9b, 0x2c, 0x04, 0xcc, 0xca, 0x29, 0x71, 0x97, 0xfd, 0xbd, 0x88, 0x37, 0x94, 0x6b, 0x2b, + 0xdc, 0xc5, 0x5f, 0x72, 0x98, 0x0b, 0xa2, 0x73, 0x29, 0x1c, 0xa0, 0x7d, 0x8d, 0x75, 0xea, 0xf9, + 0xd2, 0x96, 0x70, 0x14, 0xbd, 0x04, 0xfc, 0x02, 0x45, 0x76, 0xc3, 0x1a, 0x04, 0xa7, 0xc3, 0xe0, + 0x5b, 0x91, 0x73, 0xa2, 0x6d, 0xb2, 0xc0, 0xb1, 0x5f, 0xea, 0x8a, 0x3a, 0xcb, 0x04, 0x09, 0x2d, + 0x39, 0x8d, 0x6a, 0xd6, 0xcd, 0x59, 0x7a, 0x3d, 0x7a, 0x90, 0xdf, 0xe2, 0xbb, 0x92, 0xe3, 0xa7, + 0x20, 0x2a, 0x87, 0x7c, 0xcc, 0xbf, 0xb4, 0x2f, 0xcb, 0x68, 0xcb, 0xad, 0x85, 0x4c, 0x2b, 0x97, + 0xc5, 0x46, 0x07, 0x8d, 0xb7, 0x96, 0xe5, 0x8d, 0xd0, 0xff, 0x8c, 0x16, 0xcd, 0xd6, 0xc7, 0x0a, + 0xf7, 0xce, 0x48, 0xff, 0xbd, 0xc2, 0xd7, 0x14, 0x2e, 0x75, 0x6a, 0x30, 0x56, 0xb8, 0xab, 0x4a, + 0x85, 0x6f, 0xe0, 0xe4, 0x09, 0x5b, 0x68, 0xdc, 0xc2, 0x37, 0x21, 0xe4, 0xdf, 0x3b, 0x55, 0xb3, + 0x8b, 0xe4, 0xde, 0x1f, 0x3d, 0xbf, 0x30, 0x57, 0x9d, 0xa1, 0xf2, 0xe3, 0x4d, 0xd5, 0xcb, 0xd3, + 0x67, 0x1b, 0x03, 0xc8, 0x1c, 0xa6, 0x1a, 0xfe, 0x72, 0x3b, 0x2f, 0x04, 0xd1, 0xb9, 0xa8, 0x03, + 0xc5, 0x93, 0x32, 0xb7, 0xd5, 0xa8, 0x69, 0xe4, 0x2f, 0x0c, 0x6d, 0x49, 0x96, 0xe2, 0xb7, 0x10, + 0x74, 0x3b, 0x58, 0x00, 0xe4, 0x2a, 0x3b, 0xcb, 0x00, 0x6d, 0xf9, 0x75, 0x37, 0xb1, 0xdc, 0x5c, + 0x01, 0x57, 0xa0, 0xe3, 0x37, 0x24, 0xed, 0x51, 0x75, 0x62, 0x2b, 0x68, 0x57, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXToggle3DIcon2x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x00, 0x67, 0x8e, 0xe8, + 0xa6, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x4a, 0x2a, 0x28, 0x00, 0x00, + 0x03, 0xc8, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0xed, 0x99, 0x4b, 0x48, 0x55, 0x41, 0x18, 0xc7, + 0x3b, 0xa2, 0x62, 0x19, 0x16, 0xa6, 0x2d, 0xa4, 0x37, 0x62, 0x21, 0x51, 0x46, 0x90, 0x2d, 0x24, + 0x6a, 0x21, 0x2e, 0x5c, 0x45, 0x6e, 0x22, 0xdb, 0x18, 0xd5, 0x22, 0x03, 0x17, 0xad, 0x2c, 0x7b, + 0x50, 0x41, 0x04, 0xb6, 0xa9, 0x4d, 0x42, 0xf4, 0x2e, 0x89, 0x12, 0x8a, 0x5a, 0x64, 0x44, 0x2f, + 0x7a, 0xd0, 0x93, 0xca, 0x5c, 0x18, 0x24, 0xf4, 0xc2, 0xa4, 0x82, 0xa2, 0x0c, 0x33, 0xbb, 0xfd, + 0x3e, 0x61, 0x8e, 0xc7, 0x61, 0xc6, 0x73, 0xee, 0xbd, 0x73, 0x11, 0xc3, 0x0f, 0x7e, 0xdc, 0x99, + 0x6f, 0xe6, 0xfb, 0xbe, 0xff, 0x99, 0x33, 0x67, 0xee, 0xf1, 0xea, 0x8d, 0x73, 0x6c, 0xb1, 0x58, + 0x6c, 0x0a, 0x29, 0x2b, 0xa1, 0x10, 0x4e, 0x7a, 0x9e, 0xf7, 0xda, 0x71, 0x89, 0xe4, 0xd2, 0x21, + 0x70, 0x02, 0xec, 0x82, 0x1e, 0x50, 0xd6, 0x47, 0x23, 0x3f, 0xb9, 0xcc, 0x8e, 0xa2, 0x11, 0xe2, + 0xc1, 0x1a, 0x78, 0x07, 0x26, 0xab, 0x76, 0x54, 0x2a, 0xf1, 0x34, 0xa8, 0x5a, 0x02, 0xf7, 0x4c, + 0xea, 0xf0, 0xbd, 0x85, 0xd5, 0x89, 0x67, 0x77, 0x10, 0x89, 0x80, 0x02, 0x38, 0x0e, 0x7f, 0x41, + 0x37, 0xb9, 0xf5, 0x3b, 0x61, 0xbc, 0x83, 0x52, 0x89, 0xa5, 0xa0, 0x78, 0x16, 0x6c, 0x85, 0x1f, + 0x60, 0xb2, 0xb3, 0x38, 0xa7, 0x0f, 0x97, 0x9d, 0xf1, 0x0a, 0x38, 0x02, 0x4f, 0xa1, 0x01, 0xdc, + 0x5e, 0x10, 0x09, 0xab, 0xa0, 0x13, 0x4c, 0xf6, 0x04, 0x67, 0x59, 0x88, 0xc0, 0x62, 0xe6, 0xb4, + 0x1a, 0x82, 0xdd, 0x6c, 0x0f, 0x12, 0x97, 0xc0, 0x4d, 0x43, 0x01, 0x71, 0x75, 0xc1, 0x3a, 0x48, + 0xb3, 0x89, 0x64, 0x2c, 0x17, 0x0e, 0xc2, 0x1f, 0xd0, 0xad, 0x1f, 0x47, 0x9d, 0x2d, 0x36, 0x92, + 0x9f, 0x04, 0x53, 0xa1, 0x09, 0x24, 0x99, 0x6e, 0xbd, 0x38, 0xf6, 0x43, 0x8e, 0x2d, 0x19, 0x63, + 0xe9, 0x50, 0x0b, 0x5f, 0xc0, 0x64, 0xb7, 0x70, 0x96, 0xd8, 0xe2, 0x43, 0xfd, 0x04, 0x67, 0xc2, + 0x16, 0xf8, 0x06, 0x26, 0xbb, 0x84, 0x53, 0x0e, 0x73, 0xab, 0x31, 0x5e, 0x0e, 0x6d, 0xa6, 0x60, + 0x7c, 0x9d, 0x50, 0x65, 0x0d, 0x8e, 0x32, 0x40, 0x82, 0x4a, 0xe8, 0x00, 0x93, 0xbd, 0xc2, 0x59, + 0x3e, 0x5c, 0x1e, 0xc6, 0x0b, 0xe1, 0xa2, 0x29, 0x18, 0x9f, 0x3c, 0x80, 0xf2, 0x20, 0x66, 0x85, + 0xe4, 0x98, 0xc6, 0x9c, 0x46, 0x90, 0x7a, 0x72, 0xb1, 0x83, 0xe7, 0x30, 0x9d, 0x0c, 0x38, 0x0d, + 0x26, 0xfb, 0x8a, 0x73, 0x33, 0xa4, 0xdb, 0x0a, 0x30, 0x96, 0x03, 0xb2, 0x15, 0x64, 0x4b, 0xe8, + 0x26, 0x47, 0xd8, 0x09, 0x28, 0xb0, 0xc5, 0x8b, 0x9f, 0xf1, 0x6c, 0xd8, 0x0b, 0xbf, 0x20, 0x68, + 0x12, 0x3f, 0x77, 0x20, 0x96, 0x86, 0x1c, 0x13, 0xba, 0xc9, 0xe6, 0x3f, 0x04, 0xb9, 0xb6, 0x02, + 0x8c, 0xa5, 0x81, 0x3c, 0x4c, 0xf2, 0x50, 0x99, 0xec, 0x01, 0xce, 0x52, 0x5b, 0xbc, 0xf8, 0x19, + 0x97, 0x6f, 0xb6, 0xb5, 0xf0, 0x01, 0x6c, 0xd6, 0x30, 0x90, 0x83, 0x51, 0xfd, 0xa9, 0x7e, 0x88, + 0x6f, 0x7e, 0x48, 0x81, 0x32, 0xe6, 0xc8, 0xb1, 0x64, 0xb2, 0xf7, 0x38, 0xab, 0xc1, 0x0b, 0xc9, + 0x51, 0xca, 0x1c, 0xb9, 0x98, 0x30, 0x6b, 0x52, 0x42, 0x9f, 0x05, 0x66, 0xfe, 0xa4, 0x6d, 0x3d, + 0x84, 0x19, 0x9b, 0x01, 0xcd, 0x81, 0xf9, 0xc1, 0xa6, 0xdc, 0xb6, 0xdd, 0x90, 0x1d, 0x22, 0x50, + 0xbe, 0xd9, 0x64, 0x3b, 0xc8, 0x6d, 0x8d, 0x62, 0xcd, 0x4a, 0xe8, 0x8b, 0xc0, 0xec, 0x76, 0x53, + 0x11, 0xc6, 0x65, 0x1f, 0x6f, 0x83, 0xe0, 0xdb, 0x51, 0x20, 0x2c, 0x76, 0x8e, 0xce, 0x4c, 0x53, + 0xac, 0xf2, 0x31, 0x9e, 0x05, 0xf5, 0x20, 0x0f, 0x56, 0x3c, 0x66, 0x14, 0xda, 0xa6, 0x12, 0xab, + 0x4f, 0x32, 0x4e, 0x84, 0xfb, 0x96, 0xcc, 0x72, 0x37, 0x96, 0xa9, 0xb9, 0xb6, 0x4f, 0xe6, 0xac, + 0x82, 0x4e, 0x48, 0xc4, 0x9a, 0xad, 0xdf, 0x28, 0x5a, 0xc1, 0x1a, 0xfa, 0x4b, 0x35, 0x5f, 0x37, + 0xfd, 0x0d, 0xb0, 0x98, 0x97, 0xe3, 0xdb, 0xda, 0x98, 0xdf, 0x45, 0xd5, 0x42, 0xb8, 0x81, 0xe3, + 0x3c, 0xcc, 0xf2, 0x07, 0xe2, 0x6c, 0x58, 0x8f, 0x1c, 0x2d, 0xcf, 0x02, 0xad, 0x7f, 0x81, 0x7e, + 0x0d, 0x02, 0xbf, 0x6b, 0x7e, 0xbf, 0x8b, 0xb8, 0x3c, 0x3a, 0x7b, 0x60, 0x3d, 0x44, 0x5d, 0x10, + 0x3f, 0x5e, 0x6b, 0x78, 0x51, 0x85, 0xea, 0x0f, 0x47, 0xad, 0x4d, 0x24, 0x02, 0x33, 0x28, 0xb2, + 0x09, 0x76, 0xc0, 0x64, 0xad, 0x60, 0xc2, 0xdd, 0xa8, 0x42, 0xf5, 0x63, 0xe6, 0xb3, 0xa9, 0xa2, + 0xdc, 0x66, 0xfc, 0xa7, 0x60, 0xd8, 0xa3, 0xcd, 0x14, 0x1b, 0xe6, 0x8b, 0x2a, 0x34, 0x2c, 0x8f, + 0x1c, 0xdc, 0x8b, 0x98, 0x74, 0x07, 0xf4, 0xd5, 0x0f, 0x8d, 0x8d, 0x32, 0x21, 0xd9, 0xbd, 0x13, + 0xac, 0xd1, 0x98, 0x2a, 0x91, 0xe4, 0xf5, 0x9c, 0x08, 0x65, 0x35, 0x33, 0x49, 0xb6, 0x1c, 0x52, + 0x66, 0x4e, 0x84, 0xa2, 0x4e, 0xfe, 0x24, 0xd6, 0xf7, 0xb1, 0x53, 0xd1, 0xae, 0x84, 0xca, 0x8a, + 0xa6, 0xd4, 0x5c, 0x09, 0x4d, 0xa9, 0x48, 0x92, 0xbb, 0xd9, 0xa3, 0xa9, 0x56, 0x29, 0xf9, 0x47, + 0xcb, 0x8a, 0x8e, 0x09, 0x75, 0xbd, 0x1b, 0xc6, 0xf6, 0xa8, 0xeb, 0x15, 0xed, 0x1b, 0x2d, 0x0f, + 0x53, 0xb7, 0x12, 0xfa, 0xc6, 0xf5, 0x12, 0x38, 0xce, 0x77, 0x5d, 0x09, 0xbd, 0xea, 0x38, 0xb1, + 0xcb, 0x74, 0xd7, 0x48, 0x76, 0x45, 0x09, 0x6d, 0xa1, 0xa3, 0x56, 0xb5, 0xc7, 0x65, 0x95, 0x24, + 0x73, 0x1d, 0x26, 0x7e, 0x25, 0x2f, 0xe9, 0xfd, 0x03, 0xef, 0xa3, 0x34, 0x3e, 0xf1, 0x06, 0x54, + 0x8c, 0xb3, 0x08, 0x8c, 0x7f, 0x85, 0x26, 0x59, 0x30, 0xde, 0xf0, 0xc7, 0x04, 0xd4, 0xa1, 0xeb, + 0xae, 0x0a, 0xf4, 0x5f, 0x9c, 0x71, 0xf6, 0xe2, 0x7c, 0xa9, 0x06, 0xb4, 0xcf, 0x7e, 0xad, 0x9f, + 0xaa, 0x6e, 0x17, 0x89, 0xeb, 0xe1, 0x18, 0x7a, 0x62, 0xc1, 0x22, 0xea, 0xd6, 0x07, 0x7d, 0xa6, + 0xf6, 0x23, 0x93, 0xd3, 0xa1, 0x4f, 0x16, 0x69, 0x1f, 0x14, 0x21, 0xf0, 0xa8, 0x2e, 0x32, 0x72, + 0x1d, 0xb6, 0xc5, 0x3c, 0x08, 0x9a, 0x7f, 0x27, 0x24, 0x09, 0x03, 0xb3, 0x83, 0x83, 0x71, 0xb6, + 0x5b, 0x98, 0x3f, 0x27, 0xb2, 0x98, 0xb0, 0x89, 0x24, 0xdb, 0x0e, 0x1f, 0xa1, 0x15, 0x86, 0xdc, + 0x09, 0xfa, 0x89, 0x08, 0x7d, 0x4e, 0xdc, 0x8a, 0xb0, 0xba, 0x4e, 0xc7, 0xe3, 0x14, 0xda, 0xcd, + 0xfc, 0x8d, 0x30, 0xe4, 0x62, 0x9d, 0x0a, 0xb2, 0x25, 0xa3, 0x68, 0x3e, 0x84, 0xd9, 0x6f, 0x26, + 0x1c, 0x80, 0x49, 0xb6, 0x3c, 0x29, 0xf7, 0x53, 0x5c, 0x7e, 0xe3, 0xd4, 0x7f, 0x80, 0xc5, 0xe5, + 0xdb, 0x65, 0x5a, 0x72, 0xf4, 0x8d, 0xbc, 0x21, 0xe4, 0x8c, 0x2f, 0x6b, 0xb0, 0xd1, 0x4e, 0xb3, + 0x62, 0xe4, 0xd5, 0x05, 0x14, 0x20, 0x28, 0x0f, 0x64, 0xe5, 0xba, 0x40, 0x7e, 0x18, 0x96, 0xff, + 0x8f, 0x0e, 0x39, 0x1d, 0x02, 0xd3, 0xff, 0xdf, 0xe6, 0x3f, 0x87, 0x98, 0x3c, 0xc9, 0xe6, 0x6a, + 0x0b, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXToggle3DIcon3x[] = { + + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x48, 0x08, 0x06, 0x00, 0x00, 0x00, 0x41, 0x78, 0x2d, + 0xa6, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, + 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xa0, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xa0, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3f, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x17, 0xf4, 0xd7, 0x00, 0x00, + 0x05, 0xdb, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0x6b, 0x88, 0x55, 0x55, 0x14, 0xc7, + 0xe7, 0xaa, 0x4d, 0x0f, 0xad, 0xc8, 0xc0, 0x40, 0x8b, 0xc8, 0x9a, 0x84, 0x94, 0x6a, 0xb4, 0x82, + 0x0c, 0x7a, 0x9a, 0x45, 0x61, 0xfa, 0x41, 0xac, 0xc0, 0x40, 0x89, 0x04, 0x7b, 0x88, 0x69, 0x85, + 0x86, 0x0a, 0x12, 0x98, 0x1f, 0xb4, 0xec, 0x21, 0x41, 0xd6, 0x87, 0x1e, 0x16, 0x15, 0x22, 0x96, + 0x54, 0x16, 0x95, 0xd4, 0x60, 0x94, 0x20, 0x41, 0x25, 0x43, 0x06, 0x62, 0x08, 0x9a, 0x4c, 0x96, + 0xe2, 0xa3, 0xb2, 0x71, 0xfa, 0xfd, 0xc7, 0xee, 0x78, 0xef, 0x3d, 0x8f, 0xbd, 0xf7, 0x79, 0xec, + 0x73, 0x9a, 0x99, 0x05, 0x3f, 0xe6, 0x9c, 0xbd, 0xd7, 0x5e, 0x6b, 0xfd, 0xef, 0xde, 0xe7, 0x71, + 0xef, 0x39, 0x53, 0x69, 0x2a, 0xd0, 0xba, 0xba, 0xba, 0x4e, 0x23, 0xfd, 0x0d, 0x30, 0x02, 0xda, + 0x2b, 0x95, 0xca, 0x96, 0x02, 0xcb, 0xf1, 0x93, 0x5a, 0xa2, 0x61, 0x01, 0xec, 0x83, 0x5a, 0x7b, + 0x9f, 0x9d, 0x81, 0x7e, 0xaa, 0x28, 0x20, 0x0b, 0xe2, 0xa6, 0xc2, 0x4e, 0x88, 0xb2, 0xd9, 0x05, + 0x94, 0x95, 0x6f, 0x4a, 0x94, 0x5e, 0x09, 0x9b, 0xa3, 0x14, 0xd7, 0xb4, 0xbf, 0x93, 0x6f, 0x25, + 0x1e, 0xa3, 0x23, 0x6a, 0x18, 0xbc, 0x0c, 0x9d, 0x35, 0x02, 0xa3, 0x36, 0x7f, 0xa2, 0xe3, 0x36, + 0x8f, 0xe5, 0xe5, 0x93, 0x0a, 0x11, 0xcd, 0x30, 0x1f, 0x0e, 0x80, 0xc9, 0xe4, 0xf3, 0x18, 0x9c, + 0x92, 0x4f, 0x35, 0x1e, 0xa3, 0x22, 0x62, 0x12, 0x68, 0x16, 0x4d, 0xa6, 0xd5, 0xb0, 0x06, 0x86, + 0x79, 0x2c, 0x2f, 0x9f, 0x54, 0x88, 0x18, 0x0d, 0x9f, 0x80, 0x8d, 0x7d, 0x89, 0x53, 0xab, 0x6b, + 0x25, 0x8c, 0x69, 0x81, 0x3b, 0x61, 0x2c, 0x14, 0x7f, 0x65, 0xa0, 0x88, 0xa1, 0xf0, 0x02, 0xfc, + 0x03, 0x26, 0xdb, 0x85, 0xc3, 0xb4, 0x04, 0xa2, 0x27, 0x33, 0xee, 0x9b, 0x86, 0xe0, 0x5b, 0xd9, + 0x1f, 0xee, 0x1a, 0x2b, 0x13, 0x7f, 0x12, 0x0f, 0x82, 0x47, 0x60, 0x3f, 0x98, 0xec, 0x30, 0x0e, + 0x4b, 0xe0, 0x74, 0x97, 0xe4, 0xf8, 0x8f, 0x81, 0x4f, 0x21, 0xca, 0xde, 0x76, 0x89, 0x97, 0x89, + 0x2f, 0x95, 0x4c, 0x84, 0x1f, 0xa3, 0x2a, 0x6a, 0x68, 0x5f, 0xcb, 0xfe, 0xf9, 0x2e, 0x89, 0xf1, + 0x3f, 0x17, 0x56, 0x83, 0x69, 0x35, 0xed, 0x77, 0x89, 0x9b, 0xca, 0x97, 0x62, 0x2e, 0x85, 0x0f, + 0xc0, 0xc6, 0xb4, 0x2c, 0xc7, 0xbb, 0x24, 0xc4, 0x5f, 0xab, 0x69, 0x0e, 0xd8, 0xac, 0xa6, 0xbf, + 0xf1, 0x5b, 0x01, 0x15, 0x97, 0x1c, 0xce, 0xbe, 0x24, 0x38, 0x1b, 0x56, 0x82, 0x12, 0x9a, 0x6c, + 0x0f, 0x0e, 0x33, 0xc1, 0xa9, 0x28, 0xfc, 0x5d, 0x56, 0x93, 0x26, 0xa0, 0xc5, 0x59, 0x88, 0xcb, + 0x00, 0x12, 0x0c, 0x80, 0x59, 0xd0, 0x78, 0x1f, 0x4e, 0x53, 0xc0, 0xfe, 0xa4, 0x65, 0x39, 0x9c, + 0xe9, 0x98, 0x43, 0x67, 0x70, 0xdb, 0xd5, 0xb4, 0x1d, 0xdf, 0xfc, 0x6f, 0x84, 0x48, 0x72, 0x23, + 0x7c, 0x07, 0x36, 0xb6, 0x1e, 0xa7, 0x8b, 0x1d, 0x45, 0x6b, 0x35, 0x69, 0xd9, 0xda, 0xac, 0x26, + 0x1d, 0x06, 0x3a, 0xb9, 0x0e, 0x72, 0xc9, 0xe1, 0xec, 0x4b, 0x82, 0x8b, 0x60, 0x1d, 0xd8, 0xd8, + 0xf7, 0x38, 0xdd, 0xe2, 0x92, 0x04, 0x7f, 0xad, 0xa6, 0x07, 0xe0, 0x57, 0x30, 0x99, 0x4e, 0x78, + 0x2f, 0xc2, 0x50, 0x97, 0x1c, 0xf2, 0x65, 0xcc, 0x10, 0x98, 0x0b, 0x1b, 0xa1, 0x1d, 0x34, 0x41, + 0x13, 0x43, 0xe3, 0xd0, 0xa1, 0x93, 0xcd, 0x42, 0x38, 0x0a, 0x26, 0xeb, 0xc0, 0xe1, 0x21, 0x70, + 0xba, 0xd1, 0xc0, 0xff, 0x7a, 0xd8, 0x06, 0x36, 0xa6, 0x4b, 0xdc, 0x98, 0xd0, 0x62, 0x63, 0x1a, + 0x19, 0x73, 0x06, 0xe8, 0xb2, 0xfa, 0x3b, 0x34, 0xda, 0x31, 0x1a, 0xa6, 0xd4, 0x0d, 0xa7, 0x41, + 0x9f, 0xd2, 0x96, 0x46, 0xcf, 0x90, 0x7d, 0x0d, 0x7e, 0x1e, 0xce, 0xa9, 0x0b, 0x60, 0xd8, 0xc1, + 0xff, 0x42, 0x78, 0x17, 0x6c, 0x6c, 0x07, 0x4e, 0x93, 0x0d, 0x21, 0x43, 0xbb, 0x19, 0x77, 0x0f, + 0xfc, 0x62, 0x48, 0xf2, 0x43, 0xdd, 0x60, 0x9c, 0xdf, 0x34, 0x0c, 0x50, 0xf7, 0x26, 0xb8, 0xac, + 0x6e, 0xa0, 0x61, 0x07, 0xff, 0xc1, 0xf0, 0x14, 0xd8, 0xac, 0x26, 0x7d, 0xc1, 0x79, 0x1c, 0x9a, + 0x0d, 0x61, 0x03, 0xdd, 0x8c, 0x19, 0x07, 0x6d, 0x60, 0x6b, 0x63, 0xbb, 0x83, 0xe0, 0xad, 0x65, + 0x72, 0x24, 0x66, 0x94, 0x66, 0x62, 0x52, 0x20, 0x63, 0x4c, 0x03, 0xfe, 0x15, 0x98, 0x0e, 0xbb, + 0xc1, 0x64, 0xfa, 0x82, 0xf3, 0x0a, 0x9c, 0x17, 0x13, 0x32, 0xb4, 0x4b, 0x63, 0xe0, 0x55, 0x38, + 0x0e, 0x2e, 0x36, 0xb5, 0x3b, 0x20, 0x23, 0x46, 0xc5, 0x8c, 0x7a, 0x9a, 0x3e, 0xa7, 0x99, 0xc0, + 0xff, 0x1a, 0xf8, 0x3a, 0x26, 0x66, 0x6d, 0xd7, 0x57, 0xec, 0x9c, 0x98, 0x85, 0x50, 0x79, 0xe1, + 0x8d, 0x8c, 0x69, 0x86, 0x27, 0xe0, 0x20, 0x24, 0xb1, 0x39, 0x55, 0xf1, 0x57, 0x45, 0x8c, 0x7e, + 0x26, 0x3c, 0x75, 0x78, 0x2b, 0x31, 0x86, 0xc3, 0x6b, 0x60, 0x33, 0x0b, 0xbb, 0xf0, 0xbb, 0x3b, + 0x3c, 0x52, 0x7c, 0x2b, 0xe3, 0xee, 0x02, 0xad, 0xc6, 0x34, 0xb6, 0xa8, 0x7a, 0xcd, 0x3c, 0x35, + 0x22, 0x5d, 0x5b, 0x44, 0x7b, 0x5d, 0x33, 0x15, 0xe8, 0x57, 0xd8, 0x79, 0xf0, 0x24, 0x0c, 0xae, + 0xeb, 0x0c, 0xee, 0x1c, 0xa1, 0x69, 0x39, 0xac, 0xe0, 0xd7, 0xda, 0xa3, 0xc1, 0xee, 0xe8, 0x16, + 0xf2, 0x8c, 0xa6, 0xf7, 0x59, 0xb8, 0x35, 0xda, 0xcb, 0xbe, 0xa7, 0x2a, 0x3e, 0x6a, 0x44, 0x47, + 0x54, 0x47, 0xb5, 0x9d, 0x82, 0x6e, 0x62, 0x7b, 0x0d, 0xd8, 0xdc, 0xe0, 0xac, 0xc5, 0x6f, 0x01, + 0xa2, 0x77, 0x57, 0xc7, 0xdb, 0xfc, 0x25, 0x87, 0xae, 0xf1, 0x4b, 0x41, 0x3f, 0x6e, 0x3a, 0x5d, + 0x5a, 0xe3, 0xe2, 0x0f, 0x88, 0xeb, 0x34, 0xf5, 0x51, 0x94, 0x0a, 0xfa, 0x1c, 0x4c, 0xc2, 0xb7, + 0xe2, 0x33, 0x1e, 0xd1, 0xd3, 0x5d, 0x84, 0x13, 0x5f, 0xf7, 0x1d, 0x0f, 0x33, 0x76, 0x07, 0xe8, + 0x6f, 0x66, 0xc2, 0x89, 0xd5, 0x64, 0x9a, 0x79, 0xf9, 0x84, 0x1a, 0x45, 0xdd, 0x4b, 0xc7, 0x92, + 0xd0, 0xce, 0x93, 0x8d, 0x7b, 0xd8, 0x5c, 0x08, 0xaf, 0x23, 0xba, 0xeb, 0x64, 0xb3, 0x79, 0x8b, + 0xf8, 0x13, 0xf0, 0x5a, 0x05, 0x5a, 0xea, 0x79, 0x58, 0x25, 0xb1, 0x78, 0xaa, 0x99, 0x19, 0x53, + 0xd1, 0x5f, 0xf4, 0xe9, 0x64, 0xb9, 0x0c, 0xd1, 0x87, 0x62, 0xfc, 0x02, 0x5d, 0x88, 0xd6, 0x2a, + 0x5a, 0x09, 0x89, 0x6e, 0x72, 0x02, 0x01, 0x63, 0x1a, 0xd2, 0x88, 0x8f, 0xba, 0xed, 0xdc, 0x44, + 0xbe, 0xd9, 0x88, 0xde, 0x19, 0x93, 0x37, 0xd0, 0x85, 0x68, 0x7d, 0x13, 0x5c, 0x04, 0x73, 0xc1, + 0xe9, 0xd2, 0x1a, 0x08, 0x66, 0xd9, 0x90, 0x46, 0x7c, 0xd8, 0xd7, 0xd6, 0x6f, 0xc9, 0x7b, 0x07, + 0xc2, 0x8f, 0x5b, 0xe6, 0xd7, 0x97, 0x0f, 0x9d, 0x77, 0x66, 0xc0, 0x32, 0x70, 0xbe, 0xc9, 0x61, + 0x4c, 0x62, 0x4b, 0x23, 0x3e, 0xec, 0xb7, 0xb8, 0x36, 0x47, 0xe1, 0xd7, 0x51, 0xf9, 0x73, 0x30, + 0x2e, 0xb1, 0x82, 0xe4, 0x03, 0x53, 0x1d, 0xf3, 0x61, 0x69, 0x75, 0xac, 0x1b, 0x8d, 0xd9, 0x1e, + 0x82, 0x93, 0x4e, 0x66, 0xf7, 0x1b, 0x9d, 0x73, 0x74, 0x48, 0x33, 0xf3, 0x89, 0xca, 0x42, 0xf8, + 0x28, 0x06, 0x7e, 0x08, 0x23, 0x13, 0x05, 0xc8, 0x70, 0x50, 0xaa, 0xeb, 0xbc, 0x6b, 0x1d, 0x08, + 0xd7, 0xcd, 0xca, 0x46, 0x28, 0x5c, 0xb8, 0x6a, 0xf7, 0x2a, 0x9e, 0x7c, 0xf3, 0xe1, 0x12, 0x25, + 0x2e, 0x81, 0x55, 0x7c, 0x8b, 0xbf, 0xaf, 0x04, 0xa2, 0x7b, 0x4a, 0xf0, 0x26, 0x9e, 0x25, 0x7f, + 0x16, 0x59, 0x2f, 0xe8, 0xc9, 0x5c, 0x82, 0x0d, 0x6f, 0xe2, 0xd1, 0x5a, 0xba, 0x27, 0xb1, 0x3e, + 0xc5, 0x87, 0xdd, 0x14, 0x15, 0x39, 0xff, 0xde, 0x8f, 0xf9, 0x22, 0xc5, 0x06, 0x72, 0xfb, 0x9c, + 0xf9, 0x40, 0xf2, 0xa2, 0x1b, 0xfa, 0xc5, 0x17, 0x3d, 0x03, 0x05, 0xe5, 0xef, 0x3f, 0xe6, 0x0b, + 0xfa, 0xe0, 0x8b, 0x4f, 0xdb, 0x7f, 0xcc, 0x17, 0x3f, 0x07, 0x85, 0x54, 0xd0, 0x7f, 0xcc, 0x17, + 0xf2, 0xb1, 0x97, 0x21, 0x69, 0x5f, 0x3e, 0xe6, 0x3b, 0xfb, 0xb2, 0xf8, 0xdf, 0xfa, 0xb2, 0xf8, + 0xbd, 0x55, 0xf1, 0x07, 0xca, 0x70, 0x0c, 0x7a, 0xac, 0xe1, 0x18, 0xb9, 0xbe, 0xa8, 0x8a, 0x77, + 0x7a, 0xc0, 0xe0, 0xb1, 0xc8, 0xbc, 0x52, 0xad, 0xe3, 0x27, 0xf6, 0x13, 0xcb, 0x9e, 0x8d, 0xc3, + 0x64, 0xd9, 0x9c, 0x57, 0xa6, 0x92, 0xc5, 0x6d, 0xa7, 0x1e, 0x3d, 0xed, 0xad, 0xfb, 0x01, 0x73, + 0x31, 0xfb, 0x56, 0xbf, 0xbb, 0x6b, 0xe0, 0xff, 0xd4, 0xf4, 0x28, 0xed, 0x66, 0x26, 0xfb, 0x0f, + 0xd5, 0x5f, 0x5d, 0xf6, 0x4d, 0x34, 0xb4, 0xb1, 0x3f, 0x01, 0xd6, 0x83, 0xde, 0x56, 0xd2, 0x33, + 0xf7, 0xed, 0xd0, 0x1b, 0xac, 0x03, 0x11, 0xb3, 0xd0, 0x78, 0x3b, 0xe8, 0xc9, 0x71, 0xb7, 0xd5, + 0x3d, 0xb4, 0xf8, 0xef, 0x03, 0xd0, 0x87, 0xd0, 0x5b, 0x4c, 0x27, 0xb6, 0xd5, 0xb0, 0x14, 0x6d, + 0xdd, 0xb3, 0x5d, 0x2b, 0xac, 0x4e, 0x7c, 0x6d, 0x47, 0x2f, 0xd8, 0xfe, 0x08, 0x0d, 0xf3, 0x10, + 0xad, 0x63, 0x3c, 0xd4, 0x7a, 0x96, 0x7d, 0x68, 0x6f, 0x7c, 0xe3, 0xc1, 0xf8, 0xee, 0xc2, 0x7a, + 0x25, 0x56, 0x4f, 0x8a, 0x45, 0xa4, 0x70, 0x55, 0x97, 0x46, 0x7c, 0xd9, 0x2e, 0x8f, 0x5a, 0xd6, + 0x8f, 0xc2, 0xe5, 0x88, 0xd6, 0xac, 0x1b, 0x2d, 0x8d, 0xf8, 0x8f, 0x8d, 0xd1, 0xfd, 0x38, 0x74, + 0x92, 0xe6, 0x25, 0x68, 0x41, 0xf4, 0x2a, 0xd0, 0x71, 0x6e, 0x65, 0x69, 0xc4, 0xeb, 0x11, 0xf3, + 0x3e, 0xab, 0x2c, 0xf9, 0x39, 0x7d, 0x46, 0xe8, 0x56, 0x04, 0x3f, 0x08, 0x3a, 0xa3, 0xfb, 0x33, + 0x1e, 0x41, 0x8d, 0x84, 0x0d, 0xa0, 0x57, 0x4c, 0xdf, 0x83, 0x6b, 0xa3, 0xb2, 0xd3, 0xd7, 0x0a, + 0x59, 0xd9, 0xcf, 0x04, 0x9a, 0x12, 0x95, 0xab, 0x74, 0xed, 0x14, 0x9b, 0x85, 0x78, 0xbd, 0x6a, + 0xaa, 0x57, 0x4e, 0xbd, 0xbc, 0xb3, 0x93, 0xd9, 0x87, 0x48, 0xc1, 0x57, 0x40, 0x52, 0xd3, 0x8b, + 0xc9, 0x7a, 0xb9, 0xd8, 0xeb, 0x3b, 0x3b, 0x59, 0x8a, 0xd7, 0x7b, 0xb9, 0x49, 0x2c, 0xd1, 0x8b, + 0xc9, 0x99, 0x15, 0x9e, 0x45, 0x20, 0x54, 0x0f, 0x04, 0xcd, 0xa0, 0xad, 0xe9, 0xc5, 0xe4, 0x69, + 0x59, 0xe4, 0x2e, 0x45, 0x0c, 0xc4, 0xd8, 0xbc, 0x86, 0x7e, 0x08, 0xbf, 0xc5, 0x10, 0xf6, 0xb6, + 0x57, 0x29, 0x74, 0x24, 0x2a, 0x02, 0x41, 0x33, 0x20, 0xca, 0xf4, 0x9a, 0xfa, 0x1b, 0x30, 0x22, + 0x51, 0xf0, 0xb2, 0x0f, 0x42, 0x98, 0xfe, 0xfb, 0x42, 0xff, 0x22, 0x5a, 0x6b, 0xfa, 0x9f, 0x9d, + 0xb7, 0xa0, 0xd5, 0x77, 0xfd, 0x15, 0xdf, 0x09, 0x95, 0x0f, 0xa1, 0x7a, 0x99, 0xf8, 0x6a, 0xd8, + 0x0b, 0xdb, 0xb8, 0x41, 0x29, 0xfa, 0x66, 0x89, 0x32, 0xfa, 0x98, 0xfd, 0x0b, 0x55, 0xca, 0x1e, + 0xf8, 0x6a, 0x59, 0xc9, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, + 0x82 +}; + +static const u_int8_t FLEXRangeSliderLeftHandle2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x50, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x1d, 0x56, + 0xa7, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x02, 0x01, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x87, + 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0xa0, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x7d, 0xa9, + 0x20, 0x00, 0x00, 0x01, 0x59, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, + 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, + 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, + 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, + 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x0a, 0x4c, 0xc2, 0x27, 0x59, 0x00, 0x00, 0x05, 0xdc, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, + 0xed, 0x9b, 0xbf, 0x4b, 0x64, 0x57, 0x14, 0xc7, 0x57, 0x67, 0xc6, 0xf9, 0xa1, 0x93, 0x15, 0xc6, + 0x8c, 0x1b, 0x62, 0x58, 0x90, 0x14, 0x59, 0x48, 0x0a, 0x2d, 0x22, 0x08, 0x01, 0x21, 0x76, 0x0a, + 0x81, 0x84, 0x80, 0xff, 0x40, 0xfe, 0x01, 0x6d, 0xad, 0x6c, 0x83, 0x18, 0xb0, 0x4c, 0xb0, 0xd9, + 0x40, 0x8a, 0x14, 0x82, 0xa9, 0x84, 0x04, 0x41, 0x48, 0x2c, 0xc4, 0xc2, 0x22, 0x5b, 0x98, 0x42, + 0x2c, 0x8c, 0x18, 0x2d, 0x74, 0x57, 0x9c, 0xd1, 0x71, 0xc6, 0xdc, 0xef, 0xb8, 0x5f, 0x39, 0x39, + 0xb9, 0xef, 0xd7, 0x38, 0xf3, 0xbc, 0xee, 0xce, 0x85, 0xeb, 0x39, 0xf7, 0xdc, 0x73, 0xcf, 0x39, + 0x9f, 0x77, 0x9e, 0x6f, 0x5c, 0xde, 0xec, 0xa3, 0x47, 0x6f, 0xd8, 0xe8, 0x68, 0x01, 0x4f, 0x2b, + 0x62, 0x86, 0x2e, 0xb3, 0x19, 0xc9, 0x1b, 0x8d, 0xd1, 0xe8, 0x39, 0xc2, 0x5d, 0x53, 0x91, 0xb2, + 0xd1, 0xa0, 0x61, 0xce, 0x85, 0xf1, 0x91, 0xb5, 0x34, 0x45, 0x8f, 0x9a, 0x34, 0xc8, 0xdf, 0xb6, + 0x6f, 0xb3, 0xe9, 0xe2, 0xc3, 0xf8, 0xf0, 0x8c, 0xb5, 0x33, 0xaf, 0x37, 0xaf, 0xa3, 0x04, 0xf2, + 0xf2, 0xd5, 0x76, 0xb9, 0x4e, 0x9a, 0x44, 0x98, 0xb0, 0x61, 0x26, 0xcc, 0x6c, 0xf6, 0x90, 0x80, + 0x52, 0xf7, 0xcd, 0xc3, 0x82, 0xb4, 0xec, 0x34, 0xa7, 0x38, 0x51, 0x2c, 0x66, 0xca, 0xcc, 0xee, + 0xd1, 0xd1, 0xd1, 0xe2, 0xf6, 0xf6, 0xf6, 0x57, 0x27, 0x27, 0x27, 0xdf, 0x97, 0x4a, 0xa5, 0xf5, + 0xcb, 0xcb, 0xcb, 0xbf, 0x6a, 0xb5, 0xda, 0xab, 0xeb, 0x16, 0x0f, 0x93, 0x3b, 0x70, 0x68, 0x08, + 0xac, 0x09, 0x01, 0x29, 0x41, 0xf2, 0x8b, 0x8b, 0x8b, 0x1f, 0x19, 0x88, 0x1f, 0xaa, 0xd5, 0xea, + 0xcb, 0x16, 0xd7, 0x6e, 0x0d, 0x1f, 0x44, 0xe3, 0x07, 0x43, 0x10, 0xdc, 0x52, 0x99, 0xb1, 0xb1, + 0xb1, 0x27, 0x87, 0x87, 0x87, 0xdf, 0x9a, 0x2e, 0x9c, 0x59, 0x33, 0xc5, 0x64, 0xf4, 0x03, 0x0a, + 0x82, 0xe1, 0xef, 0x47, 0xf7, 0xc2, 0xc2, 0xc2, 0xb3, 0xf3, 0xf3, 0xf3, 0xcd, 0x98, 0x6a, 0xf6, + 0x4d, 0xe3, 0x05, 0x14, 0x06, 0x06, 0xbf, 0x2b, 0xf9, 0xe5, 0xe5, 0xe5, 0xb1, 0x4a, 0xa5, 0xb2, + 0xef, 0x9b, 0x25, 0xc6, 0x4d, 0x1b, 0x50, 0x58, 0x98, 0xdc, 0xdc, 0xdc, 0xdc, 0x27, 0x17, 0x17, + 0x17, 0x7f, 0xc7, 0x58, 0x6f, 0x60, 0xaa, 0x30, 0x40, 0x7c, 0x00, 0xe0, 0x77, 0x06, 0xb7, 0x19, + 0x3a, 0x93, 0x1d, 0x1a, 0x1a, 0x7a, 0x7a, 0x76, 0x76, 0xb6, 0x15, 0x98, 0x21, 0x66, 0x07, 0x0d, + 0xa4, 0xbb, 0x63, 0x83, 0x49, 0x9b, 0x43, 0x7d, 0x7b, 0x7b, 0x7b, 0xdf, 0xc5, 0x5c, 0x6b, 0xa8, + 0x74, 0x28, 0x38, 0x68, 0x68, 0xc8, 0xae, 0x99, 0x99, 0x99, 0xa7, 0x03, 0x03, 0x03, 0xdf, 0x04, + 0x1d, 0x74, 0x61, 0x5f, 0x16, 0xaf, 0xbb, 0xd3, 0x65, 0x0a, 0xcc, 0x9a, 0xf9, 0x64, 0x7f, 0x7f, + 0xff, 0xc7, 0x50, 0x97, 0xeb, 0x1e, 0x9c, 0x64, 0x87, 0x00, 0xa3, 0x87, 0x04, 0x84, 0x9e, 0x1c, + 0x1c, 0x1c, 0x7c, 0xa7, 0xbf, 0xbf, 0xff, 0x0b, 0xed, 0xe8, 0xca, 0x5a, 0x02, 0xc9, 0x9a, 0x24, + 0x1c, 0xa1, 0xe0, 0x9b, 0x99, 0x9f, 0x9f, 0xff, 0x2c, 0x91, 0x48, 0xf4, 0x48, 0x67, 0x97, 0x74, + 0x2f, 0x20, 0xd4, 0x48, 0x10, 0xea, 0x78, 0xca, 0xe1, 0xe9, 0xf6, 0x39, 0x0c, 0xae, 0x0e, 0x1b, + 0x90, 0xad, 0x3b, 0xb0, 0x01, 0x28, 0x9d, 0xcf, 0xe7, 0x3f, 0x74, 0x15, 0x06, 0x75, 0x11, 0x48, + 0x42, 0xc0, 0xae, 0xbb, 0x03, 0xbf, 0xfa, 0xe7, 0x50, 0x26, 0x93, 0x29, 0xc2, 0xc1, 0xd5, 0x41, + 0x20, 0xaf, 0xfa, 0x08, 0xc6, 0x0e, 0xa5, 0xd2, 0xe9, 0xf4, 0xbb, 0x5e, 0xce, 0x2e, 0xd8, 0x35, + 0x90, 0xec, 0x94, 0xd6, 0xeb, 0x5d, 0x32, 0x0f, 0x84, 0x9c, 0x0b, 0x85, 0x7b, 0xd5, 0xa0, 0x81, + 0xe8, 0x47, 0x18, 0x48, 0x4c, 0xf8, 0x71, 0xd2, 0xc7, 0x49, 0x69, 0x03, 0x22, 0x0c, 0x0b, 0xe6, + 0x1a, 0xbe, 0xd4, 0xb9, 0xe7, 0x9c, 0xb4, 0x01, 0xb1, 0x48, 0x14, 0x4f, 0x00, 0xea, 0x5c, 0xd3, + 0xc7, 0x39, 0xe9, 0x07, 0xc4, 0x62, 0x9d, 0x87, 0x60, 0xa1, 0x90, 0x5e, 0x40, 0x1a, 0xe2, 0x8d, + 0xe8, 0x10, 0x21, 0xe4, 0x05, 0x70, 0x5e, 0xf7, 0xea, 0x90, 0x2c, 0x5c, 0x77, 0x4b, 0xee, 0x39, + 0xa7, 0x87, 0x01, 0x42, 0xd1, 0x84, 0xa2, 0x74, 0x0e, 0x84, 0x05, 0x49, 0xa0, 0xa0, 0x62, 0x83, + 0xf6, 0x19, 0xf3, 0x5e, 0xa5, 0x04, 0x62, 0x21, 0x0f, 0xa2, 0x70, 0x16, 0xab, 0xa5, 0x0d, 0x48, + 0xfb, 0x3c, 0xa8, 0x75, 0x1b, 0xc8, 0xf5, 0x76, 0xb5, 0x3b, 0xd4, 0xee, 0x50, 0xcc, 0x57, 0xa0, + 0x7d, 0xcb, 0xc5, 0x7c, 0xc1, 0x23, 0xa7, 0x6b, 0x77, 0x28, 0xf2, 0x25, 0x8b, 0xf9, 0x40, 0xbb, + 0x43, 0x31, 0x5f, 0xf0, 0xc8, 0xe9, 0xda, 0x1d, 0x32, 0xaf, 0xeb, 0xcf, 0x23, 0x5f, 0xb6, 0x18, + 0x0f, 0x44, 0xed, 0xd0, 0x75, 0xb9, 0x5c, 0x3e, 0x8e, 0xb1, 0xbe, 0xc8, 0xa9, 0x6c, 0x40, 0x5e, + 0x5f, 0x2f, 0x81, 0xbd, 0x66, 0x5e, 0xdf, 0x3f, 0x18, 0x20, 0x2f, 0x10, 0x5c, 0xa5, 0x3a, 0x0c, + 0x80, 0x8e, 0x8f, 0x8f, 0xf7, 0x60, 0x70, 0x75, 0xd8, 0x3a, 0x64, 0xab, 0x15, 0x40, 0x98, 0x57, + 0x6b, 0x6b, 0x6b, 0x7f, 0xd8, 0x1c, 0x5c, 0xb1, 0xf1, 0x9f, 0xdb, 0x52, 0x42, 0x07, 0xa8, 0x9c, + 0x78, 0x9d, 0x8f, 0xf7, 0xab, 0xbd, 0x7d, 0x7d, 0x7d, 0xef, 0x1d, 0x1c, 0x1c, 0xfc, 0x92, 0x4c, + 0x26, 0xbb, 0xcd, 0xda, 0xb9, 0xe1, 0xd7, 0x21, 0x76, 0x05, 0x45, 0xf3, 0x96, 0xbb, 0x32, 0xb7, + 0x5c, 0x79, 0x67, 0x67, 0xe7, 0x57, 0xe7, 0x48, 0x5e, 0x17, 0xe4, 0x05, 0x04, 0x00, 0x39, 0xb0, + 0xae, 0x9a, 0x59, 0x31, 0xb3, 0x34, 0x3d, 0x3d, 0xfd, 0xdc, 0x3c, 0xbe, 0x4b, 0xd2, 0xc1, 0x15, + 0xdd, 0x0b, 0x48, 0xd6, 0x47, 0xb8, 0x9a, 0x31, 0x5e, 0x99, 0x59, 0x59, 0x5d, 0x5d, 0xfd, 0x67, + 0x6b, 0x6b, 0xeb, 0x67, 0xe9, 0xe4, 0x8a, 0xee, 0x07, 0x04, 0x10, 0xc2, 0x40, 0x02, 0x08, 0x1d, + 0x2a, 0x9b, 0x59, 0x9a, 0x9c, 0x9c, 0xfc, 0xc9, 0xdc, 0x7e, 0x2f, 0x8c, 0xee, 0xd4, 0xb0, 0x01, + 0x11, 0x82, 0x85, 0x72, 0x0d, 0x89, 0xdb, 0xee, 0xd2, 0xcc, 0xd2, 0xd1, 0xd1, 0xd1, 0xcb, 0xa9, + 0xa9, 0xa9, 0x39, 0xf3, 0xb9, 0x74, 0x44, 0x47, 0x17, 0x24, 0x5e, 0x04, 0x63, 0xc8, 0xa7, 0xdc, + 0x8d, 0xe5, 0xbf, 0x36, 0xec, 0x4b, 0x1f, 0xe8, 0x89, 0xdd, 0xdd, 0xdd, 0xca, 0xe9, 0xe9, 0xe9, + 0x9f, 0xe6, 0xcb, 0x7f, 0x9f, 0xa6, 0x52, 0x29, 0x27, 0x9e, 0x7a, 0x1a, 0x08, 0x30, 0xb6, 0xe2, + 0x69, 0xd3, 0x50, 0x1d, 0x9b, 0x9b, 0x9b, 0xaf, 0x36, 0x36, 0x36, 0x7e, 0x9f, 0x98, 0x98, 0x78, + 0x96, 0xcb, 0xe5, 0xee, 0xfd, 0x85, 0xb2, 0x2c, 0x10, 0x30, 0x18, 0xb2, 0x78, 0xe8, 0xb8, 0x2d, + 0x39, 0x71, 0x01, 0xea, 0xaf, 0xf7, 0x8d, 0xc4, 0xe7, 0x52, 0xde, 0x4c, 0x74, 0x26, 0x57, 0x28, + 0x14, 0x1e, 0xaf, 0xac, 0xac, 0x7c, 0x3d, 0x32, 0x32, 0xf2, 0xa5, 0x79, 0xb1, 0x8c, 0xbd, 0x7b, + 0x19, 0xec, 0x10, 0x92, 0x7b, 0xc1, 0x71, 0x8f, 0xa0, 0x2c, 0x14, 0x0f, 0x09, 0x8e, 0x0e, 0xf3, + 0xcd, 0xdf, 0xea, 0xd2, 0xd2, 0xd2, 0x8b, 0xf5, 0xf5, 0xf5, 0xdf, 0x86, 0x87, 0x87, 0xbb, 0x0c, + 0xe0, 0xfb, 0x9d, 0x9d, 0x9d, 0xf8, 0xc2, 0x53, 0xac, 0x83, 0x10, 0x48, 0xaa, 0x75, 0x02, 0x40, + 0xb2, 0x43, 0x90, 0xb8, 0x08, 0x94, 0xf8, 0x32, 0x60, 0xc6, 0x4c, 0xbc, 0xea, 0xc7, 0x84, 0x0e, + 0x5b, 0xba, 0xb7, 0xb7, 0x37, 0x33, 0x3b, 0x3b, 0xfb, 0xf1, 0xf8, 0xf8, 0xf8, 0x48, 0xb1, 0x58, + 0xfc, 0xa0, 0xa7, 0xa7, 0xa7, 0x90, 0xcd, 0x66, 0x0b, 0xe6, 0x2f, 0x8c, 0x96, 0x76, 0x4f, 0x43, + 0x98, 0x5a, 0xea, 0x83, 0x76, 0xc2, 0x50, 0xda, 0xc0, 0x00, 0x80, 0x4e, 0x10, 0x0c, 0x5f, 0x10, + 0xc4, 0x9a, 0x5f, 0xb2, 0x85, 0xc4, 0x79, 0xc6, 0x30, 0xea, 0x9d, 0x86, 0x7c, 0xea, 0x42, 0xc7, + 0x9d, 0xc2, 0x79, 0x85, 0x64, 0xb6, 0x01, 0x47, 0x14, 0x80, 0x61, 0x0b, 0x80, 0x3d, 0xde, 0x72, + 0xf8, 0x6c, 0x62, 0x60, 0x7c, 0xf0, 0x02, 0x88, 0x9d, 0x02, 0x2c, 0xbb, 0x09, 0x29, 0x07, 0xe3, + 0x4b, 0x5b, 0x90, 0xce, 0x5a, 0xe0, 0x07, 0x9d, 0x79, 0x29, 0x2b, 0x12, 0x08, 0x46, 0x9d, 0x04, + 0x36, 0x0e, 0x1e, 0x42, 0x61, 0x84, 0xe1, 0x1e, 0x40, 0x60, 0xe3, 0x9f, 0x47, 0x17, 0x46, 0x07, + 0x0c, 0x26, 0x3b, 0x85, 0x73, 0x88, 0xcf, 0x1c, 0x94, 0xc6, 0x14, 0x69, 0xa0, 0x0e, 0xdb, 0x44, + 0xee, 0xaa, 0x04, 0xd2, 0x51, 0x71, 0x48, 0x26, 0xc5, 0x1a, 0x03, 0x52, 0x03, 0xd5, 0x37, 0xcc, + 0x0f, 0x74, 0x8b, 0x50, 0x88, 0xcd, 0xa7, 0x22, 0xe2, 0x00, 0x88, 0x50, 0x46, 0xbd, 0x1d, 0x32, + 0xc7, 0xad, 0xd1, 0x43, 0x91, 0x35, 0x40, 0xe7, 0x44, 0x3d, 0xf5, 0xe9, 0x07, 0xc4, 0x98, 0x0c, + 0xc2, 0x35, 0x0e, 0xea, 0x2e, 0x31, 0x30, 0xec, 0xd4, 0xe1, 0x47, 0x10, 0x16, 0x8d, 0x7d, 0x0e, + 0xda, 0xb8, 0x0e, 0x2b, 0x59, 0x8f, 0xcc, 0x03, 0xbd, 0x0e, 0x64, 0x0b, 0xaa, 0x6d, 0x5c, 0x43, + 0xca, 0xc9, 0xab, 0x0d, 0x1b, 0x74, 0xae, 0x29, 0xa5, 0x2f, 0x74, 0x0c, 0x2d, 0x6f, 0xac, 0xd1, + 0x7e, 0x6a, 0x20, 0x09, 0x56, 0x63, 0x02, 0x19, 0xd2, 0xcf, 0x86, 0x3d, 0x3d, 0x25, 0x80, 0xd4, + 0xb5, 0x1f, 0x72, 0xc8, 0xd8, 0x52, 0x97, 0xf9, 0x83, 0x74, 0x09, 0x04, 0x5f, 0x74, 0xe6, 0x16, + 0xca, 0x2b, 0xa8, 0xcd, 0x4e, 0x1b, 0x64, 0x23, 0x13, 0xc9, 0x19, 0x03, 0x3a, 0x86, 0x5e, 0xdf, + 0x58, 0xfd, 0x7f, 0x6a, 0x20, 0xc2, 0x40, 0x5a, 0x3b, 0xc4, 0x70, 0xb6, 0x64, 0xb4, 0x41, 0x6a, + 0x9d, 0x36, 0x2d, 0x11, 0x4f, 0xfa, 0xfa, 0xc5, 0xe7, 0x5e, 0x90, 0x94, 0x50, 0xd4, 0xeb, 0x9d, + 0x62, 0x22, 0xaf, 0x00, 0xb6, 0x7d, 0xda, 0xa4, 0xd4, 0xba, 0x5e, 0x23, 0x3e, 0x6d, 0xcc, 0xa5, + 0xd7, 0xb4, 0x87, 0x91, 0x84, 0xf8, 0x9f, 0x0c, 0x13, 0xd4, 0xe6, 0x23, 0x6d, 0xd4, 0x21, 0xa5, + 0x8e, 0xc2, 0xf4, 0x5a, 0xda, 0xa0, 0xdf, 0x75, 0x34, 0x04, 0x84, 0xa4, 0x2c, 0x4c, 0x17, 0x20, + 0xed, 0xd4, 0xb5, 0xb4, 0x9d, 0xa7, 0x8f, 0x8e, 0x17, 0x65, 0x4d, 0x18, 0x9e, 0xa9, 0xaf, 0xa3, + 0x04, 0xf6, 0xf2, 0xd5, 0x76, 0xb9, 0x96, 0xba, 0x0d, 0x8c, 0xc5, 0xdc, 0x45, 0x4a, 0xb0, 0x48, + 0xff, 0x4b, 0x32, 0x4c, 0x41, 0x1a, 0x20, 0xcc, 0x99, 0xb0, 0x3e, 0x84, 0x96, 0x00, 0xb4, 0x51, + 0x46, 0x06, 0xe2, 0x41, 0x5b, 0xe1, 0xdc, 0xa3, 0x0c, 0xe3, 0x43, 0xdf, 0xa6, 0xc9, 0x66, 0x24, + 0x6d, 0x34, 0x46, 0xa3, 0xe7, 0x08, 0x6f, 0xed, 0xd4, 0x5d, 0x83, 0x32, 0xb8, 0x94, 0xad, 0x88, + 0x29, 0xe3, 0xbf, 0x5d, 0xfa, 0xbf, 0x74, 0x7e, 0xdc, 0x6e, 0x66, 0x84, 0x09, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderLeftHandle3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x78, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5c, 0x89, 0xc4, + 0xad, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x02, 0x01, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x87, + 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0xa0, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x54, 0xdc, + 0xcf, 0x00, 0x00, 0x01, 0x59, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, + 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, + 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, + 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, + 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x0a, 0x4c, 0xc2, 0x27, 0x59, 0x00, 0x00, 0x0a, 0x58, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, + 0xed, 0x9d, 0xcb, 0x8b, 0x14, 0xdb, 0x1d, 0xc7, 0x9d, 0x9e, 0xd6, 0x79, 0x39, 0xd7, 0xc7, 0x98, + 0x51, 0xc9, 0x20, 0x64, 0x20, 0x3e, 0x19, 0x2e, 0x04, 0x24, 0x8a, 0x49, 0x5c, 0x24, 0x17, 0x5c, + 0x19, 0xd0, 0x24, 0x0b, 0x73, 0x71, 0x97, 0x2c, 0xee, 0xee, 0x6e, 0x44, 0x70, 0x95, 0x85, 0x22, + 0x98, 0x6c, 0x62, 0xfe, 0x00, 0x11, 0x17, 0x6e, 0xcc, 0xc2, 0x08, 0xd9, 0xb8, 0x30, 0x0a, 0x77, + 0x61, 0xc4, 0xbb, 0x31, 0x66, 0x21, 0xa8, 0x38, 0x68, 0xcc, 0x42, 0x88, 0x13, 0x93, 0x8c, 0xce, + 0x2b, 0xe7, 0x53, 0xe3, 0x77, 0xee, 0xcf, 0xe3, 0x39, 0xd5, 0x55, 0xd5, 0xd3, 0xa3, 0x55, 0x5d, + 0x07, 0xce, 0xfc, 0x9e, 0xe7, 0xf5, 0xe9, 0x5f, 0x55, 0xf7, 0xb4, 0x4c, 0xb9, 0x6a, 0x55, 0xdd, + 0x6a, 0x02, 0x2b, 0x49, 0xa0, 0x67, 0x25, 0x17, 0x33, 0x6b, 0x7d, 0xa8, 0x75, 0xcd, 0x16, 0xda, + 0x53, 0x57, 0xea, 0x00, 0x2b, 0xb5, 0x4e, 0x7b, 0x34, 0x72, 0x8c, 0xee, 0xe4, 0x81, 0xda, 0x9d, + 0xbb, 0xdd, 0xf1, 0x39, 0x30, 0xe4, 0x4a, 0x5d, 0x20, 0xbb, 0x13, 0x9b, 0x2b, 0x32, 0x67, 0x91, + 0x31, 0x3a, 0x6d, 0x3b, 0x63, 0x35, 0x07, 0x32, 0x01, 0x62, 0x1d, 0x69, 0xfa, 0x72, 0x2d, 0xca, + 0x1a, 0x79, 0xe6, 0x6a, 0x95, 0xdb, 0x2a, 0x9e, 0x76, 0xa6, 0x4e, 0xc7, 0x96, 0xad, 0xe2, 0xf2, + 0x1c, 0x32, 0x96, 0x1b, 0xf2, 0x37, 0x1c, 0x01, 0xba, 0x62, 0x92, 0x9d, 0x06, 0x13, 0x9a, 0xff, + 0xbd, 0x6a, 0x6c, 0x77, 0x33, 0x59, 0xc6, 0xc7, 0x72, 0x7c, 0x7f, 0xd3, 0xed, 0xb8, 0xf7, 0x6d, + 0x27, 0x66, 0x7b, 0xe8, 0x30, 0x2b, 0xe9, 0xf3, 0xc1, 0x2d, 0xf8, 0x9b, 0xcf, 0xb3, 0x99, 0x2c, + 0x63, 0xfd, 0x1c, 0xdf, 0xa6, 0xa2, 0xd6, 0xb8, 0x0e, 0xb4, 0xc6, 0xe1, 0xc3, 0x87, 0x07, 0xce, + 0x9d, 0x3b, 0xf7, 0xa3, 0xcd, 0x9b, 0x37, 0xff, 0xb0, 0xaf, 0xaf, 0xef, 0xbb, 0xab, 0x57, 0xaf, + 0x1e, 0xef, 0xe9, 0xe9, 0xd9, 0xe0, 0xfa, 0x5a, 0xd7, 0xc9, 0x2b, 0x7d, 0x03, 0x40, 0x5a, 0xd7, + 0x65, 0x26, 0xa9, 0x4a, 0x42, 0x02, 0x69, 0xb5, 0xeb, 0x43, 0xae, 0xaf, 0x3f, 0x79, 0xf2, 0xe4, + 0xf8, 0xe3, 0xc7, 0x8f, 0xbf, 0x78, 0xf5, 0xea, 0xd5, 0xb5, 0xf9, 0xf9, 0xf9, 0xff, 0x2c, 0x94, + 0xa4, 0xb9, 0xbd, 0xe7, 0x6a, 0x69, 0xb0, 0x88, 0x09, 0x94, 0xa4, 0x0f, 0x0c, 0x68, 0x00, 0xdb, + 0x70, 0xe4, 0xc8, 0x91, 0xb1, 0xe7, 0xcf, 0x9f, 0x9f, 0x76, 0xb0, 0xa6, 0x4a, 0xc2, 0xea, 0x9d, + 0x6d, 0xe6, 0xa1, 0x56, 0x14, 0x1a, 0xb0, 0xe8, 0x7d, 0xae, 0xaf, 0xdb, 0xb2, 0x65, 0xcb, 0xb7, + 0x1e, 0x3d, 0x7a, 0xf4, 0xe5, 0xdc, 0xdc, 0xdc, 0x3f, 0xde, 0xd9, 0x49, 0xc9, 0x8c, 0xe5, 0x02, + 0xa7, 0x0a, 0x43, 0x86, 0xaa, 0x6c, 0xc0, 0xf9, 0x37, 0x9c, 0x3f, 0x7f, 0x7e, 0x62, 0x7a, 0x7a, + 0xfa, 0x6e, 0xc9, 0x18, 0x05, 0xb7, 0x9b, 0x15, 0x5c, 0x5a, 0xb5, 0x85, 0xa0, 0xa9, 0xca, 0x74, + 0x2f, 0x1b, 0xb9, 0x7e, 0xfd, 0xfa, 0xa1, 0xd9, 0xd9, 0xd9, 0xe7, 0xc1, 0x5d, 0x94, 0xd0, 0x09, + 0x90, 0x56, 0x2d, 0x2d, 0xc7, 0xc6, 0xa4, 0x5b, 0xc9, 0xe5, 0xd9, 0x7f, 0xff, 0xfe, 0xfd, 0x5f, + 0xec, 0xdc, 0xb9, 0xf3, 0x77, 0xee, 0x9d, 0xb1, 0xbf, 0xd5, 0x62, 0x65, 0x89, 0x53, 0x19, 0x69, + 0x4d, 0x10, 0x42, 0x39, 0x36, 0x26, 0x1d, 0x29, 0x9d, 0x8f, 0x0f, 0x83, 0xf7, 0xee, 0xdd, 0xfb, + 0xf9, 0xae, 0x5d, 0xbb, 0xfe, 0x10, 0x9a, 0xa0, 0xcc, 0x3e, 0x2e, 0xb3, 0x22, 0x4d, 0x70, 0x18, + 0x2b, 0xdd, 0x42, 0xe3, 0x05, 0x19, 0xba, 0x76, 0xed, 0xda, 0xde, 0xdd, 0xbb, 0x77, 0xff, 0xb6, + 0xc8, 0x02, 0x65, 0x1e, 0x23, 0x10, 0xbe, 0x8c, 0xdd, 0xd3, 0xb8, 0x9f, 0xd1, 0xb9, 0x1c, 0x37, + 0x9d, 0x3e, 0x7d, 0xfa, 0x7b, 0x55, 0xba, 0xa7, 0xf9, 0xb7, 0x61, 0x55, 0x4b, 0xe8, 0x05, 0x0e, + 0xc5, 0xac, 0x4f, 0x3a, 0x52, 0x3a, 0x50, 0x07, 0x36, 0x6e, 0xdc, 0x38, 0x3c, 0x39, 0x39, 0xf9, + 0xa7, 0xc1, 0xc1, 0xc1, 0x4f, 0x43, 0x13, 0x57, 0xc1, 0x17, 0xbb, 0x54, 0x05, 0x22, 0x76, 0x46, + 0xc5, 0x7d, 0x68, 0x5c, 0xa2, 0x83, 0x37, 0x6e, 0xdc, 0xf8, 0x65, 0x95, 0xa1, 0x01, 0x25, 0x06, + 0x2e, 0x04, 0x4c, 0xb0, 0x14, 0xb3, 0x36, 0x3a, 0x73, 0x0d, 0xee, 0xdf, 0xbf, 0xff, 0x13, 0xf7, + 0x66, 0xf0, 0xa5, 0x92, 0xaa, 0x2a, 0x43, 0xe0, 0x2c, 0x90, 0xd0, 0xb9, 0x6d, 0x1c, 0x5d, 0xd0, + 0xa8, 0xb6, 0xfe, 0x8b, 0x17, 0x2f, 0xfe, 0xaa, 0xd9, 0x6c, 0x8e, 0x86, 0x06, 0x56, 0xc9, 0x17, + 0x02, 0x17, 0x3a, 0x9f, 0x60, 0x59, 0x29, 0x68, 0x48, 0x7e, 0x5b, 0x18, 0x3c, 0x7a, 0xf4, 0xe8, + 0xa6, 0xf1, 0xf1, 0xf1, 0x5f, 0x87, 0x26, 0xa8, 0x9a, 0x2f, 0x0b, 0x38, 0xc1, 0xd2, 0xd9, 0x43, + 0x36, 0xe0, 0xfa, 0x4f, 0x9c, 0x38, 0xf1, 0x59, 0xa3, 0xd1, 0x58, 0xab, 0xc4, 0x2a, 0x4b, 0x1f, + 0x9c, 0x0f, 0xc5, 0x9e, 0xdd, 0xc6, 0xd0, 0xd5, 0x99, 0x83, 0xdf, 0x10, 0x9a, 0xae, 0xda, 0x3e, + 0xb3, 0x03, 0xaa, 0xac, 0xfb, 0xe0, 0x5a, 0x9d, 0x55, 0xb0, 0xc8, 0x43, 0x67, 0x3c, 0xd5, 0xb6, + 0x66, 0xcf, 0x9e, 0x3d, 0x6b, 0xdd, 0xc7, 0x90, 0x03, 0x4e, 0xef, 0x8a, 0xd6, 0x0a, 0x1c, 0x70, + 0x68, 0x92, 0x8b, 0xd6, 0x37, 0xb6, 0xc0, 0xf5, 0x9d, 0x3d, 0x7b, 0xf6, 0x07, 0xee, 0x32, 0xe5, + 0x5b, 0x90, 0xae, 0x68, 0xad, 0xc0, 0x59, 0x08, 0xaa, 0x36, 0x5f, 0xf2, 0x6e, 0xda, 0x74, 0x1f, + 0x41, 0xbe, 0x6f, 0x93, 0xab, 0xae, 0x5b, 0x70, 0xb1, 0xaa, 0xf2, 0xfd, 0x62, 0x82, 0x9f, 0xf1, + 0xfc, 0x9a, 0xd5, 0xbb, 0x6e, 0xdd, 0xba, 0xef, 0x28, 0xd0, 0x0d, 0xd2, 0x82, 0xcb, 0x73, 0x5e, + 0xa0, 0x09, 0x1c, 0xf7, 0xb8, 0xe6, 0xd0, 0xd0, 0xd0, 0xb6, 0x3c, 0x13, 0x94, 0x3d, 0x37, 0x2b, + 0x38, 0x81, 0x92, 0xe4, 0xdc, 0x02, 0xc7, 0xa5, 0xda, 0xeb, 0xfe, 0x45, 0xea, 0x93, 0xb2, 0xc3, + 0xc8, 0xb3, 0xff, 0xac, 0xe0, 0xec, 0x9c, 0x82, 0x27, 0x49, 0xc5, 0xb9, 0xf7, 0x85, 0x06, 0xff, + 0x08, 0xd3, 0x35, 0x2d, 0x06, 0x0e, 0x28, 0x34, 0xc9, 0x45, 0xeb, 0x5d, 0x9b, 0x18, 0xe3, 0xe9, + 0x3d, 0x0e, 0x1c, 0xf7, 0xba, 0xae, 0x69, 0x31, 0x70, 0x16, 0x80, 0x2a, 0xcb, 0x42, 0x14, 0x34, + 0xc5, 0xb2, 0xcc, 0x63, 0xe7, 0x2c, 0xbd, 0x5e, 0xe4, 0xc0, 0x16, 0x60, 0x52, 0x6d, 0x8e, 0x82, + 0xf5, 0x95, 0x1e, 0x4a, 0x96, 0x03, 0xe4, 0x05, 0x27, 0x40, 0xaa, 0x34, 0xc9, 0x2c, 0x6b, 0x55, + 0x2a, 0x27, 0x0d, 0x9c, 0x20, 0xe9, 0xc0, 0xb2, 0x25, 0xad, 0xdf, 0xf7, 0x29, 0x56, 0x59, 0x99, + 0x06, 0xce, 0x1e, 0xda, 0x07, 0xe3, 0xdb, 0x36, 0xb7, 0x2b, 0xf4, 0x10, 0x38, 0x0b, 0x05, 0xdd, + 0xb7, 0x05, 0x46, 0x31, 0x49, 0xf9, 0xbb, 0x42, 0x86, 0xc0, 0x75, 0xc5, 0xc1, 0xdb, 0x3d, 0x64, + 0x11, 0x70, 0xb6, 0x02, 0xdb, 0x5d, 0xbf, 0xb4, 0xe3, 0xf3, 0x80, 0xb3, 0xc0, 0xec, 0xe5, 0x69, + 0xf5, 0xd2, 0x82, 0xc8, 0xbb, 0xf1, 0x3c, 0xe0, 0x42, 0x73, 0x5b, 0x98, 0xa1, 0x78, 0x65, 0x7d, + 0xed, 0x82, 0xab, 0x2c, 0x98, 0x56, 0x07, 0xab, 0xc1, 0xb5, 0x22, 0x14, 0x89, 0xe7, 0x05, 0xd7, + 0xb5, 0x97, 0xa6, 0xcf, 0x2f, 0x06, 0xae, 0x06, 0xe4, 0x93, 0xf2, 0xec, 0x18, 0x38, 0x2f, 0xad, + 0x36, 0x7d, 0x02, 0x59, 0xc1, 0xd5, 0x15, 0xe8, 0x91, 0xcb, 0x0a, 0xce, 0x0e, 0x0b, 0x41, 0x0c, + 0xf9, 0xec, 0x98, 0xca, 0xe9, 0x45, 0xc0, 0x55, 0x0e, 0x42, 0x91, 0x03, 0xd5, 0xe0, 0x8a, 0x50, + 0x73, 0x63, 0x6a, 0x70, 0x35, 0xb8, 0x82, 0x04, 0x0a, 0x0e, 0xab, 0x2b, 0xae, 0x06, 0x57, 0x90, + 0x40, 0xc1, 0x61, 0x75, 0xc5, 0xd5, 0xe0, 0x0a, 0x12, 0x28, 0x38, 0xac, 0xae, 0xb8, 0x1a, 0x5c, + 0x41, 0x02, 0x05, 0x87, 0xd5, 0x15, 0x57, 0x83, 0x2b, 0x48, 0xa0, 0xe0, 0xb0, 0xba, 0xe2, 0x6a, + 0x70, 0x05, 0x09, 0x14, 0x1c, 0x56, 0x57, 0x5c, 0x0d, 0xae, 0x20, 0x81, 0x82, 0xc3, 0xea, 0x8a, + 0xab, 0xc1, 0x15, 0x24, 0x50, 0x70, 0xd8, 0x72, 0x54, 0x5c, 0xf2, 0xc0, 0x26, 0xf7, 0xc4, 0x9a, + 0x99, 0x82, 0x7b, 0x28, 0xe5, 0xb0, 0x22, 0xe0, 0xfc, 0x27, 0x5b, 0x71, 0xf0, 0x05, 0xf7, 0xe4, + 0x9a, 0xff, 0x96, 0x92, 0x40, 0xc1, 0x4d, 0x67, 0x05, 0x17, 0x82, 0xa5, 0x25, 0x93, 0xd8, 0x9b, + 0x37, 0x6f, 0xfe, 0x2d, 0x47, 0x37, 0xc8, 0xac, 0xe0, 0xd2, 0x58, 0xcc, 0x13, 0x74, 0x4f, 0xe3, + 0x9a, 0x4c, 0x4b, 0xaa, 0x5a, 0x2c, 0x06, 0x2e, 0xad, 0xc2, 0x2c, 0x03, 0xf2, 0x00, 0xb7, 0xf0, + 0xe2, 0xc5, 0x8b, 0x27, 0x36, 0x50, 0x75, 0x3d, 0x06, 0x2e, 0x76, 0x6e, 0x0b, 0x14, 0x5d, 0x7d, + 0xfe, 0xce, 0x9d, 0x3b, 0x5f, 0xc7, 0x06, 0x55, 0xd1, 0x6f, 0xff, 0x21, 0x59, 0xba, 0x95, 0xe8, + 0xea, 0x40, 0x46, 0x47, 0xd2, 0xf9, 0x1b, 0x2e, 0xfe, 0x32, 0x3a, 0x79, 0x80, 0xde, 0xb6, 0x6d, + 0xdb, 0x36, 0x3e, 0x7c, 0xf8, 0xf0, 0x6a, 0x6f, 0x6f, 0x6f, 0x65, 0x9e, 0x9f, 0xe4, 0xce, 0x16, + 0x6d, 0x79, 0x2b, 0xce, 0x4e, 0xb4, 0x54, 0x6d, 0xce, 0x39, 0xf7, 0xe4, 0xc9, 0x93, 0xe9, 0x67, + 0xcf, 0x9e, 0xfd, 0xd5, 0x26, 0x54, 0x59, 0x6f, 0x07, 0x1c, 0x5c, 0xb8, 0xbf, 0xd1, 0xf9, 0x0c, + 0xb7, 0xe0, 0x2e, 0xd7, 0xaf, 0x9c, 0xec, 0x8a, 0x96, 0x07, 0x9c, 0x7f, 0x7f, 0x4b, 0xde, 0x14, + 0x1c, 0x25, 0xe4, 0x1c, 0xfd, 0xcc, 0x99, 0x33, 0x5f, 0xb9, 0xe7, 0x29, 0x75, 0xc5, 0xe7, 0xb9, + 0x3c, 0xe0, 0x54, 0x49, 0x21, 0x80, 0x80, 0x9b, 0x76, 0x15, 0x37, 0x75, 0xfb, 0xf6, 0xed, 0xcb, + 0x4a, 0xac, 0xb2, 0x2c, 0x02, 0xce, 0xf2, 0x00, 0x62, 0x52, 0x6d, 0x4e, 0xce, 0xba, 0x3e, 0x73, + 0xec, 0xd8, 0xb1, 0x3f, 0xba, 0xc7, 0x39, 0xbe, 0xb0, 0x49, 0x55, 0xd4, 0xf9, 0x23, 0x5d, 0x35, + 0xbd, 0x9b, 0x62, 0xeb, 0x9d, 0xd4, 0xc6, 0x14, 0xb7, 0x31, 0xe9, 0xcc, 0xc3, 0xdf, 0xab, 0x36, + 0x5e, 0xbe, 0x7c, 0xd9, 0xd8, 0xb7, 0x6f, 0xdf, 0xff, 0xb6, 0x6f, 0xdf, 0xbe, 0x5f, 0x83, 0xab, + 0x28, 0x05, 0x83, 0xb3, 0xf9, 0xba, 0x6c, 0xc1, 0xa1, 0x3a, 0xd1, 0xad, 0x44, 0x4f, 0x9e, 0xa9, + 0xe4, 0x24, 0x8f, 0xce, 0xe0, 0xa3, 0xc9, 0xb0, 0x7b, 0xf8, 0xf1, 0xe0, 0xd3, 0xa7, 0x4f, 0x7f, + 0x3f, 0x32, 0x32, 0xb2, 0xc3, 0xd9, 0x95, 0x6c, 0x69, 0x97, 0xaa, 0xbd, 0x97, 0x71, 0x78, 0xd9, + 0x92, 0x02, 0xc2, 0x9b, 0x43, 0x72, 0x99, 0x3a, 0xc9, 0xbb, 0xeb, 0xf4, 0xeb, 0xd7, 0xaf, 0x67, + 0x8e, 0x1f, 0x3f, 0xfe, 0x9b, 0x2a, 0x5f, 0xb2, 0x69, 0x97, 0x2a, 0x60, 0x54, 0x6d, 0x92, 0xf2, + 0x49, 0xca, 0xcf, 0x0b, 0xa0, 0x4e, 0x05, 0xf6, 0x3c, 0x78, 0xf0, 0x60, 0xc6, 0x3d, 0x4c, 0xf4, + 0x6f, 0x07, 0x0f, 0x1e, 0xfc, 0xb1, 0xfb, 0xb3, 0x73, 0xbb, 0x0e, 0x63, 0x4b, 0xdf, 0xec, 0x81, + 0x80, 0xa0, 0x26, 0x5d, 0x60, 0xac, 0x24, 0x47, 0xb6, 0x74, 0x8d, 0x13, 0x3c, 0xe6, 0x6d, 0xdc, + 0xbc, 0x79, 0x73, 0xca, 0x3d, 0x8d, 0xf5, 0x9f, 0x13, 0x13, 0x13, 0x95, 0x7b, 0x74, 0x50, 0x16, + 0x70, 0x82, 0x22, 0x48, 0x21, 0xa8, 0xc4, 0x80, 0x26, 0xa0, 0x4b, 0xfa, 0x95, 0x2b, 0x57, 0x26, + 0x77, 0xec, 0xd8, 0xf1, 0xcc, 0x3d, 0x64, 0x74, 0x6f, 0x95, 0x2a, 0x2f, 0x06, 0x4e, 0x90, 0x24, + 0x05, 0xc4, 0xda, 0x56, 0xb7, 0x71, 0x41, 0x5b, 0x92, 0xc0, 0x73, 0x1f, 0x8c, 0xbf, 0x3e, 0x70, + 0xe0, 0xc0, 0x5e, 0xf7, 0x50, 0xbe, 0x41, 0x06, 0x96, 0xbd, 0xe5, 0x05, 0xa7, 0x6a, 0xe3, 0xdc, + 0x16, 0x96, 0xf5, 0x8b, 0x09, 0x3e, 0xc1, 0x5b, 0x75, 0xeb, 0xd6, 0xad, 0x7f, 0xdd, 0xbd, 0x7b, + 0xf7, 0x2f, 0x87, 0x0e, 0x1d, 0xda, 0xe3, 0x9e, 0x9f, 0xb9, 0x49, 0x49, 0x65, 0x95, 0xf6, 0xc0, + 0x56, 0xe7, 0x3c, 0xb2, 0xad, 0x44, 0xa7, 0x0b, 0x88, 0x95, 0xe8, 0x74, 0xde, 0x1c, 0xf4, 0xcd, + 0x09, 0xd5, 0xc5, 0xc7, 0x14, 0x1e, 0xa6, 0xcc, 0xe7, 0xbc, 0x01, 0xf7, 0x51, 0xa5, 0x79, 0xf9, + 0xf2, 0xe5, 0x9f, 0x38, 0x80, 0x9f, 0xf7, 0xf7, 0xf7, 0x8f, 0x38, 0x5f, 0x29, 0x9b, 0xa0, 0xb0, + 0x79, 0xab, 0x5b, 0x5b, 0x7e, 0xa4, 0xed, 0x16, 0x1a, 0x7e, 0x81, 0x43, 0x52, 0xc9, 0xc0, 0x4a, + 0x1e, 0xd9, 0xed, 0x24, 0x5f, 0x35, 0x09, 0x1e, 0x7a, 0x73, 0x6c, 0x6c, 0xac, 0xff, 0xd2, 0xa5, + 0x4b, 0x3f, 0x75, 0x97, 0xef, 0xcf, 0xca, 0x78, 0xf9, 0xda, 0x4b, 0xd5, 0x9d, 0x27, 0x15, 0x9e, + 0x85, 0x86, 0xae, 0x26, 0x5d, 0x71, 0xf9, 0x25, 0xf9, 0x9c, 0x67, 0x73, 0x92, 0x2f, 0x07, 0xa6, + 0xa6, 0xa6, 0xe6, 0x2e, 0x5c, 0xb8, 0xf0, 0xf7, 0xab, 0x57, 0xaf, 0xfe, 0x79, 0xfd, 0xfa, 0xf5, + 0x93, 0xc3, 0xc3, 0xc3, 0xf3, 0xae, 0x8f, 0xba, 0x37, 0x10, 0xaa, 0xf5, 0xa3, 0x6f, 0x3a, 0x90, + 0x36, 0x1a, 0xb3, 0xe5, 0x47, 0xda, 0xae, 0xaa, 0xc3, 0xa7, 0x8a, 0xb3, 0x3a, 0x2f, 0x0c, 0x97, + 0x28, 0x9d, 0x4a, 0xa3, 0x02, 0xe9, 0xd8, 0xc4, 0x80, 0x44, 0x25, 0x26, 0xf3, 0x6c, 0xdd, 0xba, + 0x75, 0xcd, 0xa9, 0x53, 0xa7, 0x3e, 0x75, 0x8f, 0xc4, 0x9d, 0x18, 0x1d, 0x1d, 0x1d, 0x73, 0x8f, + 0x56, 0xfb, 0xb6, 0xbb, 0xb4, 0xd7, 0xba, 0x8a, 0x1c, 0xf8, 0xd8, 0x1e, 0x41, 0xc4, 0x21, 0x6d, + 0xf3, 0x6d, 0x62, 0xf2, 0x21, 0xd5, 0xf1, 0x5b, 0x68, 0xf8, 0x65, 0xfb, 0x00, 0x81, 0xa3, 0x4b, + 0x17, 0x48, 0xba, 0x84, 0xf1, 0x2b, 0x46, 0x5c, 0x20, 0x35, 0x8f, 0x73, 0x2d, 0xad, 0x8d, 0xee, + 0x37, 0xed, 0xcb, 0xf7, 0x17, 0xb1, 0xf5, 0xdb, 0x90, 0x95, 0xbe, 0xce, 0x95, 0x42, 0xa7, 0xcd, + 0xb0, 0xf1, 0x3c, 0x4d, 0x93, 0xb1, 0x69, 0xe9, 0x8c, 0xb7, 0x36, 0x7e, 0x16, 0x00, 0x00, 0x3a, + 0xbf, 0x8e, 0x21, 0xe5, 0xd7, 0xb7, 0x29, 0xaa, 0x44, 0x55, 0x1f, 0xe0, 0xc8, 0x65, 0x2e, 0xba, + 0x7d, 0x01, 0x9c, 0x19, 0x84, 0x48, 0x5e, 0xbb, 0x8d, 0x7d, 0xa9, 0x49, 0xb7, 0x12, 0x9d, 0x9e, + 0xdc, 0x62, 0xde, 0xca, 0xf7, 0xc0, 0x91, 0x10, 0xdb, 0x8c, 0x8d, 0xa1, 0xdb, 0x66, 0x6d, 0xe9, + 0x48, 0x01, 0x04, 0x16, 0x0d, 0x9f, 0xc0, 0x01, 0x49, 0x5d, 0x95, 0x87, 0x14, 0x34, 0xa4, 0xba, + 0x53, 0xa3, 0xfb, 0x22, 0xb6, 0x5c, 0xcd, 0xee, 0x1d, 0xdd, 0x76, 0xd6, 0xe0, 0x3c, 0xc9, 0xfe, + 0xb3, 0x54, 0x1c, 0x83, 0x2d, 0x4c, 0xdf, 0x66, 0x42, 0x7c, 0x6a, 0xd2, 0x05, 0x4d, 0x92, 0x05, + 0xd1, 0x89, 0xd3, 0xb1, 0x01, 0xf7, 0xc6, 0x75, 0x5b, 0x75, 0x31, 0x78, 0x76, 0x0f, 0x6e, 0xc8, + 0xb2, 0x37, 0xed, 0x9b, 0x89, 0xb5, 0xc7, 0x90, 0xe4, 0x0c, 0xb3, 0xa1, 0xcd, 0x84, 0x7c, 0x4c, + 0x26, 0xbf, 0x95, 0xe8, 0xa1, 0xae, 0xfb, 0x14, 0xb1, 0x34, 0x9d, 0x98, 0xee, 0x6f, 0x48, 0x6b, + 0x6b, 0x5e, 0x7c, 0x34, 0x6c, 0x35, 0xab, 0xcb, 0xd7, 0x8e, 0xf4, 0xa1, 0x31, 0x57, 0x08, 0x9a, + 0x7c, 0xb3, 0xa1, 0x8a, 0x23, 0x98, 0xb6, 0x31, 0x1b, 0x47, 0x0f, 0x35, 0x55, 0x19, 0x31, 0x5f, + 0x17, 0x10, 0xc6, 0x12, 0xa3, 0x53, 0x7d, 0x00, 0xa2, 0x13, 0xb7, 0xd2, 0x99, 0x4b, 0x2f, 0x0e, + 0x7a, 0x27, 0x9b, 0xce, 0x83, 0x94, 0xce, 0xfe, 0x68, 0xf2, 0x21, 0xe7, 0x42, 0xe0, 0x92, 0xac, + 0xc0, 0x0f, 0x06, 0x58, 0xa0, 0xd6, 0x46, 0xf7, 0x5b, 0x0c, 0x98, 0xc0, 0x28, 0x5f, 0xf0, 0x04, + 0x34, 0x24, 0xc9, 0xb5, 0x6b, 0x6b, 0xec, 0x72, 0x4b, 0x7b, 0x0e, 0xf4, 0x50, 0x67, 0xbf, 0x0b, + 0x31, 0x70, 0x0c, 0x48, 0xdb, 0xa8, 0xe2, 0x48, 0x1a, 0xb9, 0xd2, 0x13, 0xc7, 0xdb, 0x1f, 0x2c, + 0x62, 0x41, 0xe8, 0xb2, 0xf3, 0xfd, 0xa4, 0x2b, 0x4f, 0xba, 0x95, 0xbe, 0x8e, 0xad, 0x96, 0xb6, + 0x4f, 0xe5, 0xb4, 0x92, 0x76, 0xef, 0xd2, 0x91, 0xbe, 0x9e, 0x40, 0xc3, 0x1f, 0x03, 0x17, 0x5b, + 0x88, 0x89, 0xb4, 0x51, 0xe9, 0x9a, 0x1c, 0xbf, 0xf4, 0xd8, 0x78, 0x1f, 0x98, 0x60, 0x69, 0xac, + 0xe6, 0x96, 0x5f, 0xf3, 0x29, 0x1e, 0x9b, 0x57, 0xe3, 0x62, 0xf1, 0x56, 0x7e, 0xad, 0x43, 0x9e, + 0x74, 0x2b, 0xd1, 0xdf, 0xe9, 0xad, 0x16, 0x8c, 0xc5, 0xad, 0x5f, 0x3a, 0xd2, 0xd7, 0xe5, 0x4b, + 0xf3, 0x2b, 0x87, 0x4d, 0xdb, 0x3c, 0x6b, 0xfb, 0x3a, 0xb6, 0x9a, 0xc6, 0xc8, 0x2e, 0x22, 0x05, + 0x89, 0xb1, 0xd2, 0xad, 0xb4, 0xd0, 0xc8, 0x99, 0xcf, 0x5b, 0x71, 0x0c, 0xa2, 0x31, 0x91, 0x36, + 0x2c, 0x5d, 0x0b, 0xe1, 0x97, 0x6e, 0x73, 0x95, 0x8f, 0x8f, 0xa6, 0x71, 0xf8, 0x15, 0x8b, 0x49, + 0xf2, 0x15, 0x43, 0xef, 0x64, 0xd3, 0xde, 0x43, 0x12, 0x5f, 0xd2, 0xb3, 0x6c, 0x26, 0x2d, 0xc7, + 0xc6, 0xa4, 0x5b, 0xe9, 0xeb, 0x69, 0x36, 0x30, 0x88, 0x2b, 0x47, 0x36, 0x92, 0x66, 0xfd, 0x8b, + 0x9e, 0xce, 0xfc, 0x14, 0x30, 0x66, 0x97, 0xbe, 0x04, 0xec, 0xed, 0x92, 0x99, 0xff, 0x7f, 0xd5, + 0xb4, 0x4d, 0xdb, 0x98, 0xf4, 0x90, 0xb4, 0x3e, 0xab, 0xb3, 0x17, 0x6c, 0xdf, 0x27, 0x3f, 0x92, + 0xa6, 0xf8, 0xa2, 0xd5, 0xd9, 0x9f, 0x16, 0x18, 0x2b, 0x59, 0x3b, 0xd1, 0xf3, 0x6c, 0x26, 0x2d, + 0xd7, 0xc6, 0x42, 0xba, 0x7c, 0x48, 0xab, 0xb3, 0xa9, 0x56, 0x36, 0x39, 0x34, 0xe5, 0x2d, 0x5a, + 0x9d, 0xfd, 0x29, 0x50, 0xac, 0x22, 0xdd, 0xca, 0xcc, 0x15, 0xc7, 0x04, 0xad, 0x36, 0xee, 0xc7, + 0x65, 0xc7, 0xa4, 0xe6, 0x54, 0x5c, 0xb6, 0x95, 0xe8, 0x34, 0x9b, 0xb3, 0xe8, 0x89, 0xff, 0xcc, + 0x93, 0xcb, 0x2c, 0x02, 0xe2, 0xcf, 0x68, 0xfd, 0xd2, 0x97, 0x64, 0xde, 0x45, 0x5a, 0xe5, 0xfb, + 0x71, 0x6b, 0x4b, 0x97, 0x64, 0xa3, 0xd2, 0x25, 0xad, 0xcf, 0xd7, 0xb1, 0xfd, 0x66, 0xc7, 0xf9, + 0xb1, 0xbc, 0xb6, 0xa0, 0xf8, 0xe3, 0xac, 0x5f, 0x7a, 0xae, 0x8a, 0xb3, 0x13, 0xb6, 0xda, 0xb0, + 0x1f, 0xb7, 0x76, 0x5e, 0x5d, 0xeb, 0xda, 0x71, 0xf2, 0x75, 0x52, 0x0a, 0x92, 0xd6, 0xb0, 0x76, + 0x61, 0x70, 0x4c, 0x96, 0xe5, 0x20, 0x7e, 0x4e, 0x9a, 0x9d, 0x16, 0xd3, 0xe6, 0x7d, 0xe9, 0x8f, + 0xf1, 0xe3, 0x79, 0x6c, 0x0b, 0xc6, 0x1f, 0xe7, 0xc7, 0xda, 0x02, 0xc7, 0xe4, 0x59, 0x36, 0x1e, + 0xcb, 0xf1, 0xfd, 0xbe, 0x9d, 0x75, 0x7e, 0xff, 0x90, 0x9d, 0xb0, 0xdf, 0x03, 0xc7, 0x57, 0x39, + 0xed, 0xb6, 0xd0, 0x81, 0x63, 0x73, 0xc6, 0x72, 0x63, 0xfe, 0xd8, 0x3c, 0x2b, 0xed, 0xf7, 0xc1, + 0x65, 0xaa, 0x98, 0xac, 0x9b, 0xcc, 0x73, 0xf8, 0x56, 0xb9, 0xad, 0xe2, 0x59, 0xf7, 0xd4, 0x89, + 0xbc, 0x04, 0x62, 0x27, 0x36, 0x58, 0x64, 0xce, 0x22, 0x63, 0x04, 0xa5, 0x9d, 0xb1, 0x9a, 0x03, + 0xf9, 0x5e, 0x55, 0xd9, 0xa0, 0xaf, 0x2f, 0xd7, 0xa2, 0xfe, 0xbc, 0xd8, 0xed, 0xce, 0xdd, 0xee, + 0xf8, 0xd0, 0x9e, 0x96, 0xc3, 0xd7, 0xb1, 0x8a, 0x0b, 0x6d, 0xee, 0x63, 0x85, 0x10, 0xda, 0x6b, + 0x26, 0xdf, 0x87, 0x3a, 0xd0, 0x87, 0x5a, 0x37, 0x13, 0x94, 0x3a, 0xa9, 0x26, 0xf0, 0xf1, 0x11, + 0xf8, 0x3f, 0x7a, 0xc4, 0x58, 0xcc, 0x89, 0xbc, 0xc8, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderRightHandle2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x50, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x1d, 0x56, + 0xa7, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x02, 0x01, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x87, + 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0xa0, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x7d, 0xa9, + 0x20, 0x00, 0x00, 0x01, 0x59, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, + 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, + 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, + 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, + 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x0a, 0x4c, 0xc2, 0x27, 0x59, 0x00, 0x00, 0x06, 0x18, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, + 0xed, 0x9a, 0xcf, 0x4b, 0x5c, 0x57, 0x14, 0xc7, 0x33, 0x31, 0x89, 0xb6, 0x89, 0x59, 0xb5, 0xb1, + 0x82, 0x50, 0x90, 0x2c, 0x92, 0x45, 0x16, 0x6e, 0x85, 0x10, 0x4b, 0xb6, 0xc6, 0x2e, 0x0a, 0xe2, + 0x3f, 0xd0, 0xb5, 0xa0, 0xae, 0xbb, 0x10, 0xb3, 0x2a, 0x62, 0xc0, 0x65, 0xb2, 0x4b, 0x20, 0x81, + 0x80, 0x7b, 0x41, 0x51, 0xba, 0x08, 0x48, 0x71, 0x21, 0x14, 0x17, 0x76, 0x25, 0xc5, 0xb6, 0xfe, + 0x18, 0xb0, 0xa9, 0x71, 0xe2, 0xef, 0x9e, 0xef, 0xf3, 0x7d, 0xaf, 0x67, 0xee, 0xbb, 0xef, 0xcd, + 0x7b, 0x33, 0x3a, 0x73, 0x5f, 0x99, 0x0b, 0xc7, 0x73, 0x7f, 0x9c, 0x77, 0xef, 0xf7, 0xf3, 0xce, + 0x7d, 0x77, 0x1e, 0xce, 0x5c, 0xbb, 0xf6, 0x3f, 0x2b, 0x05, 0xe1, 0x81, 0x35, 0xb2, 0x9c, 0x5d, + 0xe6, 0xe2, 0x49, 0x40, 0xb5, 0x82, 0x56, 0x2b, 0xb4, 0xda, 0xeb, 0x82, 0xfb, 0x02, 0xd1, 0xd7, + 0x2f, 0xf3, 0x0e, 0x65, 0x98, 0x2b, 0x8d, 0xf0, 0x34, 0x31, 0x65, 0x4b, 0x12, 0x28, 0x29, 0x1b, + 0x49, 0x63, 0x65, 0x93, 0x49, 0x23, 0x8d, 0x00, 0x57, 0x8c, 0xab, 0x4f, 0xcf, 0x5d, 0x69, 0xdc, + 0xc4, 0x42, 0xec, 0x5d, 0x31, 0x2d, 0x5a, 0xd7, 0x4d, 0x60, 0x8d, 0x95, 0x13, 0xb9, 0x1e, 0xa2, + 0x60, 0xc7, 0xa1, 0x89, 0x0b, 0x8a, 0x2d, 0xd6, 0x6e, 0xc7, 0xc5, 0xb1, 0xbf, 0xdc, 0x9f, 0x5d, + 0x71, 0x39, 0x3d, 0x3d, 0xfd, 0xf7, 0xf0, 0xf0, 0xf0, 0xf7, 0x52, 0xa9, 0xf4, 0xcb, 0xee, 0xee, + 0xee, 0xcb, 0x95, 0x95, 0x95, 0x1f, 0x7a, 0x7b, 0x7b, 0xef, 0x89, 0x8a, 0xdb, 0x62, 0x37, 0xc5, + 0x5a, 0x42, 0xc3, 0xd6, 0xa7, 0xe1, 0xa6, 0xba, 0x4c, 0xba, 0x2b, 0x94, 0x2b, 0xe6, 0x71, 0x4e, + 0x7f, 0x72, 0x72, 0xf2, 0x51, 0xe0, 0x5e, 0x4d, 0x4f, 0x4f, 0x3f, 0x10, 0x79, 0xed, 0x62, 0x59, + 0xc0, 0x92, 0x89, 0x9c, 0x2b, 0xd6, 0xa9, 0x53, 0xb2, 0xb7, 0xb7, 0xb9, 0xb9, 0xf9, 0x73, 0x5f, + 0x5f, 0xdf, 0x37, 0xa2, 0xb2, 0x4d, 0xec, 0x86, 0x98, 0x9d, 0xb1, 0x6c, 0x99, 0xaa, 0x93, 0xf6, + 0xc4, 0x65, 0xf6, 0xf7, 0xf7, 0x7f, 0x9d, 0x9a, 0x9a, 0x7a, 0x28, 0x30, 0xd8, 0x86, 0x80, 0x22, + 0x58, 0xd2, 0x16, 0x94, 0x30, 0x47, 0x49, 0x5c, 0xa9, 0x8e, 0x83, 0x47, 0x47, 0x47, 0x1b, 0x33, + 0x33, 0x33, 0x4f, 0x44, 0x22, 0xb7, 0x60, 0x75, 0x50, 0x75, 0xd4, 0x5c, 0x71, 0xa9, 0x83, 0x83, + 0x83, 0x3f, 0xc7, 0xc7, 0xc7, 0x1f, 0x09, 0xd4, 0x97, 0x62, 0x78, 0xae, 0xb2, 0x43, 0x55, 0x5c, + 0xa5, 0xce, 0x01, 0x7b, 0x7b, 0x7b, 0xcb, 0x3d, 0x3d, 0x3d, 0xdf, 0x0a, 0xcc, 0x17, 0x29, 0xa1, + 0x24, 0x4c, 0x95, 0x3a, 0xeb, 0x4d, 0xb5, 0xdc, 0xfa, 0xfa, 0xfa, 0x0b, 0x91, 0xf8, 0x95, 0x58, + 0xab, 0x58, 0x9a, 0x4c, 0x19, 0xa2, 0x46, 0xbd, 0xf6, 0x18, 0x01, 0xae, 0x4a, 0x57, 0x57, 0xd7, + 0x8f, 0xa3, 0xa3, 0xa3, 0xc8, 0xd2, 0x2d, 0x31, 0xfb, 0x94, 0x73, 0x5d, 0x72, 0xd1, 0x97, 0xea, + 0x96, 0x35, 0x20, 0x68, 0x63, 0x63, 0xe3, 0x8d, 0xa8, 0xc4, 0x71, 0x8e, 0xad, 0x07, 0xb0, 0xa4, + 0xe7, 0x49, 0x86, 0xcf, 0x8b, 0x97, 0x19, 0x82, 0xb4, 0x8e, 0x8e, 0x8e, 0xef, 0xbb, 0xbb, 0xbb, + 0xf1, 0x5a, 0x06, 0x90, 0x4a, 0x59, 0xc2, 0x78, 0x50, 0xbc, 0x05, 0x6a, 0x69, 0x69, 0xb9, 0x33, + 0x39, 0x39, 0xf9, 0x58, 0x54, 0xe2, 0x03, 0x17, 0x3a, 0x09, 0x15, 0x08, 0x0f, 0xdb, 0xac, 0x1b, + 0xef, 0x2d, 0x10, 0x14, 0xca, 0x69, 0xf7, 0x54, 0x1c, 0xb6, 0x1c, 0xde, 0x1e, 0x98, 0x05, 0x1b, + 0x4c, 0x86, 0x2e, 0x8a, 0xd7, 0x40, 0xed, 0xed, 0xed, 0xf7, 0x45, 0x2a, 0x4e, 0x3a, 0x02, 0xd9, + 0x30, 0x84, 0x34, 0x44, 0x5e, 0x03, 0xb5, 0xb5, 0xb5, 0xe1, 0xad, 0x5c, 0x1f, 0x06, 0x04, 0xb0, + 0xc1, 0x00, 0x14, 0x8c, 0x79, 0x0d, 0xd4, 0xda, 0xda, 0xfa, 0xb5, 0x08, 0xe5, 0x9b, 0x38, 0x21, + 0x08, 0x05, 0x88, 0x48, 0xf1, 0x1a, 0x48, 0x0e, 0x06, 0xbc, 0x02, 0x61, 0xbb, 0x41, 0xa7, 0x06, + 0x89, 0xab, 0x37, 0xec, 0xff, 0x09, 0x91, 0x3b, 0x9b, 0xd0, 0x01, 0x18, 0x1a, 0xb3, 0x84, 0x70, + 0x0d, 0x65, 0x2e, 0xf7, 0x3a, 0x43, 0xa1, 0x4a, 0x08, 0xa7, 0x4e, 0x1b, 0xc2, 0x6e, 0x9b, 0x40, + 0x43, 0xe8, 0x61, 0x05, 0xa2, 0x69, 0x90, 0xa7, 0xeb, 0x11, 0xb9, 0x24, 0x8f, 0x0c, 0x78, 0xda, + 0x11, 0xc9, 0x88, 0xad, 0x33, 0x0f, 0x40, 0xcc, 0x88, 0x0d, 0x63, 0xb7, 0x03, 0xb6, 0x3c, 0x00, + 0xd9, 0x49, 0x20, 0xa0, 0xdd, 0x9f, 0x4b, 0x20, 0x67, 0x56, 0x34, 0x59, 0x1e, 0x32, 0x44, 0x08, + 0x7a, 0xad, 0x3f, 0x52, 0xcf, 0x03, 0x10, 0x44, 0x57, 0x82, 0x31, 0xe3, 0x79, 0x01, 0x8a, 0x64, + 0x22, 0xec, 0x30, 0x20, 0x0c, 0xc8, 0x3b, 0x10, 0x39, 0x8c, 0x6f, 0x02, 0x99, 0x5b, 0xe1, 0x69, + 0xa5, 0x99, 0x21, 0x4f, 0x13, 0x63, 0x64, 0x35, 0x33, 0x64, 0x6e, 0x85, 0xa7, 0x95, 0x66, 0x86, + 0x3c, 0x4d, 0x8c, 0x91, 0xd5, 0xcc, 0x90, 0xb9, 0x15, 0x9e, 0x56, 0x9a, 0x19, 0xf2, 0x34, 0x31, + 0x46, 0x96, 0xd7, 0x19, 0x3a, 0x3e, 0x3e, 0xde, 0x37, 0x4a, 0x53, 0x56, 0xbc, 0x06, 0x92, 0xef, + 0x5c, 0x77, 0x84, 0x23, 0xee, 0x97, 0x25, 0x4e, 0x44, 0xaf, 0x81, 0xe4, 0xeb, 0x7e, 0x00, 0x9d, + 0x26, 0x40, 0x45, 0x60, 0xbd, 0x06, 0xda, 0xd9, 0xd9, 0x59, 0x0f, 0x81, 0x92, 0xa0, 0x90, 0x29, + 0x03, 0xe6, 0x35, 0xd0, 0xc2, 0xc2, 0xc2, 0x07, 0x11, 0x8b, 0x1f, 0x3b, 0x41, 0xb0, 0x11, 0x2d, + 0xf5, 0xd8, 0x52, 0xc0, 0xd7, 0xa7, 0xb1, 0xa3, 0x0d, 0x1c, 0x90, 0x03, 0xe1, 0x53, 0x67, 0x67, + 0xe7, 0x33, 0xc9, 0xd2, 0x5f, 0x22, 0x63, 0x57, 0xac, 0x24, 0x06, 0x38, 0x64, 0x4b, 0x9b, 0x86, + 0x3d, 0xf3, 0x36, 0x43, 0x6b, 0x6b, 0x6b, 0x73, 0x02, 0xf3, 0x59, 0x41, 0xf0, 0xc6, 0x6b, 0x00, + 0x19, 0x2e, 0x2f, 0x5e, 0x02, 0xc9, 0xaf, 0xb5, 0x4a, 0x23, 0x23, 0x23, 0xaf, 0x45, 0x2a, 0xb2, + 0x72, 0x24, 0xc6, 0xdf, 0xdb, 0x69, 0xf5, 0x04, 0xd4, 0x7d, 0x7e, 0xfe, 0xb3, 0x7e, 0x79, 0x79, + 0xf9, 0xfd, 0xec, 0xec, 0xec, 0x56, 0x08, 0xc3, 0x6d, 0x06, 0xe1, 0x4e, 0x08, 0x4d, 0xe4, 0x5d, + 0x86, 0x64, 0x9b, 0xad, 0xf6, 0xf7, 0xf7, 0xbf, 0x15, 0x91, 0xc8, 0x0e, 0xb6, 0x1c, 0x32, 0xa4, + 0x4f, 0xb9, 0xfc, 0x6c, 0x39, 0xf9, 0xdc, 0xd9, 0x1e, 0x1a, 0x1a, 0x1a, 0xdf, 0xde, 0xde, 0xfe, + 0x18, 0x02, 0x1d, 0x8a, 0xd7, 0xdb, 0xcd, 0xce, 0x90, 0xdd, 0xf6, 0x67, 0xcb, 0x01, 0x66, 0x6c, + 0x6c, 0xec, 0xa7, 0xf9, 0xf9, 0xf9, 0xbf, 0x43, 0x18, 0x64, 0x48, 0x03, 0x31, 0x33, 0x84, 0xa0, + 0x97, 0xb0, 0x8b, 0x82, 0x6f, 0x98, 0x1b, 0x5e, 0xb0, 0xcd, 0x06, 0x07, 0x07, 0x9f, 0xcb, 0xe7, + 0x0e, 0x8e, 0xe8, 0x4f, 0x62, 0x78, 0x87, 0x3b, 0x10, 0xd3, 0x9f, 0x41, 0x1a, 0x20, 0xae, 0x1e, + 0x7c, 0x65, 0x2e, 0xd7, 0x35, 0xa6, 0xe0, 0x34, 0x5b, 0x5a, 0x5a, 0x9a, 0x19, 0x18, 0x18, 0x78, + 0x5f, 0x2c, 0x16, 0xff, 0x11, 0x15, 0x00, 0x41, 0x66, 0x98, 0x1d, 0x3e, 0x3b, 0x00, 0xd0, 0x26, + 0x4d, 0x77, 0x69, 0x48, 0x86, 0xf0, 0xa1, 0xb9, 0xba, 0xba, 0xba, 0x30, 0x3c, 0x3c, 0xfc, 0x6e, + 0x71, 0x71, 0x11, 0xef, 0x6b, 0x78, 0xf8, 0x01, 0x81, 0xec, 0xc0, 0xd0, 0xc6, 0xb3, 0xe3, 0x02, + 0x92, 0x6e, 0x03, 0x87, 0x3a, 0x4b, 0x90, 0xb5, 0x2b, 0x07, 0x12, 0xf1, 0xf2, 0x0b, 0xe7, 0x52, + 0x51, 0x7e, 0xd8, 0x57, 0xdc, 0xda, 0xda, 0xfa, 0x63, 0x6e, 0x6e, 0x6e, 0x69, 0x62, 0x62, 0xe2, + 0x37, 0xf9, 0x55, 0x30, 0x44, 0x63, 0x5b, 0xe1, 0x14, 0x43, 0x1d, 0xd9, 0x81, 0xd9, 0x30, 0x71, + 0x50, 0x12, 0x1a, 0x3d, 0xc6, 0x6f, 0x14, 0x0a, 0x85, 0xef, 0x64, 0x00, 0x60, 0x38, 0xc2, 0x69, + 0xf8, 0xaf, 0x3e, 0xff, 0xb3, 0x4f, 0x2f, 0x5d, 0x55, 0x17, 0x2d, 0x0a, 0xcf, 0x05, 0x0d, 0x0f, + 0x3d, 0xa0, 0x08, 0x82, 0x36, 0x8f, 0x69, 0x5c, 0xa3, 0xaf, 0xe3, 0x73, 0xc3, 0xad, 0x27, 0xc3, + 0xd1, 0x02, 0x10, 0x4c, 0x86, 0x5f, 0x6b, 0x00, 0x06, 0xe2, 0xe9, 0x35, 0x88, 0xae, 0x4b, 0x48, + 0xaa, 0x42, 0x01, 0x0c, 0x86, 0x38, 0x6e, 0x23, 0x88, 0x66, 0x66, 0x00, 0x44, 0x10, 0x7e, 0x88, + 0x12, 0x84, 0x9e, 0x10, 0x7a, 0x4e, 0x5d, 0xe7, 0x1a, 0x41, 0x66, 0xf8, 0x00, 0xda, 0x3f, 0x10, + 0x02, 0x04, 0xcd, 0x5c, 0x90, 0xa1, 0xc2, 0x05, 0x29, 0x06, 0xe2, 0x98, 0x19, 0x02, 0xc1, 0xb3, + 0x0f, 0xe3, 0xb6, 0xe1, 0xda, 0x24, 0x28, 0x19, 0x0e, 0x0a, 0xd7, 0x0a, 0x80, 0x70, 0xba, 0x70, + 0xab, 0xe9, 0xec, 0x68, 0x98, 0x2c, 0x19, 0x32, 0x93, 0xab, 0xc5, 0x28, 0x14, 0x63, 0xc8, 0x12, + 0xcc, 0x95, 0x0d, 0xc6, 0xd1, 0x23, 0x9e, 0x26, 0x55, 0x53, 0xec, 0x35, 0xcc, 0x00, 0xb6, 0x1c, + 0x4e, 0x15, 0x02, 0x41, 0xb8, 0x86, 0x42, 0x60, 0x16, 0x18, 0xc4, 0xb3, 0xe8, 0x45, 0x21, 0x10, + 0x05, 0x7d, 0xa8, 0x53, 0x24, 0xeb, 0x1a, 0xc0, 0xae, 0x33, 0x96, 0x1e, 0xf3, 0xc4, 0x16, 0x00, + 0xe1, 0x4e, 0x69, 0x20, 0x66, 0x86, 0x20, 0xf4, 0xb1, 0x93, 0x24, 0x0c, 0x40, 0x04, 0x8a, 0xf6, + 0x14, 0x46, 0xef, 0x82, 0xc2, 0x18, 0xfb, 0x19, 0x07, 0x8f, 0x42, 0x7f, 0xde, 0xb2, 0xda, 0x00, + 0xc2, 0x85, 0x28, 0x08, 0x84, 0x78, 0xc0, 0xa1, 0x10, 0x84, 0xfe, 0xbc, 0x37, 0xfd, 0x5f, 0xbd, + 0x30, 0xeb, 0xf0, 0x2e, 0xd3, 0xe2, 0x75, 0x5d, 0xc7, 0x62, 0x65, 0xce, 0x13, 0xab, 0x42, 0x03, + 0x41, 0x38, 0x8c, 0x17, 0x11, 0x84, 0x3e, 0x76, 0x12, 0xc7, 0x00, 0xe7, 0xe0, 0x10, 0xdb, 0xf0, + 0xd5, 0x18, 0xe6, 0xe1, 0x1c, 0x9c, 0xd3, 0xd9, 0x47, 0x20, 0x04, 0xeb, 0xcc, 0x10, 0x82, 0x5e, + 0x4f, 0x92, 0xb6, 0xae, 0x05, 0xb0, 0xae, 0x3d, 0xea, 0x71, 0x86, 0x35, 0x38, 0xc6, 0x3a, 0xbc, + 0x2e, 0x9c, 0x4b, 0xf7, 0x05, 0xa7, 0x1c, 0x07, 0x70, 0xf2, 0x10, 0xc0, 0xf6, 0x65, 0x17, 0xa5, + 0x6c, 0x70, 0x5e, 0x86, 0xb3, 0x0d, 0x6f, 0xd7, 0xed, 0x36, 0xae, 0xd1, 0x7d, 0x9c, 0x83, 0x9e, + 0x63, 0x6c, 0x1b, 0xcf, 0x0c, 0xd9, 0x00, 0x6c, 0x9b, 0xc0, 0x1a, 0x2a, 0x7a, 0x71, 0xd6, 0x5d, + 0xde, 0xee, 0xc3, 0x92, 0xec, 0xd3, 0xcb, 0xbb, 0xfa, 0xcc, 0x38, 0x80, 0x10, 0x00, 0x03, 0x84, + 0x0e, 0xbe, 0x0c, 0x28, 0x3d, 0x9f, 0x4c, 0x5f, 0x36, 0x3f, 0xc7, 0x6c, 0x6f, 0xc7, 0xa1, 0xcd, + 0xc2, 0x58, 0xb6, 0x23, 0x1e, 0xa2, 0xf9, 0x86, 0xc0, 0xc1, 0xcb, 0x00, 0xe1, 0x5c, 0xf4, 0xb6, + 0x10, 0xdd, 0xd6, 0x75, 0xc4, 0xdb, 0xed, 0xb8, 0x39, 0xd8, 0x5f, 0xe6, 0x99, 0x21, 0xdd, 0x69, + 0x4f, 0x98, 0x05, 0xd0, 0xbe, 0x56, 0xcf, 0xcb, 0xba, 0x2b, 0xc6, 0xd5, 0xc7, 0x78, 0xf8, 0x4a, + 0xe3, 0x26, 0x16, 0x62, 0x79, 0xba, 0x99, 0xce, 0x3a, 0x55, 0xd2, 0x88, 0x4c, 0x13, 0x53, 0x26, + 0x17, 0xdb, 0x2d, 0xae, 0x64, 0xc9, 0x8c, 0x6b, 0x8e, 0xcc, 0x62, 0xc2, 0x49, 0xaa, 0xbd, 0x2e, + 0xb8, 0x1c, 0xa2, 0x6b, 0x15, 0xee, 0x82, 0xc9, 0xd2, 0x57, 0x13, 0x40, 0x96, 0x85, 0x72, 0x19, + 0xfb, 0x1f, 0xc1, 0xeb, 0xcc, 0x70, 0xd6, 0x0c, 0xd1, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, + 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; -#pragma mark - Images +static const u_int8_t FLEXRangeSliderRightHandle3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x78, 0x08, 0x06, 0x00, 0x00, 0x00, 0x5c, 0x89, 0xc4, + 0xad, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x44, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x02, 0x01, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x87, + 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0xa0, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x54, 0xdc, + 0xcf, 0x00, 0x00, 0x01, 0x59, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, 0x6f, 0x6d, + 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, + 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, + 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, 0x50, 0x20, + 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, + 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, + 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, + 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, + 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, 0x62, 0x6f, + 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, + 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, + 0x52, 0x44, 0x46, 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, + 0x3e, 0x0a, 0x4c, 0xc2, 0x27, 0x59, 0x00, 0x00, 0x0a, 0x85, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, + 0xed, 0x9c, 0xdf, 0xab, 0x55, 0x5b, 0x15, 0xc7, 0x3d, 0x76, 0xac, 0xae, 0x5e, 0xf2, 0x66, 0x3f, + 0x10, 0xcc, 0x20, 0xdf, 0xfc, 0x11, 0x41, 0x10, 0x17, 0xa9, 0x87, 0x5e, 0x82, 0x5e, 0xea, 0x41, + 0x5f, 0xc4, 0xd4, 0xb7, 0x7a, 0x88, 0x08, 0x2e, 0xa1, 0xf8, 0x24, 0x5c, 0x2e, 0x8a, 0x44, 0x0f, + 0x81, 0x7f, 0x41, 0x12, 0x78, 0xb1, 0x08, 0x12, 0x51, 0x1f, 0xa4, 0xa4, 0x30, 0xc9, 0xac, 0x38, + 0x84, 0x60, 0x04, 0xf9, 0x23, 0xf3, 0x57, 0x1c, 0x6f, 0xde, 0xce, 0x3d, 0xf7, 0x78, 0xfc, 0x71, + 0x1b, 0x9f, 0xb5, 0xf7, 0x77, 0x39, 0xf6, 0xdc, 0x73, 0xae, 0xbd, 0xf6, 0xda, 0xfb, 0x9c, 0xeb, + 0x5e, 0x6b, 0x4d, 0x98, 0x7b, 0xfc, 0x98, 0x63, 0xcc, 0x35, 0xe7, 0xe7, 0x8c, 0xb9, 0xd7, 0xde, + 0x47, 0xcf, 0x5a, 0xb1, 0xa2, 0x6d, 0x2d, 0x81, 0xe5, 0x24, 0x30, 0x65, 0x17, 0xa3, 0x4f, 0x7a, + 0xfb, 0x60, 0xb9, 0x37, 0x50, 0x17, 0x70, 0x21, 0xb7, 0x25, 0x07, 0xe9, 0xc1, 0xbd, 0xac, 0x95, + 0x37, 0x2a, 0x84, 0x51, 0xf3, 0xc3, 0x1f, 0x4a, 0x66, 0x03, 0x6b, 0x65, 0x74, 0x24, 0xed, 0x1c, + 0x17, 0xe0, 0x51, 0x36, 0x54, 0x25, 0xb7, 0x4a, 0x4e, 0x92, 0x82, 0x07, 0x37, 0x2e, 0x20, 0xc9, + 0x8b, 0x8d, 0x30, 0x30, 0x68, 0xd3, 0x83, 0xc6, 0xfd, 0xa5, 0x87, 0x89, 0xf5, 0x79, 0x3d, 0x3a, + 0xb0, 0x3e, 0xde, 0xe3, 0xe9, 0x18, 0x1f, 0x26, 0x44, 0x6d, 0x0c, 0xf9, 0xbc, 0xdb, 0xc3, 0x25, + 0x2a, 0xa6, 0xac, 0x3f, 0x8c, 0xc3, 0x4e, 0xcd, 0x11, 0x8b, 0xed, 0xf3, 0x4d, 0x9b, 0xe7, 0x63, + 0xd6, 0x43, 0x50, 0xa1, 0xdd, 0x97, 0xb8, 0x0c, 0x0e, 0x36, 0xe6, 0xfb, 0x33, 0xb3, 0xe9, 0x4f, + 0xad, 0xfb, 0xf5, 0x79, 0x00, 0x29, 0xbf, 0xa5, 0xf4, 0x35, 0x62, 0x7d, 0x6e, 0x5f, 0x40, 0x91, + 0x63, 0xea, 0x03, 0x6b, 0x45, 0x01, 0xcb, 0x3d, 0x66, 0xcb, 0x59, 0xb4, 0x3e, 0x67, 0xfd, 0x9d, + 0x27, 0x4f, 0x9e, 0xfc, 0xf3, 0xf1, 0xe3, 0xc7, 0xff, 0xb8, 0x7f, 0xff, 0xfe, 0xef, 0xf7, 0xef, + 0xdf, 0xff, 0xbb, 0x53, 0xa7, 0x4e, 0xbd, 0x6f, 0xeb, 0xa1, 0x0a, 0x81, 0xb7, 0xd8, 0xd5, 0x4d, + 0xe4, 0x2d, 0xdc, 0x4b, 0x68, 0xe7, 0x81, 0x4e, 0x29, 0x13, 0xe3, 0xc2, 0xbb, 0xaa, 0x2d, 0x70, + 0x22, 0xda, 0xf3, 0xe7, 0xcf, 0xdf, 0x9b, 0x9b, 0x9b, 0x3b, 0x7d, 0xe3, 0xc6, 0x8d, 0xef, 0x1f, + 0x3c, 0x78, 0x70, 0x93, 0x2d, 0xff, 0x35, 0xeb, 0x6b, 0xac, 0xaf, 0xb2, 0xce, 0xc9, 0xf9, 0x88, + 0xeb, 0xdc, 0xf0, 0x7c, 0xa7, 0xba, 0x8a, 0xba, 0x0d, 0x0f, 0xd9, 0x26, 0x82, 0x5a, 0xb0, 0x48, + 0x83, 0xf8, 0xee, 0xbd, 0x7b, 0xf7, 0x0e, 0xef, 0xd8, 0xb1, 0xe3, 0x73, 0xb6, 0xdd, 0x4f, 0x5a, + 0x07, 0x20, 0xf0, 0x96, 0x0f, 0x60, 0xb0, 0xa6, 0x89, 0x32, 0x9f, 0x3d, 0x7b, 0x76, 0xf7, 0xfa, + 0xf5, 0xeb, 0x6f, 0xac, 0x5f, 0xbf, 0xfe, 0x33, 0x06, 0x6d, 0xad, 0x75, 0xde, 0xaf, 0x43, 0x80, + 0xbe, 0xf2, 0xd0, 0x8b, 0x2a, 0x8f, 0xb1, 0x72, 0x6d, 0xa2, 0x48, 0x25, 0x16, 0xbb, 0xb0, 0xb0, + 0xf0, 0x97, 0x63, 0xc7, 0x8e, 0x7d, 0xd1, 0x76, 0x4c, 0xf5, 0xbd, 0x62, 0x3d, 0x84, 0xc7, 0x31, + 0xf6, 0x00, 0x8b, 0xe0, 0x59, 0x68, 0x89, 0x96, 0x58, 0xcb, 0xc4, 0xb9, 0x9f, 0x3e, 0x7d, 0x7a, + 0xef, 0xfc, 0xf9, 0xf3, 0xdf, 0xb4, 0x2d, 0x7f, 0xca, 0xba, 0x7f, 0xef, 0xf3, 0xc7, 0x77, 0x6c, + 0xf0, 0x5e, 0xba, 0xbb, 0x6a, 0x89, 0x9f, 0x75, 0x32, 0xc4, 0x7e, 0xda, 0x0b, 0xd7, 0xae, 0x5d, + 0xfb, 0xd1, 0x96, 0x2d, 0x5b, 0x4e, 0x5a, 0xd0, 0x82, 0xf5, 0xc7, 0xd6, 0x75, 0xd7, 0x0c, 0x25, + 0xf3, 0xc8, 0x87, 0x1e, 0xb6, 0xa2, 0xb1, 0x15, 0xb5, 0x02, 0xa7, 0x9d, 0x5f, 0xbd, 0x7a, 0xf5, + 0x07, 0xdb, 0xb6, 0x6d, 0xfb, 0x85, 0xd9, 0xef, 0x59, 0xe7, 0x63, 0x0b, 0x0d, 0x10, 0x82, 0x21, + 0x29, 0x3f, 0x32, 0xd6, 0x7c, 0x5c, 0xcf, 0x38, 0xa5, 0x5b, 0xbb, 0x66, 0x15, 0xf7, 0x93, 0xd3, + 0xa7, 0x4f, 0x7f, 0xc5, 0x36, 0xa6, 0xbb, 0x2d, 0x7b, 0xd4, 0xfb, 0x9a, 0x74, 0x24, 0xad, 0xfc, + 0x0d, 0xa1, 0x13, 0xdf, 0x79, 0x9d, 0xb8, 0x37, 0xb3, 0x92, 0x0b, 0xe6, 0x3d, 0xef, 0xf0, 0xe1, + 0xc3, 0x5f, 0xb6, 0x5d, 0x7e, 0xda, 0x3a, 0x5f, 0x2b, 0xf9, 0xbc, 0x17, 0x7e, 0xe6, 0x2b, 0xf3, + 0x9e, 0x67, 0x69, 0xfd, 0xad, 0x96, 0x47, 0x55, 0xdb, 0x9c, 0x9f, 0x9f, 0x9f, 0xd9, 0xb8, 0x71, + 0xe3, 0xb7, 0x1e, 0x3e, 0x7c, 0xf8, 0x3f, 0xf3, 0xe9, 0x5b, 0x07, 0xc3, 0xc3, 0x1c, 0xdb, 0xe8, + 0x71, 0xad, 0xe5, 0x51, 0x15, 0xb8, 0xd5, 0xab, 0x57, 0x7f, 0xe9, 0xc2, 0x85, 0x0b, 0xdf, 0x31, + 0x7b, 0xb5, 0x75, 0xee, 0xae, 0xda, 0x6f, 0xea, 0xd8, 0x2a, 0xd5, 0xcb, 0xe8, 0x51, 0xd6, 0x44, + 0x3e, 0xb0, 0x56, 0xfa, 0xe6, 0xcd, 0x9b, 0xdf, 0xd8, 0xbe, 0x7d, 0xfb, 0x27, 0x6c, 0x53, 0xc0, + 0x63, 0xbf, 0x1e, 0x84, 0xd7, 0xd9, 0x77, 0x68, 0xe3, 0x8b, 0xb6, 0xda, 0x83, 0x9b, 0x9e, 0x9e, + 0xfe, 0xec, 0xf1, 0xe3, 0xc7, 0xbf, 0x6b, 0xbb, 0xe7, 0x7d, 0x4e, 0x55, 0x07, 0x20, 0x0f, 0xc9, + 0xeb, 0x31, 0x50, 0x7d, 0xe3, 0xb5, 0x07, 0x07, 0x85, 0x4d, 0x9b, 0x36, 0x7d, 0x6f, 0xe7, 0xce, + 0x9d, 0xdc, 0x24, 0xa8, 0x3a, 0xbe, 0x45, 0x08, 0x9c, 0xa4, 0xb9, 0x72, 0x90, 0x7d, 0x90, 0x18, + 0x0c, 0x5b, 0x23, 0xc0, 0xad, 0x5c, 0xb9, 0xf2, 0xd5, 0x03, 0x07, 0x0e, 0x7c, 0xc3, 0x36, 0x4f, + 0xd5, 0x09, 0x9c, 0x67, 0x11, 0xc2, 0x0a, 0x6d, 0x1f, 0x9b, 0xe9, 0x8d, 0x00, 0xc7, 0x4e, 0xad, + 0xea, 0x00, 0xc7, 0x51, 0xe5, 0x17, 0x01, 0xec, 0x5b, 0xd5, 0xe6, 0x21, 0x79, 0xdd, 0x42, 0x7a, + 0x5a, 0xcf, 0x58, 0x63, 0xc0, 0xad, 0x5b, 0xb7, 0xee, 0xab, 0x5b, 0xb7, 0x6e, 0x7d, 0xd5, 0x50, + 0x7c, 0xd4, 0xba, 0xbe, 0xf4, 0x0b, 0x06, 0x52, 0x7a, 0x0f, 0xad, 0x94, 0xd1, 0x18, 0x70, 0x76, + 0x5c, 0x5f, 0x39, 0x7a, 0xf4, 0xe8, 0xd7, 0x0c, 0x04, 0x15, 0x27, 0x70, 0x70, 0x09, 0x81, 0xc9, + 0x96, 0x24, 0xa6, 0xaf, 0x35, 0x06, 0x1c, 0x3b, 0xb7, 0x8f, 0x26, 0xaf, 0x9b, 0xe0, 0xb8, 0xd2, + 0x01, 0x13, 0xeb, 0xe6, 0x1e, 0xdc, 0x1a, 0x05, 0x6e, 0xed, 0xda, 0xb5, 0x5f, 0x30, 0x24, 0x54, + 0x1b, 0x5f, 0xbd, 0xd8, 0x7b, 0xaa, 0xaa, 0xe4, 0x97, 0xb4, 0xd0, 0xac, 0xe5, 0x76, 0xa3, 0xc0, + 0xad, 0x59, 0xb3, 0xe6, 0xf3, 0xb6, 0x7d, 0xaa, 0x4d, 0x47, 0x15, 0x10, 0x39, 0x8c, 0x0c, 0x4d, + 0xc9, 0x17, 0x26, 0x69, 0x4c, 0x5b, 0xb5, 0x6a, 0x15, 0xdf, 0x20, 0x80, 0xc6, 0xbe, 0x7d, 0xc5, + 0x85, 0xf0, 0xa2, 0xdf, 0x4f, 0x3d, 0xa8, 0x46, 0x55, 0x9c, 0xdd, 0x20, 0xf8, 0x35, 0x13, 0x7b, + 0x06, 0x9e, 0xaa, 0x4d, 0xd2, 0x73, 0x19, 0xa8, 0x37, 0x0d, 0x1c, 0xef, 0x6d, 0x80, 0x62, 0xdf, + 0x74, 0x5f, 0x69, 0x5e, 0xb7, 0xa1, 0x7c, 0x2c, 0xf4, 0x33, 0x96, 0x25, 0x67, 0x4a, 0x83, 0x5e, + 0x04, 0x4c, 0x00, 0x3d, 0x18, 0x74, 0xf5, 0x42, 0x24, 0x8d, 0xaa, 0xb8, 0x2e, 0x09, 0x81, 0xf1, + 0x7b, 0xf7, 0xf0, 0x0a, 0x81, 0x69, 0xd0, 0x27, 0xcb, 0xd7, 0x04, 0x29, 0x78, 0x92, 0xec, 0x79, + 0x28, 0x78, 0x4d, 0x04, 0xe7, 0x61, 0xa9, 0x48, 0x04, 0x4d, 0x32, 0xf4, 0xcb, 0xce, 0x65, 0x13, + 0xc1, 0xe5, 0x9b, 0xef, 0x2a, 0xa5, 0x61, 0xf9, 0xc4, 0x26, 0x82, 0x53, 0xc5, 0x49, 0x8a, 0x87, + 0x07, 0x58, 0x34, 0x96, 0xc5, 0x37, 0x11, 0x9c, 0x40, 0x8d, 0x24, 0x5b, 0x70, 0x1d, 0x7c, 0xbe, + 0xda, 0x4a, 0x01, 0x6d, 0x22, 0x38, 0x7f, 0x0c, 0xbd, 0x0e, 0xb0, 0xd2, 0x00, 0x9b, 0x08, 0x4e, + 0x15, 0x55, 0x1a, 0x92, 0x12, 0xbc, 0x6c, 0x32, 0x38, 0xcf, 0x61, 0x68, 0xbd, 0x05, 0x37, 0x34, + 0xb2, 0x4e, 0x42, 0x0b, 0xee, 0x05, 0xb8, 0xa1, 0x8e, 0x6e, 0x0b, 0xee, 0x05, 0xb8, 0x94, 0x16, + 0x05, 0xda, 0x82, 0x4b, 0xe1, 0x1a, 0xe0, 0x6f, 0xc1, 0xf5, 0x03, 0x8a, 0x56, 0x58, 0x18, 0xd6, + 0x44, 0x70, 0x31, 0x30, 0x31, 0x5f, 0xc8, 0xaa, 0xc7, 0x6e, 0x22, 0xb8, 0x1e, 0x00, 0x55, 0x8d, + 0x16, 0x5c, 0x45, 0x72, 0x2d, 0xb8, 0x16, 0x5c, 0x45, 0x02, 0x15, 0xd3, 0xda, 0x8a, 0x6b, 0xc1, + 0x55, 0x24, 0x50, 0x31, 0xad, 0xad, 0xb8, 0x16, 0x5c, 0x45, 0x02, 0x15, 0xd3, 0xda, 0x8a, 0x6b, + 0xc1, 0x55, 0x24, 0x50, 0x31, 0xad, 0xad, 0xb8, 0x16, 0x5c, 0x45, 0x02, 0x15, 0xd3, 0xda, 0x8a, + 0x6b, 0xc1, 0x55, 0x24, 0x50, 0x31, 0xad, 0xad, 0xb8, 0x16, 0x5c, 0x45, 0x02, 0x15, 0xd3, 0xda, + 0x8a, 0x6b, 0xc1, 0x55, 0x24, 0x50, 0x31, 0xad, 0x51, 0x15, 0x67, 0x4f, 0xc8, 0x79, 0xd2, 0xe5, + 0x34, 0xf0, 0x7f, 0x95, 0x0f, 0xe2, 0xd9, 0x28, 0x70, 0xf6, 0x64, 0x9c, 0x79, 0x03, 0x12, 0x83, + 0x16, 0xf3, 0x15, 0xb2, 0x6b, 0x14, 0xb8, 0xc5, 0xc5, 0x45, 0xfe, 0x36, 0x9f, 0x56, 0x04, 0xaa, + 0x68, 0xac, 0x93, 0x6d, 0xaf, 0x8d, 0x02, 0x67, 0x4f, 0x03, 0xfb, 0x57, 0x77, 0xe7, 0x3c, 0x4a, + 0x6d, 0xa4, 0xd6, 0x28, 0x70, 0xb3, 0xb3, 0xb3, 0xb7, 0x8c, 0x16, 0x15, 0x05, 0xb8, 0x52, 0x95, + 0x95, 0x8a, 0x6b, 0x14, 0xb8, 0x2b, 0x57, 0xae, 0xfc, 0xd5, 0x41, 0x03, 0x9c, 0x87, 0xe7, 0x75, + 0x1b, 0x2a, 0x6e, 0xb5, 0x7e, 0xee, 0x88, 0xdf, 0xba, 0xdd, 0x18, 0x16, 0xec, 0xaf, 0xa4, 0xbf, + 0x7d, 0xeb, 0xd6, 0xad, 0x87, 0xe6, 0xff, 0xaf, 0x75, 0x1e, 0x1f, 0xc4, 0xb3, 0x97, 0x78, 0xfa, + 0x21, 0x15, 0xa8, 0x2a, 0x94, 0x14, 0x58, 0x01, 0xed, 0x91, 0x8d, 0xa9, 0xb8, 0x3b, 0x77, 0xee, + 0xfc, 0xc9, 0xa0, 0xf1, 0xa0, 0x2a, 0x9e, 0xb3, 0xe9, 0xe1, 0x98, 0x39, 0x7c, 0x6b, 0x0c, 0x38, + 0x3b, 0xa6, 0x7f, 0x30, 0x3c, 0x54, 0x0d, 0x9f, 0xe5, 0x54, 0x61, 0xc3, 0x13, 0xeb, 0x66, 0x34, + 0x02, 0x9c, 0x3d, 0x67, 0x69, 0xfe, 0xc8, 0x91, 0x23, 0x80, 0xd3, 0x93, 0x5d, 0x55, 0x71, 0x92, + 0x02, 0xa8, 0xe3, 0x28, 0x3b, 0x29, 0x1b, 0x01, 0xee, 0xf2, 0xe5, 0xcb, 0x6f, 0x5b, 0xc5, 0xbd, + 0x6b, 0x14, 0xc2, 0xa3, 0x2a, 0x30, 0xa5, 0x81, 0x29, 0xa1, 0xf6, 0xe0, 0xec, 0x31, 0x90, 0xb3, + 0xbb, 0x77, 0xef, 0xfe, 0x95, 0x6d, 0x98, 0x23, 0xca, 0x8d, 0x40, 0x55, 0x37, 0x34, 0x2c, 0x41, + 0x43, 0xd6, 0x1e, 0x9c, 0x3d, 0xfe, 0xf1, 0x67, 0x37, 0x6f, 0xde, 0xe4, 0xab, 0x16, 0x77, 0x50, + 0x3d, 0x80, 0xd9, 0xdf, 0x20, 0xe0, 0x40, 0xf3, 0x20, 0xd1, 0x43, 0x3b, 0x0b, 0xd2, 0x4b, 0xad, + 0x3f, 0x8e, 0xd8, 0x07, 0xde, 0xbf, 0x6f, 0xd8, 0xb0, 0xe1, 0x87, 0xf6, 0x10, 0x66, 0xc0, 0xf1, + 0x75, 0x8b, 0x8f, 0x20, 0x3c, 0x0e, 0x8d, 0x23, 0x9b, 0xfa, 0x18, 0xa2, 0xf7, 0x3d, 0x81, 0x8b, + 0x42, 0xac, 0x6d, 0xc5, 0x71, 0x44, 0xf7, 0xed, 0xdb, 0xf7, 0xa6, 0x41, 0xe3, 0x88, 0x0a, 0x94, + 0x8e, 0x2b, 0x70, 0x7c, 0xf3, 0x90, 0x62, 0x7e, 0xef, 0xcb, 0xf4, 0x5a, 0x82, 0xb3, 0x0f, 0xbb, + 0x8b, 0xf6, 0xb4, 0xc2, 0x37, 0xcf, 0x9c, 0x39, 0xf3, 0x1f, 0xdb, 0xa5, 0xa0, 0xf1, 0xac, 0x4c, + 0x7f, 0x44, 0x55, 0x49, 0x29, 0x68, 0x7d, 0xb0, 0xbc, 0xa3, 0x96, 0x47, 0xf5, 0xc4, 0x89, 0x13, + 0x3f, 0xb6, 0x1b, 0xc2, 0x6f, 0x6c, 0xa3, 0x1c, 0x4b, 0x8e, 0xa9, 0x3a, 0x36, 0x55, 0xe7, 0x01, + 0x52, 0x7d, 0xfe, 0x78, 0x7a, 0xa0, 0x31, 0xa8, 0x99, 0xaf, 0x56, 0x8f, 0xcf, 0xa0, 0xd2, 0x4e, + 0x9e, 0x3c, 0xf9, 0xd3, 0x2e, 0x34, 0x2a, 0x8d, 0xce, 0x4d, 0x81, 0x0e, 0x30, 0x41, 0x32, 0x35, + 0x6b, 0x82, 0x14, 0xda, 0x02, 0x26, 0x7f, 0x9f, 0xac, 0xcd, 0x51, 0xe5, 0x3d, 0xed, 0xd0, 0xa1, + 0x43, 0x07, 0x0c, 0xda, 0x6f, 0x6d, 0x97, 0x1c, 0x4b, 0x60, 0x21, 0xe9, 0xdc, 0x08, 0x74, 0x33, + 0x30, 0x35, 0xbb, 0x63, 0xc6, 0xa0, 0x31, 0xa6, 0x26, 0x78, 0x92, 0xf2, 0x67, 0xb2, 0x16, 0x15, + 0xc7, 0xdd, 0x73, 0xef, 0xde, 0xbd, 0x6f, 0x9d, 0x3d, 0x7b, 0x76, 0xd6, 0x76, 0xa5, 0x0a, 0x13, + 0x3c, 0x01, 0xf4, 0xc7, 0xd3, 0xc3, 0x08, 0x01, 0xf6, 0x00, 0x4a, 0x19, 0x13, 0x0d, 0x8e, 0x2a, + 0x3b, 0x77, 0xee, 0xdc, 0xcf, 0x77, 0xed, 0xda, 0x75, 0xde, 0xee, 0x9e, 0x54, 0x94, 0xde, 0xc3, + 0x04, 0x8d, 0xa3, 0x8a, 0x1e, 0x42, 0x13, 0x2c, 0x01, 0xf4, 0xb6, 0x7c, 0x29, 0x66, 0x99, 0x7f, + 0x22, 0xc1, 0xf1, 0xdd, 0xf3, 0xe2, 0xc5, 0x8b, 0xbf, 0xdc, 0xb3, 0x67, 0xcf, 0xaf, 0x6f, 0xdf, + 0xbe, 0xad, 0xbb, 0x26, 0x92, 0xf7, 0x31, 0x40, 0xa1, 0xcb, 0x06, 0x28, 0xe0, 0x3c, 0x1c, 0x33, + 0xf3, 0x0f, 0xb8, 0xa5, 0x40, 0x91, 0xe0, 0xdb, 0xc4, 0x80, 0xe3, 0xf7, 0x69, 0x06, 0xe9, 0xcf, + 0x97, 0x2e, 0x5d, 0xba, 0x6c, 0xcf, 0x81, 0xfb, 0xe3, 0xcc, 0xcc, 0xcc, 0x9c, 0x6d, 0x04, 0x28, + 0xc0, 0xa2, 0xa3, 0xeb, 0x98, 0xaa, 0xf2, 0xf0, 0x17, 0x55, 0x5b, 0x0a, 0x9a, 0xfc, 0x92, 0x36, + 0x4d, 0xd6, 0x72, 0xfb, 0xa5, 0x03, 0xc7, 0x3f, 0xe1, 0x59, 0x45, 0xbd, 0x6f, 0x47, 0x6f, 0xee, + 0xd1, 0xa3, 0x47, 0xff, 0x7e, 0xf0, 0xe0, 0xc1, 0x6d, 0x83, 0xf5, 0x37, 0xfb, 0x5c, 0x36, 0x73, + 0xf7, 0xee, 0x5d, 0xaa, 0x89, 0xc5, 0x73, 0x77, 0x44, 0x57, 0x35, 0x01, 0x48, 0xd0, 0x54, 0x69, + 0x82, 0x46, 0x7c, 0xac, 0x9b, 0x3b, 0xe9, 0x67, 0xac, 0xb0, 0x4d, 0x4f, 0x4d, 0x4d, 0x7d, 0xdd, + 0x22, 0x78, 0xe6, 0x10, 0x8d, 0xbb, 0x2c, 0x9d, 0x3f, 0xd1, 0xd1, 0x9f, 0xe9, 0x84, 0xba, 0x0d, + 0xe5, 0x63, 0xe8, 0xa3, 0xb6, 0xfc, 0xa7, 0x18, 0x99, 0x48, 0x63, 0x48, 0x60, 0x09, 0x14, 0x55, + 0x44, 0xc7, 0x56, 0xa5, 0x01, 0x52, 0x5d, 0xe3, 0xfe, 0xf3, 0x99, 0xd7, 0x05, 0xd2, 0x52, 0xf2, + 0x23, 0x8b, 0x4e, 0xf3, 0xd7, 0xec, 0x78, 0x22, 0xaf, 0x54, 0x1c, 0x3f, 0x19, 0x1a, 0xc0, 0x98, + 0xdc, 0x83, 0xf3, 0xf0, 0x88, 0x91, 0x1d, 0xea, 0xd8, 0x55, 0x9a, 0x16, 0xe9, 0x73, 0xe5, 0x43, + 0xb2, 0x1e, 0xbf, 0x61, 0x74, 0x41, 0x61, 0xdd, 0xea, 0x00, 0x93, 0xae, 0x71, 0xf2, 0x35, 0x87, + 0x74, 0x24, 0x2d, 0x65, 0x77, 0x46, 0x4b, 0xbc, 0x02, 0x8e, 0x8b, 0x72, 0x31, 0x1e, 0x0d, 0x06, + 0x34, 0x9a, 0xaa, 0xcc, 0x4b, 0xf9, 0xb3, 0x80, 0x25, 0x7c, 0x89, 0x6d, 0x4e, 0xf0, 0x54, 0x71, + 0x48, 0x81, 0x92, 0x64, 0x0f, 0x02, 0xcb, 0x1c, 0xca, 0xf1, 0x90, 0x52, 0xba, 0xb6, 0xa3, 0x6b, + 0xcb, 0xf6, 0xb2, 0x67, 0x0c, 0x70, 0xbc, 0x37, 0x20, 0xc3, 0x4a, 0xf3, 0xd0, 0xc6, 0x5d, 0x69, + 0x7e, 0x41, 0xa1, 0x1e, 0x6e, 0x4e, 0x00, 0x04, 0x0d, 0x40, 0xc0, 0x42, 0x7a, 0x1f, 0xb6, 0x72, + 0x95, 0x23, 0x29, 0xbf, 0xa4, 0x85, 0xf6, 0x34, 0xfc, 0xbe, 0x85, 0xb6, 0x1f, 0xcb, 0x74, 0x80, + 0x71, 0x07, 0x42, 0x86, 0xa0, 0xbc, 0x4d, 0xf0, 0x52, 0xc2, 0xf3, 0x0b, 0x95, 0xee, 0x37, 0x0d, + 0x14, 0x3a, 0x3e, 0xe9, 0xb2, 0x7d, 0x5c, 0x19, 0x9d, 0xf9, 0xc3, 0x6e, 0xae, 0xcc, 0xe7, 0x25, + 0x7a, 0xb2, 0x09, 0x5c, 0xf8, 0x04, 0x3f, 0x12, 0xc2, 0x63, 0x8b, 0xcf, 0xc3, 0xc3, 0x5e, 0x8a, + 0xa6, 0x4d, 0x31, 0xb7, 0x40, 0x78, 0x89, 0xae, 0xae, 0xd8, 0x50, 0x2a, 0x1e, 0xbf, 0xd7, 0xc3, + 0x38, 0xae, 0x41, 0xc3, 0x5f, 0xd4, 0xfa, 0xc6, 0x01, 0xc7, 0x51, 0x05, 0x48, 0xd1, 0x51, 0xd5, + 0xa4, 0xcb, 0x05, 0x8e, 0xeb, 0x85, 0x9b, 0xf4, 0x76, 0x38, 0x9e, 0x82, 0x93, 0xf2, 0x6b, 0x3f, + 0x21, 0x90, 0xd0, 0x56, 0x5c, 0x9f, 0x04, 0x1c, 0xef, 0x13, 0x00, 0x09, 0xe1, 0x11, 0x2c, 0xbf, + 0x74, 0x24, 0x6d, 0x1c, 0x00, 0x53, 0x8b, 0xf4, 0x7e, 0xe9, 0x5e, 0x86, 0x3a, 0xb6, 0x7a, 0x0a, + 0x94, 0xc6, 0xc3, 0x5c, 0xf6, 0x22, 0x1f, 0x7a, 0xac, 0x45, 0xc7, 0x01, 0xe7, 0x07, 0xb8, 0xb0, + 0x60, 0x21, 0x19, 0x13, 0x24, 0x49, 0x73, 0xe5, 0x3e, 0xf4, 0x2a, 0xcd, 0x5f, 0x33, 0x96, 0xef, + 0xc7, 0xd1, 0x65, 0x7b, 0x29, 0xff, 0x30, 0x92, 0x6b, 0x29, 0x5e, 0x3a, 0x92, 0xa6, 0xb9, 0x3b, + 0xd6, 0x80, 0x57, 0xc0, 0x01, 0x8b, 0x63, 0x4a, 0xa2, 0x87, 0x26, 0x50, 0xa1, 0xb4, 0xb0, 0x91, + 0xc1, 0x31, 0x47, 0x6a, 0xa1, 0xde, 0x2f, 0x3d, 0x26, 0xf1, 0xc5, 0xba, 0xe6, 0x0e, 0xc7, 0xbc, + 0x5f, 0x3a, 0x92, 0xa6, 0xf9, 0x3b, 0xd6, 0x8b, 0xd7, 0x94, 0x3f, 0xbb, 0x9b, 0x32, 0xa8, 0x4a, + 0x53, 0x0a, 0xbe, 0x10, 0x98, 0x6c, 0xc5, 0x2c, 0x95, 0xf4, 0x8b, 0x95, 0x1e, 0x93, 0xf8, 0xbc, + 0x5f, 0xb6, 0x24, 0xeb, 0x2b, 0xd2, 0xb5, 0x7e, 0xcd, 0x21, 0xbb, 0x94, 0xf4, 0x47, 0x95, 0x09, + 0x80, 0xa3, 0x2e, 0x5b, 0x13, 0x7f, 0x98, 0xe0, 0xd8, 0x0c, 0xeb, 0xd0, 0x5a, 0xbc, 0x0c, 0xfd, + 0x31, 0x5b, 0xf9, 0x5e, 0x86, 0x3a, 0xb6, 0x6f, 0xba, 0x86, 0xf7, 0xe5, 0xba, 0xc0, 0x11, 0x24, + 0x30, 0x5e, 0x97, 0x0f, 0x59, 0x38, 0x51, 0x3e, 0xe3, 0xe8, 0x8a, 0xbf, 0x4e, 0x4c, 0xc7, 0x27, + 0xbf, 0x97, 0x29, 0x9d, 0x15, 0xf9, 0x31, 0xad, 0x50, 0x3e, 0xd9, 0x5e, 0x16, 0x8d, 0x65, 0x71, + 0x7a, 0x8f, 0x13, 0x20, 0x12, 0x04, 0x49, 0x92, 0x40, 0x8d, 0x67, 0x49, 0x4b, 0xfc, 0x12, 0x2e, + 0x5a, 0x76, 0x19, 0x99, 0x8a, 0x61, 0xc9, 0x1a, 0x0b, 0xf5, 0x70, 0x3b, 0x3e, 0x2e, 0x1c, 0xcb, + 0x6d, 0x55, 0x9c, 0x26, 0x13, 0x2c, 0x49, 0xfc, 0x5e, 0xcf, 0x13, 0xbb, 0x7e, 0x6f, 0x0f, 0xd2, + 0x4b, 0x2d, 0xa8, 0x3b, 0x49, 0x18, 0x2b, 0x5b, 0x92, 0x30, 0xf4, 0xd0, 0x96, 0x3f, 0x26, 0xf1, + 0xd1, 0x7c, 0x4e, 0xc7, 0x53, 0xe1, 0xd5, 0x83, 0xf3, 0xe9, 0x4c, 0xae, 0x2a, 0x0b, 0x2f, 0x94, + 0xf2, 0xfb, 0xfc, 0xb2, 0x7a, 0x38, 0x77, 0x98, 0xe7, 0xc7, 0x63, 0x7a, 0x59, 0x9f, 0xe6, 0xf5, + 0xf1, 0xf2, 0x79, 0x39, 0x68, 0x3c, 0x8f, 0x0d, 0xc1, 0x91, 0x18, 0x82, 0x91, 0xad, 0xa4, 0xd2, + 0x93, 0x2b, 0x61, 0x48, 0x19, 0x9b, 0xdf, 0xfb, 0x86, 0xd5, 0xb9, 0xbc, 0xcf, 0x89, 0x2d, 0x67, + 0xd0, 0x78, 0x5f, 0x4e, 0x08, 0x4e, 0x17, 0xf1, 0xb0, 0xc2, 0x49, 0xfd, 0x58, 0xdf, 0x84, 0x43, + 0x3a, 0xc2, 0xb9, 0x63, 0xe9, 0x61, 0x8c, 0xb7, 0xbd, 0xae, 0xb5, 0xfb, 0x39, 0xc2, 0x71, 0x3f, + 0x26, 0xbd, 0x4c, 0x8c, 0x62, 0x73, 0x19, 0x03, 0x97, 0x0f, 0x26, 0x94, 0x4a, 0x17, 0x4a, 0xcc, + 0x35, 0xc8, 0x1d, 0xbb, 0x56, 0xe8, 0x0b, 0x6d, 0xcd, 0x99, 0xf2, 0x6b, 0x1c, 0x59, 0x26, 0xc6, + 0xc7, 0xe7, 0x3a, 0xe0, 0x68, 0x95, 0x27, 0xe8, 0xa4, 0x2f, 0xd9, 0x6b, 0x6a, 0x5d, 0xc3, 0xfa, + 0x63, 0x0b, 0x4c, 0xcd, 0x11, 0x8b, 0xed, 0xf3, 0xe9, 0xd7, 0x49, 0x0c, 0x8c, 0xf3, 0x08, 0xf6, + 0x5d, 0x68, 0x44, 0xc7, 0xa0, 0x4d, 0x0e, 0x1a, 0xf7, 0x97, 0x1f, 0x26, 0xd6, 0xe7, 0xf5, 0xe8, + 0x1e, 0x5c, 0xcf, 0x40, 0x81, 0x31, 0x2e, 0xc0, 0xa3, 0x6c, 0xa0, 0x4a, 0x6e, 0x95, 0x9c, 0x24, + 0x06, 0xc0, 0xa9, 0x8d, 0x0b, 0x88, 0xe6, 0x1b, 0x97, 0x1c, 0x75, 0xc3, 0xa3, 0xe6, 0x47, 0xf7, + 0x01, 0xac, 0x97, 0x15, 0x58, 0x74, 0xc1, 0x25, 0x9d, 0x4b, 0x02, 0xcb, 0x5f, 0x5b, 0x37, 0x07, + 0xef, 0x9b, 0x44, 0x7d, 0xc9, 0x41, 0x4d, 0x22, 0x94, 0x76, 0xcd, 0x75, 0x22, 0xf0, 0x7f, 0x3a, + 0xd5, 0x8c, 0xbe, 0x72, 0x32, 0xcf, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderTrack2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x5f, 0x1f, + 0x96, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x47, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x63, 0x3c, 0x75, 0xea, 0xac, + 0xc7, 0xbf, 0x7f, 0xff, 0x67, 0xff, 0xff, 0xcf, 0x20, 0xc3, 0x40, 0x01, 0x60, 0x64, 0x64, 0x78, + 0xc2, 0xc0, 0xc0, 0x9c, 0xce, 0x78, 0xe2, 0xc4, 0x99, 0x47, 0x40, 0xc3, 0x64, 0x29, 0x30, 0x0b, + 0xae, 0x15, 0x64, 0x28, 0x13, 0x90, 0xc7, 0x08, 0x17, 0xa1, 0x9c, 0xf1, 0x1f, 0x68, 0x20, 0xd0, + 0x99, 0x60, 0xe7, 0x52, 0x66, 0x1a, 0xd8, 0x75, 0x4c, 0x8c, 0x69, 0x00, 0xf4, 0x9d, 0x13, 0x90, + 0xe0, 0x80, 0xf3, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderTrack3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x06, 0x08, 0x06, 0x00, 0x00, 0x00, 0xd4, 0xb5, 0x2e, + 0x54, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x77, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x63, 0x3c, 0x73, 0xe6, 0x0c, + 0xeb, 0x9f, 0x3f, 0x0c, 0x4d, 0x0c, 0x0c, 0x0c, 0xf1, 0xff, 0xff, 0x33, 0x48, 0x02, 0x69, 0x9a, + 0x01, 0x46, 0x46, 0x86, 0xe7, 0x0c, 0x0c, 0x8c, 0x4b, 0x78, 0x79, 0x39, 0x6a, 0x58, 0x40, 0x96, + 0x02, 0x2d, 0xac, 0xa0, 0x99, 0x6d, 0x48, 0x06, 0x43, 0x3c, 0xf6, 0xbf, 0xf4, 0xd3, 0xa7, 0x1f, + 0xff, 0x99, 0xfe, 0xff, 0x67, 0x8c, 0x43, 0x92, 0xa3, 0x0b, 0x93, 0x91, 0xf1, 0x7f, 0x2c, 0x13, + 0x90, 0x60, 0xa4, 0x8b, 0x6d, 0x48, 0x96, 0x00, 0x3d, 0x0b, 0xf6, 0xf1, 0x62, 0x24, 0x31, 0xba, + 0x30, 0x81, 0x9e, 0x5d, 0xc4, 0xc2, 0xc7, 0xc7, 0x51, 0xfb, 0xf9, 0xf3, 0x0f, 0xa0, 0xaf, 0xff, + 0xc7, 0xd0, 0x27, 0x71, 0x31, 0x2c, 0x64, 0x61, 0x61, 0xa8, 0x03, 0x00, 0xad, 0xe3, 0x2a, 0xed, + 0xfc, 0x71, 0x9f, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderFill2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x5f, 0x1f, + 0x96, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x47, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x63, 0x64, 0xa8, 0xf9, 0xef, + 0xc1, 0xf0, 0x8f, 0x61, 0x36, 0x03, 0x03, 0x83, 0x0c, 0x10, 0x53, 0x02, 0x9e, 0x30, 0x30, 0x31, + 0xa4, 0x33, 0x32, 0x54, 0xff, 0x7f, 0xc4, 0xf0, 0x9f, 0x41, 0x96, 0x12, 0x93, 0x90, 0xf4, 0x3e, + 0x61, 0x02, 0x1a, 0xc6, 0x88, 0x24, 0x40, 0x19, 0x93, 0x91, 0xe1, 0x3f, 0x13, 0xc8, 0x99, 0x40, + 0x53, 0x9e, 0x50, 0x66, 0x12, 0x58, 0xf7, 0x13, 0xa0, 0xd3, 0xd2, 0x00, 0xbe, 0xcf, 0x0d, 0xc0, + 0x10, 0xc9, 0x8a, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXRangeSliderFill3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x06, 0x08, 0x06, 0x00, 0x00, 0x00, 0xd4, 0xb5, 0x2e, + 0x54, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x6e, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0xbd, 0x92, 0xbb, 0x0d, 0x80, + 0x30, 0x0c, 0x05, 0xcf, 0x51, 0x32, 0x04, 0x0d, 0x93, 0xf1, 0x99, 0x02, 0x89, 0x02, 0x28, 0xd8, + 0x82, 0x92, 0xcf, 0x64, 0x34, 0x0c, 0x01, 0x92, 0x49, 0x28, 0xa2, 0x2c, 0x40, 0xdc, 0xf8, 0xc9, + 0x96, 0x7c, 0x3a, 0xc9, 0xc2, 0xa2, 0x8e, 0x93, 0x19, 0x68, 0x51, 0x0a, 0xdf, 0xff, 0x2b, 0xe1, + 0x42, 0x38, 0xb0, 0x0c, 0xf6, 0x83, 0x2a, 0xfd, 0x7f, 0xb4, 0xe4, 0x72, 0x10, 0x53, 0x3a, 0x6e, + 0xd4, 0xf8, 0xd0, 0x24, 0xab, 0x5c, 0xb1, 0x36, 0x5e, 0x5d, 0x72, 0xd1, 0x22, 0x47, 0x83, 0x31, + 0xec, 0x71, 0x90, 0x2b, 0x08, 0x9b, 0xc5, 0x31, 0xf2, 0x78, 0x6b, 0xa5, 0xca, 0xf2, 0x5c, 0xb0, + 0x52, 0x32, 0xbd, 0x8a, 0x37, 0x19, 0x0d, 0x36, 0x20, 0x19, 0x81, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + + +#pragma mark - Misc Icons -#define FLEXImage(base) ((UIScreen.mainScreen.scale > 1.5) ? \ - [self imageWithBytesNoCopy:(void *)base##2x length:sizeof(base##2x) scale:2.0] : \ - [self imageWithBytesNoCopy:(void *)base length:sizeof(base) scale:1.0]) +static const u_int8_t FLEXCheckerPattern[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x03, 0x00, 0x00, 0x00, 0x6c, 0xbb, 0xce, + 0xa4, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0x1a, 0x18, 0x18, 0xff, 0xff, 0xfd, 0x2c, 0xa7, 0x7c, 0x3f, + 0x00, 0x00, 0x00, 0x02, 0x74, 0x52, 0x4e, 0x53, 0x80, 0x80, 0xa0, 0xa8, 0xd6, 0x53, 0x00, 0x00, + 0x00, 0x11, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0xfe, 0xc0, 0x80, 0x86, 0xfe, 0x30, + 0xa0, 0x21, 0x00, 0xcf, 0x3f, 0x0b, 0x9b, 0xd8, 0xd3, 0xac, 0x83, 0x00, 0x00, 0x00, 0x00, 0x49, + 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXCheckerPattern2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x01, 0x03, 0x00, 0x00, 0x00, 0xda, 0xb9, 0xaf, + 0xbb, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, + 0x00, 0x06, 0x50, 0x4c, 0x54, 0x45, 0x1a, 0x18, 0x18, 0xff, 0xff, 0xfd, 0x2c, 0xa7, 0x7c, 0x3f, + 0x00, 0x00, 0x00, 0x02, 0x74, 0x52, 0x4e, 0x53, 0x80, 0x80, 0xa0, 0xa8, 0xd6, 0x53, 0x00, 0x00, + 0x00, 0x14, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0xe0, 0xff, 0xcf, 0x40, 0x0a, 0xfe, + 0xff, 0x81, 0x81, 0x14, 0x0c, 0x00, 0xbc, 0xcb, 0x23, 0xdd, 0xc8, 0xaf, 0xa2, 0x74, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXCheckerPattern3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x08, 0x06, 0x00, 0x00, 0x01, 0x20, 0x05, 0xc9, + 0x11, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, + 0x05, 0x00, 0x00, 0x00, 0x38, 0x65, 0x58, 0x49, 0x66, 0x4d, 0x4d, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x01, 0x87, 0x69, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0xa0, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x30, 0xa0, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0xff, 0x4e, 0x36, 0x00, 0x00, 0x01, 0x16, 0x49, 0x44, 0x41, 0x54, 0x68, 0x05, 0xed, + 0x98, 0x51, 0x0e, 0xc2, 0x30, 0x0c, 0x43, 0x57, 0xae, 0x0c, 0x5c, 0x82, 0x8d, 0x33, 0x8f, 0x7d, + 0x6c, 0x51, 0x40, 0xb2, 0x88, 0x51, 0x2d, 0x56, 0xc9, 0xfb, 0xb2, 0x42, 0x9a, 0x34, 0xcf, 0x65, + 0x63, 0xb4, 0xe5, 0x31, 0xaf, 0xd3, 0x7e, 0x5d, 0xef, 0xb7, 0x43, 0x4e, 0x97, 0x50, 0x1f, 0x02, + 0x7e, 0xd0, 0xd6, 0xed, 0x3a, 0x92, 0x9f, 0xf3, 0x72, 0xc8, 0x5f, 0x4a, 0x9d, 0x7f, 0x57, 0x31, + 0xdd, 0x26, 0x32, 0xb7, 0x1c, 0x87, 0xa8, 0x72, 0x52, 0xd6, 0xf4, 0x82, 0x37, 0xe6, 0xb9, 0x52, + 0xe6, 0x9f, 0xe3, 0x74, 0x07, 0x7a, 0x41, 0xcb, 0xde, 0xe5, 0xd6, 0xff, 0xa3, 0x44, 0xcf, 0xa0, + 0x5f, 0x70, 0x42, 0xe3, 0xf4, 0x43, 0xd3, 0x1d, 0xe0, 0x59, 0xca, 0xe7, 0x2a, 0x6b, 0x74, 0xc6, + 0x72, 0x4e, 0xd6, 0xf4, 0x8e, 0xf2, 0xe2, 0x8a, 0x76, 0x83, 0xaf, 0x94, 0xe4, 0x88, 0xe0, 0x77, + 0x0d, 0x6d, 0x0d, 0xdd, 0x3c, 0x51, 0xbe, 0x7c, 0x02, 0x37, 0x40, 0xe8, 0x23, 0x2e, 0x47, 0xe4, + 0x7b, 0x51, 0xb0, 0x46, 0x42, 0xee, 0x81, 0x1b, 0x20, 0xf4, 0x11, 0x37, 0xa2, 0x40, 0x81, 0xc4, + 0xf8, 0x88, 0xfc, 0x44, 0x43, 0xde, 0x46, 0x7c, 0x7c, 0x93, 0x3d, 0x41, 0x98, 0x89, 0x84, 0x11, + 0x21, 0x32, 0x11, 0x97, 0x23, 0xa2, 0x7f, 0x17, 0xc5, 0xd6, 0x8a, 0x82, 0x7d, 0xa7, 0x2b, 0x96, + 0x8d, 0x34, 0x39, 0xa1, 0xe8, 0x24, 0x12, 0x1e, 0x40, 0x04, 0xb6, 0x5c, 0xd6, 0x0e, 0x94, 0x51, + 0x89, 0x12, 0xed, 0x80, 0x08, 0x6c, 0xb9, 0xac, 0x1d, 0x28, 0xa3, 0x12, 0x25, 0xda, 0x01, 0x11, + 0xd8, 0x72, 0x59, 0xfa, 0xbd, 0xac, 0x5c, 0x79, 0x4f, 0x64, 0xff, 0x99, 0x64, 0xeb, 0xfb, 0x08, + 0xb1, 0xc4, 0x7a, 0xe7, 0xdb, 0x81, 0xde, 0x44, 0xd9, 0x7a, 0x76, 0x80, 0x25, 0xd6, 0x3b, 0xdf, + 0x0e, 0xf4, 0x26, 0xca, 0xd6, 0xb3, 0x03, 0x2c, 0xb1, 0xde, 0xf9, 0xc3, 0x3b, 0xf0, 0x02, 0x0c, + 0xd8, 0x43, 0xeb, 0xbc, 0x94, 0xc3, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXHierarchyIndentPattern[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xf9, 0x3c, 0x0f, + 0xcd, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, + 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, + 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, + 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, + 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, + 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, + 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, + 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, + 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, + 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, + 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, + 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, + 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, + 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, + 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, + 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, + 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, + 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, + 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, + 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, + 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, + 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, + 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, + 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, + 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, + 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, + 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, + 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, + 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, + 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, + 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, + 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, + 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, + 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, + 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, + 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, + 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, + 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, + 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, + 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, + 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, + 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, + 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, + 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, + 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, + 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, + 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, + 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, + 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, + 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, + 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, + 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, + 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, + 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, + 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, + 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, + 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, + 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, + 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, + 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, + 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, + 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, + 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, + 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, + 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, + 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, + 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, + 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, + 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, + 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, + 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, + 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, + 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, + 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, + 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, + 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, + 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, + 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, + 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, + 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, + 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, + 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, + 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, + 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, + 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, + 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, + 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, + 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, + 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, + 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, + 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, + 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, + 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, + 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, + 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, + 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, + 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, + 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, + 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, + 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, + 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, + 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, + 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, + 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, + 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, + 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, + 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, + 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, + 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, + 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, + 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, + 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, + 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, + 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, + 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, + 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, + 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, + 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, + 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, + 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, + 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, + 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, + 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, + 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, + 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, + 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, + 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, + 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, + 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, + 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, + 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, + 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, + 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, + 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, + 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, + 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, + 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, + 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, + 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, + 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, + 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, + 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, + 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, + 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, + 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, + 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, + 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, + 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, + 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, + 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, + 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, + 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, + 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, + 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, + 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, + 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, + 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, + 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, + 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, + 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, + 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, + 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, + 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, + 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, + 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x35, 0x35, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, + 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, + 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, + 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, + 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, + 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x34, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0xc0, + 0x10, 0xf8, 0x70, 0x00, 0x00, 0x00, 0x10, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, + 0x60, 0xf8, 0x0f, 0xc4, 0x70, 0x00, 0x00, 0x0d, 0x04, 0x01, 0x00, 0x65, 0x59, 0x09, 0xe8, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXHierarchyIndentPattern2x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe3, 0x00, 0xef, + 0x43, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, + 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, + 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, + 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, + 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, + 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, + 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, + 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, + 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, + 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, + 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, + 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, + 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, + 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, + 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, + 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, + 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, + 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, + 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, + 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, + 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, + 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, + 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, + 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, + 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, + 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, + 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, + 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, + 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, + 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, + 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, + 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, + 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, + 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, + 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, + 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, + 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, + 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, + 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, + 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, + 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, + 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, + 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, + 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, + 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, + 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, + 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, + 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, + 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, + 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, + 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, + 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, + 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, + 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, + 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, + 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, + 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, + 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, + 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, + 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, + 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, + 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, + 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, + 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, + 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, + 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, + 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, + 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, + 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, + 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, + 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, + 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, + 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, + 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, + 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, + 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, + 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, + 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, + 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, + 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, + 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, + 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, + 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, + 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, + 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, + 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, + 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, + 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, + 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, + 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, + 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, + 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, + 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, + 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, + 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, + 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, + 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, + 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, + 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, + 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, + 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, + 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, + 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, + 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, + 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, + 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, + 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, + 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, + 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, + 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, + 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, + 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, + 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, + 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, + 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, + 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, + 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, + 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, + 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, + 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, + 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, + 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, + 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, + 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, + 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, + 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, + 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, + 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, + 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, + 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, + 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, + 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, + 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, + 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, + 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, + 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, + 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, + 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, + 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, + 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, + 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, + 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, + 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, + 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, + 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, + 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, + 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, + 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, + 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, + 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, + 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, + 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, + 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, + 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, + 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, + 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, + 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, + 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, + 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, + 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, + 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, + 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, + 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, + 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, + 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x30, 0x36, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, + 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, + 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, + 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, + 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, + 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x90, + 0x7a, 0xe1, 0x8d, 0x00, 0x00, 0x00, 0x12, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, + 0x60, 0xf8, 0x0f, 0xc5, 0x40, 0x0a, 0x13, 0x00, 0x00, 0x35, 0xeb, 0x01, 0xff, 0x0f, 0x5e, 0xbc, + 0xf4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +static const u_int8_t FLEXHierarchyIndentPattern3x[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xe3, 0x00, 0xef, + 0x43, 0x00, 0x00, 0x0a, 0x41, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x48, 0x0d, 0x9d, 0x96, 0x77, 0x54, 0x53, 0xd9, 0x16, 0x87, + 0xcf, 0xbd, 0x37, 0xbd, 0xd0, 0x12, 0x22, 0x20, 0x25, 0xf4, 0x1a, 0x7a, 0x09, 0x20, 0xd2, 0x3b, + 0x48, 0x15, 0x04, 0x51, 0x89, 0x49, 0x80, 0x50, 0x02, 0x86, 0x84, 0x26, 0x76, 0x44, 0x05, 0x46, + 0x14, 0x11, 0x29, 0x56, 0x64, 0x54, 0xc0, 0x01, 0x47, 0x87, 0x22, 0x63, 0x45, 0x14, 0x0b, 0x83, + 0x82, 0x62, 0xd7, 0x09, 0xf2, 0x10, 0x50, 0xc6, 0xc1, 0x51, 0x44, 0x45, 0xe5, 0xdd, 0x8c, 0x6b, + 0x09, 0xef, 0xad, 0x35, 0xf3, 0xde, 0x9a, 0xfd, 0xc7, 0x59, 0xdf, 0xd9, 0xe7, 0xb7, 0xd7, 0xd9, + 0x67, 0xef, 0x7d, 0xd7, 0xba, 0x00, 0x50, 0xfc, 0x82, 0x04, 0xc2, 0x74, 0x58, 0x01, 0x80, 0x34, + 0xa1, 0x58, 0x14, 0xee, 0xeb, 0xc1, 0x5c, 0x12, 0x13, 0xcb, 0xc4, 0xf7, 0x02, 0x18, 0x10, 0x01, + 0x0e, 0x58, 0x01, 0xc0, 0xe1, 0x66, 0x66, 0x04, 0x47, 0xf8, 0x44, 0x02, 0xd4, 0xfc, 0xbd, 0x3d, + 0x99, 0x99, 0xa8, 0x48, 0xc6, 0xb3, 0xf6, 0xee, 0x2e, 0x80, 0x64, 0xbb, 0xdb, 0x2c, 0xbf, 0x50, + 0x26, 0x73, 0xd6, 0xff, 0x7f, 0x91, 0x22, 0x37, 0x43, 0x24, 0x06, 0x00, 0x0a, 0x45, 0xd5, 0x36, + 0x3c, 0x7e, 0x26, 0x17, 0xe5, 0x02, 0x94, 0x53, 0xb3, 0xc5, 0x19, 0x32, 0xff, 0x04, 0xca, 0xf4, + 0x95, 0x29, 0x32, 0x86, 0x31, 0x32, 0x16, 0xa1, 0x09, 0xa2, 0xac, 0x22, 0xe3, 0xc4, 0xaf, 0x6c, + 0xf6, 0xa7, 0xe6, 0x2b, 0xbb, 0xc9, 0x98, 0x97, 0x26, 0xe4, 0xa1, 0x1a, 0x59, 0xce, 0x19, 0xbc, + 0x34, 0x9e, 0x8c, 0xbb, 0x50, 0xde, 0x9a, 0x25, 0xe1, 0xa3, 0x8c, 0x04, 0xa1, 0x5c, 0x98, 0x25, + 0xe0, 0x67, 0xa3, 0x7c, 0x07, 0x65, 0xbd, 0x54, 0x49, 0x9a, 0x00, 0xe5, 0xf7, 0x28, 0xd3, 0xd3, + 0xf8, 0x9c, 0x4c, 0x00, 0x30, 0x14, 0x99, 0x5f, 0xcc, 0xe7, 0x26, 0xa1, 0x6c, 0x89, 0x32, 0x45, + 0x14, 0x19, 0xee, 0x89, 0xf2, 0x02, 0x00, 0x08, 0x94, 0xc4, 0x39, 0xbc, 0x72, 0x0e, 0x8b, 0xf9, + 0x39, 0x68, 0x9e, 0x00, 0x78, 0xa6, 0x67, 0xe4, 0x8a, 0x04, 0x89, 0x49, 0x62, 0xa6, 0x11, 0xd7, + 0x98, 0x69, 0xe5, 0xe8, 0xc8, 0x66, 0xfa, 0xf1, 0xb3, 0x53, 0xf9, 0x62, 0x31, 0x2b, 0x94, 0xc3, + 0x4d, 0xe1, 0x88, 0x78, 0x4c, 0xcf, 0xf4, 0xb4, 0x0c, 0x8e, 0x30, 0x17, 0x80, 0xaf, 0x6f, 0x96, + 0x45, 0x01, 0x25, 0x59, 0x6d, 0x99, 0x68, 0x91, 0xed, 0xad, 0x1c, 0xed, 0xed, 0x59, 0xd6, 0xe6, + 0x68, 0xf9, 0xbf, 0xd9, 0xdf, 0x1e, 0x7e, 0x53, 0xfd, 0x3d, 0xc8, 0x7a, 0xfb, 0x55, 0xf1, 0x26, + 0xec, 0xcf, 0x9e, 0x41, 0x8c, 0x9e, 0x59, 0xdf, 0x6c, 0xec, 0xac, 0x2f, 0xbd, 0x16, 0x00, 0xf6, + 0x24, 0x5a, 0x9b, 0x1d, 0xb3, 0xbe, 0x95, 0x55, 0x00, 0xb4, 0x6d, 0x06, 0x40, 0xe5, 0xe1, 0xac, + 0x4f, 0xef, 0x20, 0x00, 0xf2, 0x05, 0x00, 0xb4, 0xde, 0x9c, 0xf3, 0x1e, 0x86, 0x6c, 0x5e, 0x92, + 0xc4, 0xe2, 0x0c, 0x27, 0x0b, 0x8b, 0xec, 0xec, 0x6c, 0x73, 0x01, 0x9f, 0x6b, 0x2e, 0x2b, 0xe8, + 0x37, 0xfb, 0x9f, 0x82, 0x6f, 0xca, 0xbf, 0x86, 0x39, 0xf7, 0x99, 0xcb, 0xee, 0xfb, 0x56, 0x3b, + 0xa6, 0x17, 0x3f, 0x81, 0x23, 0x49, 0x15, 0x33, 0x65, 0x45, 0xe5, 0xa6, 0xa7, 0xa6, 0x4b, 0x44, + 0xcc, 0xcc, 0x0c, 0x0e, 0x97, 0xcf, 0x64, 0xfd, 0xf7, 0x10, 0xff, 0xe3, 0xc0, 0x39, 0x69, 0xcd, + 0xc9, 0xc3, 0x2c, 0x9c, 0x9f, 0xc0, 0x17, 0xf1, 0x85, 0xe8, 0x55, 0x51, 0xe8, 0x94, 0x09, 0x84, + 0x89, 0x68, 0xbb, 0x85, 0x3c, 0x81, 0x58, 0x90, 0x2e, 0x64, 0x0a, 0x84, 0x7f, 0xd5, 0xe1, 0x7f, + 0x18, 0x36, 0x27, 0x07, 0x19, 0x7e, 0x9d, 0x6b, 0x14, 0x68, 0x75, 0x5f, 0x00, 0x7d, 0x85, 0x39, + 0x50, 0xb8, 0x49, 0x07, 0xc8, 0x6f, 0x3d, 0x00, 0x43, 0x23, 0x03, 0x24, 0x6e, 0x3f, 0x7a, 0x02, + 0x7d, 0xeb, 0x5b, 0x10, 0x31, 0x0a, 0xc8, 0xbe, 0xbc, 0x68, 0xad, 0x91, 0xaf, 0x73, 0x8f, 0x32, + 0x7a, 0xfe, 0xe7, 0xfa, 0x1f, 0x0b, 0x5c, 0x8a, 0x6e, 0xe1, 0x4c, 0x41, 0x22, 0x53, 0xe6, 0xf6, + 0x0c, 0x8f, 0x64, 0x72, 0x25, 0xa2, 0x2c, 0x19, 0xa3, 0xdf, 0x84, 0x6c, 0xc1, 0x02, 0x12, 0x90, + 0x07, 0x74, 0xa0, 0x0a, 0x34, 0x81, 0x2e, 0x30, 0x02, 0x2c, 0x60, 0x0d, 0x1c, 0x80, 0x33, 0x70, + 0x03, 0xde, 0x20, 0x00, 0x84, 0x80, 0x48, 0x10, 0x03, 0x96, 0x03, 0x2e, 0x48, 0x02, 0x69, 0x40, + 0x04, 0xb2, 0x41, 0x3e, 0xd8, 0x00, 0x0a, 0x41, 0x31, 0xd8, 0x01, 0x76, 0x83, 0x6a, 0x70, 0x00, + 0xd4, 0x81, 0x7a, 0xd0, 0x04, 0x4e, 0x82, 0x36, 0x70, 0x06, 0x5c, 0x04, 0x57, 0xc0, 0x0d, 0x70, + 0x0b, 0x0c, 0x80, 0x47, 0x40, 0x0a, 0x86, 0xc1, 0x4b, 0x30, 0x01, 0xde, 0x81, 0x69, 0x08, 0x82, + 0xf0, 0x10, 0x15, 0xa2, 0x41, 0xaa, 0x90, 0x16, 0xa4, 0x0f, 0x99, 0x42, 0xd6, 0x10, 0x1b, 0x5a, + 0x08, 0x79, 0x43, 0x41, 0x50, 0x38, 0x14, 0x03, 0xc5, 0x43, 0x89, 0x90, 0x10, 0x92, 0x40, 0xf9, + 0xd0, 0x26, 0xa8, 0x18, 0x2a, 0x83, 0xaa, 0xa1, 0x43, 0x50, 0x3d, 0xf4, 0x23, 0x74, 0x1a, 0xba, + 0x08, 0x5d, 0x83, 0xfa, 0xa0, 0x07, 0xd0, 0x20, 0x34, 0x06, 0xfd, 0x01, 0x7d, 0x84, 0x11, 0x98, + 0x02, 0xd3, 0x61, 0x0d, 0xd8, 0x00, 0xb6, 0x80, 0xd9, 0xb0, 0x3b, 0x1c, 0x08, 0x47, 0xc2, 0xcb, + 0xe0, 0x44, 0x78, 0x15, 0x9c, 0x07, 0x17, 0xc0, 0xdb, 0xe1, 0x4a, 0xb8, 0x16, 0x3e, 0x0e, 0xb7, + 0xc2, 0x17, 0xe1, 0x1b, 0xf0, 0x00, 0x2c, 0x85, 0x5f, 0xc2, 0x93, 0x08, 0x40, 0xc8, 0x08, 0x03, + 0xd1, 0x46, 0x58, 0x08, 0x1b, 0xf1, 0x44, 0x42, 0x90, 0x58, 0x24, 0x01, 0x11, 0x21, 0x6b, 0x91, + 0x22, 0xa4, 0x02, 0xa9, 0x45, 0x9a, 0x90, 0x0e, 0xa4, 0x1b, 0xb9, 0x8d, 0x48, 0x91, 0x71, 0xe4, + 0x03, 0x06, 0x87, 0xa1, 0x61, 0x98, 0x18, 0x16, 0xc6, 0x19, 0xe3, 0x87, 0x59, 0x8c, 0xe1, 0x62, + 0x56, 0x61, 0xd6, 0x62, 0x4a, 0x30, 0xd5, 0x98, 0x63, 0x98, 0x56, 0x4c, 0x17, 0xe6, 0x36, 0x66, + 0x10, 0x33, 0x81, 0xf9, 0x82, 0xa5, 0x62, 0xd5, 0xb1, 0xa6, 0x58, 0x27, 0xac, 0x3f, 0x76, 0x09, + 0x36, 0x11, 0x9b, 0x8d, 0x2d, 0xc4, 0x56, 0x60, 0x8f, 0x60, 0x5b, 0xb0, 0x97, 0xb1, 0x03, 0xd8, + 0x61, 0xec, 0x3b, 0x1c, 0x0e, 0xc7, 0xc0, 0x19, 0xe2, 0x1c, 0x70, 0x7e, 0xb8, 0x18, 0x5c, 0x32, + 0x6e, 0x35, 0xae, 0x04, 0xb7, 0x0f, 0xd7, 0x8c, 0xbb, 0x80, 0xeb, 0xc3, 0x0d, 0xe1, 0x26, 0xf1, + 0x78, 0xbc, 0x2a, 0xde, 0x14, 0xef, 0x82, 0x0f, 0xc1, 0x73, 0xf0, 0x62, 0x7c, 0x21, 0xbe, 0x0a, + 0x7f, 0x1c, 0x7f, 0x1e, 0xdf, 0x8f, 0x1f, 0xc6, 0xbf, 0x27, 0x90, 0x09, 0x5a, 0x04, 0x6b, 0x82, + 0x0f, 0x21, 0x96, 0x20, 0x24, 0x6c, 0x24, 0x54, 0x10, 0x1a, 0x08, 0xe7, 0x08, 0xfd, 0x84, 0x11, + 0xc2, 0x34, 0x51, 0x81, 0xa8, 0x4f, 0x74, 0x22, 0x86, 0x10, 0x79, 0xc4, 0x5c, 0x62, 0x29, 0xb1, + 0x8e, 0xd8, 0x41, 0xbc, 0x49, 0x1c, 0x26, 0x4e, 0x93, 0x14, 0x49, 0x86, 0x24, 0x17, 0x52, 0x24, + 0x29, 0x99, 0xb4, 0x81, 0x54, 0x49, 0x6a, 0x22, 0x5d, 0x26, 0x3d, 0x26, 0xbd, 0x21, 0x93, 0xc9, + 0x3a, 0x64, 0x47, 0x72, 0x18, 0x59, 0x40, 0x5e, 0x4f, 0xae, 0x24, 0x9f, 0x20, 0x5f, 0x25, 0x0f, + 0x92, 0x3f, 0x50, 0x94, 0x28, 0x26, 0x14, 0x4f, 0x4a, 0x1c, 0x45, 0x42, 0xd9, 0x4e, 0x39, 0x4a, + 0xb9, 0x40, 0x79, 0x40, 0x79, 0x43, 0xa5, 0x52, 0x0d, 0xa8, 0x6e, 0xd4, 0x58, 0xaa, 0x98, 0xba, + 0x9d, 0x5a, 0x4f, 0xbd, 0x44, 0x7d, 0x4a, 0x7d, 0x2f, 0x47, 0x93, 0x33, 0x97, 0xf3, 0x97, 0xe3, + 0xc9, 0xad, 0x93, 0xab, 0x91, 0x6b, 0x95, 0xeb, 0x97, 0x7b, 0x25, 0x4f, 0x94, 0xd7, 0x97, 0x77, + 0x97, 0x5f, 0x2e, 0x9f, 0x27, 0x5f, 0x21, 0x7f, 0x4a, 0xfe, 0xa6, 0xfc, 0xb8, 0x02, 0x51, 0xc1, + 0x40, 0xc1, 0x53, 0x81, 0xa3, 0xb0, 0x56, 0xa1, 0x46, 0xe1, 0xb4, 0xc2, 0x3d, 0x85, 0x49, 0x45, + 0x9a, 0xa2, 0x95, 0x62, 0x88, 0x62, 0x9a, 0x62, 0x89, 0x62, 0x83, 0xe2, 0x35, 0xc5, 0x51, 0x25, + 0xbc, 0x92, 0x81, 0x92, 0xb7, 0x12, 0x4f, 0xa9, 0x40, 0xe9, 0xb0, 0xd2, 0x25, 0xa5, 0x21, 0x1a, + 0x42, 0xd3, 0xa5, 0x79, 0xd2, 0xb8, 0xb4, 0x4d, 0xb4, 0x3a, 0xda, 0x65, 0xda, 0x30, 0x1d, 0x47, + 0x37, 0xa4, 0xfb, 0xd3, 0x93, 0xe9, 0xc5, 0xf4, 0x1f, 0xe8, 0xbd, 0xf4, 0x09, 0x65, 0x25, 0x65, + 0x5b, 0xe5, 0x28, 0xe5, 0x1c, 0xe5, 0x1a, 0xe5, 0xb3, 0xca, 0x52, 0x06, 0xc2, 0x30, 0x60, 0xf8, + 0x33, 0x52, 0x19, 0xa5, 0x8c, 0x93, 0x8c, 0xbb, 0x8c, 0x8f, 0xf3, 0x34, 0xe6, 0xb9, 0xcf, 0xe3, + 0xcf, 0xdb, 0x36, 0xaf, 0x69, 0x5e, 0xff, 0xbc, 0x29, 0x95, 0xf9, 0x2a, 0x6e, 0x2a, 0x7c, 0x95, + 0x22, 0x95, 0x66, 0x95, 0x01, 0x95, 0x8f, 0xaa, 0x4c, 0x55, 0x6f, 0xd5, 0x14, 0xd5, 0x9d, 0xaa, + 0x6d, 0xaa, 0x4f, 0xd4, 0x30, 0x6a, 0x26, 0x6a, 0x61, 0x6a, 0xd9, 0x6a, 0xfb, 0xd5, 0x2e, 0xab, + 0x8d, 0xcf, 0xa7, 0xcf, 0x77, 0x9e, 0xcf, 0x9d, 0x5f, 0x34, 0xff, 0xe4, 0xfc, 0x87, 0xea, 0xb0, + 0xba, 0x89, 0x7a, 0xb8, 0xfa, 0x6a, 0xf5, 0xc3, 0xea, 0x3d, 0xea, 0x93, 0x1a, 0x9a, 0x1a, 0xbe, + 0x1a, 0x19, 0x1a, 0x55, 0x1a, 0x97, 0x34, 0xc6, 0x35, 0x19, 0x9a, 0x6e, 0x9a, 0xc9, 0x9a, 0xe5, + 0x9a, 0xe7, 0x34, 0xc7, 0xb4, 0x68, 0x5a, 0x0b, 0xb5, 0x04, 0x5a, 0xe5, 0x5a, 0xe7, 0xb5, 0x5e, + 0x30, 0x95, 0x99, 0xee, 0xcc, 0x54, 0x66, 0x25, 0xb3, 0x8b, 0x39, 0xa1, 0xad, 0xae, 0xed, 0xa7, + 0x2d, 0xd1, 0x3e, 0xa4, 0xdd, 0xab, 0x3d, 0xad, 0x63, 0xa8, 0xb3, 0x58, 0x67, 0xa3, 0x4e, 0xb3, + 0xce, 0x13, 0x5d, 0x92, 0x2e, 0x5b, 0x37, 0x41, 0xb7, 0x5c, 0xb7, 0x53, 0x77, 0x42, 0x4f, 0x4b, + 0x2f, 0x58, 0x2f, 0x5f, 0xaf, 0x51, 0xef, 0xa1, 0x3e, 0x51, 0x9f, 0xad, 0x9f, 0xa4, 0xbf, 0x47, + 0xbf, 0x5b, 0x7f, 0xca, 0xc0, 0xd0, 0x20, 0xda, 0x60, 0x8b, 0x41, 0x9b, 0xc1, 0xa8, 0xa1, 0x8a, + 0xa1, 0xbf, 0x61, 0x9e, 0x61, 0xa3, 0xe1, 0x63, 0x23, 0xaa, 0x91, 0xab, 0xd1, 0x2a, 0xa3, 0x5a, + 0xa3, 0x3b, 0xc6, 0x38, 0x63, 0xb6, 0x71, 0x8a, 0xf1, 0x3e, 0xe3, 0x5b, 0x26, 0xb0, 0x89, 0x9d, + 0x49, 0x92, 0x49, 0x8d, 0xc9, 0x4d, 0x53, 0xd8, 0xd4, 0xde, 0x54, 0x60, 0xba, 0xcf, 0xb4, 0xcf, + 0x0c, 0x6b, 0xe6, 0x68, 0x26, 0x34, 0xab, 0x35, 0xbb, 0xc7, 0xa2, 0xb0, 0xdc, 0x59, 0x59, 0xac, + 0x46, 0xd6, 0xa0, 0x39, 0xc3, 0x3c, 0xc8, 0x7c, 0xa3, 0x79, 0x9b, 0xf9, 0x2b, 0x0b, 0x3d, 0x8b, + 0x58, 0x8b, 0x9d, 0x16, 0xdd, 0x16, 0x5f, 0x2c, 0xed, 0x2c, 0x53, 0x2d, 0xeb, 0x2c, 0x1f, 0x59, + 0x29, 0x59, 0x05, 0x58, 0x6d, 0xb4, 0xea, 0xb0, 0xfa, 0xc3, 0xda, 0xc4, 0x9a, 0x6b, 0x5d, 0x63, + 0x7d, 0xc7, 0x86, 0x6a, 0xe3, 0x63, 0xb3, 0xce, 0xa6, 0xdd, 0xe6, 0xb5, 0xad, 0xa9, 0x2d, 0xdf, + 0x76, 0xbf, 0xed, 0x7d, 0x3b, 0x9a, 0x5d, 0xb0, 0xdd, 0x16, 0xbb, 0x4e, 0xbb, 0xcf, 0xf6, 0x0e, + 0xf6, 0x22, 0xfb, 0x26, 0xfb, 0x31, 0x07, 0x3d, 0x87, 0x78, 0x87, 0xbd, 0x0e, 0xf7, 0xd8, 0x74, + 0x76, 0x28, 0xbb, 0x84, 0x7d, 0xd5, 0x11, 0xeb, 0xe8, 0xe1, 0xb8, 0xce, 0xf1, 0x8c, 0xe3, 0x07, + 0x27, 0x7b, 0x27, 0xb1, 0xd3, 0x49, 0xa7, 0xdf, 0x9d, 0x59, 0xce, 0x29, 0xce, 0x0d, 0xce, 0xa3, + 0x0b, 0x0c, 0x17, 0xf0, 0x17, 0xd4, 0x2d, 0x18, 0x72, 0xd1, 0x71, 0xe1, 0xb8, 0x1c, 0x72, 0x91, + 0x2e, 0x64, 0x2e, 0x8c, 0x5f, 0x78, 0x70, 0xa1, 0xd4, 0x55, 0xdb, 0x95, 0xe3, 0x5a, 0xeb, 0xfa, + 0xcc, 0x4d, 0xd7, 0x8d, 0xe7, 0x76, 0xc4, 0x6d, 0xc4, 0xdd, 0xd8, 0x3d, 0xd9, 0xfd, 0xb8, 0xfb, + 0x2b, 0x0f, 0x4b, 0x0f, 0x91, 0x47, 0x8b, 0xc7, 0x94, 0xa7, 0x93, 0xe7, 0x1a, 0xcf, 0x0b, 0x5e, + 0x88, 0x97, 0xaf, 0x57, 0x91, 0x57, 0xaf, 0xb7, 0x92, 0xf7, 0x62, 0xef, 0x6a, 0xef, 0xa7, 0x3e, + 0x3a, 0x3e, 0x89, 0x3e, 0x8d, 0x3e, 0x13, 0xbe, 0x76, 0xbe, 0xab, 0x7d, 0x2f, 0xf8, 0x61, 0xfd, + 0x02, 0xfd, 0x76, 0xfa, 0xdd, 0xf3, 0xd7, 0xf0, 0xe7, 0xfa, 0xd7, 0xfb, 0x4f, 0x04, 0x38, 0x04, + 0xac, 0x09, 0xe8, 0x0a, 0xa4, 0x04, 0x46, 0x04, 0x56, 0x07, 0x3e, 0x0b, 0x32, 0x09, 0x12, 0x05, + 0x75, 0x04, 0xc3, 0xc1, 0x01, 0xc1, 0xbb, 0x82, 0x1f, 0x2f, 0xd2, 0x5f, 0x24, 0x5c, 0xd4, 0x16, + 0x02, 0x42, 0xfc, 0x43, 0x76, 0x85, 0x3c, 0x09, 0x35, 0x0c, 0x5d, 0x15, 0xfa, 0x73, 0x18, 0x2e, + 0x2c, 0x34, 0xac, 0x26, 0xec, 0x79, 0xb8, 0x55, 0x78, 0x7e, 0x78, 0x77, 0x04, 0x2d, 0x62, 0x45, + 0x44, 0x43, 0xc4, 0xbb, 0x48, 0x8f, 0xc8, 0xd2, 0xc8, 0x47, 0x8b, 0x8d, 0x16, 0x4b, 0x16, 0x77, + 0x46, 0xc9, 0x47, 0xc5, 0x45, 0xd5, 0x47, 0x4d, 0x45, 0x7b, 0x45, 0x97, 0x45, 0x4b, 0x97, 0x58, + 0x2c, 0x59, 0xb3, 0xe4, 0x46, 0x8c, 0x5a, 0x8c, 0x20, 0xa6, 0x3d, 0x16, 0x1f, 0x1b, 0x15, 0x7b, + 0x24, 0x76, 0x72, 0xa9, 0xf7, 0xd2, 0xdd, 0x4b, 0x87, 0xe3, 0xec, 0xe2, 0x0a, 0xe3, 0xee, 0x2e, + 0x33, 0x5c, 0x96, 0xb3, 0xec, 0xda, 0x72, 0xb5, 0xe5, 0xa9, 0xcb, 0xcf, 0xae, 0x90, 0x5f, 0xc1, + 0x59, 0x71, 0x2a, 0x1e, 0x1b, 0x1f, 0x1d, 0xdf, 0x10, 0xff, 0x89, 0x13, 0xc2, 0xa9, 0xe5, 0x4c, + 0xae, 0xf4, 0x5f, 0xb9, 0x77, 0xe5, 0x04, 0xd7, 0x93, 0xbb, 0x87, 0xfb, 0x92, 0xe7, 0xc6, 0x2b, + 0xe7, 0x8d, 0xf1, 0x5d, 0xf8, 0x65, 0xfc, 0x91, 0x04, 0x97, 0x84, 0xb2, 0x84, 0xd1, 0x44, 0x97, + 0xc4, 0x5d, 0x89, 0x63, 0x49, 0xae, 0x49, 0x15, 0x49, 0xe3, 0x02, 0x4f, 0x41, 0xb5, 0xe0, 0x75, + 0xb2, 0x5f, 0xf2, 0x81, 0xe4, 0xa9, 0x94, 0x90, 0x94, 0xa3, 0x29, 0x33, 0xa9, 0xd1, 0xa9, 0xcd, + 0x69, 0x84, 0xb4, 0xf8, 0xb4, 0xd3, 0x42, 0x25, 0x61, 0x8a, 0xb0, 0x2b, 0x5d, 0x33, 0x3d, 0x27, + 0xbd, 0x2f, 0xc3, 0x34, 0xa3, 0x30, 0x43, 0xba, 0xca, 0x69, 0xd5, 0xee, 0x55, 0x13, 0xa2, 0x40, + 0xd1, 0x91, 0x4c, 0x28, 0x73, 0x59, 0x66, 0xbb, 0x98, 0x8e, 0xfe, 0x4c, 0xf5, 0x48, 0x8c, 0x24, + 0x9b, 0x25, 0x83, 0x59, 0x0b, 0xb3, 0x6a, 0xb2, 0xde, 0x67, 0x47, 0x65, 0x9f, 0xca, 0x51, 0xcc, + 0x11, 0xe6, 0xf4, 0xe4, 0x9a, 0xe4, 0x6e, 0xcb, 0x1d, 0xc9, 0xf3, 0xc9, 0xfb, 0x7e, 0x35, 0x66, + 0x35, 0x77, 0x75, 0x67, 0xbe, 0x76, 0xfe, 0x86, 0xfc, 0xc1, 0x35, 0xee, 0x6b, 0x0e, 0xad, 0x85, + 0xd6, 0xae, 0x5c, 0xdb, 0xb9, 0x4e, 0x77, 0x5d, 0xc1, 0xba, 0xe1, 0xf5, 0xbe, 0xeb, 0x8f, 0x6d, + 0x20, 0x6d, 0x48, 0xd9, 0xf0, 0xcb, 0x46, 0xcb, 0x8d, 0x65, 0x1b, 0xdf, 0x6e, 0x8a, 0xde, 0xd4, + 0x51, 0xa0, 0x51, 0xb0, 0xbe, 0x60, 0x68, 0xb3, 0xef, 0xe6, 0xc6, 0x42, 0xb9, 0x42, 0x51, 0xe1, + 0xbd, 0x2d, 0xce, 0x5b, 0x0e, 0x6c, 0xc5, 0x6c, 0x15, 0x6c, 0xed, 0xdd, 0x66, 0xb3, 0xad, 0x6a, + 0xdb, 0x97, 0x22, 0x5e, 0xd1, 0xf5, 0x62, 0xcb, 0xe2, 0x8a, 0xe2, 0x4f, 0x25, 0xdc, 0x92, 0xeb, + 0xdf, 0x59, 0x7d, 0x57, 0xf9, 0xdd, 0xcc, 0xf6, 0x84, 0xed, 0xbd, 0xa5, 0xf6, 0xa5, 0xfb, 0x77, + 0xe0, 0x76, 0x08, 0x77, 0xdc, 0xdd, 0xe9, 0xba, 0xf3, 0x58, 0x99, 0x62, 0x59, 0x5e, 0xd9, 0xd0, + 0xae, 0xe0, 0x5d, 0xad, 0xe5, 0xcc, 0xf2, 0xa2, 0xf2, 0xb7, 0xbb, 0x57, 0xec, 0xbe, 0x56, 0x61, + 0x5b, 0x71, 0x60, 0x0f, 0x69, 0x8f, 0x64, 0x8f, 0xb4, 0x32, 0xa8, 0xb2, 0xbd, 0x4a, 0xaf, 0x6a, + 0x47, 0xd5, 0xa7, 0xea, 0xa4, 0xea, 0x81, 0x1a, 0x8f, 0x9a, 0xe6, 0xbd, 0xea, 0x7b, 0xb7, 0xed, + 0x9d, 0xda, 0xc7, 0xdb, 0xd7, 0xbf, 0xdf, 0x6d, 0x7f, 0xd3, 0x01, 0x8d, 0x03, 0xc5, 0x07, 0x3e, + 0x1e, 0x14, 0x1c, 0xbc, 0x7f, 0xc8, 0xf7, 0x50, 0x6b, 0xad, 0x41, 0x6d, 0xc5, 0x61, 0xdc, 0xe1, + 0xac, 0xc3, 0xcf, 0xeb, 0xa2, 0xea, 0xba, 0xbf, 0x67, 0x7f, 0x5f, 0x7f, 0x44, 0xed, 0x48, 0xf1, + 0x91, 0xcf, 0x47, 0x85, 0x47, 0xa5, 0xc7, 0xc2, 0x8f, 0x75, 0xd5, 0x3b, 0xd4, 0xd7, 0x37, 0xa8, + 0x37, 0x94, 0x36, 0xc2, 0x8d, 0x92, 0xc6, 0xb1, 0xe3, 0x71, 0xc7, 0x6f, 0xfd, 0xe0, 0xf5, 0x43, + 0x7b, 0x13, 0xab, 0xe9, 0x50, 0x33, 0xa3, 0xb9, 0xf8, 0x04, 0x38, 0x21, 0x39, 0xf1, 0xe2, 0xc7, + 0xf8, 0x1f, 0xef, 0x9e, 0x0c, 0x3c, 0xd9, 0x79, 0x8a, 0x7d, 0xaa, 0xe9, 0x27, 0xfd, 0x9f, 0xf6, + 0xb6, 0xd0, 0x5a, 0x8a, 0x5a, 0xa1, 0xd6, 0xdc, 0xd6, 0x89, 0xb6, 0xa4, 0x36, 0x69, 0x7b, 0x4c, + 0x7b, 0xdf, 0xe9, 0x80, 0xd3, 0x9d, 0x1d, 0xce, 0x1d, 0x2d, 0x3f, 0x9b, 0xff, 0x7c, 0xf4, 0x8c, + 0xf6, 0x99, 0x9a, 0xb3, 0xca, 0x67, 0x4b, 0xcf, 0x91, 0xce, 0x15, 0x9c, 0x9b, 0x39, 0x9f, 0x77, + 0x7e, 0xf2, 0x42, 0xc6, 0x85, 0xf1, 0x8b, 0x89, 0x17, 0x87, 0x3a, 0x57, 0x74, 0x3e, 0xba, 0xb4, + 0xe4, 0xd2, 0x9d, 0xae, 0xb0, 0xae, 0xde, 0xcb, 0x81, 0x97, 0xaf, 0x5e, 0xf1, 0xb9, 0x72, 0xa9, + 0xdb, 0xbd, 0xfb, 0xfc, 0x55, 0x97, 0xab, 0x67, 0xae, 0x39, 0x5d, 0x3b, 0x7d, 0x9d, 0x7d, 0xbd, + 0xed, 0x86, 0xfd, 0x8d, 0xd6, 0x1e, 0xbb, 0x9e, 0x96, 0x5f, 0xec, 0x7e, 0x69, 0xe9, 0xb5, 0xef, + 0x6d, 0xbd, 0xe9, 0x70, 0xb3, 0xfd, 0x96, 0xe3, 0xad, 0x8e, 0xbe, 0x05, 0x7d, 0xe7, 0xfa, 0x5d, + 0xfb, 0x2f, 0xde, 0xf6, 0xba, 0x7d, 0xe5, 0x8e, 0xff, 0x9d, 0x1b, 0x03, 0x8b, 0x06, 0xfa, 0xee, + 0x2e, 0xbe, 0x7b, 0xff, 0x5e, 0xdc, 0x3d, 0xe9, 0x7d, 0xde, 0xfd, 0xd1, 0x07, 0xa9, 0x0f, 0x5e, + 0x3f, 0xcc, 0x7a, 0x38, 0xfd, 0x68, 0xfd, 0x63, 0xec, 0xe3, 0xa2, 0x27, 0x0a, 0x4f, 0x2a, 0x9e, + 0xaa, 0x3f, 0xad, 0xfd, 0xd5, 0xf8, 0xd7, 0x66, 0xa9, 0xbd, 0xf4, 0xec, 0xa0, 0xd7, 0x60, 0xcf, + 0xb3, 0x88, 0x67, 0x8f, 0x86, 0xb8, 0x43, 0x2f, 0xff, 0x95, 0xf9, 0xaf, 0x4f, 0xc3, 0x05, 0xcf, + 0xa9, 0xcf, 0x2b, 0x46, 0xb4, 0x46, 0xea, 0x47, 0xad, 0x47, 0xcf, 0x8c, 0xf9, 0x8c, 0xdd, 0x7a, + 0xb1, 0xf4, 0xc5, 0xf0, 0xcb, 0x8c, 0x97, 0xd3, 0xe3, 0x85, 0xbf, 0x29, 0xfe, 0xb6, 0xf7, 0x95, + 0xd1, 0xab, 0x9f, 0x7e, 0x77, 0xfb, 0xbd, 0x67, 0x62, 0xc9, 0xc4, 0xf0, 0x6b, 0xd1, 0xeb, 0x99, + 0x3f, 0x4a, 0xde, 0xa8, 0xbe, 0x39, 0xfa, 0xd6, 0xf6, 0x6d, 0xe7, 0x64, 0xe8, 0xe4, 0xd3, 0x77, + 0x69, 0xef, 0xa6, 0xa7, 0x8a, 0xde, 0xab, 0xbe, 0x3f, 0xf6, 0x81, 0xfd, 0xa1, 0xfb, 0x63, 0xf4, + 0xc7, 0x91, 0xe9, 0xec, 0x4f, 0xf8, 0x4f, 0x95, 0x9f, 0x8d, 0x3f, 0x77, 0x7c, 0x09, 0xfc, 0xf2, + 0x78, 0x26, 0x6d, 0x66, 0xe6, 0xdf, 0xf7, 0x84, 0xf3, 0xfb, 0x32, 0x3a, 0x59, 0x7e, 0x00, 0x00, + 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, + 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x03, 0xa4, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, 0x4c, 0x3a, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, + 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x58, 0x4d, + 0x50, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x34, 0x2e, 0x30, 0x22, 0x3e, 0x0a, 0x20, + 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, + 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, + 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, + 0x23, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, + 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x74, + 0x69, 0x66, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, + 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x2f, 0x31, 0x2e, + 0x30, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x65, 0x78, 0x69, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x65, 0x78, 0x69, 0x66, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x79, + 0x44, 0x61, 0x74, 0x65, 0x3e, 0x32, 0x30, 0x31, 0x34, 0x2d, 0x30, 0x35, 0x2d, 0x30, 0x32, 0x54, + 0x31, 0x31, 0x3a, 0x30, 0x35, 0x3a, 0x30, 0x36, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x79, 0x44, 0x61, 0x74, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x6d, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x33, + 0x2e, 0x31, 0x3c, 0x2f, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, + 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x4f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x3e, + 0x35, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, + 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, + 0x69, 0x74, 0x3e, 0x31, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x69, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x59, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x66, 0x66, 0x3a, 0x58, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x37, 0x32, 0x3c, 0x2f, 0x74, 0x69, 0x66, 0x66, 0x3a, + 0x58, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, + 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x38, 0x3c, 0x2f, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x58, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, + 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x3e, 0x31, + 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x78, 0x69, + 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x3e, 0x31, 0x3c, 0x2f, 0x65, 0x78, 0x69, 0x66, 0x3a, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x59, + 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, + 0x3e, 0x0a, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, 0x0a, 0x90, + 0x7a, 0xe1, 0x8d, 0x00, 0x00, 0x00, 0x12, 0x49, 0x44, 0x41, 0x54, 0x08, 0x1d, 0x63, 0x60, 0x60, + 0x60, 0xf8, 0x0f, 0xc5, 0x40, 0x0a, 0x13, 0x00, 0x00, 0x35, 0xeb, 0x01, 0xff, 0x0f, 0x5e, 0xbc, + 0xf4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + + +#pragma clang diagnostic pop + +@implementation FLEXResources + +#define FLEXImage(base) ( \ + (UIScreen.mainScreen.scale > 1.5) ? \ + ( (UIScreen.mainScreen.scale > 2.5) ? \ + [self imageWithBytesNoCopy:(void *)base##3x length:sizeof(base##3x) scale:3.0] : \ + [self imageWithBytesNoCopy:(void *)base##2x length:sizeof(base##2x) scale:2.0] \ + ) : \ + nil \ +) #define FLEXImageTemplate(base) ([FLEXImage(base) imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]) #define FLEXRetinaOnlyImage(base) ([self imageWithBytesNoCopy:(void *)(base) length:sizeof(base) scale:2.0]) -+ (UIImage *)closeIcon -{ + +#pragma mark - FLEX Toolbar Icons + ++ (UIImage *)closeIcon { return FLEXImageTemplate(FLEXCloseIcon); } -+ (UIImage *)dragHandle -{ ++ (UIImage *)dragHandle { return FLEXImageTemplate(FLEXDragHandle); } -+ (UIImage *)globeIcon -{ - return FLEXImageTemplate(FLEXGlobeIcon); ++ (UIImage *)globalsIcon { + return FLEXImageTemplate(FLEXGlobalsIcon); } -+ (UIImage *)hierarchyIndentPattern -{ - return FLEXImageTemplate(FLEXHierarchyIndentPattern); ++ (UIImage *)hierarchyIcon { + return FLEXImageTemplate(FLEXHierarchyIcon); } -+ (UIImage *)listIcon -{ - return FLEXImageTemplate(FLEXListIcon); ++ (UIImage *)recentIcon { + return FLEXImageTemplate(FLEXRecentTabIcon); } -+ (UIImage *)moveIcon -{ ++ (UIImage *)moveIcon { return FLEXImageTemplate(FLEXMoveIcon); } -+ (UIImage *)selectIcon -{ ++ (UIImage *)selectIcon { return FLEXImageTemplate(FLEXSelectIcon); } -+ (UIImage *)jsonIcon -{ - return FLEXRetinaOnlyImage(FLEXJSONIcon2x); + +#pragma mark - Toolbar Icons + ++ (UIImage *)bookmarksIcon { + return FLEXImage(FLEXBookmarksIcon); +} + ++ (UIImage *)openTabsIcon { + return FLEXImage(FLEXOpenTabsIcon); +} + ++ (UIImage *)moreIcon { + return FLEXImage(FLEXMoreIcon); } -+ (UIImage *)textPlainIcon -{ - return FLEXRetinaOnlyImage(FLEXTextPlainIcon2x); ++ (UIImage *)gearIcon { + return FLEXImage(FLEXGearIcon); } -+ (UIImage *)htmlIcon -{ - return FLEXRetinaOnlyImage(FLEXHTMLIcon2x); ++ (UIImage *)scrollToBottomIcon { + return FLEXImage(FLEXCircleDownArrowIcon); } -+ (UIImage *)audioIcon -{ - return FLEXRetinaOnlyImage(FLEXAudioIcon2x); + +#pragma mark - Content Type Icons + ++ (UIImage *)jsonIcon { + return FLEXImage(FLEXJSONIcon); } -+ (UIImage *)jsIcon -{ - return FLEXRetinaOnlyImage(FLEXJSIcon2x); ++ (UIImage *)textPlainIcon { + return FLEXImage(FLEXTextPlainIcon); } -+ (UIImage *)plistIcon -{ - return FLEXRetinaOnlyImage(FLEXPlistIcon2x); ++ (UIImage *)htmlIcon { + return FLEXImage(FLEXHTMLIcon); } -+ (UIImage *)textIcon -{ - return FLEXRetinaOnlyImage(FLEXTextIcon2x); ++ (UIImage *)audioIcon { + return FLEXImage(FLEXAudioIcon); } -+ (UIImage *)videoIcon -{ - return FLEXRetinaOnlyImage(FLEXVideoIcon2x); ++ (UIImage *)jsIcon { + return FLEXImage(FLEXJSIcon); } -+ (UIImage *)xmlIcon -{ - return FLEXRetinaOnlyImage(FLEXXMLIcon2x); ++ (UIImage *)plistIcon { + return FLEXImage(FLEXPlistIcon); } -+ (UIImage *)binaryIcon -{ - return FLEXRetinaOnlyImage(FLEXBinaryIcon2x); ++ (UIImage *)textIcon { + return FLEXImage(FLEXTextIcon); } -+ (UIImage *)checkerPattern -{ ++ (UIImage *)videoIcon { + return FLEXImage(FLEXVideoIcon); +} + ++ (UIImage *)xmlIcon { + return FLEXImage(FLEXXMLIcon); +} + ++ (UIImage *)binaryIcon { + return FLEXImage(FLEXBinaryIcon); +} + + +#pragma mark - 3D Explorer Icons + ++ (UIImage *)toggle2DIcon { + return FLEXImage(FLEXToggle2DIcon); +} + ++ (UIImage *)toggle3DIcon { + return FLEXImage(FLEXToggle3DIcon); +} + ++ (UIImage *)rangeSliderLeftHandle { + return FLEXImage(FLEXRangeSliderLeftHandle); +} + ++ (UIImage *)rangeSliderRightHandle { + return FLEXImage(FLEXRangeSliderRightHandle); +} + ++ (UIImage *)rangeSliderTrack { + UIEdgeInsets cap = UIEdgeInsetsMake(0, 5, 0, 4); + return [FLEXImage(FLEXRangeSliderTrack) resizableImageWithCapInsets:cap]; +} + ++ (UIImage *)rangeSliderFill { + UIEdgeInsets cap = UIEdgeInsetsMake(0, 5, 0, 4); + return [FLEXImage(FLEXRangeSliderFill) resizableImageWithCapInsets:cap]; +} + + +#pragma mark - Misc Icons + ++ (UIImage *)checkerPattern { return FLEXImage(FLEXCheckerPattern); } ++ (UIImage *)hierarchyIndentPattern { + return FLEXImageTemplate(FLEXHierarchyIndentPattern); +} + + #undef FLEXImage #undef FLEXRetinaOnlyImage #pragma mark - Helpers -+ (UIImage *)imageWithBytesNoCopy:(void *)bytes length:(NSUInteger)length scale:(CGFloat)scale -{ ++ (UIImage *)imageWithBytesNoCopy:(void *)bytes length:(NSUInteger)length scale:(CGFloat)scale { NSData *data = [NSData dataWithBytesNoCopy:bytes length:length freeWhenDone:NO]; return [UIImage imageWithData:data scale:scale]; } diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.h b/xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.h deleted file mode 100644 index 898bbf29..00000000 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.h +++ /dev/null @@ -1,115 +0,0 @@ -// -// FLEXRuntimeUtility.h -// Flipboard -// -// Created by Ryan Olson on 6/8/14. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import -#import - -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 kFLEXUtilityAttributeTypeEncoding; -extern NSString *const kFLEXUtilityAttributeBackingIvar; -extern NSString *const kFLEXUtilityAttributeReadOnly; -extern NSString *const kFLEXUtilityAttributeCopy; -extern NSString *const kFLEXUtilityAttributeRetain; -extern NSString *const kFLEXUtilityAttributeNonAtomic; -extern NSString *const kFLEXUtilityAttributeCustomGetter; -extern NSString *const kFLEXUtilityAttributeCustomSetter; -extern NSString *const kFLEXUtilityAttributeDynamic; -extern NSString *const kFLEXUtilityAttributeWeak; -extern NSString *const kFLEXUtilityAttributeGarbageCollectable; -extern NSString *const kFLEXUtilityAttributeOldStyleTypeEncoding; - -typedef NS_ENUM(char, FLEXTypeEncoding) -{ - 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' -}; - -#define FLEXEncodeClass(class) ("@\"" #class "\"") -#define FLEXEncodeObject(obj) (obj ? [NSString stringWithFormat:@"@\"%@\"", [obj class]].UTF8String : @encode(id)) - -@interface FLEXRuntimeUtility : NSObject - -// General Helpers -+ (BOOL)pointerIsValidObjcObject:(const void *)pointer; -/// Unwraps raw pointers to objects stored in NSValue, and re-boxes C strings into NSStrings. -+ (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXTypeEncoding *)returnType; -/// Some fields have a name in their encoded string (e.g. \"width\"d) -/// @return the offset to skip the field name, 0 if there is no name -+ (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncoding; - -/// @return The class hierarchy for the given object or class, -/// from the current class to the root-most class. -+ (NSArray *)classHierarchyOfObject:(id)objectOrClass; - -// Property Helpers -+ (NSString *)prettyNameForProperty:(objc_property_t)property; -+ (NSString *)typeEncodingForProperty:(objc_property_t)property; -+ (BOOL)isReadonlyProperty:(objc_property_t)property; -+ (SEL)setterSelectorForProperty:(objc_property_t)property; -+ (NSString *)fullDescriptionForProperty:(objc_property_t)property; -+ (id)valueForProperty:(objc_property_t)property onObject:(id)object; -+ (NSString *)descriptionForIvarOrPropertyValue:(id)value; -+ (void)tryAddPropertyWithName:(const char *)name attributes:(NSDictionary *)attributePairs toClass:(__unsafe_unretained Class)theClass; - -// Ivar Helpers -+ (NSString *)prettyNameForIvar:(Ivar)ivar; -+ (id)valueForIvar:(Ivar)ivar onObject:(id)object; -+ (void)setValue:(id)value forIvar:(Ivar)ivar onObject:(id)object; - -// Method Helpers -+ (NSString *)prettyNameForMethod:(Method)method isClassMethod:(BOOL)isClassMethod; -+ (NSArray *)prettyArgumentComponentsForMethod:(Method)method; -+ (FLEXTypeEncoding *)returnTypeForMethod:(Method)method; - -// Method Calling/Field Editing -+ (id)performSelector:(SEL)selector - onObject:(id)object - withArguments:(NSArray *)arguments - error:(NSError * __autoreleasing *)error; -+ (NSString *)editableJSONStringForObject:(id)object; -+ (id)objectValueFromEditableJSONString:(NSString *)string; -+ (NSValue *)valueForNumberWithObjCType:(const char *)typeEncoding fromInputString:(NSString *)inputString; -+ (void)enumerateTypesInStructEncoding:(const char *)structEncoding - usingBlock:(void (^)(NSString *structName, - const char *fieldTypeEncoding, - NSString *prettyTypeEncoding, - NSUInteger fieldIndex, - NSUInteger fieldOffset))typeBlock; -+ (NSValue *)valueForPrimitivePointer:(void *)pointer objCType:(const char *)type; - -@end diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.h b/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.h index b4764db9..15368aa0 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.h +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 4/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @@ -11,33 +11,41 @@ #import #import #import +#import "FLEXTypeEncodingParser.h" #import "FLEXAlert.h" +#import "NSArray+FLEX.h" +#import "UIFont+FLEX.h" +#import "NSMapTable+FLEX_Subscripting.h" +#import "FLEXMacros.h" -#define FLEXFloor(x) (floor(UIScreen.mainScreen.scale * (x)) / UIScreen.mainScreen.scale) - -#if defined(__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 +#if !FLEX_AT_LEAST_IOS13_SDK +@class UIWindowScene; #endif @interface FLEXUtility : NSObject +/// The key window of the app, if it is not a \c FLEXWindow. +/// If it is, then \c FLEXWindow.previousKeyWindow is returned. +@property (nonatomic, readonly, class) UIWindow *appKeyWindow; +/// @return the result of +[UIWindow allWindowsIncludingInternalWindows:onlyVisibleWindows:] +@property (nonatomic, readonly, class) NSArray *allWindows; +/// The first active \c UIWindowScene of the app. +@property (nonatomic, readonly, class) UIWindowScene *activeScene API_AVAILABLE(ios(13.0)); +/// @return top-most view controller of the given window ++ (UIViewController *)topViewControllerInWindow:(UIWindow *)window; + + (UIColor *)consistentRandomColorForObject:(id)object; + (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame; + (NSString *)stringForCGRect:(CGRect)rect; + (UIViewController *)viewControllerForView:(UIView *)view; + (UIViewController *)viewControllerForAncestralView:(UIView *)view; ++ (UIImage *)previewImageForView:(UIView *)view; ++ (UIImage *)previewImageForLayer:(CALayer *)layer; + (NSString *)detailDescriptionForView:(UIView *)view; + (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius; + (UIColor *)hierarchyIndentPatternColor; -+ (NSString *)applicationImageName; -+ (NSString *)applicationName; -+ (NSString *)safeDescriptionForObject:(id)object; -+ (NSString *)safeDebugDescriptionForObject:(id)object; ++ (NSString *)pointerToString:(void *)ptr; + (NSString *)addressOfObject:(id)object; -+ (UIFont *)defaultFontOfSize:(CGFloat)size; -+ (UIFont *)defaultTableViewCellLabelFont; + (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString; + (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask; + (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data; @@ -49,12 +57,6 @@ + (BOOL)isValidJSONData:(NSData *)data; + (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData; -/// 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. -+ (NSArray *)map:(NSArray *)array block:(id(^)(id obj, NSUInteger idx))mapFunc; - -+ (NSArray *)allWindows; - // Swizzling utilities + (SEL)swizzledSelectorForSelector:(SEL)selector; diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.m b/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.m index ad2d0585..79e99f56 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.m +++ b/xcode/Pods/FLEX/Classes/Utility/FLEXUtility.m @@ -3,26 +3,76 @@ // Flipboard // // Created by Ryan Olson on 4/18/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import "FLEXColor.h" #import "FLEXUtility.h" #import "FLEXResources.h" +#import "FLEXWindow.h" #import #import #import @implementation FLEXUtility -+ (UIColor *)consistentRandomColorForObject:(id)object -{ ++ (UIWindow *)appKeyWindow { + // First, check UIApplication.keyWindow + FLEXWindow *window = (id)UIApplication.sharedApplication.keyWindow; + if (window) { + if ([window isKindOfClass:[FLEXWindow class]]) { + return window.previousKeyWindow; + } + + return window; + } + + // As of iOS 13, UIApplication.keyWindow does not return nil, + // so this is more of a safeguard against it returning nil in the future. + // + // Also, these are obviously not all FLEXWindows; FLEXWindow is used + // so we can call window.previousKeyWindow without an ugly cast + for (FLEXWindow *window in UIApplication.sharedApplication.windows) { + if (window.isKeyWindow) { + if ([window isKindOfClass:[FLEXWindow class]]) { + return window.previousKeyWindow; + } + + return window; + } + } + + return nil; +} + +#if FLEX_AT_LEAST_IOS13_SDK ++ (UIWindowScene *)activeScene { + for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { + // Look for an active UIWindowScene + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + return (UIWindowScene *)scene; + } + } + + return nil; +} +#endif + ++ (UIViewController *)topViewControllerInWindow:(UIWindow *)window { + UIViewController *topViewController = window.rootViewController; + while (topViewController.presentedViewController) { + topViewController = topViewController.presentedViewController; + } + return topViewController; +} + ++ (UIColor *)consistentRandomColorForObject:(id)object { CGFloat hue = (((NSUInteger)object >> 4) % 256) / 255.0; return [UIColor colorWithHue:hue saturation:1.0 brightness:1.0 alpha:1.0]; } -+ (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame -{ ++ (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFrame { NSString *description = [[view class] description]; NSString *viewControllerDescription = [[[self viewControllerForView:view] class] description]; @@ -41,44 +91,61 @@ + (NSString *)descriptionForView:(UIView *)view includingFrame:(BOOL)includeFram return description; } -+ (NSString *)stringForCGRect:(CGRect)rect -{ - return [NSString stringWithFormat:@"{(%g, %g), (%g, %g)}", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height]; ++ (NSString *)stringForCGRect:(CGRect)rect { + return [NSString stringWithFormat:@"{(%g, %g), (%g, %g)}", + rect.origin.x, rect.origin.y, rect.size.width, rect.size.height + ]; } -+ (UIViewController *)viewControllerForView:(UIView *)view -{ - UIViewController *viewController = nil; - SEL viewDelSel = NSSelectorFromString(@"_viewDelegate"); - if ([view respondsToSelector:viewDelSel]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - viewController = [view performSelector:viewDelSel]; -#pragma clang diagnostic pop ++ (UIViewController *)viewControllerForView:(UIView *)view { + NSString *viewDelegate = @"_viewDelegate"; + if ([view respondsToSelector:NSSelectorFromString(viewDelegate)]) { + return [view valueForKey:viewDelegate]; } - return viewController; -} - -+ (UIViewController *)viewControllerForAncestralView:(UIView *)view -{ - UIViewController *viewController = nil; - SEL viewDelSel = NSSelectorFromString([NSString stringWithFormat:@"%@ewControllerForAncestor", @"_vi"]); - if ([view respondsToSelector:viewDelSel]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - viewController = [view performSelector:viewDelSel]; -#pragma clang diagnostic pop + + return nil; +} + ++ (UIViewController *)viewControllerForAncestralView:(UIView *)view { + NSString *_viewControllerForAncestor = @"_viewControllerForAncestor"; + if ([view respondsToSelector:NSSelectorFromString(_viewControllerForAncestor)]) { + return [view valueForKey:_viewControllerForAncestor]; } - return viewController; + + return nil; +} + ++ (UIImage *)previewImageForView:(UIView *)view { + if (CGRectIsEmpty(view.bounds)) { + return nil; + } + + CGSize viewSize = view.bounds.size; + UIGraphicsBeginImageContextWithOptions(viewSize, NO, 0.0); + [view drawViewHierarchyInRect:CGRectMake(0, 0, viewSize.width, viewSize.height) afterScreenUpdates:YES]; + UIImage *previewImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return previewImage; } -+ (NSString *)detailDescriptionForView:(UIView *)view -{ ++ (UIImage *)previewImageForLayer:(CALayer *)layer { + if (CGRectIsEmpty(layer.bounds)) { + return nil; + } + + UIGraphicsBeginImageContextWithOptions(layer.bounds.size, NO, 0.0); + CGContextRef imageContext = UIGraphicsGetCurrentContext(); + [layer renderInContext:imageContext]; + UIImage *previewImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return previewImage; +} + ++ (NSString *)detailDescriptionForView:(UIView *)view { return [NSString stringWithFormat:@"frame %@", [self stringForCGRect:view.frame]]; } -+ (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius -{ ++ (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius { CGFloat diameter = radius * 2.0; UIGraphicsBeginImageContextWithOptions(CGSizeMake(diameter, diameter), NO, 0.0); CGContextRef imageContext = UIGraphicsGetCurrentContext(); @@ -89,25 +156,28 @@ + (UIImage *)circularImageWithColor:(UIColor *)color radius:(CGFloat)radius return circularImage; } -+ (UIColor *)hierarchyIndentPatternColor -{ ++ (UIColor *)hierarchyIndentPatternColor { static UIColor *patternColor = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - UIImage *indentationPatternImage = [FLEXResources hierarchyIndentPattern]; + UIImage *indentationPatternImage = FLEXResources.hierarchyIndentPattern; patternColor = [UIColor colorWithPatternImage:indentationPatternImage]; #if FLEX_AT_LEAST_IOS13_SDK if (@available(iOS 13.0, *)) { // Create a dark mode version - UIGraphicsBeginImageContextWithOptions(indentationPatternImage.size, NO, indentationPatternImage.scale); - [[FLEXColor iconColor] set]; - [indentationPatternImage drawInRect:CGRectMake(0, 0, indentationPatternImage.size.width, indentationPatternImage.size.height)]; + UIGraphicsBeginImageContextWithOptions( + indentationPatternImage.size, NO, indentationPatternImage.scale + ); + [FLEXColor.iconColor set]; + [indentationPatternImage drawInRect:CGRectMake( + 0, 0, indentationPatternImage.size.width, indentationPatternImage.size.height + )]; UIImage *darkModePatternImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // Create dynamic color provider - patternColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) { + patternColor = [UIColor colorWithDynamicProvider:^UIColor *(UITraitCollection *traitCollection) { return (traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight ? [UIColor colorWithPatternImage:indentationPatternImage] : [UIColor colorWithPatternImage:darkModePatternImage]); @@ -119,61 +189,23 @@ + (UIColor *)hierarchyIndentPatternColor return patternColor; } -+ (NSString *)applicationImageName -{ ++ (NSString *)applicationImageName { return NSBundle.mainBundle.executablePath; } -+ (NSString *)applicationName -{ - return [FLEXUtility applicationImageName].lastPathComponent; ++ (NSString *)applicationName { + return FLEXUtility.applicationImageName.lastPathComponent; } -+ (NSString *)safeDescriptionForObject:(id)object -{ - // Don't assume that we have an NSObject subclass. - // Check to make sure the object responds to the description methods. - NSString *description = nil; - if ([object respondsToSelector:@selector(debugDescription)]) { - description = [object debugDescription]; - } else if ([object respondsToSelector:@selector(description)]) { - description = [object description]; - } - return description; ++ (NSString *)pointerToString:(void *)ptr { + return [NSString stringWithFormat:@"%p", ptr]; } -+ (NSString *)safeDebugDescriptionForObject:(id)object -{ - NSString *description = [self safeDescriptionForObject:object]; - if (!description) { - NSString *cls = NSStringFromClass(object_getClass(object)); - if (object_isClass(object)) { - description = [cls stringByAppendingString:@" class (no description)"]; - } else { - description = [cls stringByAppendingString:@" instance (no description)"]; - } - } - - return description; -} - -+ (NSString *)addressOfObject:(id)object -{ ++ (NSString *)addressOfObject:(id)object { return [NSString stringWithFormat:@"%p", object]; } -+ (UIFont *)defaultFontOfSize:(CGFloat)size -{ - return [UIFont fontWithName:@"HelveticaNeue" size:size]; -} - -+ (UIFont *)defaultTableViewCellLabelFont -{ - return [self defaultFontOfSize:12.0]; -} - -+ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString -{ ++ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString { static NSDictionary *escapingDictionary = nil; static NSRegularExpression *regex = nil; static dispatch_once_t onceToken; @@ -190,9 +222,11 @@ + (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString regex = [NSRegularExpression regularExpressionWithPattern:@"(&|>|<|'|\"|«|»)" options:0 error:NULL]; }); - NSMutableString *mutableString = [originalString mutableCopy]; + NSMutableString *mutableString = originalString.mutableCopy; - NSArray *matches = [regex matchesInString:mutableString options:0 range:NSMakeRange(0, mutableString.length)]; + NSArray *matches = [regex + matchesInString:mutableString options:0 range:NSMakeRange(0, mutableString.length) + ]; for (NSTextCheckingResult *result in matches.reverseObjectEnumerator) { NSString *foundString = [mutableString substringWithRange:result.range]; NSString *replacementString = escapingDictionary[foundString]; @@ -204,8 +238,7 @@ + (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString return [mutableString copy]; } -+ (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask -{ ++ (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask { NSArray *supportedOrientations = NSBundle.mainBundle.infoDictionary[@"UISupportedInterfaceOrientations"]; UIInterfaceOrientationMask supportedOrientationsMask = 0; if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortrait"]) { @@ -223,16 +256,19 @@ + (UIInterfaceOrientationMask)infoPlistSupportedInterfaceOrientationsMask return supportedOrientationsMask; } -+ (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data -{ ++ (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImageData:(NSData *)data { UIImage *thumbnail = nil; CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)data, 0); if (imageSource) { - NSDictionary *options = @{ (__bridge id)kCGImageSourceCreateThumbnailWithTransform : @YES, - (__bridge id)kCGImageSourceCreateThumbnailFromImageAlways : @YES, - (__bridge id)kCGImageSourceThumbnailMaxPixelSize : @(dimension) }; - - CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options); + NSDictionary *options = @{ + (__bridge id)kCGImageSourceCreateThumbnailWithTransform : @YES, + (__bridge id)kCGImageSourceCreateThumbnailFromImageAlways : @YES, + (__bridge id)kCGImageSourceThumbnailMaxPixelSize : @(dimension) + }; + + CGImageRef scaledImageRef = CGImageSourceCreateThumbnailAtIndex( + imageSource, 0, (__bridge CFDictionaryRef)options + ); if (scaledImageRef) { thumbnail = [UIImage imageWithCGImage:scaledImageRef]; CFRelease(scaledImageRef); @@ -242,8 +278,7 @@ + (UIImage *)thumbnailedImageWithMaxPixelDimension:(NSInteger)dimension fromImag return thumbnail; } -+ (NSString *)stringFromRequestDuration:(NSTimeInterval)duration -{ ++ (NSString *)stringFromRequestDuration:(NSTimeInterval)duration { NSString *string = @"0s"; if (duration > 0.0) { if (duration < 1.0) { @@ -257,8 +292,7 @@ + (NSString *)stringFromRequestDuration:(NSTimeInterval)duration return string; } -+ (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response -{ ++ (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response { NSString *httpResponseString = nil; if ([response isKindOfClass:[NSHTTPURLResponse class]]) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; @@ -274,8 +308,7 @@ + (NSString *)statusCodeStringFromURLResponse:(NSURLResponse *)response return httpResponseString; } -+ (BOOL)isErrorStatusCodeFromURLResponse:(NSURLResponse *)response -{ ++ (BOOL)isErrorStatusCodeFromURLResponse:(NSURLResponse *)response { if ([response isKindOfClass:[NSHTTPURLResponse class]]) { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; return httpResponse.statusCode >= 400; @@ -284,8 +317,7 @@ + (BOOL)isErrorStatusCodeFromURLResponse:(NSURLResponse *)response return NO; } -+ (NSArray *)itemsFromQueryString:(NSString *)query -{ ++ (NSArray *)itemsFromQueryString:(NSString *)query { NSMutableArray *items = [NSMutableArray new]; // [a=1, b=2, c=3] @@ -304,14 +336,16 @@ + (BOOL)isErrorStatusCodeFromURLResponse:(NSURLResponse *)response return items.copy; } -+ (NSString *)prettyJSONStringFromData:(NSData *)data -{ ++ (NSString *)prettyJSONStringFromData:(NSData *)data { NSString *prettyString = nil; id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; if ([NSJSONSerialization isValidJSONObject:jsonObject]) { - prettyString = [NSString stringWithCString:[NSJSONSerialization dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:NULL].bytes encoding:NSUTF8StringEncoding]; - // NSJSONSerialization escapes forward slashes. We want pretty json, so run through and unescape the slashes. + prettyString = [NSString stringWithCString:[NSJSONSerialization + dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:NULL + ].bytes encoding:NSUTF8StringEncoding]; + // NSJSONSerialization escapes forward slashes. + // We want pretty json, so run through and unescape the slashes. prettyString = [prettyString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"]; } else { prettyString = [NSString stringWithCString:data.bytes encoding:NSUTF8StringEncoding]; @@ -320,16 +354,14 @@ + (NSString *)prettyJSONStringFromData:(NSData *)data return prettyString; } -+ (BOOL)isValidJSONData:(NSData *)data -{ ++ (BOOL)isValidJSONData:(NSData *)data { return [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL] ? YES : NO; } // Thanks to the following links for help with this method // https://www.cocoanetics.com/2012/02/decompressing-files-into-memory/ // https://github.com/nicklockwood/GZIP -+ (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData -{ ++ (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData { NSData *inflatedData = nil; NSUInteger compressedDataLength = compressedData.length; if (compressedDataLength > 0) { @@ -363,26 +395,14 @@ + (NSData *)inflatedDataFromCompressedData:(NSData *)compressedData return inflatedData; } -+ (NSArray *)map:(NSArray *)array block:(id(^)(id obj, NSUInteger idx))mapFunc -{ - NSMutableArray *map = [NSMutableArray new]; - [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - id ret = mapFunc(obj, idx); - if (ret) { - [map addObject:ret]; - } - }]; - - return map; -} - -+ (NSArray *)allWindows -{ ++ (NSArray *)allWindows { BOOL includeInternalWindows = YES; BOOL onlyVisibleWindows = NO; // Obfuscating selector allWindowsIncludingInternalWindows:onlyVisibleWindows: - NSArray *allWindowsComponents = @[@"al", @"lWindo", @"wsIncl", @"udingInt", @"ernalWin", @"dows:o", @"nlyVisi", @"bleWin", @"dows:"]; + NSArray *allWindowsComponents = @[ + @"al", @"lWindo", @"wsIncl", @"udingInt", @"ernalWin", @"dows:o", @"nlyVisi", @"bleWin", @"dows:" + ]; SEL allWindowsSelector = NSSelectorFromString([allWindowsComponents componentsJoinedByString:@""]); NSMethodSignature *methodSignature = [[UIWindow class] methodSignatureForSelector:allWindowsSelector]; @@ -399,8 +419,7 @@ + (NSArray *)map:(NSArray *)array block:(id(^)(id obj, NSUInteger idx))mapFunc return windows; } -+ (UIAlertController *)alert:(NSString *)title message:(NSString *)message -{ ++ (UIAlertController *)alert:(NSString *)title message:(NSString *)message { return [UIAlertController alertControllerWithTitle:title message:message @@ -408,13 +427,13 @@ + (UIAlertController *)alert:(NSString *)title message:(NSString *)message ]; } -+ (SEL)swizzledSelectorForSelector:(SEL)selector -{ - return NSSelectorFromString([NSString stringWithFormat:@"_flex_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector)]); ++ (SEL)swizzledSelectorForSelector:(SEL)selector { + return NSSelectorFromString([NSString stringWithFormat: + @"_flex_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector) + ]); } -+ (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls -{ ++ (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)cls { if ([cls instancesRespondToSelector:selector]) { unsigned int numMethods = 0; Method *methods = class_copyMethodList(cls, &numMethods); @@ -438,8 +457,10 @@ + (BOOL)instanceRespondsButDoesNotImplementSelector:(SEL)selector class:(Class)c return NO; } -+ (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Class)class withBlock:(id)block swizzledSelector:(SEL)swizzledSelector -{ ++ (void)replaceImplementationOfKnownSelector:(SEL)originalSelector + onClass:(Class)class + withBlock:(id)block + swizzledSelector:(SEL)swizzledSelector { // This method is only intended for swizzling methods that are know to exist on the class. // Bail if that isn't the case. Method originalMethod = class_getInstanceMethod(class, originalSelector); @@ -453,23 +474,36 @@ + (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Clas method_exchangeImplementations(originalMethod, newMethod); } -+ (void)replaceImplementationOfSelector:(SEL)selector withSelector:(SEL)swizzledSelector forClass:(Class)cls withMethodDescription:(struct objc_method_description)methodDescription implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock -{ ++ (void)replaceImplementationOfSelector:(SEL)selector + withSelector:(SEL)swizzledSelector + forClass:(Class)cls + withMethodDescription:(struct objc_method_description)methodDescription + implementationBlock:(id)implementationBlock undefinedBlock:(id)undefinedBlock { if ([self instanceRespondsButDoesNotImplementSelector:selector class:cls]) { return; } - IMP implementation = imp_implementationWithBlock((id)([cls instancesRespondToSelector:selector] ? implementationBlock : undefinedBlock)); + IMP implementation = imp_implementationWithBlock((id)( + [cls instancesRespondToSelector:selector] ? implementationBlock : undefinedBlock) + ); Method oldMethod = class_getInstanceMethod(cls, selector); + const char *types = methodDescription.types; if (oldMethod) { - class_addMethod(cls, swizzledSelector, implementation, methodDescription.types); - + if (!types) { + types = method_getTypeEncoding(oldMethod); + } + + class_addMethod(cls, swizzledSelector, implementation, types); Method newMethod = class_getInstanceMethod(cls, swizzledSelector); - method_exchangeImplementations(oldMethod, newMethod); } else { - class_addMethod(cls, selector, implementation, methodDescription.types); + if (!types) { + // Some protocol method descriptions don't have .types populated + // Set the return type to void and ignore arguments + types = "v@:"; + } + class_addMethod(cls, selector, implementation, types); } } diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardHelpViewController.h b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.h similarity index 100% rename from xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardHelpViewController.h rename to xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.h diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardHelpViewController.m b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.m similarity index 88% rename from xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardHelpViewController.m rename to xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.m index 1bc41233..66e9d7e6 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardHelpViewController.m +++ b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.m @@ -17,15 +17,14 @@ @interface FLEXKeyboardHelpViewController () @implementation FLEXKeyboardHelpViewController -- (void)viewDidLoad -{ +- (void)viewDidLoad { [super viewDidLoad]; self.textView = [[UITextView alloc] initWithFrame:self.view.bounds]; self.textView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; [self.view addSubview:self.textView]; #if TARGET_OS_SIMULATOR - self.textView.text = [[FLEXKeyboardShortcutManager sharedManager] keyboardShortcutsDescription]; + self.textView.text = FLEXKeyboardShortcutManager.sharedManager.keyboardShortcutsDescription; #endif self.textView.backgroundColor = UIColor.blackColor; self.textView.textColor = UIColor.whiteColor; @@ -36,8 +35,7 @@ - (void)viewDidLoad self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]; } -- (void)donePressed:(id)sender -{ +- (void)donePressed:(id)sender { [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; } diff --git a/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.h b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.h new file mode 100644 index 00000000..fcf74fdd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.h @@ -0,0 +1,23 @@ +// +// FLEXKeyboardShortcutManager.h +// FLEX +// +// Created by Ryan Olson on 9/19/15. +// Copyright © 2015 Flipboard. All rights reserved. +// + +#import + +@interface FLEXKeyboardShortcutManager : NSObject + +@property (nonatomic, readonly, class) FLEXKeyboardShortcutManager *sharedManager; + +- (void)registerSimulatorShortcutWithKey:(NSString *)key + modifiers:(UIKeyModifierFlags)modifiers + action:(dispatch_block_t)action + description:(NSString *)description; + +@property (nonatomic, getter=isEnabled) BOOL enabled; +@property (nonatomic, readonly) NSString *keyboardShortcutsDescription; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.m b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.m similarity index 78% rename from xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.m rename to xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.m index 08c66e54..c863f81b 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXKeyboardShortcutManager.m +++ b/xcode/Pods/FLEX/Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.m @@ -33,8 +33,7 @@ @interface FLEXKeyInput : NSObject @implementation FLEXKeyInput -- (BOOL)isEqual:(id)object -{ +- (BOOL)isEqual:(id)object { BOOL isEqual = NO; if ([object isKindOfClass:[FLEXKeyInput class]]) { FLEXKeyInput *keyCommand = (FLEXKeyInput *)object; @@ -45,24 +44,23 @@ - (BOOL)isEqual:(id)object return isEqual; } -- (NSUInteger)hash -{ - return [self.key hash] ^ self.flags; +- (NSUInteger)hash { + return self.key.hash ^ self.flags; } -- (id)copyWithZone:(NSZone *)zone -{ +- (id)copyWithZone:(NSZone *)zone { return [[self class] keyInputForKey:self.key flags:self.flags helpDescription:self.helpDescription]; } -- (NSString *)description -{ - NSDictionary *keyMappings = @{ UIKeyInputUpArrow : @"↑", - UIKeyInputDownArrow : @"↓", - UIKeyInputLeftArrow : @"←", - UIKeyInputRightArrow : @"→", - UIKeyInputEscape : @"␛", - @" " : @"␠"}; +- (NSString *)description { + NSDictionary *keyMappings = @{ + UIKeyInputUpArrow : @"↑", + UIKeyInputDownArrow : @"↓", + UIKeyInputLeftArrow : @"←", + UIKeyInputRightArrow : @"→", + UIKeyInputEscape : @"␛", + @" " : @"␠" + }; NSString *prettyKey = nil; if (self.key && keyMappings[self.key]) { @@ -93,13 +91,13 @@ - (NSString *)description return [NSString stringWithFormat:@"%@%@\t%@", prettyFlags, prettyKey, self.helpDescription]; } -+ (instancetype)keyInputForKey:(NSString *)key flags:(UIKeyModifierFlags)flags -{ ++ (instancetype)keyInputForKey:(NSString *)key flags:(UIKeyModifierFlags)flags { return [self keyInputForKey:key flags:flags helpDescription:nil]; } -+ (instancetype)keyInputForKey:(NSString *)key flags:(UIKeyModifierFlags)flags helpDescription:(NSString *)helpDescription -{ ++ (instancetype)keyInputForKey:(NSString *)key + flags:(UIKeyModifierFlags)flags + helpDescription:(NSString *)helpDescription { FLEXKeyInput *keyInput = [self new]; if (keyInput) { keyInput->_key = key; @@ -123,8 +121,7 @@ @interface FLEXKeyboardShortcutManager () @implementation FLEXKeyboardShortcutManager -+ (instancetype)sharedManager -{ ++ (instancetype)sharedManager { static FLEXKeyboardShortcutManager *sharedManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ @@ -133,8 +130,7 @@ + (instancetype)sharedManager return sharedManager; } -+ (void)load -{ ++ (void)load { SEL originalKeyEventSelector = NSSelectorFromString(@"handleKeyUIEvent:"); SEL swizzledKeyEventSelector = [FLEXUtility swizzledSelectorForSelector:originalKeyEventSelector]; @@ -145,7 +141,11 @@ + (void)load ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledKeyEventSelector, event); }; - [FLEXUtility replaceImplementationOfKnownSelector:originalKeyEventSelector onClass:[UIApplication class] withBlock:handleKeyUIEventSwizzleBlock swizzledSelector:swizzledKeyEventSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:originalKeyEventSelector + onClass:[UIApplication class] + withBlock:handleKeyUIEventSwizzleBlock + swizzledSelector:swizzledKeyEventSelector + ]; if ([[UITouch class] instancesRespondToSelector:@selector(maximumPossibleForce)]) { SEL originalSendEventSelector = NSSelectorFromString(@"sendEvent:"); @@ -153,7 +153,7 @@ + (void)load void (^sendEventSwizzleBlock)(UIApplication *, UIEvent *) = ^(UIApplication *slf, UIEvent *event) { if (event.type == UIEventTypeTouches) { - FLEXKeyboardShortcutManager *keyboardManager = [FLEXKeyboardShortcutManager sharedManager]; + FLEXKeyboardShortcutManager *keyboardManager = FLEXKeyboardShortcutManager.sharedManager; NSInteger pressureLevel = 0; if (keyboardManager.isPressingShift) { pressureLevel++; @@ -177,7 +177,11 @@ + (void)load ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledSendEventSelector, event); }; - [FLEXUtility replaceImplementationOfKnownSelector:originalSendEventSelector onClass:[UIApplication class] withBlock:sendEventSwizzleBlock swizzledSelector:swizzledSendEventSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:originalSendEventSelector + onClass:[UIApplication class] + withBlock:sendEventSwizzleBlock + swizzledSelector:swizzledSendEventSelector + ]; SEL originalSupportsTouchPressureSelector = NSSelectorFromString(@"_supportsForceTouch"); SEL swizzledSupportsTouchPressureSelector = [FLEXUtility swizzledSelectorForSelector:originalSupportsTouchPressureSelector]; @@ -186,24 +190,29 @@ + (void)load return YES; }; - [FLEXUtility replaceImplementationOfKnownSelector:originalSupportsTouchPressureSelector onClass:[UIDevice class] withBlock:supportsTouchPressureSwizzleBlock swizzledSelector:swizzledSupportsTouchPressureSelector]; + [FLEXUtility replaceImplementationOfKnownSelector:originalSupportsTouchPressureSelector + onClass:[UIDevice class] + withBlock:supportsTouchPressureSwizzleBlock + swizzledSelector:swizzledSupportsTouchPressureSelector + ]; } } -- (instancetype)init -{ +- (instancetype)init { self = [super init]; if (self) { - _actionsForKeyInputs = [NSMutableDictionary dictionary]; + _actionsForKeyInputs = [NSMutableDictionary new]; _enabled = YES; } return self; } -- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description -{ +- (void)registerSimulatorShortcutWithKey:(NSString *)key + modifiers:(UIKeyModifierFlags)modifiers + action:(dispatch_block_t)action + description:(NSString *)description { FLEXKeyInput *keyInput = [FLEXKeyInput keyInputForKey:key flags:modifiers helpDescription:description]; [self.actionsForKeyInputs setObject:action forKey:keyInput]; } @@ -212,8 +221,7 @@ - (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifie static const long kFLEXShiftKeyCode = 0xe1; static const long kFLEXCommandKeyCode = 0xe3; -- (void)handleKeyboardEvent:(UIEvent *)event -{ +- (void)handleKeyboardEvent:(UIEvent *)event { if (!self.enabled) { return; } @@ -239,11 +247,11 @@ - (void)handleKeyboardEvent:(UIEvent *)event isKeyDown = [event _isKeyDown]; } - BOOL interactionEnabled = ![UIApplication.sharedApplication isIgnoringInteractionEvents]; + BOOL interactionEnabled = !UIApplication.sharedApplication.isIgnoringInteractionEvents; BOOL hasFirstResponder = NO; if (isKeyDown && modifiedInput.length > 0 && interactionEnabled) { UIResponder *firstResponder = nil; - for (UIWindow *window in [FLEXUtility allWindows]) { + for (UIWindow *window in FLEXUtility.allWindows) { firstResponder = [window valueForKey:@"firstResponder"]; if (firstResponder) { hasFirstResponder = YES; @@ -262,12 +270,16 @@ - (void)handleKeyboardEvent:(UIEvent *)event dispatch_block_t actionBlock = self.actionsForKeyInputs[exactMatch]; if (!actionBlock) { - FLEXKeyInput *shiftMatch = [FLEXKeyInput keyInputForKey:modifiedInput flags:flags&(~UIKeyModifierShift)]; + FLEXKeyInput *shiftMatch = [FLEXKeyInput + keyInputForKey:modifiedInput flags:flags&(~UIKeyModifierShift) + ]; actionBlock = self.actionsForKeyInputs[shiftMatch]; } if (!actionBlock) { - FLEXKeyInput *capitalMatch = [FLEXKeyInput keyInputForKey:[unmodifiedInput uppercaseString] flags:flags]; + FLEXKeyInput *capitalMatch = [FLEXKeyInput + keyInputForKey:[unmodifiedInput uppercaseString] flags:flags + ]; actionBlock = self.actionsForKeyInputs[capitalMatch]; } @@ -291,12 +303,13 @@ - (void)handleKeyboardEvent:(UIEvent *)event } } -- (NSString *)keyboardShortcutsDescription -{ - NSMutableString *description = [NSMutableString string]; - NSArray *keyInputs = [self.actionsForKeyInputs.allKeys sortedArrayUsingComparator:^NSComparisonResult(FLEXKeyInput *_Nonnull input1, FLEXKeyInput *_Nonnull input2) { - return [input1.key caseInsensitiveCompare:input2.key]; - }]; +- (NSString *)keyboardShortcutsDescription { + NSMutableString *description = [NSMutableString new]; + NSArray *keyInputs = [self.actionsForKeyInputs.allKeys + sortedArrayUsingComparator:^NSComparisonResult(FLEXKeyInput *input1, FLEXKeyInput *input2) { + return [input1.key caseInsensitiveCompare:input2.key]; + } + ]; for (FLEXKeyInput *keyInput in keyInputs) { [description appendFormat:@"%@\n", keyInput]; } diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.h new file mode 100644 index 00000000..ce34797e --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.h @@ -0,0 +1,89 @@ +// +// FLEXRuntimeUtility.h +// Flipboard +// +// Created by Ryan Olson on 6/8/14. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXRuntimeConstants.h" + +#define PropertyKey(suffix) kFLEXPropertyAttributeKey##suffix : @"" +#define PropertyKeyGetter(getter) kFLEXPropertyAttributeKeyCustomGetter : NSStringFromSelector(@selector(getter)) +#define PropertyKeySetter(setter) kFLEXPropertyAttributeKeyCustomSetter : NSStringFromSelector(@selector(setter)) + +/// Takes: min iOS version, property name, target class, property type, and a list of attributes +#define FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, type, ...) ({ \ + if (@available(iOS iOS_atLeast, *)) { \ + NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithDictionary:@{ \ + kFLEXPropertyAttributeKeyTypeEncoding : @(type), \ + __VA_ARGS__ \ + }]; \ + [FLEXRuntimeUtility \ + tryAddPropertyWithName:#name \ + attributes:attrs \ + toClass:cls \ + ]; \ + } \ +}) + +/// Takes: min iOS version, property name, target class, property type, and a list of attributes +#define FLEXRuntimeUtilityTryAddNonatomicProperty(iOS_atLeast, name, cls, type, ...) \ + FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, @encode(type), PropertyKey(NonAtomic), __VA_ARGS__); +/// Takes: min iOS version, property name, target class, property type (class name), and a list of attributes +#define FLEXRuntimeUtilityTryAddObjectProperty(iOS_atLeast, name, cls, type, ...) \ + FLEXRuntimeUtilityTryAddProperty(iOS_atLeast, name, cls, FLEXEncodeClass(type), PropertyKey(NonAtomic), __VA_ARGS__); + +@interface FLEXRuntimeUtility : NSObject + +// General Helpers ++ (BOOL)pointerIsValidObjcObject:(const void *)pointer; +/// Unwraps raw pointers to objects stored in NSValue, and re-boxes C strings into NSStrings. ++ (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXTypeEncoding *)returnType; +/// Some fields have a name in their encoded string (e.g. \"width\"d) +/// @return the offset to skip the field name, 0 if there is no name ++ (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncoding; +/// Given name "foo" and type "int" this would return "int foo", but +/// given name "foo" and type "T *" it would return "T *foo" ++ (NSString *)appendName:(NSString *)name toType:(NSString *)typeEncoding; + +/// @return The class hierarchy for the given object or class, +/// from the current class to the root-most class. ++ (NSArray *)classHierarchyOfObject:(id)objectOrClass; + +/// Used to describe an object in brief within an explorer row ++ (NSString *)summaryForObject:(id)value; ++ (NSString *)safeDescriptionForObject:(id)object; ++ (NSString *)safeDebugDescriptionForObject:(id)object; + +// Property Helpers ++ (BOOL)tryAddPropertyWithName:(const char *)name + attributes:(NSDictionary *)attributePairs + toClass:(__unsafe_unretained Class)theClass; ++ (NSArray *)allPropertyAttributeKeys; + +// Method Helpers ++ (NSArray *)prettyArgumentComponentsForMethod:(Method)method; + +// Method Calling/Field Editing ++ (id)performSelector:(SEL)selector onObject:(id)object; ++ (id)performSelector:(SEL)selector + onObject:(id)object + withArguments:(NSArray *)arguments + error:(NSError * __autoreleasing *)error; ++ (NSString *)editableJSONStringForObject:(id)object; ++ (id)objectValueFromEditableJSONString:(NSString *)string; ++ (NSValue *)valueForNumberWithObjCType:(const char *)typeEncoding fromInputString:(NSString *)inputString; ++ (void)enumerateTypesInStructEncoding:(const char *)structEncoding + usingBlock:(void (^)(NSString *structName, + const char *fieldTypeEncoding, + NSString *prettyTypeEncoding, + NSUInteger fieldIndex, + NSUInteger fieldOffset))typeBlock; ++ (NSValue *)valueForPrimitivePointer:(void *)pointer objCType:(const char *)type; + +#pragma mark - Metadata Helpers + ++ (NSString *)readableTypeForEncoding:(NSString *)encodingString; + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.m similarity index 62% rename from xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.m rename to xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.m index 4a61077f..8591e972 100644 --- a/xcode/Pods/FLEX/Classes/Utility/FLEXRuntimeUtility.m +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/FLEXRuntimeUtility.m @@ -3,26 +3,13 @@ // Flipboard // // Created by Ryan Olson on 6/8/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import #import "FLEXRuntimeUtility.h" #import "FLEXObjcInternal.h" - -// See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6 -NSString *const kFLEXUtilityAttributeTypeEncoding = @"T"; -NSString *const kFLEXUtilityAttributeBackingIvar = @"V"; -NSString *const kFLEXUtilityAttributeReadOnly = @"R"; -NSString *const kFLEXUtilityAttributeCopy = @"C"; -NSString *const kFLEXUtilityAttributeRetain = @"&"; -NSString *const kFLEXUtilityAttributeNonAtomic = @"N"; -NSString *const kFLEXUtilityAttributeCustomGetter = @"G"; -NSString *const kFLEXUtilityAttributeCustomSetter = @"S"; -NSString *const kFLEXUtilityAttributeDynamic = @"D"; -NSString *const kFLEXUtilityAttributeWeak = @"W"; -NSString *const kFLEXUtilityAttributeGarbageCollectable = @"P"; -NSString *const kFLEXUtilityAttributeOldStyleTypeEncoding = @"t"; +#import "FLEXTypeEncodingParser.h" static NSString *const FLEXRuntimeUtilityErrorDomain = @"FLEXRuntimeUtilityErrorDomain"; typedef NS_ENUM(NSInteger, FLEXRuntimeUtilityErrorCode) { @@ -31,21 +18,15 @@ typedef NS_ENUM(NSInteger, FLEXRuntimeUtilityErrorCode) { FLEXRuntimeUtilityErrorCodeArgumentTypeMismatch = 2 }; -// Arguments 0 and 1 are self and _cmd always -const unsigned int kFLEXNumberOfImplicitArgs = 2; - @implementation FLEXRuntimeUtility - #pragma mark - General Helpers (Public) -+ (BOOL)pointerIsValidObjcObject:(const void *)pointer -{ ++ (BOOL)pointerIsValidObjcObject:(const void *)pointer { return FLEXPointerIsValidObjcObject(pointer); } -+ (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXTypeEncoding *)returnType -{ ++ (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXTypeEncoding *)returnType { if (!returnedObjectOrNil) { return nil; } @@ -65,6 +46,11 @@ + (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXType // we check to see if the pointer is of a valid object. If not, // we just display the NSValue. if (!returnsObjectOrClass) { + // Skip NSNumber instances + if ([returnedObjectOrNil isKindOfClass:[NSNumber class]]) { + return returnedObjectOrNil; + } + // Can only be NSValue since return type is not an object, // so we bail if this doesn't add up if (![returnedObjectOrNil isKindOfClass:[NSValue class]]) { @@ -88,8 +74,7 @@ + (id)potentiallyUnwrapBoxedPointer:(id)returnedObjectOrNil type:(const FLEXType return returnedObjectOrNil; } -+ (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncoding -{ ++ (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncoding { NSUInteger beginIndex = 0; while (typeEncoding[beginIndex] == FLEXTypeEncodingQuote) { NSUInteger endIndex = beginIndex + 1; @@ -101,8 +86,7 @@ + (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncod return beginIndex; } -+ (NSArray *)classHierarchyOfObject:(id)objectOrClass -{ ++ (NSArray *)classHierarchyOfObject:(id)objectOrClass { NSMutableArray *superClasses = [NSMutableArray new]; id cls = [objectOrClass class]; do { @@ -112,113 +96,42 @@ + (NSUInteger)fieldNameOffsetForTypeEncoding:(const FLEXTypeEncoding *)typeEncod return superClasses; } -#pragma mark - Property Helpers (Public) - -+ (NSString *)prettyNameForProperty:(objc_property_t)property -{ - NSString *name = @(property_getName(property)); - NSString *encoding = [self typeEncodingForProperty:property]; - NSString *readableType = [self readableTypeForEncoding:encoding]; - return [self appendName:name toType:readableType]; -} - -+ (NSString *)typeEncodingForProperty:(objc_property_t)property -{ - NSDictionary *attributesDictionary = [self attributesDictionaryForProperty:property]; - return attributesDictionary[kFLEXUtilityAttributeTypeEncoding]; -} - -+ (BOOL)isReadonlyProperty:(objc_property_t)property -{ - return [[self attributesDictionaryForProperty:property] objectForKey:kFLEXUtilityAttributeReadOnly] != nil; -} - -+ (SEL)setterSelectorForProperty:(objc_property_t)property -{ - SEL setterSelector = NULL; - NSString *setterSelectorString = [[self attributesDictionaryForProperty:property] objectForKey:kFLEXUtilityAttributeCustomSetter]; - if (!setterSelectorString) { - NSString *propertyName = @(property_getName(property)); - setterSelectorString = [NSString - stringWithFormat:@"set%@%@:", - [propertyName substringToIndex:1].uppercaseString, - [propertyName substringFromIndex:1] - ]; - } - if (setterSelectorString) { - setterSelector = NSSelectorFromString(setterSelectorString); +/// Could be nil ++ (NSString *)safeDescriptionForObject:(id)object { + // Don't assume that we have an NSObject subclass. + // Check to make sure the object responds to the description method + if ([object respondsToSelector:@selector(description)]) { + return [object description]; } - return setterSelector; -} - -+ (NSString *)fullDescriptionForProperty:(objc_property_t)property -{ - NSDictionary *attributesDictionary = [self attributesDictionaryForProperty:property]; - NSMutableArray *attributesStrings = [NSMutableArray array]; - // Atomicity - if (attributesDictionary[kFLEXUtilityAttributeNonAtomic]) { - [attributesStrings addObject:@"nonatomic"]; - } else { - [attributesStrings addObject:@"atomic"]; - } + return nil; +} - // Storage - if (attributesDictionary[kFLEXUtilityAttributeRetain]) { - [attributesStrings addObject:@"strong"]; - } else if (attributesDictionary[kFLEXUtilityAttributeCopy]) { - [attributesStrings addObject:@"copy"]; - } else if (attributesDictionary[kFLEXUtilityAttributeWeak]) { - [attributesStrings addObject:@"weak"]; - } else { - [attributesStrings addObject:@"assign"]; - } +/// Never nil ++ (NSString *)safeDebugDescriptionForObject:(id)object { + NSString *description = nil; - // Mutability - if (attributesDictionary[kFLEXUtilityAttributeReadOnly]) { - [attributesStrings addObject:@"readonly"]; + // Don't assume that we have an NSObject subclass. + // Check to make sure the object responds to the description method + if ([object respondsToSelector:@selector(debugDescription)]) { + description = [object debugDescription]; } else { - [attributesStrings addObject:@"readwrite"]; - } - - // Custom getter/setter - NSString *customGetter = attributesDictionary[kFLEXUtilityAttributeCustomGetter]; - NSString *customSetter = attributesDictionary[kFLEXUtilityAttributeCustomSetter]; - if (customGetter) { - [attributesStrings addObject:[NSString stringWithFormat:@"getter=%@", customGetter]]; - } - if (customSetter) { - [attributesStrings addObject:[NSString stringWithFormat:@"setter=%@", customSetter]]; + description = [self safeDescriptionForObject:object]; } - NSString *attributesString = [attributesStrings componentsJoinedByString:@", "]; - NSString *shortName = [self prettyNameForProperty:property]; - - return [NSString stringWithFormat:@"@property (%@) %@", attributesString, shortName]; -} - -+ (id)valueForProperty:(objc_property_t)property onObject:(id)object -{ - NSString *customGetterString = nil; - char *customGetterName = property_copyAttributeValue(property, kFLEXUtilityAttributeCustomGetter.UTF8String); - if (customGetterName) { - customGetterString = @(customGetterName); - free(customGetterName); - } - - SEL getterSelector; - if (customGetterString.length > 0) { - getterSelector = NSSelectorFromString(customGetterString); - } else { - NSString *propertyName = @(property_getName(property)); - getterSelector = NSSelectorFromString(propertyName); + if (!description.length) { + NSString *cls = NSStringFromClass(object_getClass(object)); + if (object_isClass(object)) { + description = [cls stringByAppendingString:@" class (no description)"]; + } else { + description = [cls stringByAppendingString:@" instance (no description)"]; + } } - return [self performSelector:getterSelector onObject:object withArguments:nil error:NULL]; + return description; } -+ (NSString *)descriptionForIvarOrPropertyValue:(id)value -{ ++ (NSString *)summaryForObject:(id)value { NSString *description = nil; // Special case BOOL for better readability. @@ -227,20 +140,18 @@ + (NSString *)descriptionForIvarOrPropertyValue:(id)value if (strcmp(type, @encode(BOOL)) == 0) { BOOL boolValue = NO; [value getValue:&boolValue]; - description = boolValue ? @"YES" : @"NO"; + return boolValue ? @"YES" : @"NO"; } else if (strcmp(type, @encode(SEL)) == 0) { SEL selector = NULL; [value getValue:&selector]; - description = NSStringFromSelector(selector); + return NSStringFromSelector(selector); } } @try { - if (!description) { - // Single line display - replace newlines and tabs with spaces. - description = [[value description] stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; - description = [description stringByReplacingOccurrencesOfString:@"\t" withString:@" "]; - } + // Single line display - replace newlines and tabs with spaces. + description = [[self safeDescriptionForObject:value] stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; + description = [description stringByReplacingOccurrencesOfString:@"\t" withString:@" "]; } @catch (NSException *e) { description = [@"Thrown: " stringByAppendingString:e.reason ?: @"(nil exception reason)"]; } @@ -252,10 +163,12 @@ + (NSString *)descriptionForIvarOrPropertyValue:(id)value return description; } -+ (void)tryAddPropertyWithName:(const char *)name + +#pragma mark - Property Helpers (Public) + ++ (BOOL)tryAddPropertyWithName:(const char *)name attributes:(NSDictionary *)attributePairs - toClass:(__unsafe_unretained Class)theClass -{ + toClass:(__unsafe_unretained Class)theClass { objc_property_t property = class_getProperty(theClass, name); if (!property) { unsigned int totalAttributesCount = (unsigned int)attributePairs.count; @@ -269,106 +182,48 @@ + (void)tryAddPropertyWithName:(const char *)name attributes[attributeIndex++] = attribute; } - class_addProperty(theClass, name, attributes, totalAttributesCount); + BOOL success = class_addProperty(theClass, name, attributes, totalAttributesCount); free(attributes); + return success; + } else { + return NO; } } + + return YES; } ++ (NSArray *)allPropertyAttributeKeys { + static NSArray *allPropertyAttributeKeys = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + allPropertyAttributeKeys = @[ + kFLEXPropertyAttributeKeyTypeEncoding, + kFLEXPropertyAttributeKeyBackingIvarName, + kFLEXPropertyAttributeKeyReadOnly, + kFLEXPropertyAttributeKeyCopy, + kFLEXPropertyAttributeKeyRetain, + kFLEXPropertyAttributeKeyNonAtomic, + kFLEXPropertyAttributeKeyCustomGetter, + kFLEXPropertyAttributeKeyCustomSetter, + kFLEXPropertyAttributeKeyDynamic, + kFLEXPropertyAttributeKeyWeak, + kFLEXPropertyAttributeKeyGarbageCollectable, + kFLEXPropertyAttributeKeyOldStyleTypeEncoding, + ]; + }); -#pragma mark - Ivar Helpers (Public) - -+ (NSString *)prettyNameForIvar:(Ivar)ivar -{ - const char *nameCString = ivar_getName(ivar); - NSString *name = nameCString ? @(nameCString) : nil; - const char *encodingCString = ivar_getTypeEncoding(ivar); - NSString *encoding = encodingCString ? @(encodingCString) : nil; - NSString *readableType = [self readableTypeForEncoding:encoding]; - return [self appendName:name toType:readableType]; -} - -+ (id)valueForIvar:(Ivar)ivar onObject:(id)object -{ - id value = nil; - const char *type = ivar_getTypeEncoding(ivar); -#ifdef __arm64__ - // See http://www.sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html - const char *name = ivar_getName(ivar); - if (type[0] == FLEXTypeEncodingObjcClass && strcmp(name, "isa") == 0) { - value = object_getClass(object); - } else -#endif - if (type[0] == FLEXTypeEncodingObjcObject || type[0] == FLEXTypeEncodingObjcClass) { - value = object_getIvar(object, ivar); - } else { - ptrdiff_t offset = ivar_getOffset(ivar); - void *pointer = (__bridge void *)object + offset; - value = [self valueForPrimitivePointer:pointer objCType:type]; - } - return value; -} - -+ (void)setValue:(id)value forIvar:(Ivar)ivar onObject:(id)object -{ - const char *typeEncodingCString = ivar_getTypeEncoding(ivar); - if (typeEncodingCString[0] == FLEXTypeEncodingObjcObject) { - object_setIvar(object, ivar, value); - } else if ([value isKindOfClass:[NSValue class]]) { - // Primitive - unbox the NSValue. - NSValue *valueValue = (NSValue *)value; - - // Make sure that the box contained the correct type. - NSAssert( - strcmp(valueValue.objCType, typeEncodingCString) == 0, - @"Type encoding mismatch (value: %s; ivar: %s) in setting ivar named: %s on object: %@", - valueValue.objCType, typeEncodingCString, ivar_getName(ivar), object - ); - - NSUInteger bufferSize = 0; - @try { - // NSGetSizeAndAlignment barfs on type encoding for bitfields. - NSGetSizeAndAlignment(typeEncodingCString, &bufferSize, NULL); - } @catch (NSException *exception) { } - - if (bufferSize > 0) { - void *buffer = calloc(bufferSize, 1); - [valueValue getValue:buffer]; - ptrdiff_t offset = ivar_getOffset(ivar); - void *pointer = (__bridge void *)object + offset; - memcpy(pointer, buffer, bufferSize); - free(buffer); - } - } + return allPropertyAttributeKeys; } #pragma mark - Method Helpers (Public) -+ (NSString *)prettyNameForMethod:(Method)method isClassMethod:(BOOL)isClassMethod -{ - NSString *selectorName = NSStringFromSelector(method_getName(method)); - NSString *methodTypeString = isClassMethod ? @"+" : @"-"; - char *returnType = method_copyReturnType(method); - NSString *readableReturnType = [self readableTypeForEncoding:@(returnType)]; - free(returnType); - NSString *prettyName = [NSString stringWithFormat:@"%@ (%@)", methodTypeString, readableReturnType]; - NSArray *components = [self prettyArgumentComponentsForMethod:method]; - if (components.count > 0) { - prettyName = [prettyName stringByAppendingString:[components componentsJoinedByString:@" "]]; - } else { - prettyName = [prettyName stringByAppendingString:selectorName]; - } - - return prettyName; -} - -+ (NSArray *)prettyArgumentComponentsForMethod:(Method)method -{ - NSMutableArray *components = [NSMutableArray array]; ++ (NSArray *)prettyArgumentComponentsForMethod:(Method)method { + NSMutableArray *components = [NSMutableArray new]; NSString *selectorName = NSStringFromSelector(method_getName(method)); - NSMutableArray *selectorComponents = [[selectorName componentsSeparatedByString:@":"] mutableCopy]; + NSMutableArray *selectorComponents = [selectorName componentsSeparatedByString:@":"].mutableCopy; // this is a workaround cause method_getNumberOfArguments() returns wrong number for some methods if (selectorComponents.count == 1) { @@ -394,19 +249,23 @@ + (NSString *)prettyNameForMethod:(Method)method isClassMethod:(BOOL)isClassMeth return components; } -+ (FLEXTypeEncoding *)returnTypeForMethod:(Method)method -{ - return (FLEXTypeEncoding *)method_copyReturnType(method); -} - #pragma mark - Method Calling/Field Editing (Public) ++ (id)performSelector:(SEL)selector onObject:(id)object { + return [self performSelector:selector onObject:object withArguments:@[] error:nil]; +} + + (id)performSelector:(SEL)selector onObject:(id)object withArguments:(NSArray *)arguments - error:(NSError * __autoreleasing *)error -{ + error:(NSError * __autoreleasing *)error { + static dispatch_once_t onceToken; + static SEL stdStringExclusion = nil; + dispatch_once(&onceToken, ^{ + stdStringExclusion = NSSelectorFromString(@"stdString"); + }); + // Bail if the object won't respond to this selector. if (![object respondsToSelector:selector]) { if (error) { @@ -421,19 +280,28 @@ + (id)performSelector:(SEL)selector userInfo:userInfo ]; } + return nil; } - // Probably an unsupported type encoding, like bitfields - // or inline arrays. In the future, we could calculate - // the return length on our own. For now, we abort. + NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:({ + Method method; + if (object_isClass(object)) { + method = class_getClassMethod(object, selector); + } else { + method = class_getInstanceMethod(object_getClass(object), selector); + } + method_getTypeEncoding(method); + })]; + + // Probably an unsupported type encoding, like bitfields. + // In the future, we could calculate the return length + // on our own. For now, we abort. // // For future reference, the code here will get the true type encoding. // NSMethodSignature will convert {?=b8b4b1b1b18[8S]} to {?} - // A solution might involve hooking NSGetSizeAndAlignment. // // returnType = method_getTypeEncoding(class_getInstanceMethod([object class], selector)); - NSMethodSignature *methodSignature = [object methodSignatureForSelector:selector]; if (!methodSignature.methodReturnLength && methodSignature.methodReturnType[0] != FLEXTypeEncodingVoid) { return nil; @@ -489,9 +357,7 @@ + (id)performSelector:(SEL)selector @try { NSUInteger bufferSize = 0; - - // NSGetSizeAndAlignment barfs on type encoding for bitfields. - NSGetSizeAndAlignment(typeEncodingCString, &bufferSize, NULL); + FLEXGetSizeAndAlignment(typeEncodingCString, &bufferSize, NULL); if (bufferSize > 0) { void *buffer = alloca(bufferSize); @@ -518,14 +384,27 @@ + (id)performSelector:(SEL)selector returnObject = objectReturnedFromMethod; } else if (returnType[0] != FLEXTypeEncodingVoid) { NSAssert(methodSignature.methodReturnLength, @"Memory corruption lies ahead"); - // Will use arbitrary buffer for return value and box it. - void *returnValue = malloc(methodSignature.methodReturnLength); - if (returnValue) { - [invocation getReturnValue:returnValue]; - returnObject = [self valueForPrimitivePointer:returnValue objCType:returnType]; - free(returnValue); + if (returnType[0] == FLEXTypeEncodingStructBegin) { + if (selector == stdStringExclusion && [object isKindOfClass:[NSString class]]) { + // stdString is a C++ object and we will crash if we try to access it + if (error) { + *error = [NSError + errorWithDomain:FLEXRuntimeUtilityErrorDomain + code:FLEXRuntimeUtilityErrorCodeInvocationFailed + userInfo:@{ NSLocalizedDescriptionKey : @"Skipping -[NSString stdString]" } + ]; + } + + return nil; + } } + + // Will use arbitrary buffer for return value and box it. + void *returnValue = malloc(methodSignature.methodReturnLength); + [invocation getReturnValue:returnValue]; + returnObject = [self valueForPrimitivePointer:returnValue objCType:returnType]; + free(returnValue); } } @catch (NSException *exception) { // Bummer... @@ -539,17 +418,18 @@ + (id)performSelector:(SEL)selector exception.name, NSStringFromSelector(selector), calledOn, exception.reason ]; - *error = [NSError errorWithDomain:FLEXRuntimeUtilityErrorDomain - code:FLEXRuntimeUtilityErrorCodeInvocationFailed - userInfo:@{ NSLocalizedDescriptionKey : message }]; + *error = [NSError + errorWithDomain:FLEXRuntimeUtilityErrorDomain + code:FLEXRuntimeUtilityErrorCodeInvocationFailed + userInfo:@{ NSLocalizedDescriptionKey : message } + ]; } } return returnObject; } -+ (BOOL)isTollFreeBridgedValue:(id)value forCFType:(const char *)typeEncoding -{ ++ (BOOL)isTollFreeBridgedValue:(id)value forCFType:(const char *)typeEncoding { // See https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Toll-FreeBridgin/Toll-FreeBridgin.html #define CASE(cftype, foundationClass) \ if (strcmp(typeEncoding, @encode(cftype)) == 0) { \ @@ -586,8 +466,7 @@ + (BOOL)isTollFreeBridgedValue:(id)value forCFType:(const char *)typeEncoding return NO; } -+ (NSString *)editableJSONStringForObject:(id)object -{ ++ (NSString *)editableJSONStringForObject:(id)object { NSString *editableDescription = nil; if (object) { @@ -605,11 +484,10 @@ + (NSString *)editableJSONStringForObject:(id)object return editableDescription; } -+ (id)objectValueFromEditableJSONString:(NSString *)string -{ ++ (id)objectValueFromEditableJSONString:(NSString *)string { id value = nil; // nil for empty string/whitespace - if ([string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length) { + if ([string stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet].length) { value = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments @@ -619,56 +497,65 @@ + (id)objectValueFromEditableJSONString:(NSString *)string return value; } -+ (NSValue *)valueForNumberWithObjCType:(const char *)typeEncoding fromInputString:(NSString *)inputString -{ ++ (NSValue *)valueForNumberWithObjCType:(const char *)typeEncoding fromInputString:(NSString *)inputString { NSNumberFormatter *formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber *number = [formatter numberFromString:inputString]; - - // Make sure we box the number with the correct type encoding so it can be properly unboxed later via getValue: - NSValue *value = nil; - if (strcmp(typeEncoding, @encode(char)) == 0) { - char primitiveValue = [number charValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(int)) == 0) { - int primitiveValue = [number intValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(short)) == 0) { - short primitiveValue = [number shortValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(long)) == 0) { - long primitiveValue = [number longValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(long long)) == 0) { - long long primitiveValue = [number longLongValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(unsigned char)) == 0) { - unsigned char primitiveValue = [number unsignedCharValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(unsigned int)) == 0) { - unsigned int primitiveValue = [number unsignedIntValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(unsigned short)) == 0) { - unsigned short primitiveValue = [number unsignedShortValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(unsigned long)) == 0) { - unsigned long primitiveValue = [number unsignedLongValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(unsigned long long)) == 0) { - unsigned long long primitiveValue = [number unsignedLongValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(float)) == 0) { - float primitiveValue = [number floatValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(double)) == 0) { - double primitiveValue = [number doubleValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; - } else if (strcmp(typeEncoding, @encode(long double)) == 0) { - long double primitiveValue = [number doubleValue]; - value = [NSValue value:&primitiveValue withObjCType:typeEncoding]; + + // Is the type encoding longer than one character? + if (strlen(typeEncoding) > 1) { + NSString *type = @(typeEncoding); + + // Is it NSDecimalNumber or NSNumber? + if ([type isEqualToString:@FLEXEncodeClass(NSDecimalNumber)]) { + return [NSDecimalNumber decimalNumberWithString:inputString]; + } else if ([type isEqualToString:@FLEXEncodeClass(NSNumber)]) { + return number; + } + + return nil; } - - return value; + + // Type encoding is one character, switch on the type + FLEXTypeEncoding type = typeEncoding[0]; + uint8_t value[32]; + void *bufferStart = &value[0]; + + // Make sure we box the number with the correct type encoding + // so it can be properly unboxed later via getValue: + switch (type) { + case FLEXTypeEncodingChar: + *(char *)bufferStart = number.charValue; break; + case FLEXTypeEncodingInt: + *(int *)bufferStart = number.intValue; break; + case FLEXTypeEncodingShort: + *(short *)bufferStart = number.shortValue; break; + case FLEXTypeEncodingLong: + *(long *)bufferStart = number.longValue; break; + case FLEXTypeEncodingLongLong: + *(long long *)bufferStart = number.longLongValue; break; + case FLEXTypeEncodingUnsignedChar: + *(unsigned char *)bufferStart = number.unsignedCharValue; break; + case FLEXTypeEncodingUnsignedInt: + *(unsigned int *)bufferStart = number.unsignedIntValue; break; + case FLEXTypeEncodingUnsignedShort: + *(unsigned short *)bufferStart = number.unsignedShortValue; break; + case FLEXTypeEncodingUnsignedLong: + *(unsigned long *)bufferStart = number.unsignedLongValue; break; + case FLEXTypeEncodingUnsignedLongLong: + *(unsigned long long *)bufferStart = number.unsignedLongLongValue; break; + case FLEXTypeEncodingFloat: + *(float *)bufferStart = number.floatValue; break; + case FLEXTypeEncodingDouble: + *(double *)bufferStart = number.doubleValue; break; + + case FLEXTypeEncodingLongDouble: + // NSNumber does not support long double + default: + return nil; + } + + return [NSValue value:value withObjCType:typeEncoding]; } + (void)enumerateTypesInStructEncoding:(const char *)structEncoding @@ -676,8 +563,7 @@ + (void)enumerateTypesInStructEncoding:(const char *)structEncoding const char *fieldTypeEncoding, NSString *prettyTypeEncoding, NSUInteger fieldIndex, - NSUInteger fieldOffset))typeBlock -{ + NSUInteger fieldOffset))typeBlock { if (structEncoding && structEncoding[0] == FLEXTypeEncodingStructBegin) { const char *equals = strchr(structEncoding, '='); if (equals) { @@ -686,30 +572,29 @@ + (void)enumerateTypesInStructEncoding:(const char *)structEncoding substringWithRange:NSMakeRange(nameStart - structEncoding, equals - nameStart) ]; - NSUInteger fieldAlignment = 0; - NSUInteger structSize = 0; - @try { - // NSGetSizeAndAlignment barfs on type encoding for bitfields. - NSGetSizeAndAlignment(structEncoding, &structSize, &fieldAlignment); - } @catch (NSException *exception) { } - - if (structSize > 0) { + NSUInteger fieldAlignment = 0, structSize = 0; + if (FLEXGetSizeAndAlignment(structEncoding, &structSize, &fieldAlignment)) { NSUInteger runningFieldIndex = 0; NSUInteger runningFieldOffset = 0; const char *typeStart = equals + 1; + while (*typeStart != FLEXTypeEncodingStructEnd) { NSUInteger fieldSize = 0; - // If the struct type encoding was successfully handled by NSGetSizeAndAlignment above, we *should* be ok with the field here. + // If the struct type encoding was successfully handled by + // FLEXGetSizeAndAlignment above, we *should* be ok with the field here. const char *nextTypeStart = NSGetSizeAndAlignment(typeStart, &fieldSize, NULL); NSString *typeEncoding = [@(structEncoding) substringWithRange:NSMakeRange(typeStart - structEncoding, nextTypeStart - typeStart) ]; - // Padding to keep proper alignment. __attribute((packed)) structs will break here. - // The type encoding is no different for packed structs, so it's not clear there's anything we can do for those. + + // Padding to keep proper alignment. __attribute((packed)) structs + // will break here. The type encoding is no different for packed structs, + // so it's not clear there's anything we can do for those. const NSUInteger currentSizeSum = runningFieldOffset % fieldAlignment; if (currentSizeSum != 0 && currentSizeSum + fieldSize > fieldAlignment) { runningFieldOffset += fieldAlignment - currentSizeSum; } + typeBlock( structName, typeEncoding.UTF8String, @@ -727,22 +612,24 @@ + (void)enumerateTypesInStructEncoding:(const char *)structEncoding } -#pragma mark - Internal Helpers +#pragma mark - Metadata Helpers -+ (NSDictionary *)attributesDictionaryForProperty:(objc_property_t)property -{ - NSString *attributes = @(property_getAttributes(property)); ++ (NSDictionary *)attributesForProperty:(objc_property_t)property { + NSString *attributes = @(property_getAttributes(property) ?: ""); // Thanks to MAObjcRuntime for inspiration here. NSArray *attributePairs = [attributes componentsSeparatedByString:@","]; - NSMutableDictionary *attributesDictionary = [NSMutableDictionary dictionaryWithCapacity:attributePairs.count]; + NSMutableDictionary *attributesDictionary = [NSMutableDictionary new]; for (NSString *attributePair in attributePairs) { - [attributesDictionary setObject:[attributePair substringFromIndex:1] forKey:[attributePair substringToIndex:1]]; + attributesDictionary[[attributePair substringToIndex:1]] = [attributePair substringFromIndex:1]; } return attributesDictionary; } -+ (NSString *)appendName:(NSString *)name toType:(NSString *)type -{ ++ (NSString *)appendName:(NSString *)name toType:(NSString *)type { + if (!type.length) { + type = @"(?)"; + } + NSString *combined = nil; if ([type characterAtIndex:type.length - 1] == FLEXTypeEncodingCString) { combined = [type stringByAppendingString:name]; @@ -752,10 +639,9 @@ + (NSString *)appendName:(NSString *)name toType:(NSString *)type return combined; } -+ (NSString *)readableTypeForEncoding:(NSString *)encodingString -{ - if (!encodingString) { - return nil; ++ (NSString *)readableTypeForEncoding:(NSString *)encodingString { + if (!encodingString.length) { + return @"?"; } // See https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html @@ -774,7 +660,7 @@ + (NSString *)readableTypeForEncoding:(NSString *)encodingString NSArray *const fieldNames = [fieldNamesString componentsSeparatedByString:[NSString stringWithFormat:@"%c", FLEXTypeEncodingQuote] ]; - NSMutableString *finalFieldNamesString = [NSMutableString string]; + NSMutableString *finalFieldNamesString = [NSMutableString new]; for (NSString *const fieldName in fieldNames) { if (fieldName.length > 0) { if (finalFieldNamesString.length > 0) { @@ -875,6 +761,11 @@ + (NSString *)readableTypeForEncoding:(NSString *)encodingString // For structs, we only use the name of the structs if (encodingCString[0] == FLEXTypeEncodingStructBegin) { + // Special case: std::string + if ([encodingString hasPrefix:@"{basic_string +#import + +#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' +}; diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m new file mode 100644 index 00000000..ff5ad678 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m @@ -0,0 +1,24 @@ +// +// FLEXRuntimeConstants.m +// FLEX +// +// Created by Tanner on 3/11/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXRuntimeConstants.h" + +const unsigned int kFLEXNumberOfImplicitArgs = 2; + +NSString *const kFLEXPropertyAttributeKeyTypeEncoding = @"T"; +NSString *const kFLEXPropertyAttributeKeyBackingIvarName = @"V"; +NSString *const kFLEXPropertyAttributeKeyReadOnly = @"R"; +NSString *const kFLEXPropertyAttributeKeyCopy = @"C"; +NSString *const kFLEXPropertyAttributeKeyRetain = @"&"; +NSString *const kFLEXPropertyAttributeKeyNonAtomic = @"N"; +NSString *const kFLEXPropertyAttributeKeyCustomGetter = @"G"; +NSString *const kFLEXPropertyAttributeKeyCustomSetter = @"S"; +NSString *const kFLEXPropertyAttributeKeyDynamic = @"D"; +NSString *const kFLEXPropertyAttributeKeyWeak = @"W"; +NSString *const kFLEXPropertyAttributeKeyGarbageCollectable = @"P"; +NSString *const kFLEXPropertyAttributeKeyOldStyleTypeEncoding = @"t"; diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.h new file mode 100644 index 00000000..126f84f1 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.h @@ -0,0 +1,56 @@ +// +// FLEXRuntimeSafety.h +// FLEX +// +// Created by Tanner on 3/25/17. +// + +#import +#import + +#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); +} diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.m new file mode 100644 index 00000000..8a80cb7b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.m @@ -0,0 +1,107 @@ +// +// FLEXRuntimeSafety.m +// FLEX +// +// Created by Tanner on 3/25/17. +// + +#import "FLEXRuntimeSafety.h" + +NSUInteger const kFLEXKnownUnsafeClassCount = 19; +Class * _UnsafeClasses = NULL; +CFSetRef FLEXKnownUnsafeClasses = nil; +CFSetRef FLEXKnownUnsafeIvars = nil; + +#define FLEXClassPointerOrCFNull(name) \ + (NSClassFromString(name) ?: (__bridge id)kCFNull) + +#define FLEXIvarOrCFNull(cls, name) \ + (class_getInstanceVariable([cls class], name) ?: (void *)kCFNull) + +__attribute__((constructor)) +static void FLEXRuntimeSafteyInit() { + FLEXKnownUnsafeClasses = CFSetCreate( + kCFAllocatorDefault, + (const void **)(uintptr_t)FLEXKnownUnsafeClassList(), + kFLEXKnownUnsafeClassCount, + nil + ); + + Ivar unsafeIvars[] = { + FLEXIvarOrCFNull(NSURL, "_urlString"), + FLEXIvarOrCFNull(NSURL, "_baseURL"), + }; + FLEXKnownUnsafeIvars = CFSetCreate( + kCFAllocatorDefault, + (const void **)unsafeIvars, + sizeof(unsafeIvars), + nil + ); +} + +const Class * FLEXKnownUnsafeClassList() { + if (!_UnsafeClasses) { + const Class ignored[] = { + FLEXClassPointerOrCFNull(@"__ARCLite__"), + FLEXClassPointerOrCFNull(@"__NSCFCalendar"), + FLEXClassPointerOrCFNull(@"__NSCFTimer"), + FLEXClassPointerOrCFNull(@"NSCFTimer"), + FLEXClassPointerOrCFNull(@"__NSGenericDeallocHandler"), + FLEXClassPointerOrCFNull(@"NSAutoreleasePool"), + FLEXClassPointerOrCFNull(@"NSPlaceholderNumber"), + FLEXClassPointerOrCFNull(@"NSPlaceholderString"), + FLEXClassPointerOrCFNull(@"NSPlaceholderValue"), + FLEXClassPointerOrCFNull(@"Object"), + FLEXClassPointerOrCFNull(@"VMUArchitecture"), + FLEXClassPointerOrCFNull(@"JSExport"), + FLEXClassPointerOrCFNull(@"__NSAtom"), + FLEXClassPointerOrCFNull(@"_NSZombie_"), + FLEXClassPointerOrCFNull(@"_CNZombie_"), + FLEXClassPointerOrCFNull(@"__NSMessage"), + FLEXClassPointerOrCFNull(@"__NSMessageBuilder"), + FLEXClassPointerOrCFNull(@"FigIrisAutoTrimmerMotionSampleExport"), + // Temporary until we have our own type encoding parser; + // setVectors: has an invalid type encoding and crashes NSMethodSignature + FLEXClassPointerOrCFNull(@"_UIPointVector"), + }; + + assert((sizeof(ignored) / sizeof(Class)) == kFLEXKnownUnsafeClassCount); + + _UnsafeClasses = (Class *)malloc(sizeof(ignored)); + memcpy(_UnsafeClasses, ignored, sizeof(ignored)); + } + + return _UnsafeClasses; +} + +NSSet * FLEXKnownUnsafeClassNames() { + static NSSet *set = nil; + if (!set) { + NSArray *ignored = @[ + @"__ARCLite__", + @"__NSCFCalendar", + @"__NSCFTimer", + @"NSCFTimer", + @"__NSGenericDeallocHandler", + @"NSAutoreleasePool", + @"NSPlaceholderNumber", + @"NSPlaceholderString", + @"NSPlaceholderValue", + @"Object", + @"VMUArchitecture", + @"JSExport", + @"__NSAtom", + @"_NSZombie_", + @"_CNZombie_", + @"__NSMessage", + @"__NSMessageBuilder", + @"FigIrisAutoTrimmerMotionSampleExport", + @"_UIPointVector", + ]; + + set = [NSSet setWithArray:ignored]; + assert(set.count == kFLEXKnownUnsafeClassCount); + } + + return set; +} diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h new file mode 100644 index 00000000..58d99b67 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h @@ -0,0 +1,46 @@ +// +// FLEXTypeEncodingParser.h +// FLEX +// +// Created by Tanner Bennett on 8/22/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import + +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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m new file mode 100644 index 00000000..6634219f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m @@ -0,0 +1,900 @@ +// +// FLEXTypeEncodingParser.m +// FLEX +// +// Created by Tanner Bennett on 8/22/19. +// Copyright © 2019 Flipboard. All rights reserved. +// + +#import "FLEXTypeEncodingParser.h" +#import "FLEXRuntimeUtility.h" + +#define S(__ch) ({ \ + unichar __c = __ch; \ + [[NSString alloc] initWithCharacters:&__c length:1]; \ +}) + +typedef struct FLEXTypeInfo { + /// The size is unaligned. -1 if not supported at all. + ssize_t size; + ssize_t align; + /// NO if the type cannot be supported at all + /// YES if the type is either fully or partially supported. + BOOL supported; + /// YES if the type was only partially supported, such as in + /// the case of unions in pointer types, or named structure + /// types without member info. These can be corrected manually + /// since they can be fixed or replaced with less info. + BOOL fixesApplied; + /// Whether this type is a union or one of its members + /// recursively contains a union, exlcuding pointers. + /// + /// Unions are tricky because they're supported by + /// \c NSGetSizeAndAlignment but not by \c NSMethodSignature + /// so we need to track whenever a type contains a union + /// so that we can clean it out of pointer types. + BOOL containsUnion; + /// size can only be 0 if not void + BOOL isVoid; +} FLEXTypeInfo; + +/// Type info for a completely unsupported type. +static FLEXTypeInfo FLEXTypeInfoUnsupported = (FLEXTypeInfo){ -1, 0, NO, NO, NO, NO }; +/// Type info for the void return type. +static FLEXTypeInfo FLEXTypeInfoVoid = (FLEXTypeInfo){ 0, 0, YES, NO, NO, YES }; + +/// Builds type info for a fully or partially supported type. +static inline FLEXTypeInfo FLEXTypeInfoMake(ssize_t size, ssize_t align, BOOL fixed) { + return (FLEXTypeInfo){ size, align, YES, fixed, NO, NO }; +} + +/// Builds type info for a fully or partially supported type. +static inline FLEXTypeInfo FLEXTypeInfoMakeU(ssize_t size, ssize_t align, BOOL fixed, BOOL hasUnion) { + return (FLEXTypeInfo){ size, align, YES, fixed, hasUnion, NO }; +} + +BOOL FLEXGetSizeAndAlignment(const char *type, NSUInteger *sizep, NSUInteger *alignp) { + NSInteger size = 0; + ssize_t align = 0; + size = [FLEXTypeEncodingParser sizeForTypeEncoding:@(type) alignment:&align]; + + if (size == -1) { + return NO; + } + + if (sizep) { + *sizep = (NSUInteger)size; + } + + if (alignp) { + *alignp = (NSUInteger)size; + } + + return YES; +} + +@interface FLEXTypeEncodingParser () +@property (nonatomic, readonly) NSScanner *scan; +@property (nonatomic, readonly) NSString *scanned; +@property (nonatomic, readonly) NSString *unscanned; +@property (nonatomic, readonly) char nextChar; + +/// Replacements are made to this string as we scan as needed +@property (nonatomic) NSMutableString *cleaned; +/// Offset for \e further replacements to be made within \c cleaned +@property (nonatomic, readonly) NSUInteger cleanedReplacingOffset; +@end + +@implementation FLEXTypeEncodingParser + +- (NSString *)scanned { + return [self.scan.string substringToIndex:self.scan.scanLocation]; +} + +- (NSString *)unscanned { + return [self.scan.string substringFromIndex:self.scan.scanLocation]; +} + +#pragma mark Initialization + +- (id)initWithObjCTypes:(NSString *)typeEncoding { + self = [super init]; + if (self) { + _scan = [NSScanner scannerWithString:typeEncoding]; + _scan.caseSensitive = YES; + _cleaned = typeEncoding.mutableCopy; + } + + return self; +} + + +#pragma mark Public + ++ (BOOL)methodTypeEncodingSupported:(NSString *)typeEncoding cleaned:(NSString * __autoreleasing *)cleanedEncoding { + if (!typeEncoding.length) { + return NO; + } + + FLEXTypeEncodingParser *parser = [[self alloc] initWithObjCTypes:typeEncoding]; + + while (!parser.scan.isAtEnd) { + FLEXTypeInfo info = [parser parseNextType]; + + if (!info.supported || info.containsUnion || (info.size == 0 && !info.isVoid)) { + return NO; + } + } + + if (cleanedEncoding) { + *cleanedEncoding = parser.cleaned.copy; + } + + return YES; +} + ++ (NSString *)type:(NSString *)typeEncoding forMethodArgumentAtIndex:(NSUInteger)idx { + FLEXTypeEncodingParser *parser = [[self alloc] initWithObjCTypes:typeEncoding]; + + // Scan up to the argument we want + for (NSUInteger i = 0; i < idx; i++) { + if (![parser scanPastArg]) { + [NSException raise:NSRangeException + format:@"Index %@ out of bounds for type encoding '%@'", + @(idx), typeEncoding + ]; + } + } + + return [parser scanArg]; +} + ++ (ssize_t)size:(NSString *)typeEncoding forMethodArgumentAtIndex:(NSUInteger)idx { + return [self sizeForTypeEncoding:[self type:typeEncoding forMethodArgumentAtIndex:idx] alignment:nil]; +} + ++ (ssize_t)sizeForTypeEncoding:(NSString *)type alignment:(ssize_t *)alignOut { + return [self sizeForTypeEncoding:type alignment:alignOut unaligned:NO]; +} + ++ (ssize_t)sizeForTypeEncoding:(NSString *)type alignment:(ssize_t *)alignOut unaligned:(BOOL)unaligned { + FLEXTypeInfo info = [self parseType:type]; + + ssize_t size = info.size; + ssize_t align = info.align; + + if (info.supported) { + if (alignOut) { + *alignOut = align; + } + + if (!unaligned) { + size += size % align; + } + } + + // size is -1 if not supported + return size; +} + ++ (FLEXTypeInfo)parseType:(NSString *)type cleaned:(NSString * __autoreleasing *)cleanedEncoding { + FLEXTypeEncodingParser *parser = [[self alloc] initWithObjCTypes:type]; + FLEXTypeInfo info = [parser parseNextType]; + if (cleanedEncoding) { + *cleanedEncoding = parser.cleaned; + } + + return info; +} + ++ (FLEXTypeInfo)parseType:(NSString *)type { + return [self parseType:type cleaned:nil]; +} + +#pragma mark Private + +- (NSCharacterSet *)identifierFirstCharCharacterSet { + static NSCharacterSet *identifierFirstSet = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *allowed = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$"; + identifierFirstSet = [NSCharacterSet characterSetWithCharactersInString:allowed]; + }); + + return identifierFirstSet; +} + +- (NSCharacterSet *)identifierCharacterSet { + static NSCharacterSet *identifierSet = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *allowed = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$1234567890"; + identifierSet = [NSCharacterSet characterSetWithCharactersInString:allowed]; + }); + + return identifierSet; +} + +- (char)nextChar { + NSScanner *scan = self.scan; + return [scan.string characterAtIndex:scan.scanLocation]; +} + +/// For scanning struct/class names +- (NSString *)scanIdentifier { + NSString *prefix = nil, *suffix = nil; + + // Identifiers cannot start with a number + if (![self.scan scanCharactersFromSet:self.identifierFirstCharCharacterSet intoString:&prefix]) { + return nil; + } + + // Optional because identifier may just be one character + [self.scan scanCharactersFromSet:self.identifierCharacterSet intoString:&suffix]; + + if (suffix) { + return [prefix stringByAppendingString:suffix]; + } + + return prefix; +} + +/// @return the size in bytes +- (ssize_t)sizeForType:(FLEXTypeEncoding)type { + switch (type) { + case FLEXTypeEncodingChar: return sizeof(char); + case FLEXTypeEncodingInt: return sizeof(int); + case FLEXTypeEncodingShort: return sizeof(short); + case FLEXTypeEncodingLong: return sizeof(long); + case FLEXTypeEncodingLongLong: return sizeof(long long); + case FLEXTypeEncodingUnsignedChar: return sizeof(unsigned char); + case FLEXTypeEncodingUnsignedInt: return sizeof(unsigned int); + case FLEXTypeEncodingUnsignedShort: return sizeof(unsigned short); + case FLEXTypeEncodingUnsignedLong: return sizeof(unsigned long); + case FLEXTypeEncodingUnsignedLongLong: return sizeof(unsigned long long); + case FLEXTypeEncodingFloat: return sizeof(float); + case FLEXTypeEncodingDouble: return sizeof(double); + case FLEXTypeEncodingLongDouble: return sizeof(long double); + case FLEXTypeEncodingCBool: return sizeof(_Bool); + case FLEXTypeEncodingVoid: return 0; + case FLEXTypeEncodingCString: return sizeof(char *); + case FLEXTypeEncodingObjcObject: return sizeof(id); + case FLEXTypeEncodingObjcClass: return sizeof(Class); + case FLEXTypeEncodingSelector: return sizeof(SEL); + // Unknown / '?' is typically a pointer. In the rare case + // it isn't, such as in '{?=...}', it is never passed here. + case FLEXTypeEncodingUnknown: + case FLEXTypeEncodingPointer: return sizeof(uintptr_t); + + default: return -1; + } +} + +- (FLEXTypeInfo)parseNextType { + NSUInteger start = self.scan.scanLocation; + + // Check for void first + if ([self scanChar:FLEXTypeEncodingVoid]) { + // Skip argument frame for method signatures + [self scanSize]; + return FLEXTypeInfoVoid; + } + + // Scan optional const + [self scanChar:FLEXTypeEncodingConst]; + + // Check for pointer, then scan next + if ([self scanChar:FLEXTypeEncodingPointer]) { + // Recurse to scan something else + NSUInteger pointerTypeStart = self.scan.scanLocation; + if ([self scanPastArg]) { + // Make sure the pointer type is supported, and clean it if not + NSUInteger pointerTypeLength = self.scan.scanLocation - pointerTypeStart; + NSString *pointerType = [self.scan.string + substringWithRange:NSMakeRange(pointerTypeStart, pointerTypeLength) + ]; + + // Deeeep nested cleaning info gets lost here + NSString *cleaned = nil; + FLEXTypeInfo info = [self.class parseType:pointerType cleaned:&cleaned]; + BOOL needsCleaning = !info.supported || info.containsUnion || info.fixesApplied; + + // Clean the type if it is unsupported, malformed, or contains a union. + // (Unions are supported by NSGetSizeAndAlignment but not + // supported by NSMethodSignature for some reason) + if (needsCleaning) { + // If unsupported, no cleaning occurred in parseType:cleaned: above. + // Otherwise, the type is partially supported and we did clean it, + // and we will replace this type with the cleaned type from above. + if (!info.supported || info.containsUnion) { + cleaned = [self cleanPointeeTypeAtLocation:pointerTypeStart]; + } + + NSInteger offset = self.cleanedReplacingOffset; + NSInteger location = pointerTypeStart - offset; + [self.cleaned replaceCharactersInRange:NSMakeRange( + location, pointerTypeLength + ) withString:cleaned]; + } + + // Skip optional frame offset + [self scanSize]; + + ssize_t size = [self sizeForType:FLEXTypeEncodingPointer]; + return FLEXTypeInfoMake(size, size, !info.supported || info.fixesApplied); + } else { + // Scan failed, abort + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + } + + // Check for struct/union/array + char next = self.nextChar; + BOOL didScanSUA = YES, structOrUnion = NO, isUnion = NO; + FLEXTypeEncoding opening = FLEXTypeEncodingNull, closing = FLEXTypeEncodingNull; + switch (next) { + case FLEXTypeEncodingStructBegin: + structOrUnion = YES; + opening = FLEXTypeEncodingStructBegin; + closing = FLEXTypeEncodingStructEnd; + break; + case FLEXTypeEncodingUnionBegin: + structOrUnion = isUnion = YES; + opening = FLEXTypeEncodingUnionBegin; + closing = FLEXTypeEncodingUnionEnd; + break; + case FLEXTypeEncodingArrayBegin: + opening = FLEXTypeEncodingArrayBegin; + closing = FLEXTypeEncodingArrayEnd; + break; + + default: + didScanSUA = NO; + break; + } + + if (didScanSUA) { + BOOL containsUnion = isUnion; + BOOL fixesApplied = NO; + + NSUInteger backup = self.scan.scanLocation; + + // Ensure we have a closing tag + if (![self scanPair:opening close:closing]) { + // Scan failed, abort + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + + // Move cursor just after opening tag (struct/union/array) + NSInteger arrayCount = -1; + self.scan.scanLocation = backup + 1; + + if (!structOrUnion) { + arrayCount = [self scanSize]; + if (!arrayCount || self.nextChar == FLEXTypeEncodingArrayEnd) { + // Malformed array type: + // 1. Arrays must have a count after the opening brace + // 2. Arrays must have an element type after the count + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + } else { + // If we encounter the ?= portion of something like {?=b8b4b1b1b18[8S]} + // then we skip over it, since it means nothing to us in this context. + // It is completely optional, and if it fails, we go right back where we were. + if (![self scanTypeName] && self.nextChar == FLEXTypeEncodingUnknown) { + // Exception: we are trying to parse {?} which is invalid + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + } + + // Sum sizes of members together: + // Scan for bitfields before checking for other members + // + // Arrays will only have one "member," but + // this logic still works for them + ssize_t sizeSoFar = 0; + ssize_t maxAlign = 0; + NSMutableString *cleanedBackup = self.cleaned.mutableCopy; + + while (![self scanChar:closing]) { + next = self.nextChar; + // Check for bitfields, which we cannot support because + // type encodings for bitfields do not include alignment info + if (next == FLEXTypeEncodingBitField) { + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + + // Structure fields could be named + if (next == FLEXTypeEncodingQuote) { + [self scanPair:FLEXTypeEncodingQuote close:FLEXTypeEncodingQuote]; + } + + FLEXTypeInfo info = [self parseNextType]; + if (!info.supported || info.containsUnion) { + // The above call is the only time in this method where + // `cleaned` might be mutated recursively, so this is the + // only place where we need to keep and restore a backup + // + // For instance, if we've been iterating over the members + // of a struct and we've encountered a few pointers so far + // that we needed to clean, and suddenly we come across an + // unsupported member, we need to be able to "rewind" and + // undo any changes to `self.cleaned` so that the parent + // call in the call stack can wipe the current structure + // clean entirely if needed. Example below: + // + // Initial: ^{foo=^{pair}{^pair}{invalid_type}} + // v-- here + // 1st clean: ^{foo=^{?=}{^pair}{invalid_type} + // v-- here + // 2nd clean: ^{foo=^{?=}{?=}{invalid_type} + // v-- here + // Can't clean: ^{foo=^{?=}{?=}{invalid_type} + // v-- to here + // Rewind: ^{foo=^{pair}{^pair}{invalid_type}} + // Final clean: ^{foo=} + self.cleaned = cleanedBackup; + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } + + // Unions are the size of their largest member, + // arrays are element.size x length, and + // structs are the sum of their members + if (structOrUnion) { + if (isUnion) { // Union + sizeSoFar = MAX(sizeSoFar, info.size); + } else { // Struct + sizeSoFar += info.size; + } + } else { // Array + sizeSoFar = info.size * arrayCount; + } + + // Propogate the max alignment and other metadata + maxAlign = MAX(maxAlign, info.align); + containsUnion = containsUnion || info.containsUnion; + fixesApplied = fixesApplied || info.fixesApplied; + } + + // Skip optional frame offset + [self scanSize]; + + return FLEXTypeInfoMakeU(sizeSoFar, maxAlign, fixesApplied, containsUnion); + } + + // Scan single thing and possible size and return + ssize_t size = -1; + char t = self.nextChar; + switch (t) { + case FLEXTypeEncodingUnknown: + case FLEXTypeEncodingChar: + case FLEXTypeEncodingInt: + case FLEXTypeEncodingShort: + case FLEXTypeEncodingLong: + case FLEXTypeEncodingLongLong: + case FLEXTypeEncodingUnsignedChar: + case FLEXTypeEncodingUnsignedInt: + case FLEXTypeEncodingUnsignedShort: + case FLEXTypeEncodingUnsignedLong: + case FLEXTypeEncodingUnsignedLongLong: + case FLEXTypeEncodingFloat: + case FLEXTypeEncodingDouble: + case FLEXTypeEncodingLongDouble: + case FLEXTypeEncodingCBool: + case FLEXTypeEncodingCString: + case FLEXTypeEncodingSelector: + case FLEXTypeEncodingBitField: { + self.scan.scanLocation++; + // Skip optional frame offset + [self scanSize]; + + if (t == FLEXTypeEncodingBitField) { + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; + } else { + // Compute size + size = [self sizeForType:t]; + } + } + break; + + case FLEXTypeEncodingObjcObject: + case FLEXTypeEncodingObjcClass: { + self.scan.scanLocation++; + // These might have numbers OR quotes after them + // Skip optional frame offset + [self scanSize]; + [self scanPair:FLEXTypeEncodingQuote close:FLEXTypeEncodingQuote]; + size = sizeof(id); + } + break; + + default: break; + } + + if (size > 0) { + // Alignment of scalar types is its size + return FLEXTypeInfoMake(size, size, NO); + } + + self.scan.scanLocation = start; + return FLEXTypeInfoUnsupported; +} + +- (BOOL)scanString:(NSString *)str { + return [self.scan scanString:str intoString:nil]; +} + +- (BOOL)canScanString:(NSString *)str { + NSScanner *scan = self.scan; + NSUInteger len = str.length; + unichar buff1[len], buff2[len]; + + [str getCharacters:buff1]; + [scan.string getCharacters:buff2 range:NSMakeRange(scan.scanLocation, len)]; + if (memcmp(buff1, buff2, len) == 0) { + return YES; + } + + return NO; +} + +- (BOOL)canScanChar:(char)c { + // By avoiding any ARC calls on these two objects which we know won't be + // free'd out from under us, we're making HUGE performance savings in this + // parser, because this method is one of the most-used methods of the parser. + // This is probably the most performance-critical method in this class. + __unsafe_unretained NSScanner *scan = self.scan; + __unsafe_unretained NSString *string = scan.string; + if (scan.scanLocation >= string.length) return NO; + + return [string characterAtIndex:scan.scanLocation] == c; +} + +- (BOOL)scanChar:(char)c { + if ([self canScanChar:c]) { + self.scan.scanLocation++; + return YES; + } + + return NO; +} + +- (BOOL)scanChar:(char)c into:(char *)ref { + if ([self scanChar:c]) { + *ref = c; + return YES; + } + + return NO; +} + +- (ssize_t)scanSize { + NSInteger size = 0; + if ([self.scan scanInteger:&size]) { + return size; + } + + return 0; +} + +- (NSString *)scanPair:(char)c1 close:(char)c2 { + // Starting position and string variables + NSUInteger start = self.scan.scanLocation; + NSString *s1 = S(c1); + + // Scan opening tag + if (![self scanChar:c1]) { + self.scan.scanLocation = start; + return nil; + } + + // Character set for scanning up to either symbol + NSCharacterSet *bothChars = ({ + unichar buff[2] = { c1, c2 }; + NSString *bothCharsStr = [[NSString alloc] initWithCharacters:buff length:2]; + [NSCharacterSet characterSetWithCharactersInString:bothCharsStr]; + }); + + // Stack for finding pairs, starting with the opening symbol + NSMutableArray *stack = [NSMutableArray arrayWithObject:s1]; + + // Algorithm for scanning to the closing end of a pair of opening/closing symbols + // scanUpToCharactersFromSet:intoString: returns NO if you're already at one of the chars, + // so we need to check if we can actually scan one if it returns NO + while ([self.scan scanUpToCharactersFromSet:bothChars intoString:nil] || + [self canScanChar:c1] || [self canScanChar:c2]) { + // Closing symbol found + if ([self scanChar:c2]) { + if (!stack.count) { + // Abort, no matching opening symbol + self.scan.scanLocation = start; + return nil; + } + + // Pair found, pop opening symbol + [stack removeLastObject]; + // Exit loop if we reached the closing brace we needed + if (!stack.count) { + break; + } + } + // Opening symbol found + if ([self scanChar:c1]) { + // Begin pair + [stack addObject:s1]; + } + } + + if (stack.count) { + // Abort, no matching closing symbol + self.scan.scanLocation = start; + return nil; + } + + // Slice out the string we just scanned + return [self.scan.string + substringWithRange:NSMakeRange(start, self.scan.scanLocation - start) + ]; +} + +- (BOOL)scanPastArg { + NSUInteger start = self.scan.scanLocation; + + // Check for void first + if ([self scanChar:FLEXTypeEncodingVoid]) { + return YES; + } + + // Scan optional const + [self scanChar:FLEXTypeEncodingConst]; + + // Check for pointer, then scan next + if ([self scanChar:FLEXTypeEncodingPointer]) { + // Recurse to scan something else + if ([self scanPastArg]) { + return YES; + } else { + // Scan failed, abort + self.scan.scanLocation = start; + return NO; + } + } + + char next = self.nextChar; + + // Check for struct/union/array, scan past it + FLEXTypeEncoding opening = FLEXTypeEncodingNull, closing = FLEXTypeEncodingNull; + BOOL checkPair = YES; + switch (next) { + case FLEXTypeEncodingStructBegin: + opening = FLEXTypeEncodingStructBegin; + closing = FLEXTypeEncodingStructEnd; + break; + case FLEXTypeEncodingUnionBegin: + opening = FLEXTypeEncodingUnionBegin; + closing = FLEXTypeEncodingUnionEnd; + break; + case FLEXTypeEncodingArrayBegin: + opening = FLEXTypeEncodingArrayBegin; + closing = FLEXTypeEncodingArrayEnd; + break; + + default: + checkPair = NO; + break; + } + + if (checkPair && [self scanPair:opening close:closing]) { + return YES; + } + + // Scan single thing and possible size and return + switch (next) { + case FLEXTypeEncodingUnknown: + case FLEXTypeEncodingChar: + case FLEXTypeEncodingInt: + case FLEXTypeEncodingShort: + case FLEXTypeEncodingLong: + case FLEXTypeEncodingLongLong: + case FLEXTypeEncodingUnsignedChar: + case FLEXTypeEncodingUnsignedInt: + case FLEXTypeEncodingUnsignedShort: + case FLEXTypeEncodingUnsignedLong: + case FLEXTypeEncodingUnsignedLongLong: + case FLEXTypeEncodingFloat: + case FLEXTypeEncodingDouble: + case FLEXTypeEncodingLongDouble: + case FLEXTypeEncodingCBool: + case FLEXTypeEncodingCString: + case FLEXTypeEncodingSelector: + case FLEXTypeEncodingBitField: { + self.scan.scanLocation++; + // Size is optional + [self scanSize]; + return YES; + } + + case FLEXTypeEncodingObjcObject: + case FLEXTypeEncodingObjcClass: { + self.scan.scanLocation++; + // These might have numbers OR quotes after them + [self scanSize] || [self scanPair:FLEXTypeEncodingQuote close:FLEXTypeEncodingQuote]; + return YES; + } + + default: break; + } + + self.scan.scanLocation = start; + return NO; +} + +- (NSString *)scanArg { + NSUInteger start = self.scan.scanLocation; + if (![self scanPastArg]) { + return nil; + } + + return [self.scan.string + substringWithRange:NSMakeRange(start, self.scan.scanLocation - start) + ]; +} + +- (BOOL)scanTypeName { + NSUInteger start = self.scan.scanLocation; + + // The ?= portion of something like {?=b8b4b1b1b18[8S]} + if ([self scanChar:FLEXTypeEncodingUnknown]) { + if (![self scanString:@"="]) { + // No size information available for strings like {?=} + self.scan.scanLocation = start; + return NO; + } + } else { + if (![self scanIdentifier] || ![self scanString:@"="]) { + // 1. Not a valid identifier + // 2. No size information available for strings like {CGPoint} + self.scan.scanLocation = start; + return NO; + } + } + + return YES; +} + +- (NSString *)extractTypeNameFromScanLocation:(BOOL)allowMissingTypeInfo closing:(FLEXTypeEncoding)closeTag { + NSUInteger start = self.scan.scanLocation; + + // The ?= portion of something like {?=b8b4b1b1b18[8S]} + if ([self scanChar:FLEXTypeEncodingUnknown]) { + return @"?"; + } else { + NSString *typeName = [self scanIdentifier]; + char next = self.nextChar; + + if (!typeName) { + // Did not scan an identifier + self.scan.scanLocation = start; + return nil; + } + + switch (next) { + case '=': + return typeName; + + default: { + // = is non-optional unless we allowMissingTypeInfo, in whcih + // case the next character needs to be a closing brace + if (allowMissingTypeInfo && next == closeTag) { + return typeName; + } else { + // Not a valid identifier; possibly a generic C++ type + // i.e. {pair} where `name` was found as `pair` + self.scan.scanLocation = start; + return nil; + } + } + } + } +} + +- (NSString *)cleanPointeeTypeAtLocation:(NSUInteger)scanLocation { + NSUInteger start = self.scan.scanLocation; + self.scan.scanLocation = scanLocation; + + // The return / cleanup code for when the scanned type is already clean + NSString * (^typeIsClean)() = ^NSString * { + NSString *clean = [self.scan.string + substringWithRange:NSMakeRange(scanLocation, self.scan.scanLocation - scanLocation) + ]; + // Reset scan location even on success, because this method is not supposed to change it + self.scan.scanLocation = start; + return clean; + }; + + // No void, this is not a return type + + // Scan optional const + [self scanChar:FLEXTypeEncodingConst]; + + char next = self.nextChar; + switch (next) { + case FLEXTypeEncodingPointer: + // Recurse to scan something else + [self scanChar:next]; + return [self cleanPointeeTypeAtLocation:self.scan.scanLocation]; + + case FLEXTypeEncodingArrayBegin: + // All arrays are supported, scan past them + if ([self scanPair:FLEXTypeEncodingArrayBegin close:FLEXTypeEncodingArrayEnd]) { + return typeIsClean(); + } + break; + + case FLEXTypeEncodingUnionBegin: + // Unions are not supported at all in NSMethodSignature + // We could check for the closing token to be safe, but eh + self.scan.scanLocation = start; + return @"?"; + + case FLEXTypeEncodingStructBegin: { + FLEXTypeInfo info = [self.class parseType:self.unscanned]; + if (info.supported && !info.fixesApplied) { + [self scanPastArg]; + return typeIsClean(); + } + + // The structure we just tried to scan is unsupported, so just return its name + // if it has one. If not, just return a question mark. + self.scan.scanLocation++; // Skip past { + NSString *name = [self extractTypeNameFromScanLocation:YES closing:FLEXTypeEncodingStructEnd]; + if (name) { + // Got the name, scan past the closing token + [self.scan scanUpToString:@"}" intoString:nil]; + if (![self scanChar:FLEXTypeEncodingStructEnd]) { + // Missing struct close token + self.scan.scanLocation = start; + return nil; + } + } else { + // Did not scan valid identifier, possibly a C++ type + self.scan.scanLocation = start; + return @"{?=}"; + } + + // Reset scan location even on success, because this method is not supposed to change it + self.scan.scanLocation = start; + return ({ // "{name=}" + NSMutableString *format = @"{".mutableCopy; + [format appendString:name]; + [format appendString:@"=}"]; + format; + }); + } + + default: + break; + } + + // Check for other types, which in theory are all valid but whatever + FLEXTypeInfo info = [self parseNextType]; + if (info.supported && !info.fixesApplied) { + return typeIsClean(); + } + + self.scan.scanLocation = start; + return @"?"; +} + +- (NSUInteger)cleanedReplacingOffset { + return self.scan.string.length - self.cleaned.length; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h new file mode 100644 index 00000000..78a866a0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/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) 2012 EBF-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 + +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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m new file mode 100644 index 00000000..d6f5e42f --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m @@ -0,0 +1,157 @@ +// +// FLEXBlockDescription.m +// FLEX +// +// Created by Oliver Letterer on 2012-09-01 +// Forked from CTObjectiveCRuntimeAdditions (MIT License) +// https://github.com/ebf/CTObjectiveCRuntimeAdditions +// +// Copyright (c) 2012 EBF-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 "FLEXBlockDescription.h" +#import "FLEXRuntimeUtility.h" + +struct block_object { + void *isa; + int flags; + int reserved; + void (*invoke)(void *, ...); + struct block_descriptor { + unsigned long int reserved; // NULL + unsigned long int size; // sizeof(struct Block_literal_1) + // optional helper functions + void (*copy_helper)(void *dst, void *src); // IFF (1<<25) + void (*dispose_helper)(void *src); // IFF (1<<25) + // required ABI.2010.3.16 + const char *signature; // IFF (1<<30) + } *descriptor; + // imported variables +}; + +@implementation FLEXBlockDescription + ++ (instancetype)describing:(id)block { + return [[self alloc] initWithObjcBlock:block]; +} + +- (id)initWithObjcBlock:(id)block { + self = [super init]; + if (self) { + _block = block; + + struct block_object *blockRef = (__bridge struct block_object *)block; + _flags = blockRef->flags; + _size = blockRef->descriptor->size; + + if (_flags & FLEXBlockOptionHasSignature) { + void *signatureLocation = blockRef->descriptor; + signatureLocation += sizeof(unsigned long int); + signatureLocation += sizeof(unsigned long int); + + if (_flags & FLEXBlockOptionHasCopyDispose) { + signatureLocation += sizeof(void(*)(void *dst, void *src)); + signatureLocation += sizeof(void (*)(void *src)); + } + + const char *signature = (*(const char **)signatureLocation); + _signatureString = @(signature); + + @try { + _signature = [NSMethodSignature signatureWithObjCTypes:signature]; + } @catch (NSException *exception) { } + } + + NSMutableString *summary = [NSMutableString stringWithFormat: + @"Type signature: %@\nSize: %@\nIs global: %@\nHas constructor: %@\nIs stret: %@", + self.signatureString ?: @"nil", @(self.size), + @((BOOL)(_flags & FLEXBlockOptionIsGlobal)), + @((BOOL)(_flags & FLEXBlockOptionHasCtor)), + @((BOOL)(_flags & FLEXBlockOptionHasStret)) + ]; + + if (!self.signature) { + [summary appendFormat:@"\nNumber of arguments: %@", @(self.signature.numberOfArguments)]; + } + + _summary = summary.copy; + _sourceDeclaration = [self buildLikelyDeclaration]; + } + + return self; +} + +- (BOOL)isCompatibleForBlockSwizzlingWithMethodSignature:(NSMethodSignature *)methodSignature { + if (!self.signature) { + return NO; + } + + if (self.signature.numberOfArguments != methodSignature.numberOfArguments + 1) { + return NO; + } + + if (strcmp(self.signature.methodReturnType, methodSignature.methodReturnType) != 0) { + return NO; + } + + for (int i = 0; i < methodSignature.numberOfArguments; i++) { + if (i == 1) { + // SEL in method, IMP in block + if (strcmp([methodSignature getArgumentTypeAtIndex:i], ":") != 0) { + return NO; + } + + if (strcmp([self.signature getArgumentTypeAtIndex:i + 1], "^?") != 0) { + return NO; + } + } else { + if (strcmp([self.signature getArgumentTypeAtIndex:i], [self.signature getArgumentTypeAtIndex:i + 1]) != 0) { + return NO; + } + } + } + + return YES; +} + +- (NSString *)buildLikelyDeclaration { + NSMethodSignature *signature = self.signature; + NSUInteger numberOfArguments = signature.numberOfArguments; + const char *returnType = signature.methodReturnType; + + // Return type + NSMutableString *decl = [NSMutableString stringWithString:@"^"]; + if (returnType[0] != FLEXTypeEncodingVoid) { + [decl appendString:[FLEXRuntimeUtility readableTypeForEncoding:@(returnType)]]; + [decl appendString:@" "]; + } + + // Arguments + if (numberOfArguments) { + [decl appendString:@"("]; + for (NSUInteger i = 1; i < numberOfArguments; i++) { + const char *argType = [self.signature getArgumentTypeAtIndex:i] ?: "?"; + NSString *readableArgType = [FLEXRuntimeUtility readableTypeForEncoding:@(argType)]; + [decl appendFormat:@"%@ arg%@, ", readableArgType, @(i)]; + } + + [decl deleteCharactersInRange:NSMakeRange(decl.length-2, 2)]; + [decl appendString:@")"]; + } + + return decl.copy; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h new file mode 100644 index 00000000..565367ad --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h @@ -0,0 +1,80 @@ +// +// FLEXClassBuilder.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/3/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +@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 *)addMethods:(NSArray *)methods; +/// @return Any properties that failed to be added. +- (NSArray *)addProperties:(NSArray *)properties; +/// @return Any protocols that failed to be added. +- (NSArray *)addProtocols:(NSArray *)protocols; +/// @warning Adding Ivars to existing classes is not supported and will always fail. +- (NSArray *)addIvars:(NSArray *)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)) \ +] diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m new file mode 100644 index 00000000..adeb4a41 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m @@ -0,0 +1,168 @@ +// +// FLEXClassBuilder.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/3/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXClassBuilder.h" +#import "FLEXProperty.h" +#import "FLEXMethodBase.h" +#import "FLEXProtocol.h" +#import + + +#pragma mark FLEXClassBuilder + +@interface FLEXClassBuilder () +@property (nonatomic) NSString *name; +@end + +@implementation FLEXClassBuilder + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + +#pragma mark Initializers ++ (instancetype)allocateClass:(NSString *)name { + return [self allocateClass:name superclass:NSObject.class]; +} + ++ (instancetype)allocateClass:(NSString *)name superclass:(Class)superclass { + return [self allocateClass:name superclass:superclass extraBytes:0]; +} + ++ (instancetype)allocateClass:(NSString *)name superclass:(Class)superclass extraBytes:(size_t)bytes { + NSParameterAssert(name); + return [[self alloc] initWithClass:objc_allocateClassPair(superclass, name.UTF8String, bytes)]; +} + ++ (instancetype)allocateRootClass:(NSString *)name { + NSParameterAssert(name); + return [[self alloc] initWithClass:objc_allocateClassPair(Nil, name.UTF8String, 0)]; +} + ++ (instancetype)builderForClass:(Class)cls { + return [[self alloc] initWithClass:cls]; +} + +- (id)initWithClass:(Class)cls { + NSParameterAssert(cls); + + self = [super init]; + if (self) { + _workingClass = cls; + _name = NSStringFromClass(_workingClass); + } + + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@ name=%@, registered=%d>", + NSStringFromClass(self.class), self.name, self.isRegistered]; +} + +#pragma mark Building +- (NSArray *)addMethods:(NSArray *)methods { + NSParameterAssert(methods.count); + + NSMutableArray *failed = [NSMutableArray new]; + for (FLEXMethodBase *m in methods) { + if (!class_addMethod(self.workingClass, m.selector, m.implementation, m.typeEncoding.UTF8String)) { + [failed addObject:m]; + } + } + + return failed; +} + +- (NSArray *)addProperties:(NSArray *)properties { + NSParameterAssert(properties.count); + + NSMutableArray *failed = [NSMutableArray new]; + for (FLEXProperty *p in properties) { + unsigned int pcount; + objc_property_attribute_t *attributes = [p copyAttributesList:&pcount]; + if (!class_addProperty(self.workingClass, p.name.UTF8String, attributes, pcount)) { + [failed addObject:p]; + } + free(attributes); + } + + return failed; +} + +- (NSArray *)addProtocols:(NSArray *)protocols { + NSParameterAssert(protocols.count); + + NSMutableArray *failed = [NSMutableArray new]; + for (FLEXProtocol *p in protocols) { + if (!class_addProtocol(self.workingClass, p.objc_protocol)) { + [failed addObject:p]; + } + } + + return failed; +} + +- (NSArray *)addIvars:(NSArray *)ivars { + NSParameterAssert(ivars.count); + + NSMutableArray *failed = [NSMutableArray new]; + for (FLEXIvarBuilder *ivar in ivars) { + if (!class_addIvar(self.workingClass, ivar.name.UTF8String, ivar.size, ivar.alignment, ivar.encoding.UTF8String)) { + [failed addObject:ivar]; + } + } + + return failed; +} + +- (Class)registerClass { + if (self.isRegistered) { + [NSException raise:NSInternalInconsistencyException format:@"Class is already registered"]; + } + + objc_registerClassPair(self.workingClass); + return self.workingClass; +} + +- (BOOL)isRegistered { + return objc_lookUpClass(self.name.UTF8String) != nil; +} + +@end + + +#pragma mark FLEXIvarBuilder + +@implementation FLEXIvarBuilder + ++ (instancetype)name:(NSString *)name size:(size_t)size alignment:(uint8_t)alignment typeEncoding:(NSString *)encoding { + return [[self alloc] initWithName:name size:size alignment:alignment typeEncoding:encoding]; +} + +- (id)initWithName:(NSString *)name size:(size_t)size alignment:(uint8_t)alignment typeEncoding:(NSString *)encoding { + NSParameterAssert(name); NSParameterAssert(encoding); + NSParameterAssert(size > 0); NSParameterAssert(alignment > 0); + + self = [super init]; + if (self) { + _name = name; + _encoding = encoding; + _size = size; + _alignment = alignment; + } + + return self; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.h new file mode 100644 index 00000000..3f8cb25b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.h @@ -0,0 +1,47 @@ +// +// FLEXIvar.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m new file mode 100644 index 00000000..f6809dc8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m @@ -0,0 +1,156 @@ +// +// FLEXIvar.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXIvar.h" +#import "FLEXRuntimeUtility.h" +#import "FLEXRuntimeSafety.h" +#import "FLEXTypeEncodingParser.h" +#include + +@interface FLEXIvar () { + NSString *_flex_description; +} +@end + +@implementation FLEXIvar + +#pragma mark Initializers + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + ++ (instancetype)ivar:(Ivar)ivar { + return [[self alloc] initWithIvar:ivar]; +} + ++ (instancetype)named:(NSString *)name onClass:(Class)cls { + Ivar ivar = class_getInstanceVariable(cls, name.UTF8String); + return [self ivar:ivar]; +} + +- (id)initWithIvar:(Ivar)ivar { + NSParameterAssert(ivar); + + self = [super init]; + if (self) { + _objc_ivar = ivar; + [self examine]; + } + + return self; +} + +#pragma mark Other + +- (NSString *)description { + if (!_flex_description) { + NSString *readableType = [FLEXRuntimeUtility readableTypeForEncoding:self.typeEncoding]; + _flex_description = [FLEXRuntimeUtility appendName:self.name toType:readableType]; + } + + return _flex_description; +} + +- (NSString *)debugDescription { + return [NSString stringWithFormat:@"<%@ name=%@, encoding=%@, offset=%ld>", + NSStringFromClass(self.class), self.name, self.typeEncoding, (long)self.offset]; +} + +- (void)examine { + _name = @(ivar_getName(self.objc_ivar) ?: "(nil)"); + _offset = ivar_getOffset(self.objc_ivar); + _typeEncoding = @(ivar_getTypeEncoding(self.objc_ivar) ?: ""); + + NSString *typeForDetails = _typeEncoding; + NSString *sizeForDetails = nil; + if (_typeEncoding.length) { + _type = (FLEXTypeEncoding)[_typeEncoding characterAtIndex:0]; + FLEXGetSizeAndAlignment(_typeEncoding.UTF8String, &_size, nil); + sizeForDetails = [@(_size).stringValue stringByAppendingString:@" bytes"]; + } else { + _type = FLEXTypeEncodingNull; + typeForDetails = @"no type info"; + sizeForDetails = @"unknown size"; + } + + Dl_info exeInfo; + if (dladdr(_objc_ivar, &exeInfo)) { + _imagePath = exeInfo.dli_fname ? @(exeInfo.dli_fname) : nil; + } + + _details = [NSString stringWithFormat: + @"%@, offset %@ — %@", + sizeForDetails, @(_offset), typeForDetails + ]; +} + +- (id)getValue:(id)target { + id value = nil; + if (!FLEXIvarIsSafe(_objc_ivar) || _type == FLEXTypeEncodingNull) { + return nil; + } + +#ifdef __arm64__ + // See http://www.sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html + if (self.type == FLEXTypeEncodingObjcClass && [self.name isEqualToString:@"isa"]) { + value = object_getClass(target); + } else +#endif + if (self.type == FLEXTypeEncodingObjcObject || self.type == FLEXTypeEncodingObjcClass) { + value = object_getIvar(target, self.objc_ivar); + } else { + void *pointer = (__bridge void *)target + self.offset; + value = [FLEXRuntimeUtility + valueForPrimitivePointer:pointer + objCType:self.typeEncoding.UTF8String + ]; + } + + return value; +} + +- (void)setValue:(id)value onObject:(id)target { + const char *typeEncodingCString = self.typeEncoding.UTF8String; + if (self.type == FLEXTypeEncodingObjcObject) { + object_setIvar(target, self.objc_ivar, value); + } else if ([value isKindOfClass:[NSValue class]]) { + // Primitive - unbox the NSValue. + NSValue *valueValue = (NSValue *)value; + + // Make sure that the box contained the correct type. + NSAssert( + strcmp(valueValue.objCType, typeEncodingCString) == 0, + @"Type encoding mismatch (value: %s; ivar: %s) in setting ivar named: %@ on object: %@", + valueValue.objCType, typeEncodingCString, self.name, target + ); + + NSUInteger bufferSize = 0; + if (FLEXGetSizeAndAlignment(typeEncodingCString, &bufferSize, NULL)) { + void *buffer = calloc(bufferSize, 1); + [valueValue getValue:buffer]; + void *pointer = (__bridge void *)target + self.offset; + memcpy(pointer, buffer, bufferSize); + free(buffer); + } + } +} + +- (id)getPotentiallyUnboxedValue:(id)target { + return [FLEXRuntimeUtility + potentiallyUnwrapBoxedPointer:[self getValue:target] + type:self.typeEncoding.UTF8String + ]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.h new file mode 100644 index 00000000..b2377f63 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.h @@ -0,0 +1,96 @@ +// +// FLEXMethod.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.m new file mode 100644 index 00000000..2eb98d0d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.m @@ -0,0 +1,430 @@ +// +// FLEXMethod.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXMethod.h" +#import "FLEXMirror.h" +#import "FLEXTypeEncodingParser.h" +#import "FLEXRuntimeUtility.h" +#include + +@implementation FLEXMethod +@synthesize imagePath = _imagePath; +@dynamic implementation; + ++ (instancetype)buildMethodNamed:(NSString *)name withTypes:(NSString *)typeEncoding implementation:(IMP)implementation { + [NSException raise:NSInternalInconsistencyException format:@"Class instance should not be created with +buildMethodNamed:withTypes:implementation"]; return nil; +} + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + +#pragma mark Initializers + ++ (instancetype)method:(Method)method { + return [[self alloc] initWithMethod:method isInstanceMethod:YES]; +} + ++ (instancetype)method:(Method)method isInstanceMethod:(BOOL)isInstanceMethod { + return [[self alloc] initWithMethod:method isInstanceMethod:isInstanceMethod]; +} + ++ (instancetype)selector:(SEL)selector class:(Class)cls { + BOOL instance = !class_isMetaClass(cls); + // class_getInstanceMethod will return an instance method if not given + // not given a metaclass, or a class method if given a metaclass, but + // this isn't documented so we just want to be safe here. + Method m = instance ? class_getInstanceMethod(cls, selector) : class_getClassMethod(cls, selector); + if (m == NULL) return nil; + + return [self method:m isInstanceMethod:instance]; +} + ++ (instancetype)selector:(SEL)selector implementedInClass:(Class)cls { + if (![cls superclass]) { return [self selector:selector class:cls]; } + + BOOL unique = [cls methodForSelector:selector] != [[cls superclass] methodForSelector:selector]; + + if (unique) { + return [self selector:selector class:cls]; + } + + return nil; +} + +- (id)initWithMethod:(Method)method isInstanceMethod:(BOOL)isInstanceMethod { + NSParameterAssert(method); + + self = [super init]; + if (self) { + _objc_method = method; + _isInstanceMethod = isInstanceMethod; + _signatureString = @(method_getTypeEncoding(method) ?: "?@:"); + + NSString *cleanSig = nil; + if ([FLEXTypeEncodingParser methodTypeEncodingSupported:_signatureString cleaned:&cleanSig]) { + _signature = [NSMethodSignature signatureWithObjCTypes:cleanSig.UTF8String]; + } + + [self examine]; + } + + return self; +} + + +#pragma mark Other + +- (NSString *)description { + if (!_flex_description) { + _flex_description = [self prettyName]; + } + + return _flex_description; +} + +- (NSString *)debugNameGivenClassName:(NSString *)name { + NSMutableString *string = [NSMutableString stringWithString:_isInstanceMethod ? @"-[" : @"+["]; + [string appendString:name]; + [string appendString:@" "]; + [string appendString:self.selectorString]; + [string appendString:@"]"]; + return string; +} + +- (NSString *)prettyName { + NSString *methodTypeString = self.isInstanceMethod ? @"-" : @"+"; + NSString *readableReturnType = [FLEXRuntimeUtility readableTypeForEncoding:@(self.signature.methodReturnType ?: "")]; + + NSString *prettyName = [NSString stringWithFormat:@"%@ (%@)", methodTypeString, readableReturnType]; + NSArray *components = [self prettyArgumentComponents]; + + if (components.count) { + return [prettyName stringByAppendingString:[components componentsJoinedByString:@" "]]; + } else { + return [prettyName stringByAppendingString:self.selectorString]; + } +} + +- (NSArray *)prettyArgumentComponents { + // NSMethodSignature can't handle some type encodings + // like ^AI@:ir* which happen to very much exist + if (self.signature.numberOfArguments < self.numberOfArguments) { + return nil; + } + + NSMutableArray *components = [NSMutableArray new]; + + NSArray *selectorComponents = [self.selectorString componentsSeparatedByString:@":"]; + NSUInteger numberOfArguments = self.numberOfArguments; + + for (NSUInteger argIndex = 2; argIndex < numberOfArguments; argIndex++) { + assert(argIndex < self.signature.numberOfArguments); + + const char *argType = [self.signature getArgumentTypeAtIndex:argIndex] ?: "?"; + NSString *readableArgType = [FLEXRuntimeUtility readableTypeForEncoding:@(argType)]; + NSString *prettyComponent = [NSString + stringWithFormat:@"%@:(%@) ", + selectorComponents[argIndex - 2], + readableArgType + ]; + + [components addObject:prettyComponent]; + } + + return components; +} + +- (NSString *)debugDescription { + return [NSString stringWithFormat:@"<%@ selector=%@, signature=%@>", + NSStringFromClass(self.class), self.selectorString, self.signatureString]; +} + +- (void)examine { + _implementation = method_getImplementation(_objc_method); + _selector = method_getName(_objc_method); + _numberOfArguments = method_getNumberOfArguments(_objc_method); + _name = NSStringFromSelector(_selector); + _returnType = (FLEXTypeEncoding *)_signature.methodReturnType ?: ""; + _returnSize = _signature.methodReturnLength; +} + +#pragma mark Public + +- (void)setImplementation:(IMP)implementation { + NSParameterAssert(implementation); + method_setImplementation(self.objc_method, implementation); + [self examine]; +} + +- (NSString *)typeEncoding { + if (!_typeEncoding) { + _typeEncoding = [_signatureString + stringByReplacingOccurrencesOfString:@"[0-9]" + withString:@"" + options:NSRegularExpressionSearch + range:NSMakeRange(0, _signatureString.length) + ]; + } + + return _typeEncoding; +} + +- (NSString *)imagePath { + if (!_imagePath) { + Dl_info exeInfo; + if (dladdr(_objc_method, &exeInfo)) { + _imagePath = exeInfo.dli_fname ? @(exeInfo.dli_fname) : @""; + } + } + + return _imagePath; +} + +#pragma mark Misc + +- (void)swapImplementations:(FLEXMethod *)method { + method_exchangeImplementations(self.objc_method, method.objc_method); + [self examine]; + [method examine]; +} + +// Some code borrowed from MAObjcRuntime, by Mike Ash. +- (id)sendMessage:(id)target, ... { + id ret = nil; + va_list args; + va_start(args, target); + + switch (self.returnType[0]) { + case FLEXTypeEncodingUnknown: { + [self getReturnValue:NULL forMessageSend:target arguments:args]; + break; + } + case FLEXTypeEncodingChar: { + char val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingInt: { + int val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingShort: { + short val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingLong: { + long val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingLongLong: { + long long val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingUnsignedChar: { + unsigned char val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingUnsignedInt: { + unsigned int val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingUnsignedShort: { + unsigned short val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingUnsignedLong: { + unsigned long val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingUnsignedLongLong: { + unsigned long long val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingFloat: { + float val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingDouble: { + double val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingLongDouble: { + long double val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = [NSValue value:&val withObjCType:self.returnType]; + break; + } + case FLEXTypeEncodingCBool: { + bool val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingVoid: { + [self getReturnValue:NULL forMessageSend:target arguments:args]; + return nil; + break; + } + case FLEXTypeEncodingCString: { + char *val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = @(val); + break; + } + case FLEXTypeEncodingObjcObject: { + id val = nil; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = val; + break; + } + case FLEXTypeEncodingObjcClass: { + Class val = Nil; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = val; + break; + } + case FLEXTypeEncodingSelector: { + SEL val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = NSStringFromSelector(val); + break; + } + case FLEXTypeEncodingArrayBegin: { + void *val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = [NSValue valueWithBytes:val objCType:self.signature.methodReturnType]; + break; + } + case FLEXTypeEncodingUnionBegin: + case FLEXTypeEncodingStructBegin: { + if (self.signature.methodReturnLength) { + void * val = malloc(self.signature.methodReturnLength); + [self getReturnValue:val forMessageSend:target arguments:args]; + ret = [NSValue valueWithBytes:val objCType:self.signature.methodReturnType]; + } else { + [self getReturnValue:NULL forMessageSend:target arguments:args]; + } + break; + } + case FLEXTypeEncodingBitField: { + [self getReturnValue:NULL forMessageSend:target arguments:args]; + break; + } + case FLEXTypeEncodingPointer: { + void * val = 0; + [self getReturnValue:&val forMessageSend:target arguments:args]; + ret = [NSValue valueWithPointer:val]; + break; + } + + default: { + [NSException raise:NSInvalidArgumentException + format:@"Unsupported type encoding: %s", (char *)self.returnType]; + } + } + + va_end(args); + return ret; +} + +// Code borrowed from MAObjcRuntime, by Mike Ash. +- (void)getReturnValue:(void *)retPtr forMessageSend:(id)target, ... { + va_list args; + va_start(args, target); + [self getReturnValue:retPtr forMessageSend:target arguments:args]; + va_end(args); +} + +// Code borrowed from MAObjcRuntime, by Mike Ash. +- (void)getReturnValue:(void *)retPtr forMessageSend:(id)target arguments:(va_list)args { + if (!_signature) { + return; + } + + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:_signature]; + NSUInteger argumentCount = _signature.numberOfArguments; + + invocation.target = target; + + for (NSUInteger i = 2; i < argumentCount; i++) { + int cookie = va_arg(args, int); + if (cookie != FLEXMagicNumber) { + [NSException + raise:NSInternalInconsistencyException + format:@"%s: incorrect magic cookie %08x; make sure you didn't forget " + "any arguments and that all arguments are wrapped in FLEXArg().", __func__, cookie + ]; + } + const char *typeString = va_arg(args, char *); + void *argPointer = va_arg(args, void *); + + NSUInteger inSize, sigSize; + NSGetSizeAndAlignment(typeString, &inSize, NULL); + NSGetSizeAndAlignment([_signature getArgumentTypeAtIndex:i], &sigSize, NULL); + + if (inSize != sigSize) { + [NSException + raise:NSInternalInconsistencyException + format:@"%s:size mismatch between passed-in argument and " + "required argument; in type:%s (%lu) requested:%s (%lu)", + __func__, typeString, (long)inSize, [_signature getArgumentTypeAtIndex:i], (long)sigSize + ]; + } + + [invocation setArgument:argPointer atIndex:i]; + } + + // Hack to make NSInvocation invoke the desired implementation + IMP imp = [invocation methodForSelector:NSSelectorFromString(@"invokeUsingIMP:")]; + void (*invokeWithIMP)(id, SEL, IMP) = (void *)imp; + invokeWithIMP(invocation, 0, _implementation); + + if (_signature.methodReturnLength && retPtr) { + [invocation getReturnValue:retPtr]; + } +} + +@end + + +@implementation FLEXMethod (Comparison) + +- (NSComparisonResult)compare:(FLEXMethod *)method { + return [self.selectorString compare:method.selectorString]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h new file mode 100644 index 00000000..96d838be --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h @@ -0,0 +1,43 @@ +// +// FLEXMethodBase.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import + + +/// 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m new file mode 100644 index 00000000..7e33daa7 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m @@ -0,0 +1,49 @@ +// +// FLEXMethodBase.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXMethodBase.h" + + +@implementation FLEXMethodBase + +#pragma mark Initializers + ++ (instancetype)buildMethodNamed:(NSString *)name withTypes:(NSString *)typeEncoding implementation:(IMP)implementation { + return [[self alloc] initWithSelector:sel_registerName(name.UTF8String) types:typeEncoding imp:implementation]; +} + +- (id)initWithSelector:(SEL)selector types:(NSString *)types imp:(IMP)imp { + NSParameterAssert(selector); NSParameterAssert(types); NSParameterAssert(imp); + + self = [super init]; + if (self) { + _selector = selector; + _typeEncoding = types; + _implementation = imp; + _name = NSStringFromSelector(self.selector); + } + + return self; +} + +- (NSString *)selectorString { + return _name; +} + +#pragma mark Overrides + +- (NSString *)description { + if (!_flex_description) { + _flex_description = [NSString stringWithFormat:@"%@ '%@'", _name, _typeEncoding]; + } + + return _flex_description; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h new file mode 100644 index 00000000..fc7cd3ce --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h @@ -0,0 +1,60 @@ +// +// FLEXMirror.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/29/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +@class FLEXMethod, FLEXProperty, FLEXIvar, FLEXProtocol; +#import + + +#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 *properties; +@property (nonatomic, readonly) NSArray *ivars; +@property (nonatomic, readonly) NSArray *methods; +@property (nonatomic, readonly) NSArray *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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m new file mode 100644 index 00000000..12411ca7 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m @@ -0,0 +1,136 @@ +// +// FLEXMirror.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/29/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXMirror.h" +#import "FLEXProperty.h" +#import "FLEXMethod.h" +#import "FLEXIvar.h" +#import "FLEXProtocol.h" +#import "FLEXUtility.h" + + +#pragma mark FLEXMirror + +@implementation FLEXMirror + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + +#pragma mark Initialization ++ (instancetype)reflect:(id)objectOrClass { + return [[self alloc] initWithValue:objectOrClass]; +} + +- (id)initWithValue:(id)value { + NSParameterAssert(value); + + self = [super init]; + if (self) { + _value = value; + [self examine]; + } + + return self; +} + +- (NSString *)description { + NSString *type = self.isClass ? @"metaclass" : @"class"; + return [NSString + stringWithFormat:@"<%@ %@=%@, %lu properties, %lu ivars, %lu methods, %lu protocols>", + NSStringFromClass(self.class), + type, + self.className, + (unsigned long)self.properties.count, + (unsigned long)self.ivars.count, + (unsigned long)self.methods.count, + (unsigned long)self.protocols.count + ]; +} + +- (void)examine { + // cls is a metaclass if self.value is a class + Class cls = object_getClass(self.value); + + unsigned int pcount, mcount, ivcount, pccount; + objc_property_t *objcproperties = class_copyPropertyList(cls, &pcount); + Protocol*__unsafe_unretained *procs = class_copyProtocolList(cls, &pccount); + Method *objcmethods = class_copyMethodList(cls, &mcount); + Ivar *objcivars = class_copyIvarList(cls, &ivcount); + + _className = NSStringFromClass(cls); + _isClass = class_isMetaClass(cls); // or object_isClass(self.value) + + NSMutableArray *properties = [NSMutableArray new]; + for (int i = 0; i < pcount; i++) + [properties addObject:[FLEXProperty property:objcproperties[i]]]; + _properties = properties; + + NSMutableArray *methods = [NSMutableArray new]; + for (int i = 0; i < mcount; i++) + [methods addObject:[FLEXMethod method:objcmethods[i]]]; + _methods = methods; + + NSMutableArray *ivars = [NSMutableArray new]; + for (int i = 0; i < ivcount; i++) + [ivars addObject:[FLEXIvar ivar:objcivars[i]]]; + _ivars = ivars; + + NSMutableArray *protocols = [NSMutableArray new]; + for (int i = 0; i < pccount; i++) + [protocols addObject:[FLEXProtocol protocol:procs[i]]]; + _protocols = protocols; + + // Cleanup + free(objcproperties); + free(objcmethods); + free(objcivars); + free(procs); + procs = NULL; +} + +#pragma mark Misc + +- (FLEXMirror *)superMirror { + return [FLEXMirror reflect:[self.value superclass]]; +} + +@end + + +#pragma mark ExtendedMirror + +@implementation FLEXMirror (ExtendedMirror) + +- (id)filter:(NSArray *)array forName:(NSString *)name { + NSPredicate *filter = [NSPredicate predicateWithFormat:@"%K = %@", @"name", name]; + return [array filteredArrayUsingPredicate:filter].firstObject; +} + +- (FLEXMethod *)methodNamed:(NSString *)name { + return [self filter:self.methods forName:name]; +} + +- (FLEXProperty *)propertyNamed:(NSString *)name { + return [self filter:self.properties forName:name]; +} + +- (FLEXIvar *)ivarNamed:(NSString *)name { + return [self filter:self.ivars forName:name]; +} + +- (FLEXProtocol *)protocolNamed:(NSString *)name { + return [self filter:self.protocols forName:name]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.h new file mode 100644 index 00000000..d15e65b5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.h @@ -0,0 +1,134 @@ +// +// FLEXProperty.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m new file mode 100644 index 00000000..011cbb13 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m @@ -0,0 +1,282 @@ +// +// FLEXProperty.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXProperty.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXMethodBase.h" +#import "FLEXRuntimeUtility.h" +#include + + +@interface FLEXProperty () { + NSString *_flex_description; +} +@property (nonatomic ) BOOL uniqueCheckFlag; +@property (nonatomic, readonly) Class cls; +@end + +@implementation FLEXProperty +@synthesize multiple = _multiple; +@synthesize imageName = _imageName; +@synthesize imagePath = _imagePath; + +#pragma mark Initializers + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + ++ (instancetype)property:(objc_property_t)property { + return [[self alloc] initWithProperty:property onClass:nil]; +} + ++ (instancetype)property:(objc_property_t)property onClass:(Class)cls { + return [[self alloc] initWithProperty:property onClass:cls]; +} + ++ (instancetype)named:(NSString *)name onClass:(Class)cls { + NSParameterAssert(class_getProperty(cls, name.UTF8String)); + return [self property:class_getProperty(cls, name.UTF8String) onClass:cls]; +} + ++ (instancetype)propertyWithName:(NSString *)name attributes:(FLEXPropertyAttributes *)attributes { + return [[self alloc] initWithName:name attributes:attributes]; +} + +- (id)initWithProperty:(objc_property_t)property onClass:(Class)cls { + NSParameterAssert(property); + + self = [super init]; + if (self) { + _objc_property = property; + _attributes = [FLEXPropertyAttributes attributesForProperty:property]; + _name = @(property_getName(property) ?: "(nil)"); + _cls = cls; + + if (!_attributes) [NSException raise:NSInternalInconsistencyException format:@"Error retrieving property attributes"]; + if (!_name) [NSException raise:NSInternalInconsistencyException format:@"Error retrieving property name"]; + + [self examine]; + } + + return self; +} + +- (id)initWithName:(NSString *)name attributes:(FLEXPropertyAttributes *)attributes { + NSParameterAssert(name); NSParameterAssert(attributes); + + self = [super init]; + if (self) { + _attributes = attributes; + _name = name; + + [self examine]; + } + + return self; +} + +#pragma mark Private + +- (void)examine { + if (self.attributes.typeEncoding.length) { + _type = (FLEXTypeEncoding)[self.attributes.typeEncoding characterAtIndex:0]; + } + + // Return the given selector if the class responds to it + Class cls = _cls; + SEL (^selectorIfValid)() = ^SEL(SEL sel) { + if (!sel || !cls) return nil; + return [cls instancesRespondToSelector:sel] ? sel : nil; + }; + + SEL customGetter = self.attributes.customGetter; + SEL customSetter = self.attributes.customSetter; + SEL defaultGetter = NSSelectorFromString(self.name); + SEL defaultSetter = NSSelectorFromString([NSString + stringWithFormat:@"set%c%@:", + (char)toupper([self.name characterAtIndex:0]), + [self.name substringFromIndex:1] + ]); + + // Check if the likely getters/setters exist + SEL validGetter = selectorIfValid(customGetter) ?: selectorIfValid(defaultGetter); + SEL validSetter = selectorIfValid(customSetter) ?: selectorIfValid(defaultSetter); + _likelyGetterExists = validGetter != nil; + _likelySetterExists = validSetter != nil; + + // Assign likely getters and setters to the valid one, + // or the default, regardless of whether the default exists + _likelyGetter = validGetter ?: defaultGetter; + _likelySetter = validSetter ?: defaultSetter; + _likelyGetterString = NSStringFromSelector(_likelyGetter); + _likelySetterString = NSStringFromSelector(_likelySetter); + + _isClassProperty = _cls ? class_isMetaClass(_cls) : NO; +} + +#pragma mark Overrides + +- (NSString *)description { + if (!_flex_description) { + NSString *readableType = [FLEXRuntimeUtility readableTypeForEncoding:self.attributes.typeEncoding]; + _flex_description = [FLEXRuntimeUtility appendName:self.name toType:readableType]; + } + + return _flex_description; +} + +- (NSString *)debugDescription { + return [NSString stringWithFormat:@"<%@ name=%@, property=%p, attributes:\n\t%@\n>", + NSStringFromClass(self.class), self.name, self.objc_property, self.attributes]; +} + +#pragma mark Public + +- (objc_property_attribute_t *)copyAttributesList:(unsigned int *)attributesCount { + if (self.objc_property) { + return property_copyAttributeList(self.objc_property, attributesCount); + } else { + return [self.attributes copyAttributesList:attributesCount]; + } +} + +- (void)replacePropertyOnClass:(Class)cls { + class_replaceProperty(cls, self.name.UTF8String, self.attributes.list, (unsigned int)self.attributes.count); +} + +- (void)computeSymbolInfo:(BOOL)forceBundle { + Dl_info exeInfo; + if (dladdr(_objc_property, &exeInfo)) { + _imagePath = exeInfo.dli_fname ? @(exeInfo.dli_fname) : nil; + } + + if ((!_multiple || !_uniqueCheckFlag) && _cls) { + _multiple = _objc_property != class_getProperty(_cls, self.name.UTF8String); + + if (_multiple || forceBundle) { + NSString *path = _imagePath.stringByDeletingLastPathComponent; + _imageName = [NSBundle bundleWithPath:path].executablePath.lastPathComponent; + } + } +} + +- (BOOL)multiple { + [self computeSymbolInfo:NO]; + return _multiple; +} + +- (NSString *)imagePath { + [self computeSymbolInfo:YES]; + return _imagePath; +} + +- (NSString *)imageName { + [self computeSymbolInfo:YES]; + return _imageName; +} + +- (NSString *)fullDescription { + NSMutableArray *attributesStrings = [NSMutableArray new]; + FLEXPropertyAttributes *attributes = self.attributes; + + // Atomicity + if (attributes.isNonatomic) { + [attributesStrings addObject:@"nonatomic"]; + } else { + [attributesStrings addObject:@"atomic"]; + } + + // Storage + if (attributes.isRetained) { + [attributesStrings addObject:@"strong"]; + } else if (attributes.isCopy) { + [attributesStrings addObject:@"copy"]; + } else if (attributes.isWeak) { + [attributesStrings addObject:@"weak"]; + } else { + [attributesStrings addObject:@"assign"]; + } + + // Mutability + if (attributes.isReadOnly) { + [attributesStrings addObject:@"readonly"]; + } else { + [attributesStrings addObject:@"readwrite"]; + } + + // Class or not + if (self.isClassProperty) { + [attributesStrings addObject:@"class"]; + } + + // Custom getter/setter + SEL customGetter = attributes.customGetter; + SEL customSetter = attributes.customSetter; + if (customGetter) { + [attributesStrings addObject:[NSString stringWithFormat:@"getter=%s", sel_getName(customGetter)]]; + } + if (customSetter) { + [attributesStrings addObject:[NSString stringWithFormat:@"setter=%s", sel_getName(customSetter)]]; + } + + NSString *attributesString = [attributesStrings componentsJoinedByString:@", "]; + return [NSString stringWithFormat:@"@property (%@) %@", attributesString, self.description]; +} + +- (id)getValue:(id)target { + if (!target) return nil; + + // We don't care about checking dynamically whether the getter + // _now_ exists on this object. If the getter doesn't exist + // when this property is initialized, it will never call it. + // Just re-create the property object if you need to call it. + if (self.likelyGetterExists) { + BOOL objectIsClass = object_isClass(target); + BOOL instanceAndInstanceProperty = !objectIsClass && !self.isClassProperty; + BOOL classAndClassProperty = objectIsClass && self.isClassProperty; + + if (instanceAndInstanceProperty || classAndClassProperty) { + return [FLEXRuntimeUtility performSelector:self.likelyGetter onObject:target]; + } + } + + return nil; +} + +- (id)getPotentiallyUnboxedValue:(id)target { + if (!target) return nil; + + return [FLEXRuntimeUtility + potentiallyUnwrapBoxedPointer:[self getValue:target] + type:self.attributes.typeEncoding.UTF8String + ]; +} + +#pragma mark Suggested getters and setters + +- (FLEXMethodBase *)getterWithImplementation:(IMP)implementation { + NSString *types = [NSString stringWithFormat:@"%@%s%s", self.attributes.typeEncoding, @encode(id), @encode(SEL)]; + NSString *name = [NSString stringWithFormat:@"%@", self.name]; + FLEXMethodBase *getter = [FLEXMethodBase buildMethodNamed:name withTypes:types implementation:implementation]; + return getter; +} + +- (FLEXMethodBase *)setterWithImplementation:(IMP)implementation { + NSString *types = [NSString stringWithFormat:@"%s%s%s%@", @encode(void), @encode(id), @encode(SEL), self.attributes.typeEncoding]; + NSString *name = [NSString stringWithFormat:@"set%@:", self.name.capitalizedString]; + FLEXMethodBase *setter = [FLEXMethodBase buildMethodNamed:name withTypes:types implementation:implementation]; + return setter; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h new file mode 100644 index 00000000..64ece638 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h @@ -0,0 +1,110 @@ +// +// FLEXPropertyAttributes.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +#import + +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 { +// 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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m new file mode 100644 index 00000000..da4d7fec --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m @@ -0,0 +1,376 @@ +// +// FLEXPropertyAttributes.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/5/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXPropertyAttributes.h" +#import "FLEXRuntimeUtility.h" +#import "NSString+ObjcRuntime.h" +#import "NSDictionary+ObjcRuntime.h" + + +#pragma mark FLEXPropertyAttributes + +@interface FLEXPropertyAttributes () + +@property (nonatomic) NSString *backingIvar; +@property (nonatomic) NSString *typeEncoding; +@property (nonatomic) NSString *oldTypeEncoding; +@property (nonatomic) SEL customGetter; +@property (nonatomic) 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; + +- (NSString *)buildFullDeclaration; + +@end + +@implementation FLEXPropertyAttributes +@synthesize list = _list; + +#pragma mark Initializers + ++ (instancetype)attributesForProperty:(objc_property_t)property { + return [self attributesFromDictionary:[NSDictionary attributesDictionaryForProperty:property]]; +} + ++ (instancetype)attributesFromDictionary:(NSDictionary *)attributes { + return [[self alloc] initWithAttributesDictionary:attributes]; +} + +- (id)initWithAttributesDictionary:(NSDictionary *)attributes { + NSParameterAssert(attributes); + + self = [super init]; + if (self) { + _dictionary = attributes; + _string = attributes.propertyAttributesString; + _count = attributes.count; + _typeEncoding = attributes[kFLEXPropertyAttributeKeyTypeEncoding]; + _backingIvar = attributes[kFLEXPropertyAttributeKeyBackingIvarName]; + _oldTypeEncoding = attributes[kFLEXPropertyAttributeKeyOldStyleTypeEncoding]; + _customGetterString = attributes[kFLEXPropertyAttributeKeyCustomGetter]; + _customSetterString = attributes[kFLEXPropertyAttributeKeyCustomSetter]; + _customGetter = NSSelectorFromString(_customGetterString); + _customSetter = NSSelectorFromString(_customSetterString); + _isReadOnly = attributes[kFLEXPropertyAttributeKeyReadOnly] != nil; + _isCopy = attributes[kFLEXPropertyAttributeKeyCopy] != nil; + _isRetained = attributes[kFLEXPropertyAttributeKeyRetain] != nil; + _isNonatomic = attributes[kFLEXPropertyAttributeKeyNonAtomic] != nil; + _isWeak = attributes[kFLEXPropertyAttributeKeyWeak] != nil; + _isGarbageCollectable = attributes[kFLEXPropertyAttributeKeyGarbageCollectable] != nil; + + _fullDeclaration = [self buildFullDeclaration]; + } + + return self; +} + +#pragma mark Misc + +- (NSString *)description { + return [NSString + stringWithFormat:@"<%@ \"%@\", ivar=%@, readonly=%d, nonatomic=%d, getter=%@, setter=%@>", + NSStringFromClass(self.class), + self.string, + self.backingIvar ?: @"none", + self.isReadOnly, + self.isNonatomic, + NSStringFromSelector(self.customGetter) ?: @"none", + NSStringFromSelector(self.customSetter) ?: @"none" + ]; +} + +- (objc_property_attribute_t *)copyAttributesList:(unsigned int *)attributesCount { + NSDictionary *attrs = self.string.propertyAttributes; + objc_property_attribute_t *propertyAttributes = malloc(attrs.count * sizeof(objc_property_attribute_t)); + + if (attributesCount) { + *attributesCount = (unsigned int)attrs.count; + } + + NSUInteger i = 0; + for (NSString *key in attrs.allKeys) { + FLEXPropertyAttribute c = (FLEXPropertyAttribute)[key characterAtIndex:0]; + switch (c) { + case FLEXPropertyAttributeTypeEncoding: { + objc_property_attribute_t pa = { + kFLEXPropertyAttributeKeyTypeEncoding.UTF8String, + self.typeEncoding.UTF8String + }; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeBackingIvarName: { + objc_property_attribute_t pa = { + kFLEXPropertyAttributeKeyBackingIvarName.UTF8String, + self.backingIvar.UTF8String + }; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeCopy: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyCopy.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeCustomGetter: { + objc_property_attribute_t pa = { + kFLEXPropertyAttributeKeyCustomGetter.UTF8String, + NSStringFromSelector(self.customGetter).UTF8String ?: "" + }; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeCustomSetter: { + objc_property_attribute_t pa = { + kFLEXPropertyAttributeKeyCustomSetter.UTF8String, + NSStringFromSelector(self.customSetter).UTF8String ?: "" + }; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeDynamic: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyDynamic.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeGarbageCollectible: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyGarbageCollectable.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeNonAtomic: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyNonAtomic.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeOldTypeEncoding: { + objc_property_attribute_t pa = { + kFLEXPropertyAttributeKeyOldStyleTypeEncoding.UTF8String, + self.oldTypeEncoding.UTF8String ?: "" + }; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeReadOnly: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyReadOnly.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeRetain: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyRetain.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + case FLEXPropertyAttributeWeak: { + objc_property_attribute_t pa = {kFLEXPropertyAttributeKeyWeak.UTF8String, ""}; + propertyAttributes[i] = pa; + break; + } + } + i++; + } + + return propertyAttributes; +} + +- (objc_property_attribute_t *)list { + if (!_list) { + _list = [self copyAttributesList:nil]; + } + + return _list; +} + +- (NSString *)buildFullDeclaration { + NSMutableString *decl = [NSMutableString new]; + + [decl appendFormat:@"%@, ", _isNonatomic ? @"nonatomic" : @"atomic"]; + [decl appendFormat:@"%@, ", _isReadOnly ? @"readonly" : @"readwrite"]; + + BOOL noExplicitMemorySemantics = YES; + if (_isCopy) { noExplicitMemorySemantics = NO; + [decl appendString:@"copy, "]; + } + if (_isRetained) { noExplicitMemorySemantics = NO; + [decl appendString:@"strong, "]; + } + if (_isWeak) { noExplicitMemorySemantics = NO; + [decl appendString:@"weak, "]; + } + + if ([_typeEncoding hasPrefix:@"@"] && noExplicitMemorySemantics) { + // *probably* strong if this is an object; strong is the default. + [decl appendString:@"strong, "]; + } else if (noExplicitMemorySemantics) { + // *probably* assign if this is not an object + [decl appendString:@"assign, "]; + } + + if (_customGetter) { + [decl appendFormat:@"getter=%@, ", NSStringFromSelector(_customGetter)]; + } + if (_customSetter) { + [decl appendFormat:@"setter=%@, ", NSStringFromSelector(_customSetter)]; + } + + [decl deleteCharactersInRange:NSMakeRange(decl.length-2, 2)]; + return decl.copy; +} + +- (void)dealloc { + if (_list) { + free(_list); + _list = nil; + } +} + +#pragma mark Copying + +- (id)copyWithZone:(NSZone *)zone { + return [[FLEXPropertyAttributes class] attributesFromDictionary:self.dictionary]; +} + +- (id)mutableCopyWithZone:(NSZone *)zone { + return [[FLEXMutablePropertyAttributes class] attributesFromDictionary:self.dictionary]; +} + +@end + + + +#pragma mark FLEXMutablePropertyAttributes + +@interface FLEXMutablePropertyAttributes () +@property (nonatomic) BOOL countDelta; +@property (nonatomic) BOOL stringDelta; +@property (nonatomic) BOOL dictDelta; +@property (nonatomic) BOOL listDelta; +@property (nonatomic) BOOL declDelta; +@end + +#define PropertyWithDeltaFlag(type, name, Name) @dynamic name; \ +- (void)set ## Name:(type)name { \ + if (name != _ ## name) { \ + _countDelta = _stringDelta = _dictDelta = _listDelta = _declDelta = YES; \ + _ ## name = name; \ + } \ +} + +@implementation FLEXMutablePropertyAttributes + +PropertyWithDeltaFlag(NSString *, backingIvar, BackingIvar); +PropertyWithDeltaFlag(NSString *, typeEncoding, TypeEncoding); +PropertyWithDeltaFlag(NSString *, oldTypeEncoding, OldTypeEncoding); +PropertyWithDeltaFlag(SEL, customGetter, CustomGetter); +PropertyWithDeltaFlag(SEL, customSetter, CustomSetter); +PropertyWithDeltaFlag(BOOL, isReadOnly, IsReadOnly); +PropertyWithDeltaFlag(BOOL, isCopy, IsCopy); +PropertyWithDeltaFlag(BOOL, isRetained, IsRetained); +PropertyWithDeltaFlag(BOOL, isNonatomic, IsNonatomic); +PropertyWithDeltaFlag(BOOL, isDynamic, IsDynamic); +PropertyWithDeltaFlag(BOOL, isWeak, IsWeak); +PropertyWithDeltaFlag(BOOL, isGarbageCollectable, IsGarbageCollectable); + ++ (instancetype)attributes { + return [self new]; +} + +- (void)setTypeEncodingChar:(char)type { + self.typeEncoding = [NSString stringWithFormat:@"%c", type]; +} + +- (NSUInteger)count { + // Recalculate attribute count after mutations + if (self.countDelta) { + self.countDelta = NO; + _count = self.dictionary.count; + } + + return _count; +} + +- (objc_property_attribute_t *)list { + // Regenerate list after mutations + if (self.listDelta) { + self.listDelta = NO; + if (_list) { + free(_list); + _list = nil; + } + } + + // Super will generate the list if it isn't set + return super.list; +} + +- (NSString *)string { + // Regenerate string after mutations + if (self.stringDelta || !_string) { + self.stringDelta = NO; + _string = self.dictionary.propertyAttributesString; + } + + return _string; +} + +- (NSDictionary *)dictionary { + // Regenerate dictionary after mutations + if (self.dictDelta || !_dictionary) { + // _stringa nd _dictionary depend on each other, + // so we must generate ONE by hand using our properties. + // We arbitrarily choose to generate the dictionary. + NSMutableDictionary *attrs = [NSMutableDictionary new]; + if (self.typeEncoding) + attrs[kFLEXPropertyAttributeKeyTypeEncoding] = self.typeEncoding; + if (self.backingIvar) + attrs[kFLEXPropertyAttributeKeyBackingIvarName] = self.backingIvar; + if (self.oldTypeEncoding) + attrs[kFLEXPropertyAttributeKeyOldStyleTypeEncoding] = self.oldTypeEncoding; + if (self.customGetter) + attrs[kFLEXPropertyAttributeKeyCustomGetter] = NSStringFromSelector(self.customGetter); + if (self.customSetter) + attrs[kFLEXPropertyAttributeKeyCustomSetter] = NSStringFromSelector(self.customSetter); + + if (self.isReadOnly) attrs[kFLEXPropertyAttributeKeyReadOnly] = @YES; + if (self.isCopy) attrs[kFLEXPropertyAttributeKeyCopy] = @YES; + if (self.isRetained) attrs[kFLEXPropertyAttributeKeyRetain] = @YES; + if (self.isNonatomic) attrs[kFLEXPropertyAttributeKeyNonAtomic] = @YES; + if (self.isDynamic) attrs[kFLEXPropertyAttributeKeyDynamic] = @YES; + if (self.isWeak) attrs[kFLEXPropertyAttributeKeyWeak] = @YES; + if (self.isGarbageCollectable) attrs[kFLEXPropertyAttributeKeyGarbageCollectable] = @YES; + + _dictionary = attrs.copy; + } + + return _dictionary; +} + +- (NSString *)fullDeclaration { + if (self.declDelta || !_fullDeclaration) { + _declDelta = NO; + _fullDeclaration = [self buildFullDeclaration]; + } + + return _fullDeclaration; +} + +- (NSString *)customGetterString { + return _customGetter ? NSStringFromSelector(_customGetter) : nil; +} + +- (NSString *)customSetterString { + return _customSetter ? NSStringFromSelector(_customSetter) : nil; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.h new file mode 100644 index 00000000..5d6e471c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.h @@ -0,0 +1,69 @@ +// +// FLEXProtocol.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXRuntimeConstants.h" +@class FLEXProperty, FLEXMethodDescription; + +#pragma mark FLEXProtocol +@interface FLEXProtocol : NSObject + +/// Every protocol registered with the runtime. ++ (NSArray *)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 *requiredMethods; +/// The optional methods of the protocol, if any. This includes property getters and setters. +@property (nonatomic, readonly) NSArray *optionalMethods; +/// All protocols that this protocol conforms to, if any. +@property (nonatomic, readonly) NSArray *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 *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 *requiredProperties API_AVAILABLE(ios(10.0)); +/// The optional properties in the protocol, if any. +@property (nonatomic, readonly) NSArray *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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.m new file mode 100644 index 00000000..c16779dd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.m @@ -0,0 +1,217 @@ +// +// FLEXProtocol.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 6/30/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXProtocol.h" +#import "FLEXProperty.h" +#import "FLEXRuntimeUtility.h" +#import "NSArray+FLEX.h" +#include + +@implementation FLEXProtocol + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + +#pragma mark Initializers + ++ (NSArray *)allProtocols { + unsigned int prcount; + Protocol *__unsafe_unretained*protocols = objc_copyProtocolList(&prcount); + + NSMutableArray *all = [NSMutableArray new]; + for(NSUInteger i = 0; i < prcount; i++) + [all addObject:[self protocol:protocols[i]]]; + + free(protocols); + return all; +} + ++ (instancetype)protocol:(Protocol *)protocol { + return [[self alloc] initWithProtocol:protocol]; +} + +- (id)initWithProtocol:(Protocol *)protocol { + NSParameterAssert(protocol); + + self = [super init]; + if (self) { + _objc_protocol = protocol; + [self examine]; + } + + return self; +} + +#pragma mark Other + +- (NSString *)description { + return self.name; +} + +- (NSString *)debugDescription { + return [NSString stringWithFormat:@"<%@ name=%@, %lu properties, %lu required methods, %lu optional methods, %lu protocols>", + NSStringFromClass(self.class), self.name, (unsigned long)self.properties.count, + (unsigned long)self.requiredMethods.count, (unsigned long)self.optionalMethods.count, (unsigned long)self.protocols.count]; +} + +- (void)examine { + _name = @(protocol_getName(self.objc_protocol)); + + // imagePath + Dl_info exeInfo; + if (dladdr((__bridge const void *)(_objc_protocol), &exeInfo)) { + _imagePath = exeInfo.dli_fname ? @(exeInfo.dli_fname) : nil; + } + + // Conformances and methods // + + unsigned int pccount, mdrcount, mdocount; + struct objc_method_description *objcrMethods, *objcoMethods; + Protocol *protocol = _objc_protocol; + Protocol * __unsafe_unretained *protocols = protocol_copyProtocolList(protocol, &pccount); + + // Protocols + _protocols = [NSArray flex_forEachUpTo:pccount map:^id(NSUInteger i) { + return [FLEXProtocol protocol:protocols[i]]; + }]; + free(protocols); + + // Required instance methods + objcrMethods = protocol_copyMethodDescriptionList(protocol, YES, YES, &mdrcount); + NSArray *rMethods = [NSArray flex_forEachUpTo:mdrcount map:^id(NSUInteger i) { + return [FLEXMethodDescription description:objcrMethods[i] instance:YES]; + }]; + free(objcrMethods); + + // Required class methods + objcrMethods = protocol_copyMethodDescriptionList(protocol, YES, NO, &mdrcount); + _requiredMethods = [[NSArray flex_forEachUpTo:mdrcount map:^id(NSUInteger i) { + return [FLEXMethodDescription description:objcrMethods[i] instance:NO]; + }] arrayByAddingObjectsFromArray:rMethods]; + free(objcrMethods); + + // Optional instance methods + objcoMethods = protocol_copyMethodDescriptionList(protocol, NO, YES, &mdocount); + NSArray *oMethods = [NSArray flex_forEachUpTo:mdocount map:^id(NSUInteger i) { + return [FLEXMethodDescription description:objcoMethods[i] instance:YES]; + }]; + free(objcoMethods); + + // Optional class methods + objcoMethods = protocol_copyMethodDescriptionList(protocol, NO, NO, &mdocount); + _optionalMethods = [[NSArray flex_forEachUpTo:mdocount map:^id(NSUInteger i) { + return [FLEXMethodDescription description:objcoMethods[i] instance:NO]; + }] arrayByAddingObjectsFromArray:oMethods]; + free(objcoMethods); + + // Properties is a hassle because they didn't fix the API until iOS 10 // + + if (@available(iOS 10.0, *)) { + unsigned int prrcount, procount; + Class instance = [NSObject class], meta = objc_getMetaClass("NSObject"); + + // Required class and instance properties // + + // Instance first + objc_property_t *rProps = protocol_copyPropertyList2(protocol, &prrcount, YES, YES); + NSArray *rProperties = [NSArray flex_forEachUpTo:prrcount map:^id(NSUInteger i) { + return [FLEXProperty property:rProps[i] onClass:instance]; + }]; + free(rProps); + + // Then class + rProps = protocol_copyPropertyList2(protocol, &prrcount, NO, YES); + _requiredProperties = [[NSArray flex_forEachUpTo:prrcount map:^id(NSUInteger i) { + return [FLEXProperty property:rProps[i] onClass:instance]; + }] arrayByAddingObjectsFromArray:rProperties]; + free(rProps); + + // Optional class and instance properties // + + // Instance first + objc_property_t *oProps = protocol_copyPropertyList2(protocol, &procount, YES, YES); + NSArray *oProperties = [NSArray flex_forEachUpTo:prrcount map:^id(NSUInteger i) { + return [FLEXProperty property:oProps[i] onClass:meta]; + }]; + free(oProps); + + // Then class + oProps = protocol_copyPropertyList2(protocol, &procount, NO, YES); + _optionalProperties = [[NSArray flex_forEachUpTo:procount map:^id(NSUInteger i) { + return [FLEXProperty property:oProps[i] onClass:meta]; + }] arrayByAddingObjectsFromArray:oProperties]; + free(oProps); + + } else { + unsigned int prcount; + objc_property_t *objcproperties = protocol_copyPropertyList(protocol, &prcount); + _properties = [NSArray flex_forEachUpTo:prcount map:^id(NSUInteger i) { + return [FLEXProperty property:objcproperties[i]]; + }]; + + free(objcproperties); + } +} + +- (BOOL)conformsTo:(Protocol *)protocol { + return protocol_conformsToProtocol(self.objc_protocol, protocol); +} + +@end + +#pragma mark FLEXMethodDescription + +@implementation FLEXMethodDescription + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + ++ (instancetype)description:(struct objc_method_description)description { + return [[self alloc] initWithDescription:description instance:nil]; +} + ++ (instancetype)description:(struct objc_method_description)description instance:(BOOL)isInstance { + return [[self alloc] initWithDescription:description instance:@(isInstance)]; +} + +- (id)initWithDescription:(struct objc_method_description)md instance:(NSNumber *)instance { + NSParameterAssert(md.name != NULL); + + self = [super init]; + if (self) { + _objc_description = md; + _selector = md.name; + _typeEncoding = @(md.types); + _returnType = (FLEXTypeEncoding)[self.typeEncoding characterAtIndex:0]; + _instance = instance; + } + + return self; +} + +- (NSString *)description { + return NSStringFromSelector(self.selector); +} + +- (NSString *)debugDescription { + return [NSString stringWithFormat:@"<%@ name=%@, type=%@>", + NSStringFromClass(self.class), NSStringFromSelector(self.selector), self.typeEncoding]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h new file mode 100644 index 00000000..8acf8066 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h @@ -0,0 +1,41 @@ +// +// FLEXProtocolBuilder.h +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/4/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import +@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 diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m new file mode 100644 index 00000000..5e5f6ed0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m @@ -0,0 +1,93 @@ +// +// FLEXProtocolBuilder.m +// FLEX +// +// Derived from MirrorKit. +// Created by Tanner on 7/4/15. +// Copyright (c) 2015 Tanner Bennett. All rights reserved. +// + +#import "FLEXProtocolBuilder.h" +#import "FLEXProtocol.h" +#import "FLEXProperty.h" +#import + +#define MutationAssertion(msg) if (self.isRegistered) { \ + [NSException \ + raise:NSInternalInconsistencyException \ + format:msg \ + ]; \ +} + +@interface FLEXProtocolBuilder () +@property (nonatomic) Protocol *workingProtocol; +@property (nonatomic) NSString *name; +@end + +@implementation FLEXProtocolBuilder + +- (id)init { + [NSException + raise:NSInternalInconsistencyException + format:@"Class instance should not be created with -init" + ]; + return nil; +} + +#pragma mark Initializers ++ (instancetype)allocateProtocol:(NSString *)name { + NSParameterAssert(name); + return [[self alloc] initWithProtocol:objc_allocateProtocol(name.UTF8String)]; + +} + +- (id)initWithProtocol:(Protocol *)protocol { + NSParameterAssert(protocol); + + self = [super init]; + if (self) { + _workingProtocol = protocol; + _name = NSStringFromProtocol(self.workingProtocol); + } + + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@ name=%@, registered=%d>", + NSStringFromClass(self.class), self.name, self.isRegistered]; +} + +#pragma mark Building + +- (void)addProperty:(FLEXProperty *)property isRequired:(BOOL)isRequired { + MutationAssertion(@"Properties cannot be added once a protocol has been registered"); + + unsigned int count; + objc_property_attribute_t *attributes = [property copyAttributesList:&count]; + protocol_addProperty(self.workingProtocol, property.name.UTF8String, attributes, count, isRequired, YES); + free(attributes); +} + +- (void)addMethod:(SEL)selector + typeEncoding:(NSString *)typeEncoding + isRequired:(BOOL)isRequired + isInstanceMethod:(BOOL)isInstanceMethod { + MutationAssertion(@"Methods cannot be added once a protocol has been registered"); + protocol_addMethodDescription(self.workingProtocol, selector, typeEncoding.UTF8String, isRequired, isInstanceMethod); +} + +- (void)addProtocol:(Protocol *)protocol { + MutationAssertion(@"Protocols cannot be added once a protocol has been registered"); + protocol_addProtocol(self.workingProtocol, protocol); +} + +- (FLEXProtocol *)registerProtocol { + MutationAssertion(@"Protocol is already registered"); + + _isRegistered = YES; + objc_registerProtocol(self.workingProtocol); + return [FLEXProtocol protocol:self.workingProtocol]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.c b/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.c new file mode 100644 index 00000000..f673f4ff --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.c @@ -0,0 +1,290 @@ +// Copyright (c) 2013, Facebook, Inc. +// All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name Facebook nor the names of its contributors may be used to +// endorse or promote products derived from this software without specific +// prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "flex_fishhook.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __LP64__ +typedef struct mach_header_64 mach_header_t; +typedef struct segment_command_64 segment_command_t; +typedef struct section_64 section_t; +typedef struct nlist_64 nlist_t; +#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT_64 +#else +typedef struct mach_header mach_header_t; +typedef struct segment_command segment_command_t; +typedef struct section section_t; +typedef struct nlist nlist_t; +#define LC_SEGMENT_ARCH_DEPENDENT LC_SEGMENT +#endif + +#ifndef SEG_DATA_CONST +#define SEG_DATA_CONST "__DATA_CONST" +#endif + +struct rebindings_entry { + struct rebinding *rebindings; + size_t rebindings_nel; + struct rebindings_entry *next; +}; + +static struct rebindings_entry *_flex_rebindings_head; + +/// @return 0 on success +static int flex_prepend_rebindings(struct rebindings_entry **rebindings_head, + struct rebinding rebindings[], + size_t nel) { + struct rebindings_entry *new_entry = (struct rebindings_entry *) malloc(sizeof(struct rebindings_entry)); + if (!new_entry) { + return -1; + } + + new_entry->rebindings = (struct rebinding *) malloc(sizeof(struct rebinding) * nel); + if (!new_entry->rebindings) { + free(new_entry); + return -1; + } + + memcpy(new_entry->rebindings, rebindings, sizeof(struct rebinding) * nel); + new_entry->rebindings_nel = nel; + new_entry->next = *rebindings_head; + *rebindings_head = new_entry; + + return 0; +} + +static vm_prot_t flex_get_protection(void *sectionStart) { + mach_port_t task = mach_task_self(); + vm_size_t size = 0; + vm_address_t address = (vm_address_t)sectionStart; + memory_object_name_t object; +#if __LP64__ + mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT_64; + vm_region_basic_info_data_64_t info; + kern_return_t info_ret = vm_region_64( + task, &address, &size, VM_REGION_BASIC_INFO_64, + (vm_region_info_64_t)&info, &count, &object + ); +#else + mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT; + vm_region_basic_info_data_t info; + kern_return_t info_ret = vm_region( + task, &address, &size, VM_REGION_BASIC_INFO, (vm_region_info_t)&info, &count, &object + ); +#endif + if (info_ret == KERN_SUCCESS) { + return info.protection; + } else { + return VM_PROT_READ; + } +} +static void flex_perform_rebinding_with_section(struct rebindings_entry *rebindings, + section_t *section, + intptr_t slide, + nlist_t *symtab, + char *strtab, + uint32_t *indirect_symtab) { + const bool isDataConst = strcmp(section->segname, "__DATA_CONST") == 0; + uint32_t *indirect_symbol_indices = indirect_symtab + section->reserved1; + void **indirect_symbol_bindings = (void **)((uintptr_t)slide + section->addr); + vm_prot_t oldProtection = VM_PROT_READ; + + if (isDataConst) { + oldProtection = flex_get_protection(rebindings); + mprotect(indirect_symbol_bindings, section->size, PROT_READ | PROT_WRITE); + } + + for (uint i = 0; i < section->size / sizeof(void *); i++) { + uint32_t symtab_index = indirect_symbol_indices[i]; + + if (symtab_index == INDIRECT_SYMBOL_ABS || symtab_index == INDIRECT_SYMBOL_LOCAL || + symtab_index == (INDIRECT_SYMBOL_LOCAL | INDIRECT_SYMBOL_ABS)) { + continue; + } + + uint32_t strtab_offset = symtab[symtab_index].n_un.n_strx; + char *symbol_name = strtab + strtab_offset; + bool symbol_name_longer_than_1 = symbol_name[0] && symbol_name[1]; + struct rebindings_entry *cur = rebindings; + + while (cur) { + for (uint j = 0; j < cur->rebindings_nel; j++) { + if (symbol_name_longer_than_1 && + strcmp(&symbol_name[1], cur->rebindings[j].name) == 0) { + + if (cur->rebindings[j].replaced != NULL && + indirect_symbol_bindings[i] != cur->rebindings[j].replacement) { + + *(cur->rebindings[j].replaced) = indirect_symbol_bindings[i]; + } + + indirect_symbol_bindings[i] = cur->rebindings[j].replacement; + goto symbol_loop; + } + } + + cur = cur->next; + } + + symbol_loop:; + } + + if (isDataConst) { + int protection = 0; + if (oldProtection & VM_PROT_READ) { + protection |= PROT_READ; + } + if (oldProtection & VM_PROT_WRITE) { + protection |= PROT_WRITE; + } + if (oldProtection & VM_PROT_EXECUTE) { + protection |= PROT_EXEC; + } + + mprotect(indirect_symbol_bindings, section->size, protection); + } +} + +static void flex_rebind_symbols_for_image(struct rebindings_entry *rebindings, + const struct mach_header *header, + intptr_t slide) { + Dl_info info; + if (dladdr(header, &info) == 0) { + return; + } + + segment_command_t *cur_seg_cmd; + segment_command_t *linkedit_segment = NULL; + struct symtab_command* symtab_cmd = NULL; + struct dysymtab_command* dysymtab_cmd = NULL; + + uintptr_t cur = (uintptr_t)header + sizeof(mach_header_t); + for (uint i = 0; i < header->ncmds; i++, cur += cur_seg_cmd->cmdsize) { + cur_seg_cmd = (segment_command_t *)cur; + + if (cur_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) { + if (strcmp(cur_seg_cmd->segname, SEG_LINKEDIT) == 0) { + linkedit_segment = cur_seg_cmd; + } + } else if (cur_seg_cmd->cmd == LC_SYMTAB) { + symtab_cmd = (struct symtab_command*)cur_seg_cmd; + } else if (cur_seg_cmd->cmd == LC_DYSYMTAB) { + dysymtab_cmd = (struct dysymtab_command*)cur_seg_cmd; + } + } + + if (!symtab_cmd || !dysymtab_cmd || !linkedit_segment || + !dysymtab_cmd->nindirectsyms) { + return; + } + + // Find base symbol/string table addresses + uintptr_t linkedit_base = (uintptr_t)slide + linkedit_segment->vmaddr - linkedit_segment->fileoff; + nlist_t *symtab = (nlist_t *)(linkedit_base + symtab_cmd->symoff); + char *strtab = (char *)(linkedit_base + symtab_cmd->stroff); + + // Get indirect symbol table (array of uint32_t indices into symbol table) + uint32_t *indirect_symtab = (uint32_t *)(linkedit_base + dysymtab_cmd->indirectsymoff); + + cur = (uintptr_t)header + sizeof(mach_header_t); + for (uint i = 0; i < header->ncmds; i++, cur += cur_seg_cmd->cmdsize) { + cur_seg_cmd = (segment_command_t *)cur; + + if (cur_seg_cmd->cmd == LC_SEGMENT_ARCH_DEPENDENT) { + if (strcmp(cur_seg_cmd->segname, SEG_DATA) != 0 && + strcmp(cur_seg_cmd->segname, SEG_DATA_CONST) != 0) { + continue; + } + + for (uint j = 0; j < cur_seg_cmd->nsects; j++) { + section_t *sect = (section_t *)(cur + sizeof(segment_command_t)) + j; + + if ((sect->flags & SECTION_TYPE) == S_LAZY_SYMBOL_POINTERS) { + flex_perform_rebinding_with_section( + rebindings, sect, slide, symtab, strtab, indirect_symtab + ); + } + if ((sect->flags & SECTION_TYPE) == S_NON_LAZY_SYMBOL_POINTERS) { + flex_perform_rebinding_with_section( + rebindings, sect, slide, symtab, strtab, indirect_symtab + ); + } + } + } + } +} + +static void _flex_rebind_symbols_for_image(const struct mach_header *header, + intptr_t slide) { + flex_rebind_symbols_for_image(_flex_rebindings_head, header, slide); +} + +int flex_rebind_symbols_image(void *header, + intptr_t slide, + struct rebinding rebindings[], + size_t rebindings_nel) { + struct rebindings_entry *rebindings_head = NULL; + + int retval = flex_prepend_rebindings(&rebindings_head, rebindings, rebindings_nel); + flex_rebind_symbols_for_image(rebindings_head, (const struct mach_header *) header, slide); + + if (rebindings_head) { + free(rebindings_head->rebindings); + } + + free(rebindings_head); + return retval; +} + +/// @return 0 on success +int flex_rebind_symbols(struct rebinding rebindings[], size_t rebindings_nel) { + int retval = flex_prepend_rebindings(&_flex_rebindings_head, rebindings, rebindings_nel); + if (retval < 0) { + return retval; + } + + // If this was the first call, register callback for image additions (which is also invoked for + // existing images, otherwise, just run on existing images + if (!_flex_rebindings_head->next) { + _dyld_register_func_for_add_image(_flex_rebind_symbols_for_image); + } else { + uint32_t c = _dyld_image_count(); + for (uint32_t i = 0; i < c; i++) { + _flex_rebind_symbols_for_image(_dyld_get_image_header(i), _dyld_get_image_vmaddr_slide(i)); + } + } + + return retval; +} diff --git a/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.h b/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.h new file mode 100644 index 00000000..1f02191d --- /dev/null +++ b/xcode/Pods/FLEX/Classes/Utility/Runtime/flex_fishhook.h @@ -0,0 +1,77 @@ +// Copyright (c) 2013, Facebook, Inc. +// All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name Facebook nor the names of its contributors may be used to +// endorse or promote products derived from this software without specific +// prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef fishhook_h +#define fishhook_h + +#include +#include + +#if !defined(FISHHOOK_EXPORT) +#define FISHHOOK_VISIBILITY __attribute__((visibility("hidden"))) +#else +#define FISHHOOK_VISIBILITY __attribute__((visibility("default"))) +#endif + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +/** + * A structure representing a particular intended rebinding from a symbol + * name to its replacement + */ +struct rebinding { + const char *name; + void *replacement; + void **replaced; +}; + +/** + * For each rebinding in rebindings, rebinds references to external, indirect + * symbols with the specified name to instead point at replacement for each + * image in the calling process as well as for all future images that are loaded + * by the process. If rebind_functions is called more than once, the symbols to + * rebind are added to the existing list of rebindings, and if a given symbol + * is rebound more than once, the later rebinding will take precedence. + * @return 0 on success + */ +FISHHOOK_VISIBILITY +int flex_rebind_symbols(struct rebinding rebindings[], size_t rebindings_nel); + +/** + * Rebinds as above, but only in the specified image. The header should point + * to the mach-o header, the slide should be the slide offset. Others as above. + * @return 0 on success + */ +FISHHOOK_VISIBILITY +int flex_rebind_symbols_image(void *header, + intptr_t slide, + struct rebinding rebindings[], + size_t rebindings_nel); + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //fishhook_h diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m deleted file mode 100644 index 2c332795..00000000 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m +++ /dev/null @@ -1,128 +0,0 @@ -// -// FLEXHierarchyTableViewCell.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-02. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXHierarchyTableViewCell.h" -#import "FLEXUtility.h" - -@interface FLEXHierarchyTableViewCell () - -@property (nonatomic) UIView *depthIndicatorView; -@property (nonatomic) UIImageView *colorCircleImageView; - -@end - -@implementation FLEXHierarchyTableViewCell - -- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier -{ - return [self initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; -} - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - self.depthIndicatorView = [UIView new]; - self.depthIndicatorView.backgroundColor = [FLEXUtility hierarchyIndentPatternColor]; - [self.contentView addSubview:self.depthIndicatorView]; - - UIImage *defaultCircleImage = [FLEXUtility circularImageWithColor:UIColor.blackColor radius:5.0]; - self.colorCircleImageView = [[UIImageView alloc] initWithImage:defaultCircleImage]; - [self.contentView addSubview:self.colorCircleImageView]; - - self.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:14.0]; - self.detailTextLabel.font = [FLEXUtility defaultTableViewCellLabelFont]; - self.accessoryType = UITableViewCellAccessoryDetailButton; - - self.viewBackgroundColorView = [UIView new]; - self.viewBackgroundColorView.clipsToBounds = YES; - self.viewBackgroundColorView.layer.borderColor = UIColor.blackColor.CGColor; - self.viewBackgroundColorView.layer.borderWidth = 1.0f; - [self.contentView addSubview:self.viewBackgroundColorView]; - } - return self; -} - -- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated -{ - UIColor *originalColour = self.viewBackgroundColorView.backgroundColor; - [super setHighlighted:highlighted animated:animated]; - - // UITableViewCell changes all subviews in the contentView to backgroundColor = clearColor. - // We want to preserve the hierarchy background color when highlighted. - self.depthIndicatorView.backgroundColor = [FLEXUtility hierarchyIndentPatternColor]; - - self.viewBackgroundColorView.backgroundColor = originalColour; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - UIColor *originalColour = self.viewBackgroundColorView.backgroundColor; - [super setSelected:selected animated:animated]; - - // See setHighlighted above. - self.depthIndicatorView.backgroundColor = [FLEXUtility hierarchyIndentPatternColor]; - - self.viewBackgroundColorView.backgroundColor = originalColour; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - const CGFloat kContentPadding = 10.0; - const CGFloat kDepthIndicatorWidthMultiplier = 4.0; - const CGFloat kViewBackgroundColourDimension = 20; - - CGRect depthIndicatorFrame = CGRectMake(kContentPadding, 0, self.viewDepth * kDepthIndicatorWidthMultiplier, self.contentView.bounds.size.height); - self.depthIndicatorView.frame = depthIndicatorFrame; - - CGRect circleFrame = self.colorCircleImageView.frame; - circleFrame.origin.x = CGRectGetMaxX(depthIndicatorFrame); - circleFrame.origin.y = self.textLabel.frame.origin.y + FLEXFloor((self.textLabel.frame.size.height - circleFrame.size.height) / 2.0); - self.colorCircleImageView.frame = circleFrame; - - CGRect textLabelFrame = self.textLabel.frame; - CGFloat textOriginX = CGRectGetMaxX(circleFrame) + 4.0; - textLabelFrame.origin.x = textOriginX; - textLabelFrame.size.width = CGRectGetMaxX(self.contentView.frame) - kContentPadding - textOriginX - kViewBackgroundColourDimension; - self.textLabel.frame = textLabelFrame; - - CGRect detailTextLabelFrame = self.detailTextLabel.frame; - CGFloat detailOriginX = CGRectGetMaxX(depthIndicatorFrame); - detailTextLabelFrame.origin.x = detailOriginX; - detailTextLabelFrame.size.width = CGRectGetMaxX(self.contentView.bounds) - kContentPadding - detailOriginX; - self.detailTextLabel.frame = detailTextLabelFrame; - - CGRect viewBackgroundColourViewFrame = self.textLabel.frame; - viewBackgroundColourViewFrame.size.width = kViewBackgroundColourDimension; - viewBackgroundColourViewFrame.size.height = kViewBackgroundColourDimension; - viewBackgroundColourViewFrame.origin.x = CGRectGetMaxX(self.textLabel.frame) + kContentPadding; - viewBackgroundColourViewFrame.origin.y = ABS(CGRectGetHeight(self.contentView.frame) - CGRectGetHeight(viewBackgroundColourViewFrame)) / 2; - - self.viewBackgroundColorView.frame = viewBackgroundColourViewFrame; - self.viewBackgroundColorView.layer.cornerRadius = kViewBackgroundColourDimension / 2; -} - -- (void)setViewColor:(UIColor *)viewColor -{ - if (![_viewColor isEqual:viewColor]) { - _viewColor = viewColor; - self.colorCircleImageView.image = [FLEXUtility circularImageWithColor:viewColor radius:6.0]; - } -} - -- (void)setViewDepth:(NSInteger)viewDepth -{ - if (_viewDepth != viewDepth) { - _viewDepth = viewDepth; - [self setNeedsLayout]; - } -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.h deleted file mode 100644 index 068e7ea3..00000000 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// FLEXHierarchyTableViewController.h -// Flipboard -// -// Created by Ryan Olson on 2014-05-01. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXTableViewController.h" - -@protocol FLEXHierarchyTableViewControllerDelegate; - -@interface FLEXHierarchyTableViewController : FLEXTableViewController - -- (instancetype)initWithViews:(NSArray *)allViews viewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)selectedView depths:(NSDictionary *)depthsForViews; - -@property (nonatomic, weak) id delegate; - -@end - -@protocol FLEXHierarchyTableViewControllerDelegate - -- (void)hierarchyViewController:(FLEXHierarchyTableViewController *)hierarchyViewController didFinishWithSelectedView:(UIView *)selectedView; - -@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.m deleted file mode 100644 index 481e5161..00000000 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewController.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// FLEXHierarchyTableViewController.m -// Flipboard -// -// Created by Ryan Olson on 2014-05-01. -// Copyright (c) 2014 Flipboard. All rights reserved. -// - -#import "FLEXColor.h" -#import "FLEXHierarchyTableViewController.h" -#import "FLEXUtility.h" -#import "FLEXHierarchyTableViewCell.h" -#import "FLEXObjectExplorerViewController.h" -#import "FLEXObjectExplorerFactory.h" -#import "FLEXResources.h" - -static const NSInteger kFLEXHierarchyScopeViewsAtTapIndex = 0; -static const NSInteger kFLEXHierarchyScopeFullHierarchyIndex = 1; - -@interface FLEXHierarchyTableViewController () - -@property (nonatomic) NSArray *allViews; -@property (nonatomic) NSDictionary *depthsForViews; -@property (nonatomic) NSArray *viewsAtTap; -@property (nonatomic) UIView *selectedView; -@property (nonatomic) NSArray *displayedViews; - -@end - -@implementation FLEXHierarchyTableViewController - -- (instancetype)initWithViews:(NSArray *)allViews viewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)selectedView depths:(NSDictionary *)depthsForViews -{ - self = [super initWithStyle:UITableViewStylePlain]; - if (self) { - self.allViews = allViews; - self.depthsForViews = depthsForViews; - self.viewsAtTap = viewsAtTap; - self.selectedView = selectedView; - - self.title = @"View Hierarchy"; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Preserve selection between presentations. - self.clearsSelectionOnViewWillAppear = NO; - // Done button. - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed:)]; - - // A little more breathing room. - self.tableView.rowHeight = 50.0; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - // Separator inset clashes with persistent cell selection. - [self.tableView setSeparatorInset:UIEdgeInsetsZero]; - - self.showsSearchBar = YES; - self.pinSearchBar = YES; - self.searchBarDebounceInterval = kFLEXDebounceInstant; - self.automaticallyShowsSearchBarCancelButton = NO; - if ([self showScopeBar]) { - self.searchController.searchBar.showsScopeBar = YES; - self.searchController.searchBar.scopeButtonTitles = @[@"Views at Tap", @"Full Hierarchy"]; - } - - [self updateDisplayedViews]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - [self trySelectCellForSelectedViewWithScrollPosition:UITableViewScrollPositionMiddle]; -} - - -#pragma mark Selection and Filtering Helpers - -- (void)trySelectCellForSelectedViewWithScrollPosition:(UITableViewScrollPosition)scrollPosition -{ - NSUInteger selectedViewIndex = [self.displayedViews indexOfObject:self.selectedView]; - if (selectedViewIndex != NSNotFound) { - NSIndexPath *selectedViewIndexPath = [NSIndexPath indexPathForRow:selectedViewIndex inSection:0]; - [self.tableView selectRowAtIndexPath:selectedViewIndexPath animated:YES scrollPosition:scrollPosition]; - } -} - -- (void)updateDisplayedViews -{ - NSArray *candidateViews = nil; - if ([self showScopeBar]) { - if (self.selectedScope == kFLEXHierarchyScopeViewsAtTapIndex) { - candidateViews = self.viewsAtTap; - } else if (self.selectedScope == kFLEXHierarchyScopeFullHierarchyIndex) { - candidateViews = self.allViews; - } - } else { - candidateViews = self.allViews; - } - - if (self.searchText.length) { - self.displayedViews = [candidateViews filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UIView *candidateView, NSDictionary *bindings) { - NSString *title = [FLEXUtility descriptionForView:candidateView includingFrame:NO]; - NSString *candidateViewPointerAddress = [NSString stringWithFormat:@"%p", candidateView]; - BOOL matchedViewPointerAddress = [candidateViewPointerAddress rangeOfString:self.searchText options:NSCaseInsensitiveSearch].location != NSNotFound; - BOOL matchedViewTitle = [title rangeOfString:self.searchText options:NSCaseInsensitiveSearch].location != NSNotFound; - return matchedViewPointerAddress || matchedViewTitle; - }]]; - } else { - self.displayedViews = candidateViews; - } - - [self.tableView reloadData]; -} - -#pragma mark - Search Bar - -- (BOOL)showScopeBar -{ - return self.viewsAtTap.count > 0; -} - -- (void)updateSearchResults:(NSString *)newText -{ - [self updateDisplayedViews]; - - // If the search bar text field is active, don't scroll on selection because we may want to continue typing. - // Otherwise, scroll so that the selected cell is visible. - UITableViewScrollPosition scrollPosition = self.searchController.searchBar.isFirstResponder ? UITableViewScrollPositionNone : UITableViewScrollPositionMiddle; - [self trySelectCellForSelectedViewWithScrollPosition:scrollPosition]; -} - -#pragma mark - Table View Data Source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.displayedViews.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - FLEXHierarchyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (!cell) { - cell = [[FLEXHierarchyTableViewCell alloc] initWithReuseIdentifier:CellIdentifier]; - } - - UIView *view = self.displayedViews[indexPath.row]; - NSNumber *depth = [self.depthsForViews objectForKey:[NSValue valueWithNonretainedObject:view]]; - UIColor *viewColor = [FLEXUtility consistentRandomColorForObject:view]; - cell.textLabel.text = [FLEXUtility descriptionForView:view includingFrame:NO]; - cell.detailTextLabel.text = [FLEXUtility detailDescriptionForView:view]; - cell.viewColor = viewColor; - cell.viewDepth = [depth integerValue]; - if (view.isHidden || view.alpha < 0.01) { - cell.textLabel.textColor = [FLEXColor deemphasizedTextColor]; - cell.detailTextLabel.textColor = [FLEXColor deemphasizedTextColor]; - } else { - cell.textLabel.textColor = [FLEXColor primaryTextColor]; - cell.detailTextLabel.textColor = [FLEXColor primaryTextColor]; - } - - // Use a pattern-based colour to simplify application of the checker pattern. - static UIColor *checkerPatternColour = nil; - static dispatch_once_t once; - dispatch_once(&once, ^{ - checkerPatternColour = [UIColor colorWithPatternImage:[FLEXResources checkerPattern]]; - }); - - UIColor *viewColour = view.backgroundColor; - if (!viewColour || [viewColour isEqual:UIColor.clearColor]) { - cell.viewBackgroundColorView.backgroundColor = checkerPatternColour; - } else { - cell.viewBackgroundColorView.backgroundColor = viewColour; - } - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - self.selectedView = self.displayedViews[indexPath.row]; - [self.delegate hierarchyViewController:self didFinishWithSelectedView:self.selectedView]; -} - -- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath -{ - UIView *drillInView = self.displayedViews[indexPath.row]; - FLEXObjectExplorerViewController *viewExplorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:drillInView]; - [self.navigationController pushViewController:viewExplorer animated:YES]; -} - -#pragma mark - Button Actions - -- (void)donePressed:(id)sender -{ - [self.delegate hierarchyViewController:self didFinishWithSelectedView:self.selectedView]; -} - -@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.h new file mode 100644 index 00000000..93d0dc78 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.h @@ -0,0 +1,26 @@ +// +// FLEXHierarchyViewController.h +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXNavigationController.h" + +@protocol FLEXHierarchyDelegate +- (void)viewHierarchyDidDismiss:(UIView *)selectedView; +@end + +/// A navigation controller which manages two child view controllers: +/// a 3D Reveal-like hierarchy explorer, and a 2D tree-list hierarchy explorer. +@interface FLEXHierarchyViewController : FLEXNavigationController + ++ (instancetype)delegate:(id)delegate; ++ (instancetype)delegate:(id)delegate + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)selectedView; + +- (void)toggleHierarchyMode; + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.m new file mode 100644 index 00000000..b486c396 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyViewController.m @@ -0,0 +1,154 @@ +// +// FLEXHierarchyViewController.m +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FLEXHierarchyViewController.h" +#import "FLEXHierarchyTableViewController.h" +#import "FHSViewController.h" +#import "FLEXUtility.h" +#import "FLEXTabList.h" +#import "FLEXResources.h" +#import "UIBarButtonItem+FLEX.h" + +typedef NS_ENUM(NSUInteger, FLEXHierarchyViewMode) { + FLEXHierarchyViewModeTree = 1, + FLEXHierarchyViewMode3DSnapshot +}; + +@interface FLEXHierarchyViewController () +@property (nonatomic, readonly, weak) id hierarchyDelegate; +@property (nonatomic, readonly) FHSViewController *snapshotViewController; +@property (nonatomic, readonly) FLEXHierarchyTableViewController *treeViewController; + +@property (nonatomic) FLEXHierarchyViewMode mode; + +@property (nonatomic, readonly) UIView *selectedView; +@end + +@implementation FLEXHierarchyViewController + +#pragma mark - Initialization + ++ (instancetype)delegate:(id)delegate { + return [self delegate:delegate viewsAtTap:nil selectedView:nil]; +} + ++ (instancetype)delegate:(id)delegate + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)selectedView { + return [[self alloc] initWithDelegate:delegate viewsAtTap:viewsAtTap selectedView:selectedView]; +} + +- (id)initWithDelegate:(id)delegate viewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)view { + self = [super init]; + if (self) { + NSArray *allWindows = FLEXUtility.allWindows; + _hierarchyDelegate = delegate; + _treeViewController = [FLEXHierarchyTableViewController + windows:allWindows viewsAtTap:viewsAtTap selectedView:view + ]; + + if (viewsAtTap) { + _snapshotViewController = [FHSViewController snapshotViewsAtTap:viewsAtTap selectedView:view]; + } else { + _snapshotViewController = [FHSViewController snapshotWindows:allWindows]; + } + + self.modalPresentationStyle = UIModalPresentationFullScreen; + } + + return self; +} + + +#pragma mark - Lifecycle + +- (void)viewDidLoad { + [super viewDidLoad]; + + // 3D toggle button + self.treeViewController.navigationItem.leftBarButtonItem = [UIBarButtonItem + itemWithImage:FLEXResources.toggle3DIcon target:self action:@selector(toggleHierarchyMode) + ]; + + // Dismiss when tree view row is selected + __weak id delegate = self.hierarchyDelegate; + self.treeViewController.didSelectRowAction = ^(UIView *selectedView) { + [delegate viewHierarchyDidDismiss:selectedView]; + }; + + // Start of in tree view + _mode = FLEXHierarchyViewModeTree; + [self pushViewController:self.treeViewController animated:NO]; +} + +- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { + // Done button: manually added here because the hierarhcy screens need to actually pass + // data back to the explorer view controller so that it can highlight selected views + viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed) + ]; + + [super pushViewController:viewController animated:animated]; +} + + +#pragma mark - Private + +- (void)donePressed { + // We need to manually close ourselves here because + // FLEXNavigationController doesn't ever close tabs itself + [FLEXTabList.sharedList closeTab:self]; + [self.hierarchyDelegate viewHierarchyDidDismiss:self.selectedView]; +} + +- (void)toggleHierarchyMode { + switch (self.mode) { + case FLEXHierarchyViewModeTree: + self.mode = FLEXHierarchyViewMode3DSnapshot; + break; + case FLEXHierarchyViewMode3DSnapshot: + self.mode = FLEXHierarchyViewModeTree; + break; + } +} + +- (void)setMode:(FLEXHierarchyViewMode)mode { + if (mode != _mode) { + // The tree view controller is our top stack view controller, and + // changing the mode simply pushes the snapshot view. In the future, + // I would like to have the 3D toggle button transparently switch + // between two views instead of pushing a new view controller. + // This way the views should share the search controller somehow. + switch (mode) { + case FLEXHierarchyViewModeTree: + [self popViewControllerAnimated:NO]; + self.toolbarHidden = YES; + self.treeViewController.selectedView = self.selectedView; + break; + case FLEXHierarchyViewMode3DSnapshot: + [self pushViewController:self.snapshotViewController animated:NO]; + self.toolbarHidden = NO; + self.snapshotViewController.selectedView = self.selectedView; + break; + } + + // Change this last so that self.selectedView works right above + _mode = mode; + } +} + +- (UIView *)selectedView { + switch (self.mode) { + case FLEXHierarchyViewModeTree: + return self.treeViewController.selectedView; + case FLEXHierarchyViewMode3DSnapshot: + return self.snapshotViewController.selectedView; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.h index 60f021dd..b9e86073 100644 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.h +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.h @@ -3,13 +3,15 @@ // Flipboard // // Created by Ryan Olson on 6/12/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @interface FLEXImagePreviewViewController : UIViewController -- (id)initWithImage:(UIImage *)image; ++ (instancetype)previewForView:(UIView *)view; ++ (instancetype)previewForLayer:(CALayer *)layer; ++ (instancetype)forImage:(UIImage *)image; @end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.m index c98eeacb..d35d79d9 100644 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.m +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXImagePreviewViewController.m @@ -3,27 +3,43 @@ // Flipboard // // Created by Ryan Olson on 6/12/14. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // -#import "FLEXColor.h" #import "FLEXImagePreviewViewController.h" #import "FLEXUtility.h" +#import "FLEXColor.h" +#import "FLEXResources.h" @interface FLEXImagePreviewViewController () - @property (nonatomic) UIImage *image; - @property (nonatomic) UIScrollView *scrollView; @property (nonatomic) UIImageView *imageView; - @end +#pragma mark - @implementation FLEXImagePreviewViewController -- (id)initWithImage:(UIImage *)image -{ - self = [super initWithNibName:nil bundle:nil]; +#pragma mark Initialization + ++ (instancetype)previewForView:(UIView *)view { + return [self forImage:[FLEXUtility previewImageForView:view]]; +} + ++ (instancetype)previewForLayer:(CALayer *)layer { + return [self forImage:[FLEXUtility previewImageForLayer:layer]]; +} + ++ (instancetype)forImage:(UIImage *)image { + if (!image) { + return nil; + } + + return [[self alloc] initWithImage:image]; +} + +- (id)initWithImage:(UIImage *)image { + self = [super init]; if (self) { self.title = @"Preview"; self.image = image; @@ -31,11 +47,13 @@ - (id)initWithImage:(UIImage *)image return self; } -- (void)viewDidLoad -{ + +#pragma mark Lifecycle + +- (void)viewDidLoad { [super viewDidLoad]; - self.view.backgroundColor = [FLEXColor scrollViewBackgroundColor]; + self.view.backgroundColor = [UIColor colorWithPatternImage:FLEXResources.checkerPattern]; self.imageView = [[UIImageView alloc] initWithImage:self.image]; self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; @@ -51,23 +69,25 @@ - (void)viewDidLoad self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionButtonPressed:)]; } -- (void)viewDidLayoutSubviews -{ +- (void)viewDidLayoutSubviews { [self centerContentInScrollViewIfNeeded]; } -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView -{ + +#pragma mark UIScrollViewDelegate + +- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return self.imageView; } -- (void)scrollViewDidZoom:(UIScrollView *)scrollView -{ +- (void)scrollViewDidZoom:(UIScrollView *)scrollView { [self centerContentInScrollViewIfNeeded]; } -- (void)centerContentInScrollViewIfNeeded -{ + +#pragma mark Private + +- (void)centerContentInScrollViewIfNeeded { CGFloat horizontalInset = 0.0; CGFloat verticalInset = 0.0; if (self.scrollView.contentSize.width < self.scrollView.bounds.size.width) { @@ -79,12 +99,11 @@ - (void)centerContentInScrollViewIfNeeded self.scrollView.contentInset = UIEdgeInsetsMake(verticalInset, horizontalInset, verticalInset, horizontalInset); } -- (void)actionButtonPressed:(id)sender -{ +- (void)actionButtonPressed:(id)sender { static BOOL canSaveToCameraRoll = NO, didShowWarning = NO; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - if ([UIDevice currentDevice].systemVersion.floatValue < 10) { + if (UIDevice.currentDevice.systemVersion.floatValue < 10) { canSaveToCameraRoll = YES; return; } @@ -98,8 +117,6 @@ - (void)actionButtonPressed:(id)sender UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[self.image] applicationActivities:@[]]; if (!canSaveToCameraRoll && !didShowWarning) { - activityVC.excludedActivityTypes = @[UIActivityTypeSaveToCameraRoll]; - didShowWarning = YES; NSString *msg = @"Add 'NSPhotoLibraryUsageDescription' to this app's Info.plist to save images."; [FLEXAlert makeAlert:^(FLEXAlert *make) { diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.h new file mode 100644 index 00000000..655922b5 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.h @@ -0,0 +1,22 @@ +// +// FHSRangeSlider.h +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface FHSRangeSlider : UIControl + +@property (nonatomic) CGFloat allowedMinValue; +@property (nonatomic) CGFloat allowedMaxValue; +@property (nonatomic) CGFloat minValue; +@property (nonatomic) CGFloat maxValue; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.m new file mode 100644 index 00000000..3cea3eb0 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.m @@ -0,0 +1,201 @@ +// +// FHSRangeSlider.m +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSRangeSlider.h" +#import "FLEXResources.h" +#import "FLEXUtility.h" + +@interface FHSRangeSlider () +@property (nonatomic, readonly) UIImageView *track; +@property (nonatomic, readonly) UIImageView *fill; +@property (nonatomic, readonly) UIImageView *leftHandle; +@property (nonatomic, readonly) UIImageView *rightHandle; + +@property (nonatomic, getter=isTrackingLeftHandle) BOOL trackingLeftHandle; +@property (nonatomic, getter=isTrackingRightHandle) BOOL trackingRightHandle; +@end + +@implementation FHSRangeSlider + +#pragma mark - Initialization + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + _allowedMaxValue = 1.f; + _maxValue = 1.f; + [self initSubviews]; + } + + return self; +} + +- (void)initSubviews { + self.userInteractionEnabled = YES; + UIImageView * (^newSubviewImageView)() = ^UIImageView *(UIImage *image) { + UIImageView *iv = [UIImageView new]; + iv.image = image; +// iv.userInteractionEnabled = YES; + [self addSubview:iv]; + return iv; + }; + + _track = newSubviewImageView(FLEXResources.rangeSliderTrack); + _fill = newSubviewImageView(FLEXResources.rangeSliderFill); + _leftHandle = newSubviewImageView(FLEXResources.rangeSliderLeftHandle); + _rightHandle = newSubviewImageView(FLEXResources.rangeSliderRightHandle); +} + +#pragma mark - Setters / Private + +- (CGFloat)valueAt:(CGFloat)x { + CGFloat minX = self.leftHandle.image.size.width; + CGFloat maxX = self.bounds.size.width - self.rightHandle.image.size.width; + CGFloat cappedX = MIN(MAX(x, minX), maxX); + CGFloat delta = maxX - minX; + CGFloat maxDelta = self.allowedMaxValue - self.allowedMinValue; + + return ((delta > 0) ? (cappedX - minX) / delta : 0) * maxDelta + self.allowedMinValue; +} + +- (void)setAllowedMinValue:(CGFloat)allowedMinValue { + _allowedMinValue = allowedMinValue; + + if (self.minValue < self.allowedMaxValue) { + self.minValue = self.allowedMaxValue; + } else { + [self setNeedsLayout]; + } +} + +- (void)setAllowedMaxValue:(CGFloat)allowedMaxValue { + _allowedMaxValue = allowedMaxValue; + + if (self.maxValue > self.allowedMaxValue) { + self.maxValue = self.allowedMaxValue; + } else { + [self valuesChanged:NO]; + } +} + +- (void)setMinValue:(CGFloat)minValue { + _minValue = minValue; + [self valuesChanged:YES]; +} + +- (void)setMaxValue:(CGFloat)maxValue { + _maxValue = maxValue; + [self valuesChanged:YES]; +} + +- (void)valuesChanged:(BOOL)sendActions { + if (NSThread.isMainThread) { + if (sendActions) { + [self sendActionsForControlEvents:UIControlEventValueChanged]; + } + [self setNeedsLayout]; + } +} + +#pragma mark - Overrides + +- (CGSize)intrinsicContentSize { + return CGSizeMake(UIViewNoIntrinsicMetric, self.leftHandle.image.size.height); +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGSize lhs = self.leftHandle.image.size; + CGSize rhs = self.rightHandle.image.size; + CGSize trackSize = self.track.image.size; + + CGFloat delta = self.allowedMaxValue - self.allowedMinValue; + CGFloat minPercent, maxPercent; + + if (delta <= 0) { + minPercent = maxPercent = 0; + } else { + minPercent = MAX(0, (self.minValue - self.allowedMinValue) / delta); + maxPercent = MAX(minPercent, (self.maxValue - self.allowedMinValue) / delta); + } + + CGFloat rangeSliderWidth = self.bounds.size.width - lhs.width - rhs.width; + + self.leftHandle.frame = FLEXRectMake( + rangeSliderWidth * minPercent, + CGRectGetMidY(self.bounds) - (lhs.height / 2.f) + 3.f, + lhs.width, + lhs.height + ); + + self.rightHandle.frame = FLEXRectMake( + lhs.width + (rangeSliderWidth * maxPercent), + CGRectGetMidY(self.bounds) - (rhs.height / 2.f) + 3.f, + rhs.width, + rhs.height + ); + + self.track.frame = FLEXRectMake( + lhs.width / 2.f, + CGRectGetMidY(self.bounds) - trackSize.height / 2.f, + self.bounds.size.width - (lhs.width / 2.f) - (rhs.width / 2.f), + trackSize.height + ); + + self.fill.frame = FLEXRectMake( + CGRectGetMidX(self.leftHandle.frame), + CGRectGetMinY(self.track.frame), + CGRectGetMidX(self.rightHandle.frame) - CGRectGetMidX(self.leftHandle.frame), + self.track.frame.size.height + ); +} + +- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + CGPoint loc = [touch locationInView:self]; + + if (CGRectContainsPoint(self.leftHandle.frame, loc)) { + self.trackingLeftHandle = YES; + self.trackingRightHandle = NO; + } else if (CGRectContainsPoint(self.rightHandle.frame, loc)) { + self.trackingLeftHandle = NO; + self.trackingRightHandle = YES; + } else { + return NO; + } + + return YES; +} + +- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + CGPoint loc = [touch locationInView:self]; + + if (self.isTrackingLeftHandle) { + self.minValue = MIN(MAX(self.allowedMinValue, [self valueAt:loc.x]), self.maxValue); + } else if (self.isTrackingRightHandle) { + self.maxValue = MAX(MIN(self.allowedMaxValue, [self valueAt:loc.x]), self.minValue); + } else { + return NO; + } + + [self setNeedsLayout]; + [self layoutIfNeeded]; + + return YES; +} + +- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { + self.trackingLeftHandle = NO; + self.trackingRightHandle = NO; +} + +- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { + return NO; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.h new file mode 100644 index 00000000..5bb62aae --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.h @@ -0,0 +1,46 @@ +// +// FHSSnapshotView.h +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSViewSnapshot.h" +#import "FHSRangeSlider.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol FHSSnapshotViewDelegate + +- (void)didSelectView:(FHSViewSnapshot *)snapshot; +- (void)didDeselectView:(FHSViewSnapshot *)snapshot; +- (void)didLongPressView:(FHSViewSnapshot *)snapshot; + +@end + +@interface FHSSnapshotView : UIView + ++ (instancetype)delegate:(id)delegate; + +@property (nonatomic, weak) id delegate; + +@property (nonatomic) NSArray *snapshots; +@property (nonatomic, nullable) FHSViewSnapshot *selectedView; + +/// Views of these classes will have their headers hidden +@property (nonatomic) NSArray *headerExclusions; + +@property (nonatomic, readonly) UISlider *spacingSlider; +@property (nonatomic, readonly) FHSRangeSlider *depthSlider; + +- (void)emphasizeViews:(NSArray *)emphasizedViews; + +- (void)toggleShowHeaders; +- (void)toggleShowBorders; + +- (void)hideView:(FHSViewSnapshot *)view; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.m new file mode 100644 index 00000000..81e97228 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.m @@ -0,0 +1,304 @@ +// +// FHSSnapshotView.m +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSSnapshotView.h" +#import "FHSSnapshotNodes.h" +#import "SceneKit+Snapshot.h" +#import "FLEXColor.h" + +@interface FHSSnapshotView () +@property (nonatomic, readonly) SCNView *sceneView; +@property (nonatomic) NSString *currentSummary; + +/// Maps nodes by snapshot IDs +@property (nonatomic) NSDictionary *nodesMap; +@property (nonatomic) NSInteger maxDepth; + +@property (nonatomic) FHSSnapshotNodes *highlightedNodes; +@property (nonatomic, getter=wantsHideHeaders) BOOL hideHeaders; +@property (nonatomic, getter=wantsHideBorders) BOOL hideBorders; +@property (nonatomic) BOOL suppressSelectionEvents; + +@property (nonatomic, readonly) BOOL mustHideHeaders; +@end + +@implementation FHSSnapshotView + +#pragma mark - Initialization + ++ (instancetype)delegate:(id)delegate { + FHSSnapshotView *view = [self new]; + view.delegate = delegate; + return view; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:CGRectZero]; + if (self) { + [self initSpacingSlider]; + [self initDepthSlider]; + [self initSceneView]; // Must be last; calls setMaxDepth +// self.hideHeaders = YES; + + // Self + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + // Scene + self.sceneView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + [self addGestureRecognizer:[[UITapGestureRecognizer alloc] + initWithTarget:self action:@selector(handleTap:) + ]]; + } + + return self; +} + +- (void)initSceneView { + _sceneView = [SCNView new]; + self.sceneView.allowsCameraControl = YES; + + [self addSubview:self.sceneView]; +} + +- (void)initSpacingSlider { + _spacingSlider = [UISlider new]; + self.spacingSlider.minimumValue = 0; + self.spacingSlider.maximumValue = 100; + self.spacingSlider.continuous = YES; + [self.spacingSlider + addTarget:self + action:@selector(spacingSliderDidChange:) + forControlEvents:UIControlEventValueChanged + ]; + + self.spacingSlider.value = 50; +} + +- (void)initDepthSlider { + _depthSlider = [FHSRangeSlider new]; + [self.depthSlider + addTarget:self + action:@selector(depthSliderDidChange:) + forControlEvents:UIControlEventValueChanged + ]; +} + + +#pragma mark - Public + +- (void)setSelectedView:(FHSViewSnapshot *)view { + // Ivar set in selectSnapshot: + [self selectSnapshot:view ? self.nodesMap[view.view.identifier] : nil]; +} + +- (void)setSnapshots:(NSArray *)snapshots { + _snapshots = snapshots; + + // Create new scene (possibly discarding old scene) + SCNScene *scene = [SCNScene new]; + scene.background.contents = FLEXColor.primaryBackgroundColor; + self.sceneView.scene = scene; + + NSInteger depth = 0; + NSMutableDictionary *nodesMap = [NSMutableDictionary new]; + + // Add every root snapshot to the root scene node with increasing depths + SCNNode *root = scene.rootNode; + for (FHSViewSnapshot *snapshot in self.snapshots) { + [SCNNode + snapshot:snapshot + parent:nil + parentNode:nil + root:root + depth:&depth + nodesMap:nodesMap + hideHeaders:_hideHeaders + ]; + } + + self.maxDepth = depth; + self.nodesMap = nodesMap; +} + +- (void)setHeaderExclusions:(NSArray *)headerExclusions { + _headerExclusions = headerExclusions; + + if (headerExclusions.count) { + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + if ([headerExclusions containsObject:nodes.snapshotItem.view.view.class]) { + nodes.forceHideHeader = YES; + } else { + nodes.forceHideHeader = NO; + } + } + } +} + +- (void)emphasizeViews:(NSArray *)emphasizedViews { + if (emphasizedViews.count) { + [self emphasizeViews:emphasizedViews inSnapshots:self.snapshots]; + [self setNeedsLayout]; + } +} + +- (void)emphasizeViews:(NSArray *)emphasizedViews inSnapshots:(NSArray *)snapshots { + for (FHSViewSnapshot *snapshot in snapshots) { + FHSSnapshotNodes *nodes = self.nodesMap[snapshot.view.identifier]; + nodes.dimmed = ![emphasizedViews containsObject:snapshot.view.view]; + [self emphasizeViews:emphasizedViews inSnapshots:snapshot.children]; + } +} + +- (void)toggleShowHeaders { + self.hideHeaders = !self.hideHeaders; +} + +- (void)toggleShowBorders { + self.hideBorders = !self.hideBorders; +} + +- (void)hideView:(FHSViewSnapshot *)view { + NSParameterAssert(view); + FHSSnapshotNodes *nodes = self.nodesMap[view.view.identifier]; + [nodes.snapshot removeFromParentNode]; +} + +#pragma mark - Helper + +- (BOOL)mustHideHeaders { + return self.spacingSlider.value <= kFHSSmallZOffset; +} + +- (void)setMaxDepth:(NSInteger)maxDepth { + _maxDepth = maxDepth; + + self.depthSlider.allowedMinValue = 0; + self.depthSlider.allowedMaxValue = maxDepth; + self.depthSlider.maxValue = maxDepth; + self.depthSlider.minValue = 0; +} + +- (void)setHideHeaders:(BOOL)hideHeaders { + if (_hideHeaders != hideHeaders) { + _hideHeaders = hideHeaders; + + if (!self.mustHideHeaders) { + if (hideHeaders) { + [self hideHeaders]; + } else { + [self unhideHeaders]; + } + } + } +} + +- (void)setHideBorders:(BOOL)hideBorders { + if (_hideBorders != hideBorders) { + _hideBorders = hideBorders; + + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + nodes.border.hidden = hideBorders; + } + } +} + +- (FHSSnapshotNodes *)nodesAtPoint:(CGPoint)point { + NSArray *results = [self.sceneView hitTest:point options:nil]; + for (SCNHitTestResult *result in results) { + SCNNode *nearestSnapshot = result.node.nearestAncestorSnapshot; + if (nearestSnapshot) { + return self.nodesMap[nearestSnapshot.name]; + } + } + + return nil; +} + +- (void)selectSnapshot:(FHSSnapshotNodes *)selected { + // Notify delegate of de-select + if (!selected && self.selectedView) { + [self.delegate didDeselectView:self.selectedView]; + } + + _selectedView = selected.snapshotItem; + + // Case: selected the currently selected node + if (selected == self.highlightedNodes) { + return; + } + + // No-op if nothng is selected (yay objc!) + self.highlightedNodes.highlighted = NO; + self.highlightedNodes = nil; + + // No node means we tapped the background + if (selected) { + selected.highlighted = YES; + // TODO: update description text here + self.highlightedNodes = selected; + } + + // Notify delegate + [self.delegate didSelectView:selected.snapshotItem]; + + [self setNeedsLayout]; +} + +- (void)hideHeaders { + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + nodes.header.hidden = YES; + } +} + +- (void)unhideHeaders { + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + if (!nodes.forceHideHeader) { + nodes.header.hidden = NO; + } + } +} + + +#pragma mark - Event Handlers + +- (void)handleTap:(UITapGestureRecognizer *)gesture { + if (gesture.state == UIGestureRecognizerStateRecognized) { + CGPoint tap = [gesture locationInView:self.sceneView]; + [self selectSnapshot:[self nodesAtPoint:tap]]; + } +} + +- (void)spacingSliderDidChange:(UISlider *)slider { + // TODO: hiding the header when flat logic + + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + nodes.snapshot.position = ({ + SCNVector3 pos = nodes.snapshot.position; + pos.z = MAX(slider.value, kFHSSmallZOffset) * nodes.depth; + pos; + }); + + if (!self.wantsHideHeaders) { + if (self.mustHideHeaders) { + [self hideHeaders]; + } else { + [self unhideHeaders]; + } + } + } +} + +- (void)depthSliderDidChange:(FHSRangeSlider *)slider { + CGFloat min = slider.minValue, max = slider.maxValue; + for (FHSSnapshotNodes *nodes in self.nodesMap.allValues) { + CGFloat depth = self.maxDepth - nodes.depth; + nodes.snapshot.hidden = depth < min || max < depth; + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.h new file mode 100644 index 00000000..70122c12 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.h @@ -0,0 +1,35 @@ +// +// FHSView.h +// FLEX +// +// Created by Tanner Bennett on 1/6/20. +// + +#import + +@interface FHSView : NSObject { + @private + BOOL _inScrollView; +} + ++ (instancetype)forView:(UIView *)view isInScrollView:(BOOL)inScrollView; + +/// Intentionally not weak +@property (nonatomic, readonly) UIView *view; +@property (nonatomic, readonly) NSString *identifier; + +@property (nonatomic, readonly) NSString *title; +/// Whether or not this view item should be visually distinguished +@property (nonatomic, readwrite) BOOL important; + +@property (nonatomic, readonly) CGRect frame; +@property (nonatomic, readonly) BOOL hidden; +@property (nonatomic, readonly) UIImage *snapshotImage; + +@property (nonatomic, readonly) NSArray *children; +@property (nonatomic, readonly) NSString *summary; + +/// @return importantAttr if .important, otherwise normalAttr +//- (id)ifImportant:(id)importantAttr ifNormal:(id)normalAttr; + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.m new file mode 100644 index 00000000..07f5efd3 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSView.m @@ -0,0 +1,194 @@ +// +// FHSView.m +// FLEX +// +// Created by Tanner Bennett on 1/6/20. +// + +#import "FHSView.h" +#import "FLEXUtility.h" +#import "NSArray+FLEX.h" + +@interface FHSView (Snapshotting) ++ (UIImage *)_snapshotView:(UIView *)view; +@end + +@implementation FHSView + ++ (instancetype)forView:(UIView *)view isInScrollView:(BOOL)inScrollView { + return [[self alloc] initWithView:view isInScrollView:inScrollView]; +} + +- (id)initWithView:(UIView *)view isInScrollView:(BOOL)inScrollView { + self = [super init]; + if (self) { + _view = view; + _inScrollView = inScrollView; + _identifier = NSUUID.UUID.UUIDString; + + UIViewController *controller = [FLEXUtility viewControllerForView:view]; + if (controller) { + _important = YES; + _title = [NSString stringWithFormat: + @"%@ (for %@)", + NSStringFromClass([controller class]), + NSStringFromClass([view class]) + ]; + } else { + _title = NSStringFromClass([view class]); + } + } + + return self; +} + +- (CGRect)frame { + if (_inScrollView) { + CGPoint offset = [(UIScrollView *)self.view.superview contentOffset]; + return CGRectOffset(self.view.frame, -offset.x, -offset.y); + } else { + return self.view.frame; + } +} + +- (BOOL)hidden { + return self.view.isHidden; +} + +- (UIImage *)snapshotImage { + return [FHSView _snapshotView:self.view]; +} + +- (NSArray *)children { + BOOL isScrollView = [self.view isKindOfClass:[UIScrollView class]]; + return [self.view.subviews flex_mapped:^id(UIView *subview, NSUInteger idx) { + return [FHSView forView:subview isInScrollView:isScrollView]; + }]; +} + +- (NSString *)summary { + CGRect f = self.frame; + return [NSString stringWithFormat: + @"%@ (%.1f, %.1f, %.1f, %.1f)", + NSStringFromClass([self.view class]), + f.origin.x, f.origin.y, f.size.width, f.size.height + ]; +} + +- (NSString *)description{ + return self.view.description; +} + +- (id)ifImportant:(id)importantAttr ifNormal:(id)normalAttr { + return self.important ? importantAttr : normalAttr; +} + +@end + +@implementation FHSView (Snapshotting) + ++ (UIImage *)drawView:(UIView *)view { + UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0); + [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return image; +} + +/// Recursively hides all views that may be obscuring the given view and collects them +/// in the given array. You should unhide them all when you are done. ++ (BOOL)_hideViewsCoveringView:(UIView *)view + root:(UIView *)rootView + hiddenViews:(NSMutableArray *)hiddenViews { + // Stop when we reach this view + if (view == rootView) { + return YES; + } + + for (UIView *subview in rootView.subviews.reverseObjectEnumerator.allObjects) { + if ([self _hideViewsCoveringView:view root:subview hiddenViews:hiddenViews]) { + return YES; + } + } + + if (!rootView.isHidden) { + rootView.hidden = YES; + [hiddenViews addObject:rootView]; + } + + return NO; +} + + +/// Recursively hides all views that may be obscuring the given view and collects them +/// in the given array. You should unhide them all when you are done. ++ (void)hideViewsCoveringView:(UIView *)view doWhileHidden:(void(^)())block { + NSMutableArray *viewsToUnhide = [NSMutableArray new]; + if ([self _hideViewsCoveringView:view root:view.window hiddenViews:viewsToUnhide]) { + block(); + } + + for (UIView *v in viewsToUnhide) { + v.hidden = NO; + } +} + ++ (UIImage *)_snapshotVisualEffectBackdropView:(UIView *)view { + NSParameterAssert(view.window); + + // UIVisualEffectView is a special case that cannot be snapshotted + // the same way as any other view. From Apple docs: + // + // Many effects require support from the window that hosts the + // UIVisualEffectView. Attempting to take a snapshot of only the + // UIVisualEffectView will result in a snapshot that does not + // contain the effect. To take a snapshot of a view hierarchy + // that contains a UIVisualEffectView, you must take a snapshot + // of the entire UIWindow or UIScreen that contains it. + // + // To snapshot this view, we traverse the view hierarchy starting + // from the window and hide any views that are on top of the + // _UIVisualEffectBackdropView so that it is visible in a snapshot + // of the window. We then take a snapshot of the window and crop + // it to the part that contains the backdrop view. This appears to + // be the same technique that Xcode's own view debugger uses to + // snapshot visual effect views. + __block UIImage *image = nil; + [self hideViewsCoveringView:view doWhileHidden:^{ + image = [self drawView:view]; + CGRect cropRect = [view.window convertRect:view.bounds fromView:view]; + image = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(image.CGImage, cropRect)]; + }]; + + return image; +} + ++ (UIImage *)_snapshotView:(UIView *)view { + UIView *superview = view.superview; + // Is this view inside a UIVisualEffectView? + if ([superview isKindOfClass:[UIVisualEffectView class]]) { + // Is it (probably) the "backdrop" view of this UIVisualEffectView? + if (superview.subviews.firstObject == view) { + return [self _snapshotVisualEffectBackdropView:view]; + } + } + + // Hide the view's subviews before we snapshot it + NSMutableIndexSet *toUnhide = [NSMutableIndexSet new]; + [view.subviews flex_forEach:^(UIView *v, NSUInteger idx) { + if (!v.isHidden) { + v.hidden = YES; + [toUnhide addIndex:idx]; + } + }]; + + // Snapshot the view, then unhide the previously-unhidden views + UIImage *snapshot = [self drawView:view]; + for (UIView *v in [view.subviews objectsAtIndexes:toUnhide]) { + v.hidden = NO; + } + + return snapshot; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.h new file mode 100644 index 00000000..1cd7f7ad --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.h @@ -0,0 +1,29 @@ +// +// FHSViewController.h +// FLEX +// +// Created by Tanner Bennett on 1/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/// The view controller +/// "FHS" stands for "FLEX (view) hierarchy snapshot" +@interface FHSViewController : UIViewController + +/// Use this when you want to snapshot a set of windows. ++ (instancetype)snapshotWindows:(NSArray *)windows; +/// Use this when you want to snapshot a specific slice of the view hierarchy. ++ (instancetype)snapshotView:(UIView *)view; +/// Use this when you want to emphasize specific views on the screen. +/// These views must all be in the same window as the selected view. ++ (instancetype)snapshotViewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)view; + +@property (nonatomic, nullable) UIView *selectedView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.m new file mode 100644 index 00000000..0e7af1be --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.m @@ -0,0 +1,270 @@ +// +// FHSViewController.m +// FLEX +// +// Created by Tanner Bennett on 1/6/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSViewController.h" +#import "FHSSnapshotView.h" +#import "FLEXHierarchyViewController.h" +#import "FLEXColor.h" +#import "FLEXAlert.h" +#import "FLEXWindow.h" +#import "FLEXResources.h" +#import "NSArray+FLEX.h" +#import "UIBarButtonItem+FLEX.h" + +BOOL const kFHSViewControllerExcludeFLEXWindows = YES; + +@interface FHSViewController () +/// An array of only the target views whose hierarchies +/// we wish to snapshot, not every view in the snapshot. +@property (nonatomic, readonly) NSArray *targetViews; +@property (nonatomic, readonly) NSArray *views; +@property (nonatomic ) NSArray *snapshots; +@property (nonatomic, ) FHSSnapshotView *snapshotView; + +@property (nonatomic, readonly) UIView *containerView; +@property (nonatomic, readonly) NSArray *viewsAtTap; +@property (nonatomic, readonly) NSMutableSet *forceHideHeaders; +@end + +@implementation FHSViewController +@synthesize views = _views; +@synthesize snapshotView = _snapshotView; + +#pragma mark - Initialization + ++ (instancetype)snapshotWindows:(NSArray *)windows { + return [[self alloc] initWithViews:windows viewsAtTap:nil selectedView:nil]; +} + ++ (instancetype)snapshotView:(UIView *)view { + return [[self alloc] initWithViews:@[view] viewsAtTap:nil selectedView:nil]; +} + ++ (instancetype)snapshotViewsAtTap:(NSArray *)viewsAtTap selectedView:(UIView *)view { + NSParameterAssert(viewsAtTap.count); + NSParameterAssert(view.window); + return [[self alloc] initWithViews:@[view.window] viewsAtTap:viewsAtTap selectedView:view]; +} + +- (id)initWithViews:(NSArray *)views + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)view { + NSParameterAssert(views.count); + + self = [super init]; + if (self) { + _forceHideHeaders = [NSMutableSet setWithObject:NSClassFromString(@"_UITableViewCellSeparatorView")]; + _selectedView = view; + _viewsAtTap = viewsAtTap; + + if (!viewsAtTap && kFHSViewControllerExcludeFLEXWindows) { + Class flexwindow = [FLEXWindow class]; + views = [views flex_filtered:^BOOL(UIView *view, NSUInteger idx) { + return [view class] != flexwindow; + }]; + } + + _targetViews = views; + _views = [views flex_mapped:^id(UIView *view, NSUInteger idx) { + BOOL isScrollView = [view.superview isKindOfClass:[UIScrollView class]]; + return [FHSView forView:view isInScrollView:isScrollView]; + }]; + } + + return self; +} + +- (void)refreshSnapshotView { + // Alert view to block interaction while we load everything + UIAlertController *loading = [FLEXAlert makeAlert:^(FLEXAlert *make) { + make.title(@"Please Wait").message(@"Generating snapshot…"); + }]; + [self presentViewController:loading animated:YES completion:^{ + self.snapshots = [self.views flex_mapped:^id(FHSView *view, NSUInteger idx) { + return [FHSViewSnapshot snapshotWithView:view]; + }]; + FHSSnapshotView *newSnapshotView = [FHSSnapshotView delegate:self]; + + // This work is highly intensive so we do it on a background thread first + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + // Setting the snapshots computes lots of SCNNodes, takes several seconds + newSnapshotView.snapshots = self.snapshots; + + // After we finish generating all the model objects and scene nodes, display the view + dispatch_async(dispatch_get_main_queue(), ^{ + // Dismiss alert + [loading dismissViewControllerAnimated:YES completion:nil]; + + self.snapshotView = newSnapshotView; + }); + }); + }]; +} + + +#pragma mark - View Controller Lifecycle + +- (void)loadView { + [super loadView]; + self.view.backgroundColor = FLEXColor.primaryBackgroundColor; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Initialize back bar button item for 3D view to look like a button + self.navigationItem.hidesBackButton = YES; + self.navigationItem.leftBarButtonItem = [UIBarButtonItem + itemWithImage:FLEXResources.toggle2DIcon + target:self.navigationController + action:@selector(toggleHierarchyMode) + ]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + if (!_snapshotView) { + [self refreshSnapshotView]; + } +} + + +#pragma mark - Public + +- (void)setSelectedView:(UIView *)view { + _selectedView = view; + self.snapshotView.selectedView = view ? [self snapshotForView:view] : nil; +} + + +#pragma mark - Private + +#pragma mark Properties + +- (FHSSnapshotView *)snapshotView { + return self.isViewLoaded ? _snapshotView : nil; +} + +- (void)setSnapshotView:(FHSSnapshotView *)snapshotView { + NSParameterAssert(snapshotView); + + _snapshotView = snapshotView; + + // Initialize our toolbar items + self.toolbarItems = @[ + [UIBarButtonItem itemWithCustomView:snapshotView.spacingSlider], + UIBarButtonItem.flex_flexibleSpace, + [UIBarButtonItem + itemWithImage:FLEXResources.moreIcon + target:self action:@selector(didPressOptionsButton:) + ], + UIBarButtonItem.flex_flexibleSpace, + [UIBarButtonItem itemWithCustomView:snapshotView.depthSlider] + ]; + [self resizeToolbarItems:self.view.frame.size]; + + // If we have views-at-tap, dim the other views + [snapshotView emphasizeViews:self.viewsAtTap]; + // Set the selected view, if any + snapshotView.selectedView = [self snapshotForView:self.selectedView]; + snapshotView.headerExclusions = self.forceHideHeaders.allObjects; + [snapshotView setNeedsLayout]; + + // Remove old snapshot, if any, and add the new one + [_snapshotView removeFromSuperview]; + snapshotView.frame = self.containerView.bounds; + [self.containerView addSubview:snapshotView]; +} + +- (UIView *)containerView { + return self.view; +} + +#pragma mark Helper + +- (FHSViewSnapshot *)snapshotForView:(UIView *)view { + if (!view || !self.snapshots.count) return nil; + + for (FHSViewSnapshot *snapshot in self.snapshots) { + FHSViewSnapshot *found = [snapshot snapshotForView:view]; + if (found) { + return found; + } + } + + // Error: we have snapshots but the view we requested is not in one + @throw NSInternalInconsistencyException; + return nil; +} + +#pragma mark Events + +- (void)didPressOptionsButton:(UIBarButtonItem *)sender { + [FLEXAlert makeSheet:^(FLEXAlert *make) { + if (self.selectedView) { + make.button(@"Hide selected view").handler(^(NSArray *strings) { + [self.snapshotView hideView:[self snapshotForView:self.selectedView]]; + }); + make.button(@"Hide headers for views like this").handler(^(NSArray *strings) { + Class cls = [self.selectedView class]; + if (![self.forceHideHeaders containsObject:cls]) { + [self.forceHideHeaders addObject:[self.selectedView class]]; + self.snapshotView.headerExclusions = self.forceHideHeaders.allObjects; + } + }); + } + make.title(@"Options"); + make.button(@"Toggle headers").handler(^(NSArray *strings) { + [self.snapshotView toggleShowHeaders]; + }); + make.button(@"Toggle outlines").handler(^(NSArray *strings) { + [self.snapshotView toggleShowBorders]; + }); + make.button(@"Cancel").cancelStyle(); + } showFrom:self source:sender]; +} + +- (void)resizeToolbarItems:(CGSize)viewSize { + CGFloat sliderHeights = self.snapshotView.spacingSlider.bounds.size.height; + CGFloat sliderWidths = viewSize.width / 3.f; + CGRect frame = CGRectMake(0, 0, sliderWidths, sliderHeights); + self.snapshotView.spacingSlider.frame = frame; + self.snapshotView.depthSlider.frame = frame; + + [self.navigationController.toolbar setNeedsLayout]; +} + +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator:(id)coordinator { + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; + + [coordinator animateAlongsideTransition:^(id _Nonnull context) { + [self resizeToolbarItems:self.view.frame.size]; + } completion:nil]; +} + +#pragma mark FHSSnapshotViewDelegate + +- (void)didDeselectView:(FHSViewSnapshot *)snapshot { + // Our setter would also call the setter for the snapshot view, + // which we don't need to do here since it is already selected + _selectedView = nil; +} + +- (void)didLongPressView:(FHSViewSnapshot *)snapshot { + +} + +- (void)didSelectView:(FHSViewSnapshot *)snapshot { + // Our setter would also call the setter for the snapshot view, + // which we don't need to do here since it is already selected + _selectedView = snapshot.view.view; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.h new file mode 100644 index 00000000..53d783dd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.h @@ -0,0 +1,37 @@ +// +// FHSViewSnapshot.h +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSView.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface FHSViewSnapshot : NSObject + ++ (instancetype)snapshotWithView:(FHSView *)view; + +@property (nonatomic, readonly) FHSView *view; + +@property (nonatomic, readonly) NSString *title; +/// Whether or not this view item should be visually distinguished +@property (nonatomic, readwrite) BOOL important; + +@property (nonatomic, readonly) CGRect frame; +@property (nonatomic, readonly) BOOL hidden; +@property (nonatomic, readonly) UIImage *snapshotImage; + +@property (nonatomic, readonly) NSArray *children; +@property (nonatomic, readonly) NSString *summary; + +/// Returns a different color based on whether or not the view is important +@property (nonatomic, readonly) UIColor *headerColor; + +- (FHSViewSnapshot *)snapshotForView:(UIView *)view; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.m new file mode 100644 index 00000000..dc0f97af --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.m @@ -0,0 +1,62 @@ +// +// FHSViewSnapshot.m +// FLEX +// +// Created by Tanner Bennett on 1/9/20. +// Copyright © 2020 Flipboard. All rights reserved. +// + +#import "FHSViewSnapshot.h" +#import "NSArray+FLEX.h" + +@implementation FHSViewSnapshot + ++ (instancetype)snapshotWithView:(FHSView *)view { + NSArray *children = [view.children flex_mapped:^id(FHSView *v, NSUInteger idx) { + return [self snapshotWithView:v]; + }]; + return [[self alloc] initWithView:view children:children]; +} + +- (id)initWithView:(FHSView *)view children:(NSArray *)children { + NSParameterAssert(view); NSParameterAssert(children); + + self = [super init]; + if (self) { + _view = view; + _title = view.title; + _important = view.important; + _frame = view.frame; + _hidden = view.hidden; + _snapshotImage = view.snapshotImage; + _children = children; + _summary = view.summary; + } + + return self; +} + +- (UIColor *)headerColor { + if (self.important) { + return [UIColor colorWithRed: 0.000 green: 0.533 blue: 1.000 alpha: 0.900]; + } else { + return [UIColor colorWithRed:0.961 green: 0.651 blue: 0.137 alpha: 0.900]; + } +} + +- (FHSViewSnapshot *)snapshotForView:(UIView *)view { + if (view == self.view.view) { + return self; + } + + for (FHSViewSnapshot *child in self.children) { + FHSViewSnapshot *snapshot = [child snapshotForView:view]; + if (snapshot) { + return snapshot; + } + } + + return nil; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.h new file mode 100644 index 00000000..8e32249a --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.h @@ -0,0 +1,37 @@ +// +// FHSSnapshotNodes.h +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// + +#import "FHSViewSnapshot.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Container that holds references to the SceneKit nodes associated with a snapshot. +@interface FHSSnapshotNodes : NSObject + ++ (instancetype)snapshot:(FHSViewSnapshot *)snapshot depth:(NSInteger)depth; + +@property (nonatomic, readonly) FHSViewSnapshot *snapshotItem; +@property (nonatomic, readonly) NSInteger depth; + +/// The view image itself +@property (nonatomic, nullable) SCNNode *snapshot; +/// Goes on top of the snapshot, has rounded top corners +@property (nonatomic, nullable) SCNNode *header; +/// The bounding box drawn around the snapshot +@property (nonatomic, nullable) SCNNode *border; + +/// Used to indicate when a view is selected +@property (nonatomic, getter=isHighlighted) BOOL highlighted; +/// Used to indicate when a view is de-emphasized +@property (nonatomic, getter=isDimmed) BOOL dimmed; + +@property (nonatomic) BOOL forceHideHeader; + +@end + +NS_ASSUME_NONNULL_END diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.m new file mode 100644 index 00000000..052418e8 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.m @@ -0,0 +1,90 @@ +// +// FHSSnapshotNodes.m +// FLEX +// +// Created by Tanner Bennett on 1/7/20. +// + +#import "FHSSnapshotNodes.h" +#import "SceneKit+Snapshot.h" + +@interface FHSSnapshotNodes () +@property (nonatomic, nullable) SCNNode *highlight; +@property (nonatomic, nullable) SCNNode *dimming; +@end +@implementation FHSSnapshotNodes + ++ (instancetype)snapshot:(FHSViewSnapshot *)snapshot depth:(NSInteger)depth { + FHSSnapshotNodes *nodes = [self new]; + nodes->_snapshotItem = snapshot; + nodes->_depth = depth; + return nodes; +} + +- (void)setHighlighted:(BOOL)highlighted { + if (_highlighted != highlighted) { + _highlighted = highlighted; + + if (highlighted) { + if (!self.highlight) { + // Create highlight node + self.highlight = [SCNNode + highlight:self.snapshotItem + color:[UIColor.blueColor colorWithAlphaComponent:0.5] + ]; + } + // Add add highlight node, remove dimming node if dimmed + [self.snapshot addChildNode:self.highlight]; + if (self.isDimmed) { + [self.dimming removeFromParentNode]; + } + } else { + // Remove highlight node, add back dimming node if dimmed + [self.highlight removeFromParentNode]; + if (self.isDimmed) { + [self.snapshot addChildNode:self.dimming]; + } + } + } +} + +- (void)setDimmed:(BOOL)dimmed { + if (_dimmed != dimmed) { + _dimmed = dimmed; + + if (dimmed) { + if (!self.dimming) { + // Create dimming node + self.dimming = [SCNNode + highlight:self.snapshotItem + color:[UIColor.blackColor colorWithAlphaComponent:0.5] + ]; + } + // Add add dimming node if not highlighted + if (!self.isHighlighted) { + [self.snapshot addChildNode:self.dimming]; + } + } else { + // Remove dimming node (if not already highlighted) + if (!self.isHighlighted) { + [self.dimming removeFromParentNode]; + } + } + } +} + +- (void)setForceHideHeader:(BOOL)forceHideHeader { + if (_forceHideHeader != forceHideHeader) { + _forceHideHeader = forceHideHeader; + + if (self.header.parentNode) { + self.header.hidden = YES; + [self.header removeFromParentNode]; + } else { + self.header.hidden = NO; + [self.snapshot addChildNode:self.header]; + } + } +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.h new file mode 100644 index 00000000..8148ff9b --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.h @@ -0,0 +1,62 @@ +// +// SceneKit+Snapshot.h +// FLEX +// +// Created by Tanner Bennett on 1/8/20. +// + +#import +#import "FHSViewSnapshot.h" +@class FHSSnapshotNodes; + +extern CGFloat const kFHSSmallZOffset; + +#pragma mark SCNNode +@interface SCNNode (Snapshot) + +/// @return the nearest ancestor snapshot node starting at this node +@property (nonatomic, readonly) SCNNode *nearestAncestorSnapshot; + +/// @return a node that renders a highlight overlay over a specified snapshot ++ (instancetype)highlight:(FHSViewSnapshot *)view color:(UIColor *)color; +/// @return a node that renders a snapshot image ++ (instancetype)snapshot:(FHSViewSnapshot *)view; +/// @return a node that draws a line between two vertices ++ (instancetype)lineFrom:(SCNVector3)v1 to:(SCNVector3)v2 color:(UIColor *)lineColor; + +/// @return a node that can be used to render a colored border around the specified node +- (instancetype)borderWithColor:(UIColor *)color; +/// @return a node that renders a header above a snapshot node +/// using the title text from the view, if specified ++ (instancetype)header:(FHSViewSnapshot *)view; + +/// @return a SceneKit node that recursively renders a hierarchy +/// of UI elements starting at the specified snapshot ++ (instancetype)snapshot:(FHSViewSnapshot *)view + parent:(FHSViewSnapshot *)parentView + parentNode:(SCNNode *)parentNode + root:(SCNNode *)rootNode + depth:(NSInteger *)depthOut + nodesMap:(NSMutableDictionary *)nodesMap + hideHeaders:(BOOL)hideHeaders; + +@end + + +#pragma mark SCNShape +@interface SCNShape (Snapshot) +/// @return a shape with the given path, 0 extrusion depth, and a double-sided +/// material with the given diffuse contents inserted at index 0 ++ (instancetype)shapeWithPath:(UIBezierPath *)path materialDiffuse:(id)contents; +/// @return a shape that is used to render the background of the snapshot header ++ (instancetype)nameHeader:(UIColor *)color frame:(CGRect)frame corners:(CGFloat)cornerRadius; + +@end + + +#pragma mark SCNText +@interface SCNText (Snapshot) +/// @return text geometry used to render text inside the snapshot header ++ (instancetype)labelGeometry:(NSString *)text font:(UIFont *)font; + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.m new file mode 100644 index 00000000..4dff682c --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.m @@ -0,0 +1,278 @@ +// +// SceneKit+Snapshot.m +// FLEX +// +// Created by Tanner Bennett on 1/8/20. +// + +#import "SceneKit+Snapshot.h" +#import "FHSSnapshotNodes.h" + +/// This value is chosen such that this offset can be applied to avoid +/// z-fighting amongst nodes at the same z-position, but small enough +/// that they appear to visually be on the same plane. +CGFloat const kFHSSmallZOffset = 0.05; +CGFloat const kHeaderVerticalInset = 8.0; + +#pragma mark SCNGeometry +@interface SCNGeometry (SnapshotPrivate) +@end +@implementation SCNGeometry (SnapshotPrivate) + +- (void)addDoubleSidedMaterialWithDiffuseContents:(id)contents { + SCNMaterial *material = [SCNMaterial new]; + material.doubleSided = YES; + material.diffuse.contents = contents; + [self insertMaterial:material atIndex:0]; +} + +@end + +#pragma mark SCNNode +@implementation SCNNode (Snapshot) + +- (SCNNode *)nearestAncestorSnapshot { + SCNNode *node = self; + + while (!node.name && node) { + node = node.parentNode; + } + + return node; +} + ++ (instancetype)shapeNodeWithSize:(CGSize)size materialDiffuse:(id)contents offsetZ:(BOOL)offsetZ { + UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake( + 0, 0, size.width, size.height + )]; + SCNShape *shape = [SCNShape shapeWithPath:path materialDiffuse:contents]; + SCNNode *node = [SCNNode nodeWithGeometry:shape]; + + if (offsetZ) { + node.position = SCNVector3Make(0, 0, kFHSSmallZOffset); + } + return node; +} + ++ (instancetype)highlight:(FHSViewSnapshot *)view color:(UIColor *)color { + return [self shapeNodeWithSize:view.frame.size materialDiffuse:color offsetZ:YES]; +} + ++ (instancetype)snapshot:(FHSViewSnapshot *)view { + id image = view.snapshotImage; + return [self shapeNodeWithSize:view.frame.size materialDiffuse:image offsetZ:NO]; +} + ++ (instancetype)lineFrom:(SCNVector3)v1 to:(SCNVector3)v2 color:(UIColor *)lineColor { + SCNVector3 vertices[2] = { v1, v2 }; + int32_t _indices[2] = { 0, 1 }; + NSData *indices = [NSData dataWithBytes:_indices length:sizeof(_indices)]; + + SCNGeometrySource *source = [SCNGeometrySource geometrySourceWithVertices:vertices count:2]; + SCNGeometryElement *element = [SCNGeometryElement + geometryElementWithData:indices + primitiveType:SCNGeometryPrimitiveTypeLine + primitiveCount:2 + bytesPerIndex:sizeof(int32_t) + ]; + + SCNGeometry *geometry = [SCNGeometry geometryWithSources:@[source] elements:@[element]]; + [geometry addDoubleSidedMaterialWithDiffuseContents:lineColor]; + return [SCNNode nodeWithGeometry:geometry]; +} + +- (instancetype)borderWithColor:(UIColor *)color { + struct { SCNVector3 min, max; } bb; + [self getBoundingBoxMin:&bb.min max:&bb.max]; + + SCNVector3 topLeft = SCNVector3Make(bb.min.x, bb.max.y, kFHSSmallZOffset); + SCNVector3 bottomLeft = SCNVector3Make(bb.min.x, bb.min.y, kFHSSmallZOffset); + SCNVector3 topRight = SCNVector3Make(bb.max.x, bb.max.y, kFHSSmallZOffset); + SCNVector3 bottomRight = SCNVector3Make(bb.max.x, bb.min.y, kFHSSmallZOffset); + + SCNNode *top = [SCNNode lineFrom:topLeft to:topRight color:color]; + SCNNode *left = [SCNNode lineFrom:bottomLeft to:topLeft color:color]; + SCNNode *bottom = [SCNNode lineFrom:bottomLeft to:bottomRight color:color]; + SCNNode *right = [SCNNode lineFrom:bottomRight to:topRight color:color]; + + SCNNode *border = [SCNNode new]; + [border addChildNode:top]; + [border addChildNode:left]; + [border addChildNode:bottom]; + [border addChildNode:right]; + + return border; +} + ++ (instancetype)header:(FHSViewSnapshot *)view { + SCNText *text = [SCNText labelGeometry:view.title font:[UIFont boldSystemFontOfSize:13.0]]; + SCNNode *textNode = [SCNNode nodeWithGeometry:text]; + + struct { SCNVector3 min, max; } bb; + [textNode getBoundingBoxMin:&bb.min max:&bb.max]; + CGFloat textWidth = bb.max.x - bb.min.x; + CGFloat textHeight = bb.max.y - bb.min.y; + + CGFloat snapshotWidth = view.frame.size.width; + CGFloat headerWidth = MAX(snapshotWidth, textWidth); + CGRect frame = CGRectMake(0, 0, headerWidth, textHeight + (kHeaderVerticalInset * 2)); + SCNNode *headerNode = [SCNNode nodeWithGeometry:[SCNShape + nameHeader:view.headerColor frame:frame corners:8 + ]]; + [headerNode addChildNode:textNode]; + + textNode.position = SCNVector3Make( + (frame.size.width / 2.f) - (textWidth / 2.f), + (frame.size.height / 2.f) - (textHeight / 2.f), + kFHSSmallZOffset + ); + headerNode.position = SCNVector3Make( + (snapshotWidth / 2.f) - (headerWidth / 2.f), + view.frame.size.height, + kFHSSmallZOffset + ); + + return headerNode; +} + ++ (instancetype)snapshot:(FHSViewSnapshot *)view + parent:(FHSViewSnapshot *)parent + parentNode:(SCNNode *)parentNode + root:(SCNNode *)rootNode + depth:(NSInteger *)depthOut + nodesMap:(NSMutableDictionary *)nodesMap + hideHeaders:(BOOL)hideHeaders { + NSInteger const depth = *depthOut; + + // Ignore elements that are not visible. + // These should appear in the list, but not in the 3D view. + if (view.hidden || CGSizeEqualToSize(view.frame.size, CGSizeZero)) { + return nil; + } + + // Create a node whose contents are the snapshot of the element + SCNNode *node = [self snapshot:view]; + node.name = view.view.identifier; + + // Begin building node tree + FHSSnapshotNodes *nodes = [FHSSnapshotNodes snapshot:view depth:depth]; + nodes.snapshot = node; + + // The node must be added to the root node + // for the coordinate space calculations below to work + [rootNode addChildNode:node]; + node.position = ({ + // Flip the y-coordinate since SceneKit has a + // flipped version of the UIKit coordinate system + CGRect pframe = parent ? parent.frame : CGRectZero; + CGFloat y = parent ? pframe.size.height - CGRectGetMaxY(view.frame) : 0; + + // To simplify calculating the z-axis spacing between the layers, we make + // each snapshot node a direct child of the root rather than embedding + // the nodes in their parent nodes in the same structure as the UI elements + // themselves. With this flattened hierarchy, the z-position can be + // calculated for every node simply by multiplying the spacing by the depth. + // + // `parentSnapshotNode` as referenced here is NOT the actual parent node + // of `node`, it is the node corresponding to the parent of the UI element. + // It is used to convert from frame coordinates, which are relative to + // the bounds of the parent, to coordinates relative to the root node. + SCNVector3 positionRelativeToParent = SCNVector3Make(view.frame.origin.x, y, 0); + SCNVector3 positionRelativeToRoot; + if (parent) { + positionRelativeToRoot = [rootNode convertPosition:positionRelativeToParent fromNode:parentNode]; + } else { + positionRelativeToRoot = positionRelativeToParent; + } + positionRelativeToRoot.z = 50 * depth; + positionRelativeToRoot; + }); + + // Make border node + nodes.border = [node borderWithColor:view.headerColor]; + [node addChildNode:nodes.border]; + + // Make header node + nodes.header = [SCNNode header:view]; + [node addChildNode:nodes.header]; + if (hideHeaders) { + nodes.header.hidden = YES; + } + + nodesMap[view.view.identifier] = nodes; + + NSMutableArray *checkForIntersect = [NSMutableArray new]; + NSInteger maxChildDepth = depth; + + // Recurse to child nodes; overlapping children have higher depths + for (FHSViewSnapshot *child in view.children) { + NSInteger childDepth = depth + 1; + + // Children that intersect a sibling are rendered + // in a separate layer above the previous siblings + for (FHSViewSnapshot *sibling in checkForIntersect) { + if (CGRectIntersectsRect(sibling.frame, child.frame)) { + childDepth = maxChildDepth + 1; + break; + } + } + + id didMakeNode = [SCNNode + snapshot:child + parent:view + parentNode:node + root:rootNode + depth:&childDepth + nodesMap:nodesMap + hideHeaders:hideHeaders + ]; + if (didMakeNode) { + maxChildDepth = MAX(childDepth, maxChildDepth); + [checkForIntersect addObject:child]; + } + } + + *depthOut = maxChildDepth; + return node; +} + +@end + + +#pragma mark SCNShape +@implementation SCNShape (Snapshot) + ++ (instancetype)shapeWithPath:(UIBezierPath *)path materialDiffuse:(id)contents { + SCNShape *shape = [SCNShape shapeWithPath:path extrusionDepth:0]; + [shape addDoubleSidedMaterialWithDiffuseContents:contents]; + return shape; +} + ++ (instancetype)nameHeader:(UIColor *)color frame:(CGRect)frame corners:(CGFloat)radius { + UIBezierPath *path = [UIBezierPath + bezierPathWithRoundedRect:frame + byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight + cornerRadii:CGSizeMake(radius, radius) + ]; + return [SCNShape shapeWithPath:path materialDiffuse:color]; +} + +@end + + +#pragma mark SCNText +@implementation SCNText (Snapshot) + ++ (instancetype)labelGeometry:(NSString *)text font:(UIFont *)font { + NSParameterAssert(text); + + SCNText *label = [self new]; + label.string = text; + label.font = font; + label.alignmentMode = kCAAlignmentCenter; + label.truncationMode = kCATruncationEnd; + + return label; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.h similarity index 65% rename from xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h rename to xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.h index b085ffc2..73548081 100644 --- a/xcode/Pods/FLEX/Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.h @@ -3,7 +3,7 @@ // Flipboard // // Created by Ryan Olson on 2014-05-02. -// Copyright (c) 2014 Flipboard. All rights reserved. +// Copyright (c) 2020 Flipboard. All rights reserved. // #import @@ -13,7 +13,7 @@ - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier; @property (nonatomic) NSInteger viewDepth; -@property (nonatomic) UIColor *viewColor; -@property (nonatomic) UIView *viewBackgroundColorView; +@property (nonatomic) UIColor *randomColorTag; +@property (nonatomic) UIColor *indicatedViewColor; @end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.m new file mode 100644 index 00000000..4567d228 --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.m @@ -0,0 +1,169 @@ +// +// FLEXHierarchyTableViewCell.m +// Flipboard +// +// Created by Ryan Olson on 2014-05-02. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXHierarchyTableViewCell.h" +#import "FLEXUtility.h" +#import "FLEXResources.h" +#import "FLEXColor.h" + +@interface FLEXHierarchyTableViewCell () + +/// Indicates how deep the view is in the hierarchy +@property (nonatomic) UIView *depthIndicatorView; +/// Holds the color that visually distinguishes views from one another +@property (nonatomic) UIImageView *colorCircleImageView; +/// A checker-patterned view, used to help show the color of a view, like a photoshop canvas +@property (nonatomic) UIView *backgroundColorCheckerPatternView; +/// The subview of the checker pattern view which holds the actual color of the view +@property (nonatomic) UIView *viewBackgroundColorView; + +@end + +@implementation FLEXHierarchyTableViewCell + +- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier { + return [self initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.depthIndicatorView = [UIView new]; + self.depthIndicatorView.backgroundColor = FLEXUtility.hierarchyIndentPatternColor; + [self.contentView addSubview:self.depthIndicatorView]; + + UIImage *defaultCircleImage = [FLEXUtility circularImageWithColor:UIColor.blackColor radius:5]; + self.colorCircleImageView = [[UIImageView alloc] initWithImage:defaultCircleImage]; + [self.contentView addSubview:self.colorCircleImageView]; + + self.textLabel.font = UIFont.flex_defaultTableCellFont; + self.detailTextLabel.font = UIFont.flex_defaultTableCellFont; + self.accessoryType = UITableViewCellAccessoryDetailButton; + + // Use a pattern-based color to simplify application of the checker pattern + static UIColor *checkerPatternColor = nil; + static dispatch_once_t once; + dispatch_once(&once, ^{ + checkerPatternColor = [UIColor colorWithPatternImage:FLEXResources.checkerPattern]; + }); + + self.backgroundColorCheckerPatternView = [UIView new]; + self.backgroundColorCheckerPatternView.clipsToBounds = YES; + self.backgroundColorCheckerPatternView.layer.borderColor = FLEXColor.tertiaryBackgroundColor.CGColor; + self.backgroundColorCheckerPatternView.layer.borderWidth = 2.f / UIScreen.mainScreen.scale; + self.backgroundColorCheckerPatternView.backgroundColor = checkerPatternColor; + [self.contentView addSubview:self.backgroundColorCheckerPatternView]; + self.viewBackgroundColorView = [UIView new]; + [self.backgroundColorCheckerPatternView addSubview:self.viewBackgroundColorView]; + } + return self; +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { + UIColor *originalColour = self.viewBackgroundColorView.backgroundColor; + [super setHighlighted:highlighted animated:animated]; + + // UITableViewCell changes all subviews in the contentView to backgroundColor = clearColor. + // We want to preserve the hierarchy background color when highlighted. + self.depthIndicatorView.backgroundColor = FLEXUtility.hierarchyIndentPatternColor; + + self.viewBackgroundColorView.backgroundColor = originalColour; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + UIColor *originalColour = self.viewBackgroundColorView.backgroundColor; + [super setSelected:selected animated:animated]; + + // See setHighlighted above. + self.depthIndicatorView.backgroundColor = FLEXUtility.hierarchyIndentPatternColor; + + self.viewBackgroundColorView.backgroundColor = originalColour; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + const CGFloat kContentPadding = 6; + const CGFloat kDepthIndicatorWidthMultiplier = 4; + const CGFloat kViewColorIndicatorSize = 22; + + const CGRect bounds = self.contentView.bounds; + const CGFloat centerY = CGRectGetMidY(bounds); + const CGFloat textLabelCenterY = CGRectGetMidY(self.textLabel.frame); + + BOOL hideCheckerView = self.backgroundColorCheckerPatternView.hidden; + CGFloat maxWidth = CGRectGetMaxX(bounds); + maxWidth -= (hideCheckerView ? kContentPadding : (kViewColorIndicatorSize + kContentPadding * 2)); + + CGRect depthIndicatorFrame = self.depthIndicatorView.frame = CGRectMake( + kContentPadding, 0, self.viewDepth * kDepthIndicatorWidthMultiplier, CGRectGetHeight(bounds) + ); + + // Circle goes after depth, and its center Y = textLabel's center Y + CGRect circleFrame = self.colorCircleImageView.frame; + circleFrame.origin.x = CGRectGetMaxX(depthIndicatorFrame) + kContentPadding; + circleFrame.origin.y = FLEXFloor(textLabelCenterY - CGRectGetHeight(circleFrame) / 2.f); + self.colorCircleImageView.frame = circleFrame; + + // Text label goes after random color circle, width extends to the edge + // of the contentView or to the padding before the color indicator view + CGRect textLabelFrame = self.textLabel.frame; + CGFloat textOriginX = CGRectGetMaxX(circleFrame) + kContentPadding; + textLabelFrame.origin.x = textOriginX; + textLabelFrame.size.width = maxWidth - textOriginX; + self.textLabel.frame = textLabelFrame; + + // detailTextLabel leading edge lines up with the circle, and the + // width extends to the same max X as the same max X as the textLabel + CGRect detailTextLabelFrame = self.detailTextLabel.frame; + CGFloat detailOriginX = circleFrame.origin.x; + detailTextLabelFrame.origin.x = detailOriginX; + detailTextLabelFrame.size.width = maxWidth - detailOriginX; + self.detailTextLabel.frame = detailTextLabelFrame; + + // Checker pattern view starts after the padding after the max X of textLabel, + // and is centered vertically within the entire contentView + self.backgroundColorCheckerPatternView.frame = CGRectMake( + CGRectGetMaxX(self.textLabel.frame) + kContentPadding, + centerY - kViewColorIndicatorSize / 2.f, + kViewColorIndicatorSize, + kViewColorIndicatorSize + ); + + // Background color view fills it's superview + self.viewBackgroundColorView.frame = self.backgroundColorCheckerPatternView.bounds; + self.backgroundColorCheckerPatternView.layer.cornerRadius = kViewColorIndicatorSize / 2.f; +} + +- (void)setRandomColorTag:(UIColor *)randomColorTag { + if (![_randomColorTag isEqual:randomColorTag]) { + _randomColorTag = randomColorTag; + self.colorCircleImageView.image = [FLEXUtility circularImageWithColor:randomColorTag radius:6]; + } +} + +- (void)setViewDepth:(NSInteger)viewDepth { + if (_viewDepth != viewDepth) { + _viewDepth = viewDepth; + [self setNeedsLayout]; + } +} + +- (UIColor *)indicatedViewColor { + return self.viewBackgroundColorView.backgroundColor; +} + +- (void)setIndicatedViewColor:(UIColor *)color { + self.viewBackgroundColorView.backgroundColor = color; + + // Hide the checker pattern view if there is no background color + self.backgroundColorCheckerPatternView.hidden = color == nil; + [self setNeedsLayout]; +} + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.h b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.h new file mode 100644 index 00000000..90013efd --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.h @@ -0,0 +1,20 @@ +// +// FLEXHierarchyTableViewController.h +// Flipboard +// +// Created by Ryan Olson on 2014-05-01. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXTableViewController.h" + +@interface FLEXHierarchyTableViewController : FLEXTableViewController + ++ (instancetype)windows:(NSArray *)allWindows + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)selectedView; + +@property (nonatomic) UIView *selectedView; +@property (nonatomic) void(^didSelectRowAction)(UIView *selectedView); + +@end diff --git a/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.m b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.m new file mode 100644 index 00000000..3dfcacec --- /dev/null +++ b/xcode/Pods/FLEX/Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.m @@ -0,0 +1,252 @@ +// +// FLEXHierarchyTableViewController.m +// Flipboard +// +// Created by Ryan Olson on 2014-05-01. +// Copyright (c) 2020 Flipboard. All rights reserved. +// + +#import "FLEXColor.h" +#import "FLEXHierarchyTableViewController.h" +#import "FLEXUtility.h" +#import "FLEXHierarchyTableViewCell.h" +#import "FLEXObjectExplorerViewController.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXResources.h" +#import "FLEXWindow.h" + +typedef NS_ENUM(NSUInteger, FLEXHierarchyScope) { + FLEXHierarchyScopeFullHierarchy, + FLEXHierarchyScopeViewsAtTap +}; + +@interface FLEXHierarchyTableViewController () + +@property (nonatomic) NSArray *allViews; +@property (nonatomic) NSMapTable *depthsForViews; +@property (nonatomic) NSArray *viewsAtTap; +@property (nonatomic) NSArray *displayedViews; +@property (nonatomic, readonly) BOOL showScopeBar; + +@end + +@implementation FLEXHierarchyTableViewController + ++ (instancetype)windows:(NSArray *)allWindows + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)selected { + NSParameterAssert(allWindows.count); + + NSArray *allViews = [self allViewsInHierarchy:allWindows]; + NSMapTable *depths = [self hierarchyDepthsForViews:allViews]; + return [[self alloc] initWithViews:allViews viewsAtTap:viewsAtTap selectedView:selected depths:depths]; +} + +- (instancetype)initWithViews:(NSArray *)allViews + viewsAtTap:(NSArray *)viewsAtTap + selectedView:(UIView *)selectedView + depths:(NSMapTable *)depthsForViews { + NSParameterAssert(allViews); + NSParameterAssert(depthsForViews.count == allViews.count); + + self = [super initWithStyle:UITableViewStylePlain]; + if (self) { + self.allViews = allViews; + self.depthsForViews = depthsForViews; + self.viewsAtTap = viewsAtTap; + self.selectedView = selectedView; + + self.title = @"View Hierarchy Tree"; + } + + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Preserve selection between presentations + self.clearsSelectionOnViewWillAppear = NO; + + // A little more breathing room + self.tableView.rowHeight = 50.0; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + // Separator inset clashes with persistent cell selection + [self.tableView setSeparatorInset:UIEdgeInsetsZero]; + + self.showsSearchBar = YES; + self.showSearchBarInitially = YES; + // Using pinSearchBar on this screen causes a weird visual + // thing on the next view controller that gets pushed. + // + // self.pinSearchBar = YES; + self.searchBarDebounceInterval = kFLEXDebounceInstant; + self.automaticallyShowsSearchBarCancelButton = NO; + if (self.showScopeBar) { + self.searchController.searchBar.showsScopeBar = YES; + self.searchController.searchBar.scopeButtonTitles = @[@"Full Hierarchy", @"Views at Tap"]; + self.selectedScope = FLEXHierarchyScopeViewsAtTap; + } + + [self updateDisplayedViews]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + [self disableToolbar]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + [self trySelectCellForSelectedView]; +} + + +#pragma mark - Hierarchy helpers + ++ (NSArray *)allViewsInHierarchy:(NSArray *)windows { + return [windows flex_flatmapped:^id(UIWindow *window, NSUInteger idx) { + if (![window isKindOfClass:[FLEXWindow class]]) { + return [self viewWithRecursiveSubviews:window]; + } + + return nil; + }]; +} + ++ (NSArray *)viewWithRecursiveSubviews:(UIView *)view { + NSMutableArray *subviews = [NSMutableArray arrayWithObject:view]; + for (UIView *subview in view.subviews) { + [subviews addObjectsFromArray:[self viewWithRecursiveSubviews:subview]]; + } + + return subviews; +} + ++ (NSMapTable *)hierarchyDepthsForViews:(NSArray *)views { + NSMapTable *depths = [NSMapTable strongToStrongObjectsMapTable]; + for (UIView *view in views) { + NSInteger depth = 0; + UIView *tryView = view; + while (tryView.superview) { + tryView = tryView.superview; + depth++; + } + depths[(id)view] = @(depth); + } + + return depths; +} + + +#pragma mark Selection and Filtering Helpers + +- (void)trySelectCellForSelectedView { + NSUInteger selectedViewIndex = [self.displayedViews indexOfObject:self.selectedView]; + if (selectedViewIndex != NSNotFound) { + UITableViewScrollPosition scrollPosition = UITableViewScrollPositionMiddle; + NSIndexPath *selectedViewIndexPath = [NSIndexPath indexPathForRow:selectedViewIndex inSection:0]; + [self.tableView selectRowAtIndexPath:selectedViewIndexPath animated:YES scrollPosition:scrollPosition]; + } +} + +- (void)updateDisplayedViews { + NSArray *candidateViews = nil; + if (self.showScopeBar) { + if (self.selectedScope == FLEXHierarchyScopeViewsAtTap) { + candidateViews = self.viewsAtTap; + } else if (self.selectedScope == FLEXHierarchyScopeFullHierarchy) { + candidateViews = self.allViews; + } + } else { + candidateViews = self.allViews; + } + + if (self.searchText.length) { + self.displayedViews = [candidateViews filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UIView *candidateView, NSDictionary *bindings) { + NSString *title = [FLEXUtility descriptionForView:candidateView includingFrame:NO]; + NSString *candidateViewPointerAddress = [NSString stringWithFormat:@"%p", candidateView]; + BOOL matchedViewPointerAddress = [candidateViewPointerAddress rangeOfString:self.searchText options:NSCaseInsensitiveSearch].location != NSNotFound; + BOOL matchedViewTitle = [title rangeOfString:self.searchText options:NSCaseInsensitiveSearch].location != NSNotFound; + return matchedViewPointerAddress || matchedViewTitle; + }]]; + } else { + self.displayedViews = candidateViews; + } + + [self.tableView reloadData]; +} + +- (void)setSelectedView:(UIView *)selectedView { + _selectedView = selectedView; + if (self.isViewLoaded) { + [self trySelectCellForSelectedView]; + } +} + + +#pragma mark - Search Bar / Scope Bar + +- (BOOL)showScopeBar { + return self.viewsAtTap.count > 0; +} + +- (void)updateSearchResults:(NSString *)newText { + [self updateDisplayedViews]; + + // If the search bar text field is active, don't scroll on selection because we may want + // to continue typing. Otherwise, scroll so that the selected cell is visible. + if (self.searchController.searchBar.isFirstResponder) { + [self trySelectCellForSelectedView]; + } +} + + +#pragma mark - Table View Data Source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.displayedViews.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *CellIdentifier = @"Cell"; + FLEXHierarchyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (!cell) { + cell = [[FLEXHierarchyTableViewCell alloc] initWithReuseIdentifier:CellIdentifier]; + } + + UIView *view = self.displayedViews[indexPath.row]; + + cell.textLabel.text = [FLEXUtility descriptionForView:view includingFrame:NO]; + cell.detailTextLabel.text = [FLEXUtility detailDescriptionForView:view]; + cell.randomColorTag = [FLEXUtility consistentRandomColorForObject:view]; + cell.viewDepth = self.depthsForViews[view].integerValue; + cell.indicatedViewColor = view.backgroundColor; + + if (view.isHidden || view.alpha < 0.01) { + cell.textLabel.textColor = FLEXColor.deemphasizedTextColor; + cell.detailTextLabel.textColor = FLEXColor.deemphasizedTextColor; + } else { + cell.textLabel.textColor = FLEXColor.primaryTextColor; + cell.detailTextLabel.textColor = FLEXColor.primaryTextColor; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + _selectedView = self.displayedViews[indexPath.row]; // Don't scroll, avoid setter + if (self.didSelectRowAction) { + self.didSelectRowAction(_selectedView); + } +} + +- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { + UIView *drillInView = self.displayedViews[indexPath.row]; + FLEXObjectExplorerViewController *viewExplorer = [FLEXObjectExplorerFactory explorerViewControllerForObject:drillInView]; + [self.navigationController pushViewController:viewExplorer animated:YES]; +} + +@end diff --git a/xcode/Pods/FLEX/README.md b/xcode/Pods/FLEX/README.md index e5b50468..db46af83 100644 --- a/xcode/Pods/FLEX/README.md +++ b/xcode/Pods/FLEX/README.md @@ -8,7 +8,7 @@ FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for iOS development. When presented, FLEX shows a toolbar that lives in a window above your application. From this toolbar, you can view and modify nearly every piece of state in your running application. -![View Hierarchy Exploration](https://engineering.flipboard.com/assets/flex/basic-view-exploration.gif) +Demo ## Give Yourself Debugging Superpowers @@ -43,7 +43,7 @@ Short version: ```swift // Swift -FLEXManager.shared().showExplorer() +FLEXManager.shared.showExplorer() ``` More complete version: @@ -71,64 +71,73 @@ More complete version: ### Modify Views Once a view is selected, you can tap on the info bar below the toolbar to present more details about the view. From there, you can modify properties and call methods. -![View Modification](https://engineering.flipboard.com/assets/flex/advanced-view-editing.gif) +Modify Views ### Network History When enabled, network debugging allows you to view all requests made using NSURLConnection or NSURLSession. Settings allow you to adjust what kind of response bodies get cached and the maximum size limit of the response cache. You can choose to have network debugging enabled automatically on app launch. This setting is persisted across launches. -![Network History](https://engineering.flipboard.com/assets/flex/network-history.gif) +Network History ### All Objects on the Heap FLEX queries malloc for all the live allocated memory blocks and searches for ones that look like objects. You can see everything from here. -![Heap Exploration](https://engineering.flipboard.com/assets/flex/heap-browser.gif) +Heap/Live Objects Explorer + +### Explore-at-address + +If you get your hands on an arbitrary address, you can try explore the object at that address, and FLEX will open it if it can verify the address points to a valid object. If FLEX isn't sure, it'll warn you and refuse to dereference the pointer. If you know better, however, you can choose to explore it anyway by choosing "Unsafe Explore" + +Address Explorer ### Simulator Keyboard Shortcuts Default keyboard shortcuts allow you to activate the FLEX tools, scroll with the arrow keys, and close modals using the escape key. You can also add custom keyboard shortcuts via `-[FLEXManager registerSimulatorShortcutWithKey:modifiers:action:description]` -![Simulator Shortcuts](https://cloud.githubusercontent.com/assets/1422245/10002927/1106fd32-6067-11e5-8e21-57a357c259b6.png) +Simulator Keyboard Shortcuts ### File Browser -View the file system within your app's sandbox. FLEX shows file sizes, image previews, and pretty prints `.json` and `.plist` files. You can copy text and image files to the pasteboard if you want to inspect them outside of your app. +View the file system within your app's bundle or sandbox container. FLEX shows file sizes, image previews, and pretty prints `.json` and `.plist` files. You can rename and delete files and folders. You can "share" any file if you want to inspect them outside of your app. -![File Browser](https://engineering.flipboard.com/assets/flex/file-browser.gif) +File Browser ### SQLite Browser SQLite database files (with either `.db` or `.sqlite` extensions), or [Realm](https://realm.io) database files can be explored using FLEX. The database browser lets you view all tables, and individual tables can be sorted by tapping column headers. -![Database Browser](https://cloud.githubusercontent.com/assets/1422245/11786700/d0ab95dc-a23c-11e5-80ce-0e1b4dba2b6b.png) +SQLite Browser ### 3D Touch in the Simulator Using a combination of the command, control, and shift keys, you can simulate different levels of 3D touch pressure in the simulator. Each key contributes 1/3 of maximum possible force. Note that you need to move the touch slightly to get pressure updates. -![Simulator 3D Touch](https://cloud.githubusercontent.com/assets/1422245/11786615/5d4ef96c-a23c-11e5-975e-67275341e439.gif) +Simulator 3D Touch -### System Library Exploration -Go digging for all things public and private. To learn more about a class, you can create an instance of it and explore its default state. +### Explore Loaded Libraries +Go digging for all things public and private. To learn more about a class, you can create an instance of it and explore its default state. You can also type in a class name to jump to that class directly if you know which class you're looking for. -![System Libraries Browser](https://engineering.flipboard.com/assets/flex/system-libraries-browser.gif) +Loaded Libraries Exploration ### NSUserDefaults Editing FLEX allows you to edit defaults that are any combination of strings, numbers, arrays, and dictionaries. The input is parsed as `JSON`. If other kinds of objects are set for a defaults key (i.e. `NSDate`), you can view them but not edit them. -![NSUserDefaults Editor](https://engineering.flipboard.com/assets/flex/nsuserdefaults-editor.gif) +NSUserDefaults Editing ### Learning from Other Apps The code injection is left as an exercise for the reader. :innocent: -![Springboard Lock Screen](https://engineering.flipboard.com/assets/flex/flex-readme-reverse-1.png) ![Springboard Home Screen](https://engineering.flipboard.com/assets/flex/flex-readme-reverse-2.png) +

+ Springboard Lock Screen + Springboard Home Screen +

## Installation -FLEX requires an app that targets iOS 9 or higher. +FLEX requires an app that targets iOS 9 or higher. To run the Example project, open a Terminal window in the Example/ folder and run `pod install`, then open the generated workspace. ### CocoaPods FLEX is available on [CocoaPods](https://cocoapods.org/pods/FLEX). Simply add the following line to your podfile: ```ruby -pod 'FLEX', '~> 3.0', :configurations => ['Debug'] +pod 'FLEX', :configurations => ['Debug'] ``` ### Carthage @@ -136,27 +145,40 @@ pod 'FLEX', '~> 3.0', :configurations => ['Debug'] Add the following to your Cartfile: ``` -github "flipboard/FLEX" ~> 3.0 +github "flipboard/FLEX" ``` +### Buck + +If you're using Buck, you may want to silence some of the warnings emitted by FLEX. You will need to build FLEX as an `apple_library` and pass the `-Wno-unsupported-availability-guard` flag, as well as the other warning flags below to disable any other warnings FLEX may have. + ### Manual -Manually add the files in `Classes/` to your Xcode project. +Manually add the files in `Classes/` to your Xcode project, or just drag in the entire `FLEX/` folder. Be sure to exclude FLEX from `Release` builds or your app will be rejected. + +##### Silencing warnings + +Add the following flags to to **Other Warnings Flags** in **Build Settings:** +- `-Wno-deprecated-declarations` +- `-Wno-strict-prototypes` +- `-Wno-unsupported-availability-guard` ## Excluding FLEX from Release (App Store) Builds FLEX makes it easy to explore the internals of your app, so it is not something you should expose to your users. Fortunately, it is easy to exclude FLEX files from Release builds. The strategies differ depending on how you integrated FLEX in your project, and are described below. -At the places in your code where you integrate FLEX, do a `#if DEBUG` check to ensure the tool is only accessible in your `Debug` builds and to avoid errors in your `Release` builds. For more help with integrating FLEX, see the example project. +Wrap the places in your code where you integrate FLEX with an `#if DEBUG` statement to ensure the tool is only accessible in your `Debug` builds and to avoid errors in your `Release` builds. For more help with integrating FLEX, see the example project. -### FLEX added with CocoaPods +### CocoaPods -CocoaPods automatically excludes FLEX from release builds if you only specify the Debug configuration for FLEX in your Podfile. +CocoaPods automatically excludes FLEX from release builds if you only specify the Debug configuration for FLEX in your Podfile: -### FLEX added with Carthage +```ruby +pod 'FLEX', :configurations => ['Debug'] +``` -If you are using Carthage, only including the `FLEX.framework` in debug builds is easy: +### Carthage 1. Do NOT add `FLEX.framework` to the embedded binaries of your target, as it would otherwise be included in all builds (therefore also in release ones). 1. Instead, add `$(PROJECT_DIR)/Carthage/Build/iOS` to your target _Framework Search Paths_ (this setting might already be present if you already included other frameworks with Carthage). This makes it possible to import the FLEX framework from your source files. It does not harm if this setting is added for all configurations, but it should at least be added for the debug one. @@ -170,17 +192,13 @@ If you are using Carthage, only including the `FLEX.framework` in debug builds i Finally, add `$(SRCROOT)/Carthage/Build/iOS/FLEX.framework` as input file of this script phase. -

+ ### FLEX files added manually to a project -In Xcode, navigate to the "Build Settings" tab of your project. Click the plus and select `Add User-Defined Setting`. - -![Add User-Defined Setting](https://engineering.flipboard.com/assets/flex/flex-readme-exclude-1.png) - -Name the setting `EXCLUDED_SOURCE_FILE_NAMES`. For your `Release` configuration, set the value to `FLEX*`. This will exclude all files with the prefix FLEX from compilation. Leave the value blank for your `Debug` configuration. +In Xcode, navigate to `Build Settings > Build Options > Excluded Source File Names`. For your `Release` configuration, set it to `FLEX*` like this to exclude all files with the `FLEX` prefix: -![EXCLUDED_SOURCE_FILE_NAMES](https://engineering.flipboard.com/assets/flex/flex-readme-exclude-2.png) + ## Additional Notes @@ -190,6 +208,7 @@ Name the setting `EXCLUDED_SOURCE_FILE_NAMES`. For your `Release` configuration, ## Thanks & Credits FLEX builds on ideas and inspiration from open source tools that came before it. The following resources have been particularly helpful: +- [MirrorKit](https://github.com/NSExceptional/MirrorKit): an Objective-C wrapper around the Objective-C runtime. - [DCIntrospect](https://github.com/domesticcatsoftware/DCIntrospect): view hierarchy debugging for the iOS simulator. - [PonyDebugger](https://github.com/square/PonyDebugger): network, core data, and view hierarchy debugging using the Chrome Developer Tools interface. - [Mike Ash](https://www.mikeash.com/pyblog/): well written, informative blog posts on all things obj-c and more. The links below were very useful for this project: @@ -212,5 +231,4 @@ Please see our [Contributing Guide](https://github.com/Flipboard/FLEX/blob/maste ## TODO - Swift runtime introspection (swift classes, swift objects on the heap, etc.) -- Improved file type detection and display in the file browser - Add new NSUserDefault key/value pairs on the fly diff --git a/xcode/Pods/FreeStreamer/FreeStreamer/FreeStreamer/FSAudioStream.h b/xcode/Pods/FreeStreamer/FreeStreamer/FreeStreamer/FSAudioStream.h index 7236002b..4b0f1f7a 100644 --- a/xcode/Pods/FreeStreamer/FreeStreamer/FreeStreamer/FSAudioStream.h +++ b/xcode/Pods/FreeStreamer/FreeStreamer/FreeStreamer/FSAudioStream.h @@ -7,7 +7,11 @@ */ #import +#if (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) +#import +#else #import +#endif /** * The major version of the current release. diff --git a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m index d668b4fd..57b5f3d5 100644 --- a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m +++ b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m @@ -10,10 +10,10 @@ UIEdgeInsets JDStatusBarRootVCLayoutMargin(void) { - UIEdgeInsets layoutMargins = [[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] layoutMargins]; - if (layoutMargins.top > 8 && layoutMargins.bottom > 8) { - return layoutMargins; - } else { - return UIEdgeInsetsZero; // ignore default margins - } + UIEdgeInsets layoutMargins = [[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] layoutMargins]; + if (layoutMargins.top > 8 && layoutMargins.bottom > 8) { + return layoutMargins; + } else { + return UIEdgeInsetsZero; // ignore default margins + } } diff --git a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m index ca9bf187..8e8139d5 100644 --- a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m +++ b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m @@ -202,14 +202,14 @@ - (UIView*)showWithStatus:(NSString *)status // prepare for new style if (style != self.activeStyle) { - self.activeStyle = style; - if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) { - self.topBar.alpha = 0.0; - self.topBar.transform = CGAffineTransformIdentity; - } else { - self.topBar.alpha = 1.0; - self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height); - } + self.activeStyle = style; + if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) { + self.topBar.alpha = 0.0; + self.topBar.transform = CGAffineTransformIdentity; + } else { + self.topBar.alpha = 1.0; + self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height); + } } // Force update the TopBar frame if the height is 0 @@ -494,8 +494,8 @@ - (UIView *)progressView; #pragma mark Rotation - (void)updateContentFrame:(CGRect)rect { - [self updateWindowTransform]; - [self updateTopBarFrameWithStatusBarFrame:rect]; + [self updateWindowTransform]; + [self updateTopBarFrameWithStatusBarFrame:rect]; } - (void)updateWindowTransform; @@ -586,58 +586,64 @@ - (BOOL)shouldAutorotate { #if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 - (NSUInteger)supportedInterfaceOrientations { + return [[self mainController] supportedInterfaceOrientations]; +} #else - - (UIInterfaceOrientationMask)supportedInterfaceOrientations { +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return [[self mainController] supportedInterfaceOrientations]; +} #endif - return [[self mainController] supportedInterfaceOrientations]; - } - - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - return [[self mainController] preferredInterfaceOrientationForPresentation]; - } - - // statusbar +- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { + return [[self mainController] preferredInterfaceOrientationForPresentation]; +} - static BOOL JDUIViewControllerBasedStatusBarAppearanceEnabled() { - static BOOL enabled = NO; - static dispatch_once_t onceToken; +// statusbar - dispatch_once(&onceToken, ^{ - enabled = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue]; - }); +static BOOL JDUIViewControllerBasedStatusBarAppearanceEnabled() { + static BOOL enabled = NO; + static dispatch_once_t onceToken; - return enabled; - } + dispatch_once(&onceToken, ^{ + enabled = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue]; + }); - - (UIStatusBarStyle)preferredStatusBarStyle { - if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) { - return [[self mainController] preferredStatusBarStyle]; - } + return enabled; +} - return [[UIApplication sharedApplication] statusBarStyle]; +- (UIStatusBarStyle)preferredStatusBarStyle { + if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) { + return [[self mainController] preferredStatusBarStyle]; } - - (BOOL)prefersStatusBarHidden { + return [[UIApplication sharedApplication] statusBarStyle]; +} + +- (BOOL)prefersStatusBarHidden { + if (@available(iOS 13, *)) { + return JDStatusBarRootVCLayoutMargin().top == 0; + } else { return NO; } +} - - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { - if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) { - return [[self mainController] preferredStatusBarUpdateAnimation]; - } - return [super preferredStatusBarUpdateAnimation]; +- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { + if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) { + return [[self mainController] preferredStatusBarUpdateAnimation]; } + return [super preferredStatusBarUpdateAnimation]; +} - @end +@end - @implementation UIApplication (mainWindow) - // we don't want the keyWindow, since it could be our own window - - (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow *)ignoringWindow { - for (UIWindow *window in [[UIApplication sharedApplication] windows]) { - if (!window.hidden && window != ignoringWindow) { - return window; - } +@implementation UIApplication (mainWindow) +// we don't want the keyWindow, since it could be our own window +- (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow *)ignoringWindow { + for (UIWindow *window in [[UIApplication sharedApplication] windows]) { + if (!window.hidden && window != ignoringWindow) { + return window; } - return nil; } - @end + return nil; +} +@end diff --git a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h index aa57669f..e656c6a7 100644 --- a/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h +++ b/xcode/Pods/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h @@ -25,34 +25,34 @@ extern NSString *const JDStatusBarStyleDefault; extern NSString *const JDStatusBarStyleDark; typedef NS_ENUM(NSInteger, JDStatusBarAnimationType) { - /// Notification won't animate - JDStatusBarAnimationTypeNone, - /// Notification will move in from the top, and move out again to the top - JDStatusBarAnimationTypeMove, - /// Notification will fall down from the top and bounce a little bit - JDStatusBarAnimationTypeBounce, - /// Notification will fade in and fade out - JDStatusBarAnimationTypeFade, + /// Notification won't animate + JDStatusBarAnimationTypeNone, + /// Notification will move in from the top, and move out again to the top + JDStatusBarAnimationTypeMove, + /// Notification will fall down from the top and bounce a little bit + JDStatusBarAnimationTypeBounce, + /// Notification will fade in and fade out + JDStatusBarAnimationTypeFade, }; typedef NS_ENUM(NSInteger, JDStatusBarProgressBarPosition) { - /// progress bar will be at the bottom of the status bar - JDStatusBarProgressBarPositionBottom, - /// progress bar will be at the center of the status bar - JDStatusBarProgressBarPositionCenter, - /// progress bar will be at the top of the status bar - JDStatusBarProgressBarPositionTop, - /// progress bar will be below the status bar (the progress bar won't move with the status bar in this case) - JDStatusBarProgressBarPositionBelow, - /// progress bar will be below the navigation bar (the progress bar won't move with the status bar in this case) - JDStatusBarProgressBarPositionNavBar, + /// progress bar will be at the bottom of the status bar + JDStatusBarProgressBarPositionBottom, + /// progress bar will be at the center of the status bar + JDStatusBarProgressBarPositionCenter, + /// progress bar will be at the top of the status bar + JDStatusBarProgressBarPositionTop, + /// progress bar will be below the status bar (the progress bar won't move with the status bar in this case) + JDStatusBarProgressBarPositionBelow, + /// progress bar will be below the navigation bar (the progress bar won't move with the status bar in this case) + JDStatusBarProgressBarPositionNavBar, }; typedef NS_ENUM(NSInteger, JDStatusBarHeightForIPhoneX) { - /// shows parts of the navigation bar - JDStatusBarHeightForIPhoneXHalf, - /// covers the full navigation bar - JDStatusBarHeightForIPhoneXFullNavBar, + /// shows parts of the navigation bar + JDStatusBarHeightForIPhoneXHalf, + /// covers the full navigation bar + JDStatusBarHeightForIPhoneXFullNavBar, }; /** diff --git a/xcode/Pods/JDStatusBarNotification/README.md b/xcode/Pods/JDStatusBarNotification/README.md index 0831776d..62039fc5 100644 --- a/xcode/Pods/JDStatusBarNotification/README.md +++ b/xcode/Pods/JDStatusBarNotification/README.md @@ -1,6 +1,6 @@ # JDStatusBarNotification -Show messages on top of the status bar. Customizable colors, font and animation. Supports progress display and can show an activity indicator. iOS 7/8 ready. iOS6 support. Please open a [Github issue], if you think anything is missing or wrong. +Show messages on top of the status bar. Customizable colors, font and animation. Supports progress display and can show an activity indicator. iOS 6+ support, iPhone X support. Please open a [Github issue], if you think anything is missing or wrong. ![Animation](gfx/animation.gif "Animation") @@ -131,6 +131,11 @@ The `prepareBlock` gives you a copy of the default style, which can be modified - `JDStatusBarProgressBarPositionBelow` - `JDStatusBarProgressBarPositionNavBar` +#### iPhone X behavior + +- `JDStatusBarHeightForIPhoneXHalf` +- `JDStatusBarHeightForIPhoneXFullNavBar` + ## Twitter I'm [@calimarkus](http://twitter.com/calimarkus) on Twitter. Feel free to [post a tweet](https://twitter.com/intent/tweet?button_hashtag=JDStatusBarNotification&text=Simple%20and%20customizable%20statusbar%20notifications%20for%20iOS!%20Check%20it%20out.%20https://github.com/calimarkus/JDStatusBarNotification&via=calimarkus), if you like JDStatusBarNotification. diff --git a/xcode/Pods/Local Podspecs/AFNetworking.podspec.json b/xcode/Pods/Local Podspecs/AFNetworking.podspec.json index f0935cdc..6979cf2d 100644 --- a/xcode/Pods/Local Podspecs/AFNetworking.podspec.json +++ b/xcode/Pods/Local Podspecs/AFNetworking.podspec.json @@ -1,8 +1,8 @@ { "name": "AFNetworking", - "version": "3.2.1", + "version": "4.0.1", "license": "MIT", - "summary": "A delightful iOS and OS X networking framework.", + "summary": "A delightful networking framework for Apple platforms.", "homepage": "https://github.com/AFNetworking/AFNetworking", "social_media_url": "https://twitter.com/AFNetworking", "authors": { @@ -10,56 +10,52 @@ }, "source": { "git": "https://github.com/AFNetworking/AFNetworking.git", - "tag": "3.2.1", - "submodules": true + "tag": "4.0.1" }, - "requires_arc": true, - "public_header_files": "AFNetworking/AFNetworking.h", - "source_files": "AFNetworking/AFNetworking.h", - "prefix_header_contents": "#ifndef TARGET_OS_IOS\n #define TARGET_OS_IOS TARGET_OS_IPHONE\n#endif\n\n#ifndef TARGET_OS_WATCH\n #define TARGET_OS_WATCH 0\n#endif\n\n#ifndef TARGET_OS_TV\n #define TARGET_OS_TV 0\n#endif", "platforms": { - "ios": "8.0", - "osx": "10.9", + "ios": "9.0", + "osx": "10.10", "watchos": "2.0", "tvos": "9.0" }, + "ios": { + "pod_target_xcconfig": { + "PRODUCT_BUNDLE_IDENTIFIER": "com.alamofire.AFNetworking" + } + }, + "osx": { + "pod_target_xcconfig": { + "PRODUCT_BUNDLE_IDENTIFIER": "com.alamofire.AFNetworking" + } + }, + "watchos": { + "pod_target_xcconfig": { + "PRODUCT_BUNDLE_IDENTIFIER": "com.alamofire.AFNetworking-watchOS" + } + }, + "tvos": { + "pod_target_xcconfig": { + "PRODUCT_BUNDLE_IDENTIFIER": "com.alamofire.AFNetworking" + } + }, + "source_files": "AFNetworking/AFNetworking.h", "subspecs": [ { "name": "Serialization", - "source_files": "AFNetworking/AFURL{Request,Response}Serialization.{h,m}", - "public_header_files": "AFNetworking/AFURL{Request,Response}Serialization.h", - "watchos": { - "frameworks": [ - "MobileCoreServices", - "CoreGraphics" - ] - }, - "ios": { - "frameworks": [ - "MobileCoreServices", - "CoreGraphics" - ] - }, - "osx": { - "frameworks": "CoreServices" - } + "source_files": "AFNetworking/AFURL{Request,Response}Serialization.{h,m}" }, { "name": "Security", - "source_files": "AFNetworking/AFSecurityPolicy.{h,m}", - "public_header_files": "AFNetworking/AFSecurityPolicy.h", - "frameworks": "Security" + "source_files": "AFNetworking/AFSecurityPolicy.{h,m}" }, { "name": "Reachability", "platforms": { - "ios": "8.0", - "osx": "10.9", + "ios": "9.0", + "osx": "10.10", "tvos": "9.0" }, - "source_files": "AFNetworking/AFNetworkReachabilityManager.{h,m}", - "public_header_files": "AFNetworking/AFNetworkReachabilityManager.h", - "frameworks": "SystemConfiguration" + "source_files": "AFNetworking/AFNetworkReachabilityManager.{h,m}" }, { "name": "NSURLSession", @@ -95,16 +91,12 @@ "source_files": [ "AFNetworking/AF{URL,HTTP}SessionManager.{h,m}", "AFNetworking/AFCompatibilityMacros.h" - ], - "public_header_files": [ - "AFNetworking/AF{URL,HTTP}SessionManager.h", - "AFNetworking/AFCompatibilityMacros.h" ] }, { "name": "UIKit", "platforms": { - "ios": "8.0", + "ios": "9.0", "tvos": "9.0" }, "dependencies": { @@ -112,7 +104,6 @@ ] }, - "public_header_files": "UIKit+AFNetworking/*.h", "source_files": "UIKit+AFNetworking" } ] diff --git a/xcode/Pods/Local Podspecs/AFOAuth2Manager.podspec.json b/xcode/Pods/Local Podspecs/AFOAuth2Manager.podspec.json new file mode 100644 index 00000000..3a558c41 --- /dev/null +++ b/xcode/Pods/Local Podspecs/AFOAuth2Manager.podspec.json @@ -0,0 +1,31 @@ +{ + "name": "AFOAuth2Manager", + "version": "3.0.1", + "license": "MIT", + "summary": "AFNetworking Extension for OAuth 2 Authentication.", + "homepage": "https://github.com/AFNetworking/AFOAuth2Manager", + "social_media_url": "https://twitter.com/AFNetworking", + "authors": { + "Mattt Thompson": "m@mattt.me" + }, + "source": { + "git": "https://github.com/AFNetworking/AFOAuth2Manager.git", + "tag": "3.0.1" + }, + "source_files": "AFOAuth2Manager", + "requires_arc": true, + "platforms": { + "ios": "7.0", + "osx": "10.9", + "tvos": "9.0", + "watchos": "2.0" + }, + "dependencies": { + "AFNetworking/NSURLSession": [ + "~>4.0" + ] + }, + "ios": { + "frameworks": "Security" + } +} diff --git a/xcode/Pods/Local Podspecs/DTFoundation.podspec.json b/xcode/Pods/Local Podspecs/DTFoundation.podspec.json index 64e30c45..19134336 100644 --- a/xcode/Pods/Local Podspecs/DTFoundation.podspec.json +++ b/xcode/Pods/Local Podspecs/DTFoundation.podspec.json @@ -180,7 +180,7 @@ }, "ios": { "frameworks": [ - "MobileCoreServices" + "CoreServices" ] }, "source_files": "Core/Source/DTUTI/*.{h,m}" diff --git a/xcode/Pods/Local Podspecs/FLEX.podspec.json b/xcode/Pods/Local Podspecs/FLEX.podspec.json index 2b1f1ac1..57624dae 100644 --- a/xcode/Pods/Local Podspecs/FLEX.podspec.json +++ b/xcode/Pods/Local Podspecs/FLEX.podspec.json @@ -1,6 +1,6 @@ { "name": "FLEX", - "version": "3.0.0", + "version": "4.1.1", "summary": "A set of in-app debugging and exploration tools for iOS", "description": "- Inspect and modify views in the hierarchy.\n- View Detailed network request history.\n- See the properties and ivars on any object.\n- Dynamically modify many properties and ivars.\n- Dynamically call instance and class methods.\n- Access any live object via a scan of the heap.\n- See system log messages (i.e. from `NSLog()`).\n- View the file system within your app's sandbox.\n- Explore all classes in your app and linked systems frameworks (public and private).\n- Quickly access useful objects such as `[UIApplication sharedApplication]`, the app delegate, the root view controller on the key window, and more.\n- Dynamically view and modify `NSUserDefaults` values.", "homepage": "https://github.com/Flipboard/FLEX", @@ -27,9 +27,9 @@ }, "source": { "git": "https://github.com/Flipboard/FLEX.git", - "tag": "3.0.0" + "tag": "4.1.1" }, - "source_files": "Classes/**/*.{h,m,mm}", + "source_files": "Classes/**/*.{h,c,m,mm}", "frameworks": [ "Foundation", "UIKit", @@ -44,8 +44,19 @@ "sqlite3" ], "requires_arc": true, + "compiler_flags": "-Wno-unsupported-availability-guard -Wno-strict-prototypes", "public_header_files": [ - "Classes/**/FLEXManager.h", - "Classes/FLEX.h" + "Classes/*.h", + "Classes/Manager/*.h", + "Classes/Toolbar/*.h", + "Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h", + "Classes/Core/**/*.h", + "Classes/Utility/Runtime/Objc/**/*.h", + "Classes/ObjectExplorers/**/*.h", + "Classes/Editing/**/*.h", + "Classes/Utility/FLEXMacros.h", + "Classes/Utility/Categories/*.h", + "Classes/Utility/FLEXAlert.h", + "Classes/Utility/FLEXResources.h" ] } diff --git a/xcode/Pods/Local Podspecs/JDStatusBarNotification.podspec.json b/xcode/Pods/Local Podspecs/JDStatusBarNotification.podspec.json new file mode 100644 index 00000000..0a65eae5 --- /dev/null +++ b/xcode/Pods/Local Podspecs/JDStatusBarNotification.podspec.json @@ -0,0 +1,23 @@ +{ + "name": "JDStatusBarNotification", + "version": "1.6.1", + "summary": "Easy, customizable notifications displayed on top of the statusbar. With progress and activity. iPhone X ready.", + "description": "Show messages on top of the status bar. Customizable colors, font and animation. Supports progress display and can show an activity indicator. Supports iOS 6+ and iPhone X.", + "homepage": "https://github.com/calimarkus/JDStatusBarNotification", + "license": { + "type": "MIT" + }, + "authors": { + "Markus Emrich": "markus.emrich@gmail.com" + }, + "source": { + "git": "https://github.com/calimarkus/JDStatusBarNotification.git", + "tag": "1.6.1" + }, + "source_files": "JDStatusBarNotification/**", + "frameworks": "QuartzCore", + "platforms": { + "ios": "6.0" + }, + "requires_arc": true +} diff --git a/xcode/Pods/Local Podspecs/Reachability.podspec.json b/xcode/Pods/Local Podspecs/Reachability.podspec.json index b7f43a0e..987d2d4a 100644 --- a/xcode/Pods/Local Podspecs/Reachability.podspec.json +++ b/xcode/Pods/Local Podspecs/Reachability.podspec.json @@ -18,10 +18,11 @@ "source_files": "Reachability.{h,m}", "frameworks": "SystemConfiguration", "requires_arc": true, - "swift_version": "4.1", + "swift_versions": "4.1", "platforms": { "ios": "6.0", "osx": "10.8", "tvos": "9.0" - } + }, + "swift_version": "4.1" } diff --git a/xcode/Pods/Local Podspecs/SDWebImage.podspec.json b/xcode/Pods/Local Podspecs/SDWebImage.podspec.json index 2ebcbe9e..342c3e61 100644 --- a/xcode/Pods/Local Podspecs/SDWebImage.podspec.json +++ b/xcode/Pods/Local Podspecs/SDWebImage.podspec.json @@ -1,6 +1,6 @@ { "name": "SDWebImage", - "version": "3.8.1", + "version": "3.8.3", "platforms": { "ios": "7.0", "tvos": "9.0" @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/rs/SDWebImage.git", - "tag": "3.8.1" + "tag": "3.8.3" }, "description": "This library provides a category for UIImageView with support for remote images coming from the web. It provides an UIImageView category adding web image and cache management to the Cocoa Touch framework, an asynchronous image downloader, an asynchronous memory + disk image caching with automatic cache expiration handling, a guarantee that the same URL won't be downloaded several times, a guarantee that bogus URLs won't be retried again and again, and performances!", "requires_arc": true, diff --git a/xcode/Pods/Local Podspecs/SocketRocket.podspec.json b/xcode/Pods/Local Podspecs/SocketRocket.podspec.json index 0497ad5f..96517553 100644 --- a/xcode/Pods/Local Podspecs/SocketRocket.podspec.json +++ b/xcode/Pods/Local Podspecs/SocketRocket.podspec.json @@ -1,6 +1,6 @@ { "name": "SocketRocket", - "version": "0.5.1", + "version": "0.5.2", "summary": "A conforming WebSocket (RFC 6455) client library for iOS, macOS and tvOS.", "homepage": "https://github.com/facebook/SocketRocket", "authors": { @@ -11,7 +11,7 @@ "license": "BSD", "source": { "git": "https://github.com/facebook/SocketRocket.git", - "tag": "0.5.1" + "tag": "0.5.2" }, "requires_arc": true, "source_files": "SocketRocket/**/*.{h,m}", diff --git a/xcode/Pods/MBProgressHUD/LICENSE b/xcode/Pods/MBProgressHUD/LICENSE index 1c0d59bb..d7f0647b 100644 --- a/xcode/Pods/MBProgressHUD/LICENSE +++ b/xcode/Pods/MBProgressHUD/LICENSE @@ -1,4 +1,4 @@ -Copyright © 2009-2016 Matej Bukovinski +Copyright © 2009-2020 Matej Bukovinski Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/xcode/Pods/MBProgressHUD/MBProgressHUD.h b/xcode/Pods/MBProgressHUD/MBProgressHUD.h index a7b54ee9..38b50049 100644 --- a/xcode/Pods/MBProgressHUD/MBProgressHUD.h +++ b/xcode/Pods/MBProgressHUD/MBProgressHUD.h @@ -1,10 +1,10 @@ // // MBProgressHUD.h -// Version 1.1.0 +// Version 1.2.0 // Created by Matej Bukovinski on 2.4.09. // -// This code is distributed under the terms and conditions of the MIT license. +// This code is distributed under the terms and conditions of the MIT license. // Copyright © 2009-2016 Matej Bukovinski // @@ -75,7 +75,7 @@ typedef void (^MBProgressHUDCompletionBlock)(void); NS_ASSUME_NONNULL_BEGIN -/** +/** * Displays a simple HUD window containing a progress indicator and two optional labels for short messages. * * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. @@ -125,7 +125,7 @@ NS_ASSUME_NONNULL_BEGIN * @param view The view that is going to be searched. * @return A reference to the last HUD subview discovered. */ -+ (nullable MBProgressHUD *)HUDForView:(UIView *)view; ++ (nullable MBProgressHUD *)HUDForView:(UIView *)view NS_SWIFT_NAME(forView(_:)); /** * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with @@ -136,8 +136,8 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithView:(UIView *)view; -/** - * Displays the HUD. +/** + * Displays the HUD. * * @note You need to make sure that the main thread completes its run loop soon after this method call so that * the user interface can be updated. Call this method when your task is already set up to be executed in a new thread @@ -150,7 +150,7 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)showAnimated:(BOOL)animated; -/** +/** * Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to * hide the HUD when your task completes. * @@ -161,7 +161,7 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)hideAnimated:(BOOL)animated; -/** +/** * Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to * hide the HUD when your task completes. * @@ -179,16 +179,18 @@ NS_ASSUME_NONNULL_BEGIN @property (weak, nonatomic) id delegate; /** - * Called after the HUD is hiden. + * Called after the HUD is hidden. */ @property (copy, nullable) MBProgressHUDCompletionBlock completionBlock; -/* +/** * Grace period is the time (in seconds) that the invoked method may be run without * showing the HUD. If the task finishes before the grace time runs out, the HUD will * not be shown at all. * This may be used to prevent HUD display for very short tasks. * Defaults to 0 (no grace time). + * @note The graceTime needs to be set before the hud is shown. You thus can't use `showHUDAddedTo:animated:`, + * but instead need to alloc / init the HUD, configure the grace time and than show it manually. */ @property (assign, nonatomic) NSTimeInterval graceTime; @@ -207,7 +209,7 @@ NS_ASSUME_NONNULL_BEGIN /// @name Appearance -/** +/** * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. */ @property (assign, nonatomic) MBProgressHUDMode mode; @@ -250,7 +252,9 @@ NS_ASSUME_NONNULL_BEGIN /** * When enabled, the bezel center gets slightly affected by the device accelerometer data. - * Has no effect on iOS < 7.0. Defaults to YES. + * Defaults to NO. + * + * @note This can cause main thread checker assertions on certain devices. https://github.com/jdg/MBProgressHUD/issues/552 */ @property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR; @@ -298,7 +302,7 @@ NS_ASSUME_NONNULL_BEGIN @property (strong, nonatomic, readonly) UILabel *detailsLabel; /** - * A button that is placed below the labels. Visible only if a target / action is added. + * A button that is placed below the labels. Visible only if a target / action is added and a title is assigned.. */ @property (strong, nonatomic, readonly) UIButton *button; @@ -309,8 +313,8 @@ NS_ASSUME_NONNULL_BEGIN @optional -/** - * Called after the HUD was fully hidden from the screen. +/** + * Called after the HUD was fully hidden from the screen. */ - (void)hudWasHidden:(MBProgressHUD *)hud; @@ -320,7 +324,7 @@ NS_ASSUME_NONNULL_BEGIN /** * A progress view for showing definite progress by filling up a circle (pie chart). */ -@interface MBRoundProgressView : UIView +@interface MBRoundProgressView : UIView /** * Progress (0.0 to 1.0) @@ -334,7 +338,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) UIColor *progressTintColor; /** - * Indicator background (non-progress) color. + * Indicator background (non-progress) color. * Only applicable on iOS versions older than iOS 7. * Defaults to translucent white (alpha 0.1). */ @@ -349,7 +353,7 @@ NS_ASSUME_NONNULL_BEGIN /** - * A flat bar progress view. + * A flat bar progress view. */ @interface MBBarProgressView : UIView @@ -382,61 +386,25 @@ NS_ASSUME_NONNULL_BEGIN @interface MBBackgroundView : UIView /** - * The background style. - * Defaults to MBProgressHUDBackgroundStyleBlur on iOS 7 or later and MBProgressHUDBackgroundStyleSolidColor otherwise. - * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. + * The background style. + * Defaults to MBProgressHUDBackgroundStyleBlur. */ @property (nonatomic) MBProgressHUDBackgroundStyle style; -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV /** * The blur effect style, when using MBProgressHUDBackgroundStyleBlur. * Defaults to UIBlurEffectStyleLight. */ @property (nonatomic) UIBlurEffectStyle blurEffectStyle; -#endif /** * The background color or the blur tint color. - * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. + * + * Defaults to nil on iOS 13 and later and + * `[UIColor colorWithWhite:0.8f alpha:0.6f]` + * on older systems. */ -@property (nonatomic, strong) UIColor *color; - -@end - -@interface MBProgressHUD (Deprecated) - -+ (NSArray *)allHUDsForView:(UIView *)view __attribute__((deprecated("Store references when using more than one HUD per view."))); -+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated __attribute__((deprecated("Store references when using more than one HUD per view."))); - -- (id)initWithWindow:(UIWindow *)window __attribute__((deprecated("Use initWithView: instead."))); - -- (void)show:(BOOL)animated __attribute__((deprecated("Use showAnimated: instead."))); -- (void)hide:(BOOL)animated __attribute__((deprecated("Use hideAnimated: instead."))); -- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay __attribute__((deprecated("Use hideAnimated:afterDelay: instead."))); - -- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated __attribute__((deprecated("Use GCD directly."))); -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block __attribute__((deprecated("Use GCD directly."))); -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue __attribute__((deprecated("Use GCD directly."))); -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue - completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); -@property (assign) BOOL taskInProgress __attribute__((deprecated("No longer needed."))); - -@property (nonatomic, copy) NSString *labelText __attribute__((deprecated("Use label.text instead."))); -@property (nonatomic, strong) UIFont *labelFont __attribute__((deprecated("Use label.font instead."))); -@property (nonatomic, strong) UIColor *labelColor __attribute__((deprecated("Use label.textColor instead."))); -@property (nonatomic, copy) NSString *detailsLabelText __attribute__((deprecated("Use detailsLabel.text instead."))); -@property (nonatomic, strong) UIFont *detailsLabelFont __attribute__((deprecated("Use detailsLabel.font instead."))); -@property (nonatomic, strong) UIColor *detailsLabelColor __attribute__((deprecated("Use detailsLabel.textColor instead."))); -@property (assign, nonatomic) CGFloat opacity __attribute__((deprecated("Customize bezelView properties instead."))); -@property (strong, nonatomic) UIColor *color __attribute__((deprecated("Customize the bezelView color instead."))); -@property (assign, nonatomic) CGFloat xOffset __attribute__((deprecated("Set offset.x instead."))); -@property (assign, nonatomic) CGFloat yOffset __attribute__((deprecated("Set offset.y instead."))); -@property (assign, nonatomic) CGFloat cornerRadius __attribute__((deprecated("Set bezelView.layer.cornerRadius instead."))); -@property (assign, nonatomic) BOOL dimBackground __attribute__((deprecated("Customize HUD background properties instead."))); -@property (strong, nonatomic) UIColor *activityIndicatorColor __attribute__((deprecated("Use UIAppearance to customize UIActivityIndicatorView. E.g.: [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor redColor];"))); -@property (atomic, assign, readonly) CGSize size __attribute__((deprecated("Get the bezelView.frame.size instead."))); +@property (nonatomic, strong, nullable) UIColor *color; @end diff --git a/xcode/Pods/MBProgressHUD/MBProgressHUD.m b/xcode/Pods/MBProgressHUD/MBProgressHUD.m index 1bcf9e99..a2829a39 100644 --- a/xcode/Pods/MBProgressHUD/MBProgressHUD.m +++ b/xcode/Pods/MBProgressHUD/MBProgressHUD.m @@ -1,21 +1,12 @@ // // MBProgressHUD.m -// Version 1.1.0 +// Version 1.2.0 // Created by Matej Bukovinski on 2.4.09. // #import "MBProgressHUD.h" #import - -#ifndef kCFCoreFoundationVersionNumber_iOS_7_0 - #define kCFCoreFoundationVersionNumber_iOS_7_0 847.20 -#endif - -#ifndef kCFCoreFoundationVersionNumber_iOS_8_0 - #define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15 -#endif - #define MBMainThreadAssert() NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread."); CGFloat const MBProgressMaxOffset = 1000000.f; @@ -25,11 +16,7 @@ static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; -@interface MBProgressHUD () { - // Deprecated - UIColor *_activityIndicatorColor; - CGFloat _opacity; -} +@interface MBProgressHUD () @property (nonatomic, assign) BOOL useAnimation; @property (nonatomic, assign, getter=hasFinished) BOOL finished; @@ -39,14 +26,12 @@ @interface MBProgressHUD () { @property (nonatomic, strong) NSArray *bezelConstraints; @property (nonatomic, strong) UIView *topSpacer; @property (nonatomic, strong) UIView *bottomSpacer; +@property (nonatomic, strong) UIMotionEffectGroup *bezelMotionEffects; @property (nonatomic, weak) NSTimer *graceTimer; @property (nonatomic, weak) NSTimer *minShowTimer; @property (nonatomic, weak) NSTimer *hideDelayTimer; @property (nonatomic, weak) CADisplayLink *progressObjectDisplayLink; -// Deprecated -@property (assign) BOOL taskInProgress; - @end @@ -96,12 +81,14 @@ - (void)commonInit { _animationType = MBProgressHUDAnimationFade; _mode = MBProgressHUDModeIndeterminate; _margin = 20.0f; - _opacity = 1.f; - _defaultMotionEffectsEnabled = YES; + _defaultMotionEffectsEnabled = NO; + + if (@available(iOS 13.0, tvOS 13, *)) { + _contentColor = [[UIColor labelColor] colorWithAlphaComponent:0.7f]; + } else { + _contentColor = [UIColor colorWithWhite:0.f alpha:0.7f]; + } - // Default color, depending on the current iOS version - BOOL isLegacy = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; - _contentColor = isLegacy ? [UIColor whiteColor] : [UIColor colorWithWhite:0.f alpha:0.7f]; // Transparent background self.opaque = NO; self.backgroundColor = [UIColor clearColor]; @@ -150,7 +137,7 @@ - (void)showAnimated:(BOOL)animated { NSTimer *timer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; self.graceTimer = timer; - } + } // ... otherwise show the HUD immediately else { [self showUsingAnimation:self.useAnimation]; @@ -171,14 +158,14 @@ - (void)hideAnimated:(BOOL)animated { [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; self.minShowTimer = timer; return; - } + } } // ... otherwise hide the HUD immediately [self hideUsingAnimation:self.useAnimation]; } - (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay { - // Cancel any scheduled hideDelayed: calls + // Cancel any scheduled hideAnimated:afterDelay: calls [self.hideDelayTimer invalidate]; NSTimer *timer = [NSTimer timerWithTimeInterval:delay target:self selector:@selector(handleHideTimer:) userInfo:@(animated) repeats:NO]; @@ -216,7 +203,7 @@ - (void)showUsingAnimation:(BOOL)animated { [self.bezelView.layer removeAllAnimations]; [self.backgroundView.layer removeAllAnimations]; - // Cancel any scheduled hideDelayed: calls + // Cancel any scheduled hideAnimated:afterDelay: calls [self.hideDelayTimer invalidate]; self.showStarted = [NSDate date]; @@ -225,18 +212,25 @@ - (void)showUsingAnimation:(BOOL)animated { // Needed in case we hide and re-show with the same NSProgress object attached. [self setNSProgressDisplayLinkEnabled:YES]; + // Set up motion effects only at this point to avoid needlessly + // creating the effect if it was disabled after initialization. + [self updateBezelMotionEffects]; + if (animated) { [self animateIn:YES withType:self.animationType completion:NULL]; } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - self.bezelView.alpha = self.opacity; -#pragma clang diagnostic pop + self.bezelView.alpha = 1.f; self.backgroundView.alpha = 1.f; } } - (void)hideUsingAnimation:(BOOL)animated { + // Cancel any scheduled hideAnimated:afterDelay: calls. + // This needs to happen here instead of in done, + // to avoid races if another hideAnimated:afterDelay: + // call comes in while the HUD is animating out. + [self.hideDelayTimer invalidate]; + if (animated && self.showStarted) { self.showStarted = nil; [self animateIn:NO withType:self.animationType completion:^(BOOL finished) { @@ -276,26 +270,14 @@ - (void)animateIn:(BOOL)animatingIn withType:(MBProgressHUDAnimation)type comple } else if (!animatingIn && type == MBProgressHUDAnimationZoomOut) { bezelView.transform = small; } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - bezelView.alpha = animatingIn ? self.opacity : 0.f; -#pragma clang diagnostic pop - self.backgroundView.alpha = animatingIn ? 1.f : 0.f; + CGFloat alpha = animatingIn ? 1.f : 0.f; + bezelView.alpha = alpha; + self.backgroundView.alpha = alpha; }; - - // Spring animations are nicer, but only available on iOS 7+ -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { - [UIView animateWithDuration:0.3 delay:0. usingSpringWithDamping:1.f initialSpringVelocity:0.f options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; - return; - } -#endif - [UIView animateWithDuration:0.3 delay:0. options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; + [UIView animateWithDuration:0.3 delay:0. usingSpringWithDamping:1.f initialSpringVelocity:0.f options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; } - (void)done { - // Cancel any scheduled hideDelayed: calls - [self.hideDelayTimer invalidate]; [self setNSProgressDisplayLinkEnabled:NO]; if (self.hasFinished) { @@ -333,7 +315,6 @@ - (void)setupViews { bezelView.alpha = 0.f; [self addSubview:bezelView]; _bezelView = bezelView; - [self updateBezelMotionEffects]; UILabel *label = [UILabel new]; label.adjustsFontSizeToFitWidth = NO; @@ -389,9 +370,20 @@ - (void)updateIndicators { if (mode == MBProgressHUDModeIndeterminate) { if (!isActivityIndicator) { // Update to indeterminate indicator + UIActivityIndicatorView *activityIndicator; [indicator removeFromSuperview]; - indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - [(UIActivityIndicatorView *)indicator startAnimating]; +#if !TARGET_OS_MACCATALYST + if (@available(iOS 13.0, tvOS 13.0, *)) { +#endif + activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleLarge]; + activityIndicator.color = [UIColor whiteColor]; +#if !TARGET_OS_MACCATALYST + } else { + activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + } +#endif + [activityIndicator startAnimating]; + indicator = activityIndicator; [self.bezelView addSubview:indicator]; } } @@ -411,7 +403,7 @@ - (void)updateIndicators { if (mode == MBProgressHUDModeAnnularDeterminate) { [(MBRoundProgressView *)indicator setAnnular:YES]; } - } + } else if (mode == MBProgressHUDModeCustomView && self.customView != indicator) { // Update custom view indicator [indicator removeFromSuperview]; @@ -443,13 +435,6 @@ - (void)updateViewsForColor:(UIColor *)color { self.detailsLabel.textColor = color; [self.button setTitleColor:color forState:UIControlStateNormal]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (self.activityIndicatorColor) { - color = self.activityIndicatorColor; - } -#pragma clang diagnostic pop - // UIAppearance settings are prioritized. If they are preset the set color is ignored. UIView *indicator = self.indicator; @@ -461,7 +446,7 @@ - (void)updateViewsForColor:(UIColor *)color { // For iOS 9+ appearance = [UIActivityIndicatorView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; #endif - + if (appearance.color == nil) { ((UIActivityIndicatorView *)indicator).color = color; } @@ -492,20 +477,15 @@ - (void)updateViewsForColor:(UIColor *)color { ((MBBarProgressView *)indicator).lineColor = color; } } else { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV - if ([indicator respondsToSelector:@selector(setTintColor:)]) { - [indicator setTintColor:color]; - } -#endif + [indicator setTintColor:color]; } } - (void)updateBezelMotionEffects { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV MBBackgroundView *bezelView = self.bezelView; - if (![bezelView respondsToSelector:@selector(addMotionEffect:)]) return; + UIMotionEffectGroup *bezelMotionEffects = self.bezelMotionEffects; - if (self.defaultMotionEffectsEnabled) { + if (self.defaultMotionEffectsEnabled && !bezelMotionEffects) { CGFloat effectOffset = 10.f; UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; effectX.maximumRelativeValue = @(effectOffset); @@ -518,14 +498,12 @@ - (void)updateBezelMotionEffects { UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; group.motionEffects = @[effectX, effectY]; + self.bezelMotionEffects = group; [bezelView addMotionEffect:group]; - } else { - NSArray *effects = [bezelView motionEffects]; - for (UIMotionEffect *effect in effects) { - [bezelView removeMotionEffect:effect]; - } + } else if (bezelMotionEffects) { + self.bezelMotionEffects = nil; + [bezelView removeMotionEffect:bezelMotionEffects]; } -#endif } #pragma mark - Layout @@ -613,10 +591,10 @@ - (void)updateConstraints { [bezel addConstraints:bezelConstraints]; self.bezelConstraints = bezelConstraints; - + self.paddingConstraints = [paddingConstraints copy]; [self updatePaddingConstraints]; - + [super updateConstraints]; } @@ -701,9 +679,9 @@ - (void)setSquare:(BOOL)square { - (void)setProgressObjectDisplayLink:(CADisplayLink *)progressObjectDisplayLink { if (progressObjectDisplayLink != _progressObjectDisplayLink) { [_progressObjectDisplayLink invalidate]; - + _progressObjectDisplayLink = progressObjectDisplayLink; - + [_progressObjectDisplayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; } } @@ -761,7 +739,7 @@ - (void)updateProgressFromProgressObject { #pragma mark - Notifications - (void)registerForNotifications { -#if !TARGET_OS_TV +#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(statusBarOrientationDidChange:) @@ -770,13 +748,13 @@ - (void)registerForNotifications { } - (void)unregisterFromNotifications { -#if !TARGET_OS_TV +#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; #endif } -#if !TARGET_OS_TV +#if !TARGET_OS_TV && !TARGET_OS_MACCATALYST - (void)statusBarOrientationDidChange:(NSNotification *)notification { UIView *superview = self.superview; if (!superview) { @@ -808,7 +786,7 @@ - (void)updateForCurrentOrientationAnimated:(BOOL)animated { UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; UIInterfaceOrientation orientation = application.statusBarOrientation; CGFloat radians = 0; - + if (UIInterfaceOrientationIsLandscape(orientation)) { radians = orientation == UIInterfaceOrientationLandscapeLeft ? -(CGFloat)M_PI_2 : (CGFloat)M_PI_2; // Window coordinates differ! @@ -886,11 +864,10 @@ - (void)setBackgroundTintColor:(UIColor *)backgroundTintColor { - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); - BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; if (_annular) { // Draw background - CGFloat lineWidth = isPreiOS7 ? 5.f : 2.f; + CGFloat lineWidth = 2.f; UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; processBackgroundPath.lineWidth = lineWidth; processBackgroundPath.lineCapStyle = kCGLineCapButt; @@ -903,7 +880,7 @@ - (void)drawRect:(CGRect)rect { [processBackgroundPath stroke]; // Draw progress UIBezierPath *processPath = [UIBezierPath bezierPath]; - processPath.lineCapStyle = isPreiOS7 ? kCGLineCapRound : kCGLineCapSquare; + processPath.lineCapStyle = kCGLineCapSquare; processPath.lineWidth = lineWidth; endAngle = (self.progress * 2 * (float)M_PI) + startAngle; [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; @@ -918,33 +895,20 @@ - (void)drawRect:(CGRect)rect { [_progressTintColor setStroke]; [_backgroundTintColor setFill]; CGContextSetLineWidth(context, lineWidth); - if (isPreiOS7) { - CGContextFillEllipseInRect(context, circleRect); - } CGContextStrokeEllipseInRect(context, circleRect); // 90 degrees CGFloat startAngle = - ((float)M_PI / 2.f); // Draw progress - if (isPreiOS7) { - CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - lineWidth; - CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; - [_progressTintColor setFill]; - CGContextMoveToPoint(context, center.x, center.y); - CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); - CGContextClosePath(context); - CGContextFillPath(context); - } else { - UIBezierPath *processPath = [UIBezierPath bezierPath]; - processPath.lineCapStyle = kCGLineCapButt; - processPath.lineWidth = lineWidth * 2.f; - CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - (processPath.lineWidth / 2.f); - CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; - [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; - // Ensure that we don't get color overlapping when _progressTintColor alpha < 1.f. - CGContextSetBlendMode(context, kCGBlendModeCopy); - [_progressTintColor set]; - [processPath stroke]; - } + UIBezierPath *processPath = [UIBezierPath bezierPath]; + processPath.lineCapStyle = kCGLineCapButt; + processPath.lineWidth = lineWidth * 2.f; + CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - (processPath.lineWidth / 2.f); + CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; + [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + // Ensure that we don't get color overlapping when _progressTintColor alpha < 1.f. + CGContextSetBlendMode(context, kCGBlendModeCopy); + [_progressTintColor set]; + [processPath stroke]; } } @@ -975,8 +939,7 @@ - (id)initWithFrame:(CGRect)frame { #pragma mark - Layout - (CGSize)intrinsicContentSize { - BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; - return CGSizeMake(120.f, isPreiOS7 ? 20.f : 10.f); + return CGSizeMake(120.f, 10.f); } #pragma mark - Properties @@ -1008,11 +971,11 @@ - (void)setProgressRemainingColor:(UIColor *)progressRemainingColor { - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); - + CGContextSetLineWidth(context, 2); CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); - + // Draw background and Border CGFloat radius = (rect.size.height / 2) - 2; CGContextMoveToPoint(context, 2, rect.size.height/2); @@ -1021,26 +984,26 @@ - (void)drawRect:(CGRect)rect { CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); CGContextDrawPath(context, kCGPathFillStroke); - + CGContextSetFillColorWithColor(context, [_progressColor CGColor]); radius = radius - 2; CGFloat amount = self.progress * rect.size.width; - + // Progress in the middle area if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); CGContextAddLineToPoint(context, amount, 4); CGContextAddLineToPoint(context, amount, radius + 4); - + CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); CGContextAddLineToPoint(context, amount, rect.size.height - 4); CGContextAddLineToPoint(context, amount, radius + 4); - + CGContextFillPath(context); } - + // Progress in the right arc else if (amount > radius + 4) { CGFloat x = amount - (rect.size.width - radius - 4); @@ -1060,10 +1023,10 @@ - (void)drawRect:(CGRect)rect { if (isnan(angle)) angle = 0; CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); CGContextAddLineToPoint(context, amount, rect.size.height/2); - + CGContextFillPath(context); } - + // Progress is in the left arc else if (amount < radius + 4 && amount > 0) { CGContextMoveToPoint(context, 4, rect.size.height/2); @@ -1073,7 +1036,7 @@ - (void)drawRect:(CGRect)rect { CGContextMoveToPoint(context, 4, rect.size.height/2); CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); - + CGContextFillPath(context); } } @@ -1083,12 +1046,7 @@ - (void)drawRect:(CGRect)rect { @interface MBBackgroundView () -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV @property UIVisualEffectView *effectView; -#endif -#if !TARGET_OS_TV -@property UIToolbar *toolbar; -#endif @end @@ -1099,19 +1057,17 @@ @implementation MBBackgroundView - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { - _style = MBProgressHUDBackgroundStyleBlur; -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - _blurEffectStyle = UIBlurEffectStyleLight; -#endif - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { - _color = [UIColor colorWithWhite:0.8f alpha:0.6f]; - } else { - _color = [UIColor colorWithWhite:0.95f alpha:0.6f]; - } + _style = MBProgressHUDBackgroundStyleBlur; + if (@available(iOS 13.0, *)) { + #if TARGET_OS_TV + _blurEffectStyle = UIBlurEffectStyleRegular; + #else + _blurEffectStyle = UIBlurEffectStyleSystemThickMaterial; + #endif + // Leaving the color unassigned yields best results. } else { - _style = MBProgressHUDBackgroundStyleSolidColor; - _color = [[UIColor blackColor] colorWithAlphaComponent:0.8]; + _blurEffectStyle = UIBlurEffectStyleLight; + _color = [UIColor colorWithWhite:0.8f alpha:0.6f]; } self.clipsToBounds = YES; @@ -1131,9 +1087,6 @@ - (CGSize)intrinsicContentSize { #pragma mark - Appearance - (void)setStyle:(MBProgressHUDBackgroundStyle)style { - if (style == MBProgressHUDBackgroundStyleBlur && kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0) { - style = MBProgressHUDBackgroundStyleSolidColor; - } if (_style != style) { _style = style; [self updateForBackgroundStyle]; @@ -1148,8 +1101,6 @@ - (void)setColor:(UIColor *)color { } } -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - - (void)setBlurEffectStyle:(UIBlurEffectStyle)blurEffectStyle { if (_blurEffectStyle == blurEffectStyle) { return; @@ -1160,64 +1111,31 @@ - (void)setBlurEffectStyle:(UIBlurEffectStyle)blurEffectStyle { [self updateForBackgroundStyle]; } -#endif - /////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - Views - (void)updateForBackgroundStyle { + [self.effectView removeFromSuperview]; + self.effectView = nil; + MBProgressHUDBackgroundStyle style = self.style; if (style == MBProgressHUDBackgroundStyleBlur) { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { - UIBlurEffect *effect = [UIBlurEffect effectWithStyle:self.blurEffectStyle]; - UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; - [self addSubview:effectView]; - effectView.frame = self.bounds; - effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.backgroundColor = self.color; - self.layer.allowsGroupOpacity = NO; - self.effectView = effectView; - } else { -#endif -#if !TARGET_OS_TV - UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectInset(self.bounds, -100.f, -100.f)]; - toolbar.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - toolbar.barTintColor = self.color; - toolbar.translucent = YES; - [self addSubview:toolbar]; - self.toolbar = toolbar; -#endif -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - } -#endif + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:self.blurEffectStyle]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + [self insertSubview:effectView atIndex:0]; + effectView.frame = self.bounds; + effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.backgroundColor = self.color; + self.layer.allowsGroupOpacity = NO; + self.effectView = effectView; } else { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { - [self.effectView removeFromSuperview]; - self.effectView = nil; - } else { -#endif -#if !TARGET_OS_TV - [self.toolbar removeFromSuperview]; - self.toolbar = nil; -#endif -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV - } -#endif self.backgroundColor = self.color; } } - (void)updateViewsForColor:(UIColor *)color { if (self.style == MBProgressHUDBackgroundStyleBlur) { - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { - self.backgroundColor = self.color; - } else { -#if !TARGET_OS_TV - self.toolbar.barTintColor = color; -#endif - } + self.backgroundColor = self.color; } else { self.backgroundColor = self.color; } @@ -1226,226 +1144,6 @@ - (void)updateViewsForColor:(UIColor *)color { @end -@implementation MBProgressHUD (Deprecated) - -#pragma mark - Class - -+ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated { - NSArray *huds = [MBProgressHUD allHUDsForView:view]; - for (MBProgressHUD *hud in huds) { - hud.removeFromSuperViewOnHide = YES; - [hud hideAnimated:animated]; - } - return [huds count]; -} - -+ (NSArray *)allHUDsForView:(UIView *)view { - NSMutableArray *huds = [NSMutableArray array]; - NSArray *subviews = view.subviews; - for (UIView *aView in subviews) { - if ([aView isKindOfClass:self]) { - [huds addObject:aView]; - } - } - return [NSArray arrayWithArray:huds]; -} - -#pragma mark - Lifecycle - -- (id)initWithWindow:(UIWindow *)window { - return [self initWithView:window]; -} - -#pragma mark - Show & hide - -- (void)show:(BOOL)animated { - [self showAnimated:animated]; -} - -- (void)hide:(BOOL)animated { - [self hideAnimated:animated]; -} - -- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay { - [self hideAnimated:animated afterDelay:delay]; -} - -#pragma mark - Threading - -- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated { - [self showAnimated:animated whileExecutingBlock:^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - // Start executing the requested task - [target performSelector:method withObject:object]; -#pragma clang diagnostic pop - }]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block { - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)(void))completion { - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue { - [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; -} - -- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue completionBlock:(nullable MBProgressHUDCompletionBlock)completion { - self.taskInProgress = YES; - self.completionBlock = completion; - dispatch_async(queue, ^(void) { - block(); - dispatch_async(dispatch_get_main_queue(), ^(void) { - [self cleanUp]; - }); - }); - [self showAnimated:animated]; -} - -- (void)cleanUp { - self.taskInProgress = NO; - [self hideAnimated:self.useAnimation]; -} - -#pragma mark - Labels - -- (NSString *)labelText { - return self.label.text; -} - -- (void)setLabelText:(NSString *)labelText { - MBMainThreadAssert(); - self.label.text = labelText; -} - -- (UIFont *)labelFont { - return self.label.font; -} - -- (void)setLabelFont:(UIFont *)labelFont { - MBMainThreadAssert(); - self.label.font = labelFont; -} - -- (UIColor *)labelColor { - return self.label.textColor; -} - -- (void)setLabelColor:(UIColor *)labelColor { - MBMainThreadAssert(); - self.label.textColor = labelColor; -} - -- (NSString *)detailsLabelText { - return self.detailsLabel.text; -} - -- (void)setDetailsLabelText:(NSString *)detailsLabelText { - MBMainThreadAssert(); - self.detailsLabel.text = detailsLabelText; -} - -- (UIFont *)detailsLabelFont { - return self.detailsLabel.font; -} - -- (void)setDetailsLabelFont:(UIFont *)detailsLabelFont { - MBMainThreadAssert(); - self.detailsLabel.font = detailsLabelFont; -} - -- (UIColor *)detailsLabelColor { - return self.detailsLabel.textColor; -} - -- (void)setDetailsLabelColor:(UIColor *)detailsLabelColor { - MBMainThreadAssert(); - self.detailsLabel.textColor = detailsLabelColor; -} - -- (CGFloat)opacity { - return _opacity; -} - -- (void)setOpacity:(CGFloat)opacity { - MBMainThreadAssert(); - _opacity = opacity; -} - -- (UIColor *)color { - return self.bezelView.color; -} - -- (void)setColor:(UIColor *)color { - MBMainThreadAssert(); - self.bezelView.color = color; -} - -- (CGFloat)yOffset { - return self.offset.y; -} - -- (void)setYOffset:(CGFloat)yOffset { - MBMainThreadAssert(); - self.offset = CGPointMake(self.offset.x, yOffset); -} - -- (CGFloat)xOffset { - return self.offset.x; -} - -- (void)setXOffset:(CGFloat)xOffset { - MBMainThreadAssert(); - self.offset = CGPointMake(xOffset, self.offset.y); -} - -- (CGFloat)cornerRadius { - return self.bezelView.layer.cornerRadius; -} - -- (void)setCornerRadius:(CGFloat)cornerRadius { - MBMainThreadAssert(); - self.bezelView.layer.cornerRadius = cornerRadius; -} - -- (BOOL)dimBackground { - MBBackgroundView *backgroundView = self.backgroundView; - UIColor *dimmedColor = [UIColor colorWithWhite:0.f alpha:.2f]; - return backgroundView.style == MBProgressHUDBackgroundStyleSolidColor && [backgroundView.color isEqual:dimmedColor]; -} - -- (void)setDimBackground:(BOOL)dimBackground { - MBMainThreadAssert(); - self.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; - self.backgroundView.color = dimBackground ? [UIColor colorWithWhite:0.f alpha:.2f] : [UIColor clearColor]; -} - -- (CGSize)size { - return self.bezelView.frame.size; -} - -- (UIColor *)activityIndicatorColor { - return _activityIndicatorColor; -} - -- (void)setActivityIndicatorColor:(UIColor *)activityIndicatorColor { - if (activityIndicatorColor != _activityIndicatorColor) { - _activityIndicatorColor = activityIndicatorColor; - UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)self.indicator; - if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) { - [indicator setColor:activityIndicatorColor]; - } - } -} - -@end - @implementation MBProgressHUDRoundedButton #pragma mark - Lifecycle @@ -1469,8 +1167,9 @@ - (void)layoutSubviews { } - (CGSize)intrinsicContentSize { - // Only show if we have associated control events - if (self.allControlEvents == 0) return CGSizeZero; + // Only show if we have associated control events and a title + if ((self.allControlEvents == 0) || ([self titleForState:UIControlStateNormal].length == 0)) + return CGSizeZero; CGSize size = [super intrinsicContentSize]; // Add some side padding size.width += 20.f; diff --git a/xcode/Pods/MBProgressHUD/README.mdown b/xcode/Pods/MBProgressHUD/README.mdown index 21ba843b..c90f5c6a 100644 --- a/xcode/Pods/MBProgressHUD/README.mdown +++ b/xcode/Pods/MBProgressHUD/README.mdown @@ -1,7 +1,7 @@ # MBProgressHUD [![Build Status](https://travis-ci.org/matej/MBProgressHUD.svg?branch=master)](https://travis-ci.org/matej/MBProgressHUD) [![codecov.io](https://codecov.io/github/matej/MBProgressHUD/coverage.svg?branch=master)](https://codecov.io/github/matej/MBProgressHUD?branch=master) - [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) [![CocoaPods compatible](https://img.shields.io/cocoapods/v/MBProgressHUD.svg?style=flat)](https://cocoapods.org/pods/MBProgressHUD) [![License: MIT](https://img.shields.io/cocoapods/l/MBProgressHUD.svg?style=flat)](http://opensource.org/licenses/MIT) + [![SwiftPM compatible](https://img.shields.io/badge/SwiftPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) [![Accio supported](https://img.shields.io/badge/Accio-supported-0A7CF5.svg?style=flat)](https://github.com/JamitLabs/Accio) [![CocoaPods compatible](https://img.shields.io/cocoapods/v/MBProgressHUD.svg?style=flat)](https://cocoapods.org/pods/MBProgressHUD) [![License: MIT](https://img.shields.io/cocoapods/l/MBProgressHUD.svg?style=flat)](http://opensource.org/licenses/MIT) `MBProgressHUD` is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private `UIKit` `UIProgressHUD` with some additional features. @@ -13,11 +13,11 @@ [![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/6-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/6.png) [![](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/7-small.png)](https://raw.githubusercontent.com/wiki/matej/MBProgressHUD/Screenshots/7.png) -**NOTE:** The class has recently undergone a major rewrite. The old version is available in the [legacy](https://github.com/jdg/MBProgressHUD/tree/legacy) branch, should you need it. +**NOTE:** The class has recently undergone a major rewrite. The old version is available in the [legacy](https://github.com/jdg/MBProgressHUD/tree/legacy) branch, should you need it. ## Requirements -`MBProgressHUD` works on iOS 6+ and requires ARC to build. It depends on the following Apple frameworks, which should already be included with most Xcode templates: +`MBProgressHUD` works on iOS 9.0+. It depends on the following Apple frameworks, which should already be included with most Xcode templates: * Foundation.framework * UIKit.framework @@ -31,16 +31,28 @@ You will need the latest developer tools in order to build `MBProgressHUD`. Old [CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project. -1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 1.1.0'` +1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 1.2.0'` 2. Install the pod(s) by running `pod install`. 3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. ### Carthage -1. Add MBProgressHUD to your Cartfile. e.g., `github "jdg/MBProgressHUD" ~> 1.1.0` +1. Add MBProgressHUD to your Cartfile. e.g., `github "jdg/MBProgressHUD" ~> 1.2.0` 2. Run `carthage update` 3. Follow the rest of the [standard Carthage installation instructions](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add MBProgressHUD to your project. +### SwiftPM / Accio + +1. Add the following to your `Package.swift`: + ```swift + .package(url: "https://github.com/jdg/MBProgressHUD.git", .upToNextMajor(from: "1.2.0")), + ``` +2. Next, add `MBProgressHUD` to your App targets dependencies like so: + ```swift + .target(name: "App", dependencies: ["MBProgressHUD"]), + ``` +3. Then open your project in Xcode 11+ (SwiftPM) or run `accio update` (Accio). + ### Source files Alternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project. @@ -72,7 +84,7 @@ dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ }); ``` -You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain `UIKit` views with complex view hierarchies - like `UITableView` or `UICollectionView`. Those can mutate their subviews in unexpected ways and thereby break HUD display. +You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain `UIKit` views with complex view hierarchies - like `UITableView` or `UICollectionView`. Those can mutate their subviews in unexpected ways and thereby break HUD display. If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns. @@ -123,4 +135,4 @@ This code is distributed under the terms and conditions of the [MIT license](LIC ## Change-log -A brief summary of each MBProgressHUD release can be found in the [CHANGELOG](CHANGELOG.mdown). +A brief summary of each MBProgressHUD release can be found in the [CHANGELOG](CHANGELOG.mdown). diff --git a/xcode/Pods/Manifest.lock b/xcode/Pods/Manifest.lock index a9c769df..ba153f26 100644 --- a/xcode/Pods/Manifest.lock +++ b/xcode/Pods/Manifest.lock @@ -1,21 +1,21 @@ PODS: - - AFNetworking (3.2.1): - - AFNetworking/NSURLSession (= 3.2.1) - - AFNetworking/Reachability (= 3.2.1) - - AFNetworking/Security (= 3.2.1) - - AFNetworking/Serialization (= 3.2.1) - - AFNetworking/UIKit (= 3.2.1) - - AFNetworking/NSURLSession (3.2.1): + - AFNetworking (4.0.1): + - AFNetworking/NSURLSession (= 4.0.1) + - AFNetworking/Reachability (= 4.0.1) + - AFNetworking/Security (= 4.0.1) + - AFNetworking/Serialization (= 4.0.1) + - AFNetworking/UIKit (= 4.0.1) + - AFNetworking/NSURLSession (4.0.1): - AFNetworking/Reachability - AFNetworking/Security - AFNetworking/Serialization - - AFNetworking/Reachability (3.2.1) - - AFNetworking/Security (3.2.1) - - AFNetworking/Serialization (3.2.1) - - AFNetworking/UIKit (3.2.1): + - AFNetworking/Reachability (4.0.1) + - AFNetworking/Security (4.0.1) + - AFNetworking/Serialization (4.0.1) + - AFNetworking/UIKit (4.0.1): - AFNetworking/NSURLSession - - AFOAuth2Manager (3.0.0): - - AFNetworking/NSURLSession (~> 3.0) + - AFOAuth2Manager (3.0.1): + - AFNetworking/NSURLSession (~> 4.0) - AHKActionSheet (0.5.4) - APAddressBook (0.3.2): - APAddressBook/Core (= 0.3.2) @@ -87,17 +87,17 @@ PODS: - DTFoundation/Core - DTFoundation/UIKit_BlocksAdditions (1.7.14): - DTFoundation/Core - - FLEX (3.0.0) + - FLEX (4.1.1) - FreeStreamer (4.0.0): - Reachability (~> 3.0) - HMSegmentedControl (1.5.5) - INTULocationManager (4.3.2) - IQAudioRecorderController (1.2.3): - SCSiriWaveformView - - JDStatusBarNotification (1.6.0) + - JDStatusBarNotification (1.6.1) - JSCoreBom (1.1.2) - libPhoneNumber-iOS (0.9.15) - - MBProgressHUD (1.1.0) + - MBProgressHUD (1.2.0) - NSGIF (1.2.4) - NSHash (1.2.0) - OMGHTTPURLRQ (3.2.4): @@ -107,24 +107,24 @@ PODS: - OMGHTTPURLRQ/FormURLEncode - OMGHTTPURLRQ/UserAgent - OMGHTTPURLRQ/UserAgent (3.2.4) - - PHFComposeBarView (2.0.2): + - PHFComposeBarView (2.1.0): - PHFDelegateChain (~> 1.0) - PHFDelegateChain (1.0.1) - Reachability (3.2) - REMenu (1.10) - - RMActionController (1.0.5) - - RMDateSelectionViewController (2.0.3): - - RMActionController (~> 1.0.5) + - RMActionController (1.3.1) + - RMDateSelectionViewController (2.3.1): + - RMActionController (~> 1.3.1) - SBJson (5.0.0) - SCSiriWaveformView (1.1.1) - - SDWebImage (3.8.1): - - SDWebImage/Core (= 3.8.1) - - SDWebImage/Core (3.8.1) - - SocketRocket (0.5.1) + - SDWebImage (3.8.3): + - SDWebImage/Core (= 3.8.3) + - SDWebImage/Core (3.8.3) + - SocketRocket (0.5.2) - SWFrameButton (1.2.2) - SWTableViewCell (0.3.7) - - SZTextView (1.2.2) - - TDOAuth (1.1.2): + - SZTextView (1.3.0) + - TDOAuth (1.3.0): - OMGHTTPURLRQ/UserAgent - TTTAttributedLabel (2.0.0) - TWMessageBarManager (1.8.1) @@ -132,7 +132,7 @@ PODS: DEPENDENCIES: - AFNetworking (from `https://github.com/jasonelle/ios-pod-afnetworking.git`, branch `jasonelle`) - - AFOAuth2Manager + - AFOAuth2Manager (from `https://github.com/jasonelle/ios-pod-afoauth2manager.git`, branch `jasonelle`) - AHKActionSheet - APAddressBook (from `https://github.com/jasonelle/ios-pod-apaddressbook.git`, branch `jasonelle`) - BBBadgeBarButtonItem @@ -146,7 +146,7 @@ DEPENDENCIES: - HMSegmentedControl (from `https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git`, branch `jasonelle`) - INTULocationManager - IQAudioRecorderController - - JDStatusBarNotification + - JDStatusBarNotification (from `https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git`) - JSCoreBom (from `https://github.com/jasonelle/ios-pod-jscorebom.git`, branch `jasonelle`) - libPhoneNumber-iOS (from `https://github.com/jasonelle/ios-pod-libphonenumber.git`, branch `jasonelle`) - MBProgressHUD (~> 1.0) @@ -158,7 +158,7 @@ DEPENDENCIES: - REMenu (from `https://github.com/jasonelle/ios-pod-remenu.git`, branch `jasonelle`) - RMDateSelectionViewController - SBJson (from `https://github.com/jasonelle/ios-pod-sbjson.git`, branch `jasonelle`) - - SDWebImage (from `https://github.com/jasonelle/ios-pod-sdwebimage.git`, tag `3.8.1`) + - SDWebImage (from `https://github.com/jasonelle/ios-pod-sdwebimage.git`, tag `3.8.3`) - SocketRocket (from `https://github.com/jasonelle/ios-pod-socketrocket.git`, branch `jasonelle`) - SWFrameButton - SWTableViewCell (from `https://github.com/jasonelle/ios-pod-swtableviewcell.git`, branch `jasonelle`) @@ -169,15 +169,13 @@ DEPENDENCIES: - UICKeyChainStore (from `https://github.com/jasonelle/ios-pod-uickeychainstore.git`, branch `jasonelle`) SPEC REPOS: - https://github.com/cocoapods/specs.git: - - AFOAuth2Manager + trunk: - AHKActionSheet - BBBadgeBarButtonItem - DAKeyboardControl - DHSmartScreenshot - INTULocationManager - IQAudioRecorderController - - JDStatusBarNotification - MBProgressHUD - NSGIF - PHFComposeBarView @@ -193,6 +191,9 @@ EXTERNAL SOURCES: AFNetworking: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-afnetworking.git + AFOAuth2Manager: + :branch: jasonelle + :git: https://github.com/jasonelle/ios-pod-afoauth2manager.git APAddressBook: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-apaddressbook.git @@ -213,6 +214,8 @@ EXTERNAL SOURCES: HMSegmentedControl: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git + JDStatusBarNotification: + :git: https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git JSCoreBom: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-jscorebom.git @@ -236,7 +239,7 @@ EXTERNAL SOURCES: :git: https://github.com/jasonelle/ios-pod-sbjson.git SDWebImage: :git: https://github.com/jasonelle/ios-pod-sdwebimage.git - :tag: 3.8.1 + :tag: 3.8.3 SocketRocket: :branch: jasonelle :git: https://github.com/jasonelle/ios-pod-socketrocket.git @@ -255,8 +258,11 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: AFNetworking: - :commit: 09ee0ddfa2c5a7cbec5cdcaee892384717ec0e43 + :commit: 7bdce9a849da1e9a7cc29fd4c45a92115145f3d7 :git: https://github.com/jasonelle/ios-pod-afnetworking.git + AFOAuth2Manager: + :commit: eba4ec281a23e9a7b261f5d9e024cb70a8372c67 + :git: https://github.com/jasonelle/ios-pod-afoauth2manager.git APAddressBook: :commit: 77888b7c4939550f84fed887945fbd22892a76c2 :git: https://github.com/jasonelle/ios-pod-apaddressbook.git @@ -267,17 +273,20 @@ CHECKOUT OPTIONS: :commit: 9fccb9b0de0b2eb40c6b33067b03f55f3803c153 :git: https://github.com/jasonelle/ios-pod-dtcoretext.git DTFoundation: - :commit: 91373daf35aafeaa94e626b9dce28a6a7276af57 + :commit: ec0004b82ef2dbc16a93132f498e22f824eab0cb :git: https://github.com/jasonelle/ios-pod-dtfoundation.git FLEX: - :commit: 226e0cd80324e7bed1d524334c2befff6b775b99 + :commit: 2a8cdbdb84c45a89ebd48f9caad9c0420609a348 :git: https://github.com/jasonelle/ios-pod-flex.git FreeStreamer: - :commit: 810f241e40f2f06ccf01b9022164ab896a72b12e + :commit: 43be718aaaafd5dec5ec31aa713cff36af4ee414 :git: https://github.com/jasonelle/ios-pod-freestreamer.git HMSegmentedControl: :commit: ade9a52141a7ba47f02cef9d785cf7384ec334a6 :git: https://github.com/jasonelle/ios-pod-hmsegmentedcontrol.git + JDStatusBarNotification: + :commit: 54598de580908a542b513a7d63519511f6dd42da + :git: https://github.com/jasonelle/ios-pod-jdstatusbarnotification.git JSCoreBom: :commit: 5c2143b133248f475c30f1661a83a227c07fe138 :git: https://github.com/jasonelle/ios-pod-jscorebom.git @@ -301,12 +310,12 @@ CHECKOUT OPTIONS: :git: https://github.com/jasonelle/ios-pod-sbjson.git SDWebImage: :git: https://github.com/jasonelle/ios-pod-sdwebimage.git - :tag: 3.8.1 + :tag: 3.8.3 SocketRocket: - :commit: 07b348eb13dc978c3ca84e80975b147667184b5d + :commit: 43d48b7a1d94a5ec8add07fc4ff892ed0ba7cc78 :git: https://github.com/jasonelle/ios-pod-socketrocket.git SWTableViewCell: - :commit: 1c8845e25f520c959391bd79dc6cf271e0cf9a44 + :commit: 5cf396fe8f42dc199b157c96da29b64e9248c2e4 :git: https://github.com/jasonelle/ios-pod-swtableviewcell.git TTTAttributedLabel: :commit: b0f1f93d5d4368a7aaf52e848013a1b40b00dc3c @@ -319,8 +328,8 @@ CHECKOUT OPTIONS: :git: https://github.com/jasonelle/ios-pod-uickeychainstore.git SPEC CHECKSUMS: - AFNetworking: ef6403a1383e5a6fa4ca961d7d524b1898ce0a84 - AFOAuth2Manager: 0566da1be64883e339813d411229fdc9a84dab7c + AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce + AFOAuth2Manager: 3166f6214e646f0bb4bb77378775a45b2290f5c5 AHKActionSheet: f0b312b5c689f72924d231c39dae140ecd5c1d46 APAddressBook: e68ecaf95f2c323b625ae585a0d25fe505291286 BBBadgeBarButtonItem: c2fbca0bff18e21b70defc9438a8a5048008e7ca @@ -328,37 +337,37 @@ SPEC CHECKSUMS: DAKeyboardControl: 9d9bca22a5cc3c1d3cc61e24fbd208c3e84a3d2d DHSmartScreenshot: ee749048bd7126c4826748f98df3a4adc6ad6c78 DTCoreText: 67023bb51b26711d5f640c851f4845aea14c24c9 - DTFoundation: 25aa19bb7c6e225b1dfae195604fb8cf1da0ab4c - FLEX: e94a8d3d52adccff1b13f7ab7e98fddd4d3ff198 + DTFoundation: 2a31900f674de139045f4935a5656497fedda701 + FLEX: 81096107977a09836eb440173010ceeef01105d6 FreeStreamer: 7e9c976045701ac2f7e9c14c17245203c37bf2ea HMSegmentedControl: f514c6dad47aa3065e0ed2e8046b73efc71221b9 INTULocationManager: e5dc524611b0cd582f473bc56cc8c389adb2f338 IQAudioRecorderController: 69a67c2e0b87bd8746cbb4de175fd7a0bf820009 - JDStatusBarNotification: 21b616e7432284fea6eb0ce9eadc37c8038a5544 + JDStatusBarNotification: 6052ca9a51ee0bb058f8dc09cf1d63554ef0f743 JSCoreBom: 787dc056d5b933617a1772ca10fb8437fed0d790 libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75 - MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 + MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 NSGIF: 442808fd1667ebac3d09046c3f6d4bdd6720cded NSHash: 036c03781d372c288d332b512b203e7bb832e46e OMGHTTPURLRQ: 9ac96bdf5c90a33f75836630729ea1adc312a9ed - PHFComposeBarView: 758c73ce54be681df97223bc61543dd8828ae0d3 + PHFComposeBarView: 6382ab846e2f4d8634273c4a78d074bc5deed07f PHFDelegateChain: 491f9cd8a3fb8761f390ff05f74a0e168d48d285 - Reachability: a1dac0017d14de3504a13723b00f2b21f1130aea + Reachability: 07e976fb63651163096e04b1528d4d29a4a212aa REMenu: 30dad195930adf6c5eeb8041e3257aa60bf9fa49 - RMActionController: b83653e7452ed51492094d65dc82151c36443c03 - RMDateSelectionViewController: 354a0f1fe40bac01054528b7a8735f2973bbd813 + RMActionController: 535715be9f3d9eb96a838485370dcccee0dda597 + RMDateSelectionViewController: 1157d34245e6a1dda700e8a9c44417321d181951 SBJson: 72547475887af34b161b2b9dce8c20415d8b6c68 SCSiriWaveformView: 15b9dd6f94c7536e2032b34a35c6ff74d38c7411 - SDWebImage: 35f9627a3e44b4f292a8a8ce6a531fa488239b91 - SocketRocket: dbb1554b8fc288ef8ef370d6285aeca7361be31e + SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c + SocketRocket: 3dad623634f938c3930a9481428960d7e9fdbbf1 SWFrameButton: cd3cc4a8961e8975f4800c0f6d1d3c54c213eb87 SWTableViewCell: 2a94aadc9d47b2b611fa064566bf57948b95b579 - SZTextView: 3a81174dce0710a9ab069bc73a813e6df53b9c82 - TDOAuth: f7e356e834295b83c7b5066ee72a30f128c5f722 + SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1 + TDOAuth: 1334413592cff6947d243035810425ef79bc4ced TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 TWMessageBarManager: fd84e7948ba7968a2b5d9454859135761214ec56 UICKeyChainStore: 85db518bb1d294366d15ec9b92a416c4e670518f -PODFILE CHECKSUM: 013d012277f8fe4cfa5cfff0109e81a816fb5c9b +PODFILE CHECKSUM: 1fc4a3f74f5694a2d347d6d9e52bd7bdb6ce2282 -COCOAPODS: 1.5.3 +COCOAPODS: 1.9.1 diff --git a/xcode/Pods/PHFComposeBarView/Classes/PHFComposeBarView.m b/xcode/Pods/PHFComposeBarView/Classes/PHFComposeBarView.m index e0bd2c60..9b75788a 100644 --- a/xcode/Pods/PHFComposeBarView/Classes/PHFComposeBarView.m +++ b/xcode/Pods/PHFComposeBarView/Classes/PHFComposeBarView.m @@ -57,7 +57,7 @@ @interface PHFComposeBarView () @property (strong, nonatomic, readonly) UIView *topLineView; @property (strong, nonatomic, readonly) UILabel *charCountLabel; @property (strong, nonatomic) PHFDelegateChain *delegateChain; -@property (strong, nonatomic, readonly) UIButton *textContainer; +@property (strong, nonatomic, readonly) UIView *textContainer; @property (assign, nonatomic) CGFloat previousTextHeight; @end @@ -332,14 +332,13 @@ - (UILabel *)charCountLabel { @synthesize textContainer = _textContainer; // Returns the text container which contains the actual text view, the // placeholder and the image view that contains the text field image. -- (UIButton *)textContainer { +- (UIView *)textContainer { if (!_textContainer) { CGRect textContainerFrame = CGRectMake(kHorizontalSpacing, kTextContainerTopMargin, [self bounds].size.width - kHorizontalSpacing * 3 - kButtonRightMargin, [self bounds].size.height - kTextContainerTopMargin - kTextContainerBottomMargin); - _textContainer = [UIButton buttonWithType:UIButtonTypeCustom]; - [_textContainer setFrame:textContainerFrame]; + _textContainer = [[UIView alloc] initWithFrame:textContainerFrame]; [_textContainer setClipsToBounds:YES]; [_textContainer setBackgroundColor:[UIColor colorWithWhite:0.98f alpha:1.0f]]; [_textContainer setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight]; @@ -368,8 +367,6 @@ - (UIButton *)textContainer { kPlaceholderHeight); [[self placeholderLabel] setFrame:placeholderFrame]; [_textContainer addSubview:[self placeholderLabel]]; - - [_textContainer addTarget:[self textView] action:@selector(becomeFirstResponder) forControlEvents:UIControlEventTouchUpInside]; } return _textContainer; diff --git a/xcode/Pods/PHFComposeBarView/README.md b/xcode/Pods/PHFComposeBarView/README.md index e0e494a3..5e4011a8 100644 --- a/xcode/Pods/PHFComposeBarView/README.md +++ b/xcode/Pods/PHFComposeBarView/README.md @@ -118,4 +118,8 @@ properties and their descriptions. Philipe Fatio ([@fphilipe](http://twitter.com/fphilipe)) -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/fphilipe/phfcomposebarview/trend.png)](https://bitdeli.com/free "Bitdeli Badge") +### Sponsors + +These people and companies have sponsored the development so far: + +- [Liveminds](https://liveminds.com) ([\#64](https://github.com/fphilipe/PHFComposeBarView/pull/64)) diff --git a/xcode/Pods/Pods.xcodeproj/project.pbxproj b/xcode/Pods/Pods.xcodeproj/project.pbxproj index 302ae6cb..737d80f7 100644 --- a/xcode/Pods/Pods.xcodeproj/project.pbxproj +++ b/xcode/Pods/Pods.xcodeproj/project.pbxproj @@ -6,5947 +6,6566 @@ objectVersion = 46; objects = { +/* Begin PBXAggregateTarget section */ + EBAD01DD961D84E76900A33BE7FB2600 /* CYRTextView */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 1B1289DD3986AFEC328C3BC2A1D241D9 /* Build configuration list for PBXAggregateTarget "CYRTextView" */; + buildPhases = ( + ); + dependencies = ( + ); + name = CYRTextView; + productName = CYRTextView; + }; +/* End PBXAggregateTarget section */ + /* Begin PBXBuildFile section */ - 0004BCAFC13EB239529B8C8921D761FC /* ModuleConsole.h in Headers */ = {isa = PBXBuildFile; fileRef = CD970419C7F8D1C4E7D266794B13F9EE /* ModuleConsole.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 00B2732D5F9E362DA88E8E1B975EE41F /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F4776337571480F4EF37313A9BC558F /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 00C76DFF0F35680AE08410B1C1C116E4 /* FLEXManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D09E48810B69EF840F1D53AC595548E /* FLEXManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0131DCB7E7E91F44F8389EF55E92311E /* APAddressBookExternalChangeRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 913EAA1C6C283D66AD341139FBABD766 /* APAddressBookExternalChangeRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0192D19019EA8B8412299334370CCFC2 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 665227015E93D6A0D7970467CEE3E7C0 /* UIImageView+AFNetworking.m */; }; - 01AF41452096B817C23CFBBD359B1671 /* NBPhoneNumberDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = C5C556F4E9E389C777D6DBA4D6B4749E /* NBPhoneNumberDefines.m */; }; - 01C4211F3520A75E2FB5FED346B56491 /* DAKeyboardControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 581C06D2AD6A944466CC8C93234308BB /* DAKeyboardControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01E892035BDBFA8CB2EF337D5E76DC80 /* UIView+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = DC620C69852C55DAE45621AF7FE2ECE9 /* UIView+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01ED6E5212F9D27BF5D9D77D7C8FBCC4 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = D36E53247A6ED9033E9DF56266B271BD /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0210AF756C9F104B51260E043076BC75 /* APSocialProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C1C96A5F159D92214662D6F6FA1E7D9 /* APSocialProfile.m */; }; - 0241EE2CF9BFBD178BDAD873845B14F2 /* FLEXNetworkTransactionTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 28E80878156EDDE690C214A37A566408 /* FLEXNetworkTransactionTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03486BE0B043632C4ADD1EB5350B018F /* FSAudioStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8857D719CFEBAFA819DB09494272FE44 /* FSAudioStream.mm */; }; - 03B88010DFDEA73362548E247BA233D0 /* IQPlaybackDurationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 526F7CCD4DE14D9D4E9DE303D5041553 /* IQPlaybackDurationView.m */; }; - 03BF757B6CCA752B982C12EB56D9D8DE /* SCSiriWaveformView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C4BF6F85C93DA52DB28E687DC918D3 /* SCSiriWaveformView.framework */; }; - 04E3883D442466B24E95323A6FAB02AF /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E9DDB36A88501A0C99AFC827BD4ACC /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04E965F49ABDC6D3DE5816FDC85AE0AF /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = D321F3E6B6ACCBA9ED85086495A79CCC /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0502BA4DDA76CC4C4BCF72FD6E95B40D /* FLEXArgumentInputNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4383780137AD6EBC331C98A674D85D2A /* FLEXArgumentInputNumberView.m */; }; - 053BE1E2E4D25CD836BAEB7A2BFBB66F /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA0F6C8A26104EB03B31E4EC09953A4 /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0572C904ABCDC58CC125F6BA83804535 /* PHFDelegateChain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7BA1809C64C1DAA6018E3140A8DD563 /* PHFDelegateChain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0596718A490E787AA1C723E315BC3DB5 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C08AB5BE81F1DE7D3353E16FE8A691D8 /* UIButton+AFNetworking.m */; }; - 05B26F8C3063601CA5DB66667A150CB5 /* APJob.m in Sources */ = {isa = PBXBuildFile; fileRef = 188544ECC9957D6CBA663D5B8B7BB7F5 /* APJob.m */; }; - 06054E134E29344F01A2D2CBDC6090DF /* NSObject+DTRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FFC6D4F2D2CBAC16BE71E3E10C1DC00 /* NSObject+DTRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06407609364E90308F626DA560EB52B4 /* FLEXDictionaryExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45495AE4FE92B37E892170BF78584ABB /* FLEXDictionaryExplorerViewController.m */; }; - 0657957FBCD3913DE0F9D3FE62359370 /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = F5EC73C7565197C98B05711E7F3D873D /* DTImage+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 069D97019D3EA4D31A0E345DD43BAA5A /* OMGFormURLEncode.m in Sources */ = {isa = PBXBuildFile; fileRef = D730013F30728CD690ECE2DE331CB5E7 /* OMGFormURLEncode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 06A9B70CAA3F4771CC1D55BDDCAB5CE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 06AA37E080D3EF141729C17CD56B0F78 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 0703360F49B6D5B904EC8040E9B4FDE1 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B1173CC3EF8E25018ED6D1E3725D921C /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0724FEEE4D812A26F87E2E38673AFF8F /* FLEXImagePreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E0A1083888D624A4F68FB47D5A2148A /* FLEXImagePreviewViewController.m */; }; - 076573C7BF8B1603B233AB1667B249B7 /* FLEXArrayExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C977A7974E7F2A432E97A6DAE8B2F85 /* FLEXArrayExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 085156D19B644A05D79E5B2A02E4D7D1 /* UIView+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = C962B2DD307CE886902841C5D85E307B /* UIView+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 08584D6E4A3D9E22BC7F017BF2943894 /* FLEXArgumentInputFontsPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B94F3B0F7BE2309EA0DAB31C051A6431 /* FLEXArgumentInputFontsPickerView.m */; }; - 08B1A4AEE282C65DA9F0FAED30176417 /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D93F478AB7211353944BC6C7763BDD2D /* DTLinkButton.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 08D14A0FAB686FC9689664BABEF5D711 /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = B2EEF4B05CFCB0EE80B44CF42AB623BD /* NSString+CSS.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 09180BB821C5AA314D37C344D0A2E14D /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = C570B0F32DFF4DCAB72035DBA65EA483 /* UIView+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 097E06672BAC08BD44EA64B02A6B3410 /* IQAudioRecorderController.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 67FD4687C3AFD36A832764120D72D1AB /* IQAudioRecorderController.bundle */; }; - 0992D258F33B203CA2E117D88F2BA94F /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F1903F7445643C237BACA0221759716F /* SRConstants.m */; }; - 09A35A82AC4105068BF402B7421B7489 /* FLEXMethodCallingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D432C60EE6535479A58D8216721EE3C /* FLEXMethodCallingViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A1E896C6D2A1684FB9ECAF1EADC4B90 /* INTULocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B23A5FE28CAC621E864F69F54271C7F1 /* INTULocationManager.m */; }; - 0A374284FEF0EC1FD75E0C0C850D1F7F /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 430EFCFF0CB56FDBCE231FF94D931EDF /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AD6A3684BFF0D97B2A02139C981AFCE /* FLEXFileBrowserSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F0107051102ADEDA9638D91B6EB1B3BF /* FLEXFileBrowserSearchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AE4020B5F18697E7CA96F2991E681FA /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CAC726BD1E9DCE7DC9F0359F836A32 /* AFNetworking-dummy.m */; }; - 0B1C24A93116B3A4B4D96979D703A903 /* NBRegExMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 34C0F54516F26E67DE9BA8E152C294B1 /* NBRegExMatcher.m */; }; - 0B2BA2841D748FC9A6248272FFCD76D0 /* UIViewController+DTSidePanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9444A5663D3B019C905A02CBAC0CF468 /* UIViewController+DTSidePanelController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B38FE2A385DC638293D6047DB60397D /* NSGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 1331C92AB1ED843CA54591E93CA96198 /* NSGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B41A79F208B2DF6127D430F3B977621 /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F2391D9C602D54700E7C415883229CD /* DTCoreText-dummy.m */; }; - 0B8B550C83B6FE3CFEC9D0C53E49F136 /* APContactBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 06ABB95F6029DC0C46C1B610200BB6BE /* APContactBuilder.m */; }; - 0BCC5957D512B71925008F2A9B6C8ADD /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C6D7B21C31C90C04DFAA2E3183FD067 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C24A57C81CD78ACF88B0A47F283BBB6 /* FLEXImageExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 271611DCE41D42A8ABC7E3E7FAE6F516 /* FLEXImageExplorerViewController.m */; }; - 0C412094A0621AA7F353CE75C40970FC /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 19A8B19C7222EFCEA45063A33394FD25 /* NSCharacterSet+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 0CC793EE4222101365684C819CDF8CCA /* PHFDelegateChain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C280293D7C60C67B9DA1D34B74033CCC /* PHFDelegateChain.framework */; }; - 0CF3B42B7F9A2CF4D571EF1CA60CF198 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4F0A423486056FF2FABD51CA69570E /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CF76CF060F90276C9A50FBE65F820DC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 0D36C51F412556CB75C4141E7EC7C092 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BF1D876A99E6F600782016BD0B25701 /* UIScreen+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0D9929DBE3BEC5920FBC5CA109592CCF /* icon-success@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6F0555BE47801F69C39D049800668ECC /* icon-success@2x.png */; }; - 0DB38B141504B8CC829FD304CC65046C /* FSPlaylistItem.h in Headers */ = {isa = PBXBuildFile; fileRef = FC246A36504CEB5786B98D2CE93B7901 /* FSPlaylistItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0DD2F20B75EDDDFA7A603C7402771C87 /* RECommonFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 45C96A57E757799E5AFBF92D7408FB71 /* RECommonFunctions.m */; }; - 0DFF7855B5DC94523651D3AADD727E51 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB5A01D71AB6A74BAC8EC177D451936 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E194D44F3F6BE17E648CB132C6E7526 /* APAddressBookContactsRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5DF4C07D250FD6802A7284992665F6 /* APAddressBookContactsRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E36BA7451E3CF5D05A539EF2850EF87 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 20033E63A017A79D63884F6AB383B13B /* NSMutableAttributedString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 0F23D716C056A3BD7E38FA552CDDF0FE /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D3C9B8E1440661332D3E0B2A6784DB4C /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0F32E3ACBCD9F1A7FE74C50C2D150226 /* NBNumberFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A08E1337430D951D0F52CEA2768AF4 /* NBNumberFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F89766B20465150ADA8515E35E0520C /* FLEXAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = 30794A4A4B3E2765414D0297052791BA /* FLEXAlert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F8A3845EE2479E25950E9F05E5C37B4 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 355CC84277CD580D693E9F17F539C1F6 /* UIImage+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 0F913DC06AA2123B6A512C7D049E8A29 /* INTULocationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 20A496C72B5C0A294BFDA12F8E31538A /* INTULocationRequest.m */; }; - 0FAF2FE80E641096D5691254CEDE97FA /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 315C99237CCD850597FEE5DE64AF5EEB /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FB3AE64332522DDE85240A9B654ACC6 /* UIView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BB4136603998652B2E1B3AAA69F91FA /* UIView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1077F96EAEA38003D033B591F2E0D0B9 /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 347602E3770137BA2E86C1AC67088DD3 /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1142EA99FD0A100FE975F4C29EDE8AEE /* SWFrameButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B23E4A6B6BD97B78A8C5C4B8E84354 /* SWFrameButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11DDCB1538265964A845F29E32A9B597 /* FLEXIvarEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CDDBE29EEA6FE6BA39A06B8E7E4C26 /* FLEXIvarEditorViewController.m */; }; - 11EDA23228074069AAAD1DAA3B4550EC /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115075BBB42B72D672EA461D5485A9A5 /* CFNetwork.framework */; }; - 11FE9E60A4FBCE7BE6DBD707EC227B88 /* APContactBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC5C17C89918AD23E6DCBA1240295EE /* APContactBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 120C85B0ABFB3A53F19BC6ED7D6A0AC1 /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191DB56EB6B46A9EA0315F7ED025E67 /* SRDelegateController.m */; }; - 1258F3CA2E0985146E2DD1723AB694ED /* APContactListBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B6AB429233A413611E58B91E5BECA19 /* APContactListBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 125E5A5C89618C9C7F18339752D592EE /* SWTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD9214E149B8EBE282BFD18616DEEB4 /* SWTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 131A55FB873E86A972C811E6CB3DD116 /* FLEXASLLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA6D12BEC506A1FDA7780F7F0E03CD5 /* FLEXASLLogController.m */; }; - 133E817129704BB14BBA093DEF3EA5DC /* UIWindow+AHKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D15DB7874274DCC4D4361DD884584AE2 /* UIWindow+AHKAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1342DFF767BDED1B46165326A3D324E2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 13601872ED4415682DE1B0EC8CDCA878 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */; }; - 136811330ADF9C568B93557412D61A55 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DBB91FD9C95F6DB31A9A1C648E3476D /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 137F74D9C30EE7AC5B6C3F4CCFA72C6F /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AFC5B1169CBD3816237A656BCEADCC0 /* WebKit.framework */; }; - 13BC361C00F71A38EAD9FB8895005D22 /* BBBadgeBarButtonItem-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3544449382D4F630416FCC09B43508 /* BBBadgeBarButtonItem-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13E48EEA1DDE3B19B311BC952DAFBDB9 /* FLEXSystemLogTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 01E094DD2A7CC7861A8CF80FD07A373C /* FLEXSystemLogTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13F03D3BE3F363CC3E495BEB88CFB98D /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 92CB793E212B3A489491E79934C42022 /* UIActivityIndicatorView+AFNetworking.m */; }; - 14B3AE683699EB775F9B342E0B914474 /* Resources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 39E155782CDCF4D13D17CC87E2D5A1A1 /* Resources.bundle */; }; - 14CE93D939810795B383C21F113AFF52 /* audio_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EB962C1DA80BA9F267B3A39F7F3942 /* audio_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14E2660C964A7BA3477729681FA8DC3F /* IQAudioRecorderConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A817494A6C555A5A22FE57E6B941C846 /* IQAudioRecorderConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1513DE44B395E78F58A7A684D5F2ED41 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F75DFC87970D878D4AE8C369690D1D24 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 152AB8DE428B22E030ACE7915FE1A321 /* FLEXSystemLogMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = E055C45F8C526C958ACBD2E97FC84F42 /* FLEXSystemLogMessage.m */; }; - 1574C28EACB1C12A4AF9E61D67BC1D5A /* FLEXClassTreeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CAE33FC0216EE9A1264B5FDF3CB6E99 /* FLEXClassTreeViewController.m */; }; - 158CEB67F6A928F5F0D273BEC7E77AA5 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = AC7B01A99CF5E015C7480DC4611ADA6E /* NSString+DTUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 160659DF19BF04BD24BFF1A6D8D3691B /* DTSidePanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = CEEC502F80BE7F31F27B4EAFE2CE7134 /* DTSidePanelController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1610EA184BFD0028C7B588A42556689B /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 41E187689DD717DD616C3C68C07BD3A7 /* DTCSSListStyle.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 16278854C75F10642A60937D35005BDA /* APAddressBookExternalChangeRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 583460F762B34C8AD0AF96EC5307DCDB /* APAddressBookExternalChangeRoutine.m */; }; - 16396A47249301DC9D4E5330A475090E /* FLEXViewExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 910891C40CD69EBC29501EE867E34AA4 /* FLEXViewExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 16DB0BDEF51DBB10BD0B446048562A39 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 66CF7F80F139EDB4D3B70E0BBA93DA52 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16DDE8CA3C181CFE2B20AA5DA3F477F0 /* DTScriptExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = 104698CD09FFFD99E91D5B4D7F8AA7A4 /* DTScriptExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17008DA80800BFB01CC9D7CE39FA9DF4 /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = A4DA8C2BB56782B5F1FAE39DDDF08336 /* NSDictionary+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 1701F9A970AF7ED6A1FEFF7E86D26695 /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B73A0713068F14420E09F72AC747985E /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1714D60426785AC85785C2E953A4315A /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 260B9952B840263DD13C078E5CEBECCC /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1756E23E965E58A9819CDD4057843F26 /* FLEXColorExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F03B1B6069CA3AF7AE9CD3E0020983 /* FLEXColorExplorerViewController.m */; }; - 176DF2BBC81580F956AF10360743AACF /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AB9550774C5D293E8BEAD3936D73314 /* NSString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 17863D605E642C334630432912C7CA77 /* UIImage+DHImageAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 71576946D651BF1F2729C359EFBF9795 /* UIImage+DHImageAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17B8D2A7A3E9961554615EAC994EF2ED /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = EE780AFF48E515DB01ADDB601D347128 /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17C8BC19785CA59B0AA27AE3756E41BE /* RMActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 16ABB2B0349D265EA9D4CC8D80E390A4 /* RMActionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17DC1863869F26507DFC40678CB593C9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AEACBAC7A3F5F8F01F11B98534431D6 /* CoreText.framework */; }; - 1907B878826CCA9E2C519CE95C1ADE88 /* SBJson5StreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C9AAC2C8BA616CDDDFB6ED7AE40599 /* SBJson5StreamParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1931B9B8FF0CCCF05F8CA656B528B7C0 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = EB88FCF456B6DE80C77E749339836BDB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 193FFCFE80DAA549BDB6CB31228031B7 /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 56E1F5CED4D92536754B9933F2945A9A /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19BE5908B6A3D4AFAAFA3188AAD32519 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 19C5C05536863346706D643989A6007C /* FLEXMutableFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A2478F054933BF30848A0F88F2D30A /* FLEXMutableFieldEditorViewController.m */; }; - 19FCD2B5541310AE612AF05A45A545A8 /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 201ECABDA0E05EE41544C13362C2B386 /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A06E6EFD43C981D153673317969AD5A /* FLEXArgumentInputStringView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5362D9D77EE5965634942644200D8D10 /* FLEXArgumentInputStringView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A1B6E34A01BB04D289907FEFAF6499C /* FLEXGlobalsEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E27A77FC3620B35F4EAD9A29F231376 /* FLEXGlobalsEntry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A2225D3E1C1484F9D4363643716EF3B /* TTTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B367001955C3BB3FEA8D874787101EB /* TTTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A22B05B891FA14F9235670BC25484C0 /* IQCropSelectionBeginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DFC81923B5D3FE7D11094382EBDAE13 /* IQCropSelectionBeginView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A39056AA2D31350BAB5A86D1F05CF4E /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 528D6C2EEF4372B3B714C29EDD3B0832 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A432A8BAD9B4D4494A2F5F0E97032C4 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = B96129A769033F366369E4A79BF2B048 /* NSAttributedString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 1A4F1533B168DCFEA29A1F231BE02220 /* FLEXSubtitleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BD569E0A890EC7DFCAA3D3D57C8BA73 /* FLEXSubtitleTableViewCell.m */; }; - 1A5104712CB9E93761A2C47999FB5153 /* OMGUserAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9902D2961B12FFD2966CCF9D8A05664D /* OMGUserAgent.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1A514CC1E83F0B55BE4AAE466A5D1B05 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CDE4A00D393E6382A4D66DD6DCA224B /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AB3BDE7BBB57C689EA7D4F7B465834A /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = 311050611377408363E3C20E1496BD9F /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AD5A47ADAF738B37116272E5463716D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13E46C080EE40508B23B845F0EC277BD /* Security.framework */; }; - 1AFD5390D8241C541FA8076B63633E34 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 1B1CCBFE2E4411B69D2784B999D510B8 /* FLEXTableViewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 464E35DD28A5D00C024FACFCD10F17F6 /* FLEXTableViewSection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B2E4F05D317C9B495911F820564EC20 /* AHKActionSheetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6648BA3C4E28CD013CA57461384415EF /* AHKActionSheetViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B53A70C644892A1A0C4F0E712790D66 /* UIColor+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 401671E1232D5EF781E0EAC13522FD09 /* UIColor+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B9CF82A9C5381E7A99F09A9895DCCFB /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C867847D1262446F0B7495E31D5EDEEB /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BAEF329383159674051C715AB8DAB11 /* AFHTTPRequestSerializer+OAuth2.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E24B14F5FEE430E855F0991ECA632BB /* AFHTTPRequestSerializer+OAuth2.m */; }; - 1BC6AC35E5DC758E292C23949CBB4D23 /* APAddressBookFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 856A4FFECB004580D45FE0791BEA5CF5 /* APAddressBookFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C3600EB5FF4A6218261AF9E794EC094 /* DTSidePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 52787F4F83BC9541911C3E2E8590D7D0 /* DTSidePanelController.m */; }; - 1C5CDA053752D34A3011304D4969AC4A /* FLEXKeyboardShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E96ED42EC96E21B49EA20E645DD263E /* FLEXKeyboardShortcutManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C8C1924549F73FD4A2BD5A483B26F1A /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BCD92D4F40281CCF9EB7794E9E81BC2 /* DTHTMLParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1CFBE99AEB488F612B6EFD36C1BCC346 /* FLEXKeyboardHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B736D31AABAF4A293557B523EDA52DB /* FLEXKeyboardHelpViewController.m */; }; - 1D44359E37B4C43F6B34A786548A5AE0 /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B011B7E825F49E887D2E9C09AC44E07 /* TTTAttributedLabel.m */; }; - 1D464A466F3CAD92492C7BAD5ECFAB44 /* file_output.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D0CF97791FB584863F27AE9047E8BF /* file_output.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D6F19030F80318D39A2113DD124C619 /* FLEXArgumentInputSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = FD529D8B37A0A73498672CF42DAEC5DF /* FLEXArgumentInputSwitchView.m */; }; - 1D7460220F0AAF028F2A6478EAA16361 /* JDStatusBarLayoutMarginHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 33974DC3D084271B00AA8ADAADB5B288 /* JDStatusBarLayoutMarginHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D86324E0C7E40E04BC1E80680C8E896 /* AFOAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A32B4C26F736FEB7FB9777DBDDA425F /* AFOAuthCredential.m */; }; - 1E53A0E026A5C4F4EED0907768F631F4 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = B971A6E642880750BFE4C9A29E21B99D /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E5EEC226E2DFB85A55A29E49FF824D1 /* SCSiriWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 66D319C9EB45B34197023C0F7C881862 /* SCSiriWaveformView.m */; }; - 1F739D670CE052640DDD48A6FA0F24D7 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 232B592350DE0C821EDC814960C1FA2F /* AFNetworkReachabilityManager.m */; }; - 1F89393F0861B01C43F7669637DC1DA7 /* RMActionController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE392B2BE47C37A60E096276739C263E /* RMActionController.framework */; }; - 1FDCBEB82C6371620C38144FB20796C1 /* REMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D968F0520B582EC5D1C813033847E0A /* REMenuItemView.m */; }; - 2010476133A7C4E56D4CD7F1B89C8B7A /* JDStatusBarStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AE13BB1300AE1EF183AD9519819DCC /* JDStatusBarStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 202FD9F7FC82013C683E989CE4CA34AE /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DC1C9D954DE8DD48876E54E70294E94 /* NSString+DTPaths.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2060AB5B6C6AB7504F53DF5D0D921841 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = C7862FBC21A6D5FFF54C93FE8C6AE6AB /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20B0806758B4E5310521EC3611A895D8 /* SWCellScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 336B1B814BF3C65C2F5A68E7CDFDC5D1 /* SWCellScrollView.m */; }; - 20DB0C211E287BCB86BFE5B0BF8D6539 /* SBJson5StreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A6B493DA9AC060E8403BA3226C0A75CE /* SBJson5StreamParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 20DCE3BF69A23CA9C83EBFF72D4E426D /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A7FBA76C2BBAEEFB570911D376AD5685 /* AFNetworkActivityIndicatorManager.m */; }; - 210A920635D5C7085E507565A382C5D5 /* DTObjectBlockExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 82A04B3E2501CF6823953B111AE3E139 /* DTObjectBlockExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2214D9EF048C093D94CEFDC849C2743E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 221EB7D98A5FAE4FFAFB88293D173DDA /* DTScriptVariable.m in Sources */ = {isa = PBXBuildFile; fileRef = 7152F6BB0B41547546BFBD92CDE12346 /* DTScriptVariable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 225FB12237EBB09E8DC3A9960EB7B18A /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F4D86A246FC2AD543ACF2F29BE006D1 /* SRRandom.m */; }; - 22B05905A36F0F513DA117EDE3337E3D /* SBJson5StreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = CE25BF35910B09D540C1AF77B82E826E /* SBJson5StreamWriterState.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 22C673F437EDAAF027F8648465C4554F /* DTProgressHUDWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5C75FBF56AD0F3BA1F45150B87B455 /* DTProgressHUDWindow.m */; }; - 22D3A2135EE98C1AF025FEB648845021 /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = ED33EB7B068A7ABAC8C09729EA573354 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22FA17FC6F5BBEFBDCA13A33480E3F80 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */; }; - 2308CAD493022490EB6E4C59DCC2F42A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 231AAB96D02E87508D7D4819CC7DDE60 /* APSocialServiceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAC80306119C91498443D029EB9AB17 /* APSocialServiceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 23B3C7A6A6E39119D91D67D69366556C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 23E92826BBCB98617E406CC734373724 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 9943E991838A224E4A5AB069B2472B0F /* DTTiledLayerWithoutFade.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2423E582FB19F42CADC745B522B8F741 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47E52BFCF60FE2A43DEF74EED2E75961 /* MediaPlayer.framework */; }; - 2440F7454F6DE235EBCE64D397DFA753 /* APName.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7E6A675E68B7B6EDAA440D94618922 /* APName.m */; }; - 2472BF320B216DC484A70912CACD03A9 /* http_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 626B30E7285718DAE34EA3FE5CE82601 /* http_stream.cpp */; }; - 2473DA2D20D5E5A4D34E1319E11D3A21 /* FLEXExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0312B6BF1345E2CE38CD7515451551 /* FLEXExplorerViewController.m */; }; - 24825365404F9559B4DAF035778645D4 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E3F7FEE62CFB351A3E52E56C9DA25E /* AVFoundation.framework */; }; - 248796C4C5C4E0BBFB0C8A1B4FCCA2EE /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = E13A0BC3AE248ABC44838018DF30D0DB /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2498CB16E4CBCDC468216D8026EE67B6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 24C17B6C221B8FD295F67DAFDAFAB3F2 /* SWTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A7B5F1AE4A6476C604E4CF5478526240 /* SWTableViewCell.m */; }; - 25A0F73556CFE43F25A4C3A036A413BE /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 94E3BD6BE8AAE3B81EB69BC4507AE6C9 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25DA0DBF84BCFE49DD691EBEA927B14D /* AHKActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = BEA818228A07B6E9234E0974097646BD /* AHKActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 25F3633BA031755300DEC41D1D4959A2 /* FSXMLHttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D9DA94B90593EBD8664CAFC338C29DA /* FSXMLHttpRequest.m */; }; - 262E587C3EED9DE9BA9FA04E0ED26D09 /* FLEXImageExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F618D7B6C183E833D598499ED5D30192 /* FLEXImageExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2646DFFA6C1A584CA8E5B063BE0DDEE9 /* PHFDelegateChain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BF0CA69E5EF5DEE00C115CB539C418C /* PHFDelegateChain-dummy.m */; }; - 26F87ECA3CEFD44AEEA961F3C7D6F06A /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A806196B79C540BFA1D38692C3F546E /* DTExtendedFileAttributes.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 274414CDCB32C2D69B596060D88746EF /* FLEXArgumentInputStructView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6902717064749154F383EC2D796D5FE3 /* FLEXArgumentInputStructView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27761256D2EFC72CABE1BEC30B40D90D /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 513E160F8F3010109DA38DD4AA45C58A /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2787E914021C9AFABC4551BD64EC110E /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = F81E7AE5103159F5A78C1AE609EE75A4 /* NSURL+DTAppLinks.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 279ED228C46DF5278BF87EB2DED55F9D /* FLEXPropertyEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6164CB83D962C4CA9B1BC981FE007781 /* FLEXPropertyEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27C85F72C8D1E47C01F622A8BC7F4625 /* FLEXRealmDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FB0B2CE6BC0875E2F837679A27A93D0D /* FLEXRealmDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27D3E46C017D71D2EE1E5434644B228E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 28284CFF8D33EE6D3B3408BD531DC3AF /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E5C2D79494C9D9CC8C638313803C36 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 299489A9E87D4DB6532FF0275950BAC2 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = A58FBB96B1DBA61D45ED7AD8732F6955 /* Reachability.m */; }; - 29C5CF88EA5EF571F8C5B507DB89B2A0 /* FLEXGlobalsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 93FD69EB7789944AC6E4C2465C8E9955 /* FLEXGlobalsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2A04D7F60E2FAD701484F497AFF11DD8 /* DTAsyncFileDeleter.h in Headers */ = {isa = PBXBuildFile; fileRef = A467D721F083F40D991420C33447A263 /* DTAsyncFileDeleter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A79F74D3D96C3A8EED63D63A42F91B3 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CB7C3E02C6F7C62EDC0A3DD80B764733 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A99B5EECFBAFA128D4931CA6DF8998C /* NSData+NSHash.m in Sources */ = {isa = PBXBuildFile; fileRef = BE4FCF0D16106DE0D7AD062163E55EA6 /* NSData+NSHash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2AF6390371D9D7B176C6A6133087610E /* FLEXSystemLogTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 346F6A7E2E541786322C84E60A10EC1A /* FLEXSystemLogTableViewController.m */; }; - 2B85139C58747397A9E45A84F533A68B /* FLEXTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9446F744FAD2CA25EB08CA2B4F38CFDD /* FLEXTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B8A25AA440435883ACA9A0F94F7E0C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 2B95ED8189B3DCF50BDE318F8A3412E8 /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = EAA29009F2FA539CB030429045E8DD0A /* DTHTMLAttributedStringBuilder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 2BCCB9192F95C3A81F0F422B2CB8E5A1 /* SBJson5Writer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA177E13472E42CC97A80E9112EE74CE /* SBJson5Writer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BD6DEAB8D6842121BE6E0E797B86B21 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 2BFADADC8ADDC9E64CC4BF022DA9DDAB /* input_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 994C8A60C837DA901374D33B409AD377 /* input_stream.cpp */; }; - 2C04F5710FE00A28339699CD35286387 /* TWMessageBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B9A77C530F6812A777BE422D7C9BDF4E /* TWMessageBarManager.m */; }; - 2C463F353A6AE3907D489BA60523CDDB /* SBJson-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0060401B5ABDF7627088C24E4866B620 /* SBJson-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CFD202AAEF05BA800734E13B37AE1EB /* PHFComposeBarView_Button.m in Sources */ = {isa = PBXBuildFile; fileRef = E86C6C93C07EC1A9274540DE53A4D928 /* PHFComposeBarView_Button.m */; }; - 2D1B4C371B2B8CB88469CB20EBBFEC38 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E826E7E01C85E9618806299C72D0597 /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D865C1C9F72BC6B2F64B9CB5C957502 /* FLEXNetworkHistoryTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C38E31BA803BD80E911AAA776FEF715 /* FLEXNetworkHistoryTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E02F4EE838716376F0B1A1442E2590A /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5838F38ECC23D2621CBB56354FD24DC0 /* Reachability.framework */; }; - 2E121FD5F79B2001AE8AAA1CA61C53FE /* AHKActionSheetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AE5A3F648DF2A4338161FD01E40580 /* AHKActionSheetViewController.m */; }; - 2E20DFEB7BD2A4A18E7E59B06480B0E9 /* PHFDelegateChain.h in Headers */ = {isa = PBXBuildFile; fileRef = A1A43899541A7EFC4F3AEF35FCEECBB1 /* PHFDelegateChain.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E252205D97FDE66485C977AE3344B7E /* APJob.h in Headers */ = {isa = PBXBuildFile; fileRef = AC307B9265144F18C25D2A4DBC8B4D17 /* APJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E7BDF48655F7AB9AC2F5BEEAFE813BB /* FLEXRealmDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE07D2BD898DCDD5B4C310C960737B9 /* FLEXRealmDatabaseManager.m */; }; - 2EAD8412150E5E9BE40A020D63FABBE0 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E8CD7F829FE03513ABF59FCA0D7C58 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F054609558D09D771452E58B6B1DA1E /* FLEXArgumentInputNotSupportedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 59B21DD364ED7191DD0812C2A975B9DA /* FLEXArgumentInputNotSupportedView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F2BDF563B6A89D767C94FF2A23229BD /* SBJson5StreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5716DAA9FE253DC73A74F6AD02DCDEFB /* SBJson5StreamWriterState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FB5465A92D35CD7C86117F479D81CAC /* NSScanner+DTScripting.h in Headers */ = {isa = PBXBuildFile; fileRef = 346CC4AE4C60558B15CA52D474983F16 /* NSScanner+DTScripting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FE5C55DDAC2EABB4A695ADAED1C1A83 /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 692A213FABEAAE1206ACCDE41FE2F9F3 /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3015491BB91D93B72BE5560B385A8AF3 /* AFOAuth2Manager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6FABD7748FD1F9F4E06FF17CC1FC20 /* AFOAuth2Manager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3020217AA9BF168A69637766645A83A3 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2FA85ED1D9F53938C3BBB7F76C4B6E /* NSCoder+DTCompatibility.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 306D2753DA11AD9F1B6999E240887CDE /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 09099B19A3D6838BCFCA9E0E32A52CC7 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30BFD0FBEEDE5E678FDB335013C903B5 /* IQMessageDisplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = A6B5D12E3BD5498CDA6893E335683E76 /* IQMessageDisplayView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3152768F726804B734E07A8BBC356FF6 /* FLEXToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A8202BF60BC84205E0DC991E0E152FB7 /* FLEXToolbarItem.m */; }; - 315F39416F42ABEDD99DCB8EA935F940 /* FLEXRuntimeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C59F952A2706D3B661F03F3D6ADDCAF8 /* FLEXRuntimeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 316B9E7807289F2E5CE97C9C40987576 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D62E520F4E4C9E1FA31CE34E289793CB /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 328818A57333E586746514D3A3E69D4D /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 646B47846A0CCEC64E273C7232F48375 /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32D8493EC4516AB8A3CC4655F24C9F80 /* JDStatusBarNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 86C5591AEFDB82CAE5C7AEA872C0C22A /* JDStatusBarNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32E93BED915B872D7D868AF15C4869F8 /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF076D45312FBACC1E33C74E1CAF3D8 /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3381E38347F711E8E4995E4BF00CE690 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = AECF2CD225A702A9361C286B4BFFA285 /* DTImageTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 338AD91C9FF5F003D6E1B8A75E904948 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9065637C66199F7153EBA5D69775A9BA /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3390EE6C363A5F6500373206A0AA90E1 /* UIImage+AHKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 80B64901FADBEFE1C3D1F2D29F663EEB /* UIImage+AHKAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33B6313DB3640191FA2AFFCEA747F727 /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 19BF33EC0E3B511759B040C38DD92559 /* DTVideoTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 33E6F5332CBFD736BD206F1022F9C5B3 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = B3CFF822E6338B291FE5F5E1EB515303 /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 344D2F7FD7DFD293340F9B299E71D5D5 /* NBMetadataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C93FDF659C9A5714CC06960DBFC73D8 /* NBMetadataHelper.m */; }; - 34C2BA9DD3ABECDEF31A889E0596BB58 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */; }; - 358BA7800FB53BA9135E7367A00A0946 /* OMGHTTPURLRQ.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D58675212DCD5E0FFCB2C40E77CCAD75 /* OMGHTTPURLRQ.framework */; }; - 358F0021153D1649AD37E84DA55C1A9B /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 48079E13FE814951D588D4E102DAE5DE /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35912E17834ED05F9D5090D3722CFA33 /* IQPlaybackDurationView.h in Headers */ = {isa = PBXBuildFile; fileRef = E4E573255CAAAC665C2710B287B2F9FA /* IQPlaybackDurationView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 359281FED5F98A543A01217E7DCE4323 /* FLEXNetworkObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 110E311DED94C4BCA10ED3BCEE4CAE6C /* FLEXNetworkObserver.m */; }; - 35937B370AE220B21E49A5E0A6A828AC /* NBPhoneNumberUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FA98FC625ED09545FBD9124CA090E34B /* NBPhoneNumberUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35E99F9A66137EC4DE6ACF4E9474413C /* DTObjectBlockExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C80D4CF03E04D01733CBEEF0C1591F6 /* DTObjectBlockExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 35F716F5DD1ABF45B540BDC274C7F4ED /* FLEXDefaultEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B813639F40C040CCD6EF6026596A3DF0 /* FLEXDefaultEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3603CE66E1122CF45C38AC806CBA3B57 /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = D4394DE0095782C44804B01651894BC7 /* NSString+Paragraphs.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 360DD39CF7558DB62B9E4B7B213C5364 /* DTZipArchiveGZip.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD3AACC5DC13CD990F1D4B152B27170 /* DTZipArchiveGZip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 361C3E607EC6059438467EA8E7043F27 /* APName.h in Headers */ = {isa = PBXBuildFile; fileRef = F48398714A91C3ED9CA556E2343E5233 /* APName.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3638B4ECC084A2DB07B17887E22129B2 /* REMenuContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99AA0520F9EEF32C7D7824EA794F0E74 /* REMenuContainerView.m */; }; - 369FA1B7AA6EE9B655C8842ECD85395B /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 711BC7CEE51FB9A2D57CC59F9C839BB2 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36C4CB2436064534BE824C38D842CD13 /* DHSmartScreenshot-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F00397554FE65FCD87D48384D7542AE /* DHSmartScreenshot-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36C7F2934F3F2846730C8B4D92065FA3 /* NSHash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31685A66CB1B8D09B5DDFF7538985E54 /* NSHash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36DD5E1A36A48AE80F273B2259F1CE98 /* APContactListBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 45FAF14D2E912131E973FED9C634CAE6 /* APContactListBuilder.m */; }; - 371C1F9C10976BF107BE67B580044EB5 /* APThread.h in Headers */ = {isa = PBXBuildFile; fileRef = E089AB7E4CC01A8FB4E0268BCBD532E3 /* APThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 372ABDB1A3E512E473B556BBF92DEFD8 /* RMActionController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 994FFEE2F4F3DE962EB7EAAEAC7A621F /* RMActionController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 373A15983054E47A8A7EB4E4D356F4A2 /* FLEXManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 11ABB40003A9B60F97133EB7B7B9D569 /* FLEXManager+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37D62958AF375CCB6C0EAC44B01EB4F8 /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = BB07B3E81AB9C5FE3AB2298DF55BC0CF /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37DEFFBDCB24CA7B952C8764C9021185 /* FLEXTableContentViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DD2BC37781F3E1D980D95FC5C3019F53 /* FLEXTableContentViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38BA0A06EEA2272EFFD01E9DE4DD7A1A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 3918BD8462051B40953B9775B469C68A /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 875B943FAF593187E812BC0513709071 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 396D13A8AC794D749F9E3FF04E05C51C /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = 289C875EE0587A1B18031AC9B1455DA7 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3990E6C95E839BBE67CBBD8B7DC0B2CE /* DTASN1Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = B62913AEDB9499BBC4BA801307C8AF53 /* DTASN1Parser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 39FFCB54838C6A981821B6B11A9BB05C /* file_output.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B57484917DC351F6D92A971C8BA5D24 /* file_output.cpp */; }; - 3A4B65597DE516A1F0C2620336758945 /* TDOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = D8F5B03B264DEC05B6610285D6972AEB /* TDOAuth.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3AE08BC5C9694E72A56463A5333AF2F6 /* IQCropSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = B672922EA339FFDCDA96653C17FF5688 /* IQCropSelectionView.m */; }; - 3AE775C11F7C103A3C9202CEC274D386 /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = EF494CAFCCC298A3D9BFC74B0691660C /* DTCoreTextFontDescriptor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 3AF1FF2507831850C01C0B31E1FD4B13 /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 384AC07E989EF83B131F226B71B430E9 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B040399363102B5B08DB61B5BD48277 /* NSData+NSHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E835EAFA83F2A9B3A2F4732EAB46231 /* NSData+NSHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B0CF9CDA733AD6D4B817752DB33051E /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AD54F8CF82B02A3BB64862EFAA961E /* NSNumber+RomanNumerals.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 3B16222DCCC006FC52DEFC75A38955E5 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B1882C79563B76FD422B12681A60AC1A /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B1C452CD0E8C8876C95F4C03BA43B76 /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 510C686AD8AE00A79583D4615287A67E /* UIFont+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 3B4BE31EE0C79C0765B1DFDDC4E119B9 /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F51BFAEF1903A5111D888842A6F4E0D /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BF97F6BE2B829164F9CFA08E1D0E241 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 3C0794C02FA466E2E0CB5247EF3CA5B7 /* DTScriptVariable.h in Headers */ = {isa = PBXBuildFile; fileRef = 542AED4FFD6305FB32D4BFBEE5D5D426 /* DTScriptVariable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C0A98C44F9DACD093EA6979C96F2A63 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C989B19DD083EC583BD8346DD7B1C43 /* Reachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C1560F8C4E32147E8DB3B24984B0A36 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F648FA42D711CB2E1ADF70F4D14AEF /* DTLog.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 3C822A3361DBD4AFCDDDEB4ED668AE77 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC9CAF7C386DAB2380321508A4D3EFD /* unzip.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3C88627ED24F23ACF01DF192650B8471 /* OMGHTTPURLRQ-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CA960EC62CEC903B7994A99E876C6D6 /* OMGHTTPURLRQ-dummy.m */; }; - 3CF26534C4333D57DC26497D758F85F0 /* FLEXHierarchyTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9F5B2E27548A61727498971BA5185CC /* FLEXHierarchyTableViewController.m */; }; - 3D045BD89E82B448A7AEDF5AB93E73E8 /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FF3A164B8691962676D1E92DAC41FA9 /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3D76081CA4771514D7C87EF320EA5409 /* FLEXNetworkHistoryTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A12DD603E07134BD0335A8F16F7798 /* FLEXNetworkHistoryTableViewController.m */; }; - 3D7D9144C56EB8DC311F2A046652C999 /* DTASN1BitString.h in Headers */ = {isa = PBXBuildFile; fileRef = A389805038693667C489FE8659582AA5 /* DTASN1BitString.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E436129FA07B710F8E5DE2934652130 /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D0C6F9775D9D88BE695A5F091B7828 /* DTCoreTextConstants.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 3E5270C1AF8C76F25178D4301AAD7DC1 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C2F252FE80E1FD2C9C56463D50FF7DE /* AFURLRequestSerialization.m */; }; - 3EAF0A7F7C7FDF4AAF8B832B552582C1 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F50F1EF775314CF44AE84C535F40645 /* DTStylesheetHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 3EB1923CA44680A52FE7100F5A4ED812 /* DAKeyboardControl.h in Headers */ = {isa = PBXBuildFile; fileRef = E07977DD90B34512DBB4313B5034DA70 /* DAKeyboardControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F0AF9F83DACC8046215EB3988FECB4B /* FLEXNetworkTransactionDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B83027FEFB5F038387A9B68240D2B902 /* FLEXNetworkTransactionDetailTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FA167BBDFD4A9880F9367AA35892681 /* FLEXHierarchyTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E43ED2958FE68EAA12E678A0348B93CC /* FLEXHierarchyTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FBA47A4E26699A3FBF50BD8181A53C6 /* Reachability-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8779C6F78EE439D7D87FBE9495CFAF03 /* Reachability-dummy.m */; }; - 3FF25176B80122BEB9F0D4754E025CF2 /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EC51C1A717CEE5CC3ABE3A19A1CFE737 /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40064EC4EB27DCACD7C90C1C3888130F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 405AA417129ED474CE88211C2AFD4D97 /* SBJson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D3D059687201D4BBA31D8124DEBD936 /* SBJson-dummy.m */; }; - 40C882B0B81702AEBFFDFBB953C168C8 /* APContact.m in Sources */ = {isa = PBXBuildFile; fileRef = 15DD2CAEC873FC0E7D4F47F3D48C4965 /* APContact.m */; }; - 415FDFE46DF41A1823847B41250FC23F /* OMGFormURLEncode.h in Headers */ = {isa = PBXBuildFile; fileRef = 215CC70A94FB4F3A7152F96C7235287C /* OMGFormURLEncode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41C060AB804446DA4800A8C52DD46C4B /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 99B575702A8DAA58811C56EEEF6B57E2 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 420BAEB6D860B4567D4762DE5C09C7AE /* FLEXDefaultEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B37D3C412865D5F09F92E2CF1A08F153 /* FLEXDefaultEditorViewController.m */; }; - 427C329A22A9A65164F93DD1EDD3386F /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8344E6EA329083A7430F58B1D03F33F3 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4371287A086ADDD3B5221EEC127C3802 /* icon-error.png in Resources */ = {isa = PBXBuildFile; fileRef = 3970410E40B01DFC4D891FC48AA4F1FB /* icon-error.png */; }; - 43B9DF83245BD67B3D479FCB7E830342 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF96C8E503FC9006FA9DA9BDAA176C2 /* UIApplication+DTNetworkActivity.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 43F1348D0BF9B73CCBD68F1408A30A9F /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = AEA3E0B7B1A77F7BE8853DF0ADF088F7 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44A259CE1FCF6A086713D43517FF3C65 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = A591F14FE933AB20562D4374A15E0A8F /* NSString+DTURLEncoding.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 44A614A6B1A9664B3B56504A15DE5921 /* FLEXArgumentInputFontView.h in Headers */ = {isa = PBXBuildFile; fileRef = B9EEE580CE57330166F110ED1C9258E1 /* FLEXArgumentInputFontView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44D127AD27E7C8F562416A16CF45F384 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A9C380C1F8E98598276DBDB07E717C6 /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45276C78751ABF6CD1584A98DDE3AA35 /* HMSegmentedControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 306C6033059CFC7A0C2FAFE581517378 /* HMSegmentedControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 455170EAEFDF6BD336352C69C7508BF7 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D462966FAADC9C7425DC90CF7BFF525 /* SocketRocket-dummy.m */; }; - 456916F5B529400EE319B1DCAF48D997 /* FLEXExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = FC894093315C40650983CBD34D67C46A /* FLEXExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45AAE948FA6D8DE6F20B698A91DD2073 /* APEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = E72F247C3C2C163098895EF41AAFE6DC /* APEmail.m */; }; - 460AF388F8170135AF9F5DC74E818D52 /* AFOAuth2Manager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 927AD90E9D986182DEB3AAE58E97A6AF /* AFOAuth2Manager-dummy.m */; }; - 461DC8403AE2C7C54EC763F678F75E47 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 462BF59FC95AB8E81020602849B0A6C2 /* DTReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = B1297B1065FC0C4576BAC66E1638E927 /* DTReachability.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4630E48385CA96D598BC1E6B6ED7AAE5 /* PHFComposeBarView.h in Headers */ = {isa = PBXBuildFile; fileRef = 26785D1C2E071576264D15A225899AA5 /* PHFComposeBarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 464FC7F3E0E223BD886427BAE06CFC9F /* FLEXFileBrowserTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 408E5F58E8CB774B4213FF9C478B7D32 /* FLEXFileBrowserTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4666491993450A3810AEF96756FAF1B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 469A2949B79CE500F85DEA00EFE91B10 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47E52BFCF60FE2A43DEF74EED2E75961 /* MediaPlayer.framework */; }; - 46E346BCA4B30A02CE439DC19EF95BB2 /* FLEXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = AF4C2FF36D22BEAA4F3EF463D4D453C5 /* FLEXResources.m */; }; - 46F7D91E9B02330071E5FC8AACDDAB56 /* SWCellScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = EF121C43BB84F9E9A72FD528BA342865 /* SWCellScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47CF904CEA4138A497122591FEB2D3D1 /* RMActionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 78356459AFC2AEFA74B9215AA8C91E73 /* RMActionController.m */; }; - 4833B19C7A125119DA09723E15635784 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 66196CF3AAA01E8A783CB47BDF87F3B5 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 485C58B48D8FDD041BDDF1A5BF115C90 /* NBMetadataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BA38F2B8D34383684D8D0C09B73910 /* NBMetadataHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 489428598F0DB388F2930B497AB4A38E /* DTASN1Serialization.h in Headers */ = {isa = PBXBuildFile; fileRef = C03B2674190F3629601BE4E1DF146E24 /* DTASN1Serialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48AF069FA5549CDDD6E7281FDAFE8042 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F85C9340B76690952E7EF4F878566 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 493AF3922C1806184953DAF4ED1F7FFD /* FLEXWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 265B19C853A3C08B1AA8B695E7176CDC /* FLEXWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4958C8BBD6AA39E0349DB4BDF41F8C9A /* FLEXWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = ADA8E9751F52E1FD0A77E8151A8CDC6B /* FLEXWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4995B349A14B73260A87A1ABA290DC25 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E6B3C19515267AD2EAD5266FCD5381 /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49CD9E8C33273C128D1BB511FF77557C /* FLEXLibrariesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B27FA7DB450F43966F922E39C435E10A /* FLEXLibrariesTableViewController.m */; }; - 4A1BA1563FA116DA9CD8E97ED6A8FD1B /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */; }; - 4A35F649F24DB92F1BAAE95ADC5DECF3 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = C93BEEF07CFDC274D1A483BD2D7323FE /* NSData+DTCrypto.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4A4FD69B2FA4DEBC3198A2BF0A7EEFF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 4A501A3D727D725D918E364C6DE92D42 /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = CBF60C56D3579DA28ADCB337C9DAE7E7 /* DTListItemHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 4A6ED759CF874BF0AB65A36485E73145 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D3C2981C7A49D4410509F4838CCDE5B /* NSURL+DTComparing.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4A9DBBC5082A2BC68BD78408B672363A /* FLEXNetworkTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A12AE7BA9D1823E9C31BD584B238163 /* FLEXNetworkTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4ABA83E4662FA47E2503CD1B5330BD32 /* APAddressBookBaseRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E49EBB17A0C3A237CECA6560DA151AB /* APAddressBookBaseRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4AFA4AF24AA294A0F194A43270339F85 /* FLEXArgumentInputTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = C2AD55A41D8E4AEB700B037DBEAA6F3D /* FLEXArgumentInputTextView.m */; }; - 4B3AE7D8320B3E4C6342EBE902226198 /* FSXMLHttpRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 84AAFEFBC287F7BE0D872EB49165072F /* FSXMLHttpRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B6F573736F8A9EC5ED3C6A3EA9E6874 /* INTULocationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB78F7977A16CC52CF8D281842DAD47 /* INTULocationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B9F41DC3DC1402F4C6E8649D24189B9 /* UIView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C49EF3607155225F4243CE25D561D11 /* UIView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4BA152C2BEC8E291D515205938E87ADF /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DA5D976DEBEA96C79435ADA5F48BD9D /* DTCustomColoredAccessory.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 4BB508941A64D8CE06621C2594D2E240 /* FLEXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 07F8A787A986B14DBBE930E8146FC79A /* FLEXNetworkRecorder.m */; }; - 4BD3B1D588017EA43F3E98563319DC19 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 728002332EAE28CB8620524F6AE370CB /* MBProgressHUD.m */; }; - 4C1E912EE49E5CACE721C1EDB653AF69 /* DTActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = B6684B772F4B7045B83B5DB0B2995988 /* DTActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D471FC962EEAE129F349F950A631716 /* APSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F9C7FBA8D5E4325C08BF5CACD218AC0 /* APSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E26E0540087CEF5F06B0D80C71F2F82 /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C81A10593D850F9148DF4B3BE8E3AC6 /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E819200C576F01336711F2BE4943D39 /* caching_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = F64CDCCCBB1571D0F7EDE014F4D8CA7D /* caching_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E9C742E4E56B04EF220237CDEB05141 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 246D99D70D7047C304152DEA5910994B /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F0062EC56EC726C90BB0070805A408A /* SCSiriWaveformView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF51B149022DEB36D940DB02AC616110 /* SCSiriWaveformView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F0A208101F4D4A21E05E409642D69A9 /* UIView+DTActionHandlers.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCCEA31FF61F4F09EAFAEC08D59F0F6 /* UIView+DTActionHandlers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F6F91045B52F24C0B14775B2E50E015 /* FLEXColorExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E8DBAFB518B96F0C3B608E8EF560BAF /* FLEXColorExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F9863537BC7DA16B2F5D24FB8332853 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 4FE21F1DDD64EF80BDC3A5CFCCBACD58 /* NBPhoneNumberDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D54C5C5AF24C4CAAE93D0E499A28D4 /* NBPhoneNumberDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 503C5D7E0E3729314F4FD333587BF764 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13E46C080EE40508B23B845F0EC277BD /* Security.framework */; }; - 508960BBFC898B9E2D0FEDBE4A713F07 /* FLEXTableContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9812A3AC4953CA14754BC8C890EF20B6 /* FLEXTableContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50A0FBB022E8C3715E28BA239B163F43 /* FLEXTableListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 22D344B94FE0D3002F648824A317F491 /* FLEXTableListViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 514BFF597B7093D68B26488A767A8732 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 51819693BBAF67CAB6940B432DE8CC33 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D801509F1F53CC0A1524357198DDF89C /* DTHTMLParserTextNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 518CAD2F2431F5024A68C8FDB3C58213 /* FSParseRssPodcastFeedRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4B8D1C28283CBA952082A78CBB267C /* FSParseRssPodcastFeedRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51B18B3AD476E9FD40D0EDBAEAD614D0 /* OMGHTTPURLRQ-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C4B84A466B89B7FB040A19CE82EE83 /* OMGHTTPURLRQ-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51BE895E825BD58EB7DCAFD602A32844 /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 647801C4D9AEFBC80F87A3DE48A45CEB /* DTAttributedTextCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 51FB7928C0D09FB5B05AB9550779BB4F /* DTProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A2F77D352EBDADF569E21B7DC8787D5 /* DTProgressHUD.m */; }; - 536EB103EC9496B19A66DC0413C0407C /* FLEXDefaultsExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A558BB449925114C72D0869B6075618 /* FLEXDefaultsExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54238A0686EDCEE1F11E16788ECA89FE /* FSCheckContentTypeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CC1A62678BA86A5609A7E34F62A13DB /* FSCheckContentTypeRequest.m */; }; - 545663E3877E3234172C9E4C5559BD5A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 548746978592BD700503AFA5090C6A82 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = F0A982518E1FF4F06C41C058EB3224B7 /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 54FCCFEBC7BD87E8BE1A2A13C420CBAC /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = F70987C276F55A5B14F7A17FDEEC89B0 /* default.css */; }; - 55002EF42ED90A8CF76900FC532485F0 /* FLEXHeapEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = F79BC32CCDE6363A10436C925BDFB082 /* FLEXHeapEnumerator.m */; }; - 55748191A9944E5992663F2F0D2D1CBB /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = EBE24BC698D7A24DD0413B6E2FBE4C3B /* DTActivityTitleView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 55E097B2AE3A88C04AC94CDF0CFF35D3 /* APAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 915524ED8AE27AD507033F12D49D9A1A /* APAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55E1F481E337EDCF4CCBD241D663D32E /* NBGeneratedPhoneNumberMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA306996EF026EE76590528A37CF0DB /* NBGeneratedPhoneNumberMetaData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5614048810B833822AC25807BC17DF27 /* DHSmartScreenshot-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F243ACDBD912A9F510F7CCD99EFAE7D /* DHSmartScreenshot-dummy.m */; }; - 568A75A5FD6C5A328904B8CF0F79DC4D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 5699C12D3BA7141C91E5F58F32C3E7D1 /* FLEXTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0399DA997C18628E4E183415AF49AAC5 /* FLEXTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56E0DB3F1E39FEBB487C79B8994D24C4 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 67A235E14AA38F5DB441F14CC44F651B /* DTCoreTextGlyphRun.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 5736A04C2D5CDE17B18C2A15D08C6168 /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A5AC6A57F8729EDD1979A8D6C7495DC /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5813637B5513B13E9CACFC86F39B2AD5 /* REMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 379515B0789358171BB0EB6529D2F884 /* REMenuItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58432E5E48B9A2DE2E59B73577740F21 /* SWUtilityButtonTapGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = DE787FC6586C02E0E90491D286AADC3E /* SWUtilityButtonTapGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5863583E21B3BA593B3D64CDF9D25EC0 /* FLEXFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8211D6AF671ECB6C1A438701B45C9E49 /* FLEXFieldEditorViewController.m */; }; - 58B75027E7DC333D0FD9D0DA55912580 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = D117BEB0DF65A0BCA1C68C5C64DF7034 /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58CD4788B22DC3CDD9C38F82B495EE19 /* FLEXTableContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4241B2CB47194CBC35A6911C09D21121 /* FLEXTableContentViewController.m */; }; - 59469EC8914459110F5CD507725B8334 /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4AB33537AEBBD305648ADF742E0AF0 /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59CD0648B94EE81DF07D406D7373282F /* DTScriptExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = F624CD6C4AEF6593D05D36F7CEB69C60 /* DTScriptExpression.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 59E8530AC69AF2C93DC42C06F87ABBF7 /* FLEXKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = A725E6C1E1BDCD0A049FACA2AE27B00F /* FLEXKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A3B1AA43812205BD658CFC693D3EE02 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 5A9A6EA141EF9697708F4A606563DF37 /* FLEXSetExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C14404F42CCE7479F8F26CFB13B8B85 /* FLEXSetExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AA5A2930474DD68DE7D3DBD3AF54EF9 /* UIView+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = C017588546EA73F9019E57E2884C07CC /* UIView+Layout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AF536E29F8E629450D035CBDD15108F /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C57BA731F7440DA61F7F642ACA24E9D6 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B3486D14E248043159CCBC559CA94A6 /* FLEX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A46E68A170A64550A927EB29F9B71A67 /* FLEX-dummy.m */; }; - 5B95DD0D3A6EFB1394A56D5C2E1259B6 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = D603E5E3A2D558177E6AD8BC29FDC577 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BB6A9A55E75C8D590F757506448562C /* APAddressBook-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 98809F376210D31C93325CE0EF236090 /* APAddressBook-dummy.m */; }; - 5BD0E6895D27F2267CED6A8B72936062 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B71F4D52E695DA2B041D6CE0FC1F631 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C6538603E1C413B1A815A26A23CE319 /* FLEXOSLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = 175E97B58AB6FEC91E0BDA8AF81D83A4 /* FLEXOSLogController.m */; }; - 5C8E38275088BF38197FB752B9C00A95 /* FLEXMultilineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AF7C4392F45D371CE68E4509C821E314 /* FLEXMultilineTableViewCell.m */; }; - 5CB64754B9119671E914A749438C3F5E /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB4AA8E1B48FD91CAFEFDB3AE824764 /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D3A05355F2221C626208B0DE09DA5EF /* APContact.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C511E890EFE892D27880620A9C9966B /* APContact.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DE977A737422B8F2569917F20F3B442 /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 041EB0712265FF6E997059CFC24783EE /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DFE7903211960638F1847B6C3D0AF63 /* id3_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34DF8ADDCBE435BF63E563C7C267009D /* id3_parser.cpp */; }; - 5E0EF04B4966E8E0843467E28377B404 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6755BE10B72C5426022E1A30BBD16B /* DTSmartPagingScrollView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 5EC551F61A1FB76F175D4509B14A52DF /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 051C4C073508AD5C86D7B0744F212411 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F455DCEE7BE552A510E65D5C0D5E1E2 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 4034D4646878E193FB63C45FCE37F8F4 /* ioapi.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5F468135453E10758CD11ACAA673C6AF /* FLEXViewControllerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3694FDD47C09047E4232AFF3B1A1A62 /* FLEXViewControllerExplorerViewController.m */; }; - 604A877488D38367D5A8E39D41F39809 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 60896007B2998F181BA032ADD7821C35 /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3114DBEE92E39D1B9F11A45689D3CE41 /* DTBlockFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 60D22F2AA16DCC9DF66FA94EE8AE142F /* UIImage+AHKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 00493C974FE3C2FC3B0B6222BA5ED693 /* UIImage+AHKAdditions.m */; }; - 6174762A65EAD81C2C0179A45937F0BF /* FLEXClassesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 210FE372B9D3C94B682E4A74A922198F /* FLEXClassesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61DBC6D80B43CC008487BBF19F382219 /* FLEXKeychainQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 724DB3E50807BE9026DAEE2CADC2DB2C /* FLEXKeychainQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 626DCCE089E4BB83247C940FBD022B08 /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A921D353D780D143178E19FC5EDE583 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 626F3416758DEBD1FB6EAD134D843949 /* FLEXArgumentInputStructView.m in Sources */ = {isa = PBXBuildFile; fileRef = BAADAA5F0611A0C9DB80A44F12D97041 /* FLEXArgumentInputStructView.m */; }; - 629DA639FA15B54291BC3B285C800722 /* DTZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F4D99F4A16AD8C9492086FF8CF6724 /* DTZipArchive.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62AE09408E968A601698C6BD3D1CF43A /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = FF961EC4715670E65BF472BB0F51EC55 /* FLEXResources.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62B42403D5E208276D8E98461D59042F /* FLEXFieldEditorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 99EE8C44A675D9AFCDC06502C17B85AD /* FLEXFieldEditorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62CC2409A79920519F22EDD65451079E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 6319078F3264F68E82F2B45D0DD22B4B /* Pods-Jasonette-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E242014E2E6D63EF5D624576E5EE98F /* Pods-Jasonette-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 636A25E59296DF8F37E0D4B43CCC3251 /* SBJson5Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = 55241A106C2AE0E537E9EEED249CF55D /* SBJson5Parser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 637CA1D3C482F1028F28942F94C2ED85 /* FSAudioController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A473FAECD8A144EF9AEF19D10E7108 /* FSAudioController.m */; }; - 63FC9FD649E84E564F870C5055F3ACFD /* libPhoneNumber-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B0DD9B9ADB7D415193E6C82631C599A2 /* libPhoneNumber-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 653381DAB18E16F82D2BC1862578F27B /* FLEXArgumentInputNumberView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A7C98F8C42B072499FA0916E4B38D4A /* FLEXArgumentInputNumberView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 656CF283B638F05B1A0CAA28CB4156BA /* FLEXArgumentInputObjectView.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A6C2AF833D382AA66EC848C27FC441 /* FLEXArgumentInputObjectView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65F42425E3673988911E61CAFC2B3094 /* FLEXRealmDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6D22D3943CF06F9A01FF516F51E4D6 /* FLEXRealmDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65F68AABA4185DE385864EE8BB2EA84B /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 79B8D27082D7F68890ACE43D1EDC2D7A /* DTCoreTextLayouter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6652A6CDAD53F028B2CE81F105D4936E /* REMenu-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FE7672B07412B8D9F12BACB60E4BD56D /* REMenu-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 667FBC9492CC792ECDC22D778E8D4D49 /* FLEXAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 106211D24A7AA7AEE92C703FE566C66C /* FLEXAlert.m */; }; - 669D7449C8054D5FCEF6452719A0B83C /* JDStatusBarNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C8EA2118B0F8D8D4E4B1DA34956E1370 /* JDStatusBarNotification-dummy.m */; }; - 66A4FF34D3DECC16C9B2581A794E40DF /* Reachability-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D60321161BB405E4D6ACB1F10E7B3AF /* Reachability-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66BFC5787AEF9F8FAF854D8CB81B4FB6 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B44458A77A7CFEF038996A84E4D398C /* NSAttributedString+SmallCaps.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 66E9CD04EAA7D3DD9B14AF24496A3ECA /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CB92A1E91F7E4C328D1D52EE11F416C /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66FFEDC2AF89FF98C919F757A0B8AE3B /* FLEXASLLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = 503404F3357CE70B9FE3953AAE32D003 /* FLEXASLLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 670D0C175035735503FC791211B7991C /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = C309B1502E1762DBA62209DF0F664667 /* SRWebSocket.m */; }; - 679418F0D617BBEE9EE7866A56B157AF /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D0BEC90ED8112E7B0773B4C764030EF /* NSAttributedString+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 68631B0FFCCC9ABA0DA009D51EE18D8F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 68F2C94311D9B63B562B2AC951654747 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F70E98328D102C67D0D2EC2893F8AA /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 692C88F39ED74CDA934730325336AE3A /* APAddressBookExternalChangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB23C6E86FE2C212BF12EBBBA7F7AB4 /* APAddressBookExternalChangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 694615A093913D5CE900FE269A93F983 /* SBJson5StreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C193AD8254DBDD606B671F9653F63B6 /* SBJson5StreamWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69B831C1949A92E2ED30F1DBDBADF3E0 /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = A406BBAB4C433CEF07A0FA8D61ADB625 /* DTHorizontalRuleHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 69DEB3EC3110AB7084B99A06754AC6AB /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = C92C24CB353C6E55C8F2A7A38A33B463 /* NSScanner+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6A01D1DD289ED62296CFD4C70C9A7C6A /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A7739F68E6EDD46D7681D31C9A09805 /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A12405EF45980A3146A9B6C750FC12F /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 913281EDD50CB49F2817676ED453F6F3 /* NSRunLoop+SRWebSocket.m */; }; - 6ABDF6724108FF0AC7EC7B753E5D6F4F /* SZTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 36AFE5C2475F91D0FE2F81886658519B /* SZTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6B10D51EFB6B58A6DD7873F9B2923131 /* INTULocationManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EA44B48484471C13393633699894D5C6 /* INTULocationManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B969E85AEF96BF66A53216E81652065 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = EDFA08E40D1AA8FA0F6C92D88FB0E478 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C18EFACF60A8019C9C54C8AC59C260F /* FLEXGlobalsEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = EB0A04CF0D25317BA4C94F919532290B /* FLEXGlobalsEntry.m */; }; - 6C503937CE1EA20989396D580D95B490 /* RMDateSelectionViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE308FCB25E21E0C2C97092FD21D65EE /* RMDateSelectionViewController-dummy.m */; }; - 6C8BCC0FB4BEA8A1E75DF8AF8626AA46 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 6C8E25533CB4F8B6BD2AE0DE5C35A1D3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E3F7FEE62CFB351A3E52E56C9DA25E /* AVFoundation.framework */; }; - 6CE2B3916B7E17A6CB1C93929253F64A /* NSString+DTUTI.m in Sources */ = {isa = PBXBuildFile; fileRef = 06C8CD40F7573ABB32D37D4986CF6518 /* NSString+DTUTI.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6D71326F5B6C7FD8D31B7220FEC62B56 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = EF42C1A2CD48DFBD62238FCBD8DE5292 /* DTLazyImageView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6D96367BD7622AEDDDE2C730AF32C678 /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F238D69636ABBA89999B530F57D6474 /* DTTextBlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6DD636F8BB8107BE5579406743AFBB48 /* mztools.c in Sources */ = {isa = PBXBuildFile; fileRef = 7E30154FFC152F27B5F212062A7D551C /* mztools.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6E0DB9EAE66E5D73C99748FF087BA536 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 6E2D75E024B47D353EAB71CD35477098 /* icon-success.png in Resources */ = {isa = PBXBuildFile; fileRef = A93B34936361FC43B900CD1EF0B6BB7F /* icon-success.png */; }; - 6E501E4F731EC7E6CCC57FCE4EF81168 /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 69202E90B9F5BC72E866B7A2C2E64281 /* DTHTMLParserNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6E6F3EB86E7EDE66BCEB01821E7FE667 /* INTULocationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E2CA2E005E8E4467FB091B0DEBD88982 /* INTULocationManager+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E6F49826E3B3AD3618FADD8C33B1D3C /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 61B28B06B600C69667B396E129B7C6C5 /* FLEXNetworkCurlLogger.m */; }; - 6EC22AF927A5E7F50CA62E7BEA74E9AB /* JDStatusBarStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = C874CA412C0178379DC6D35724928F86 /* JDStatusBarStyle.m */; }; - 6EE9E0E6F15D059462DB48AF69124B03 /* NSMutableArray+SWUtilityButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = CC46E7B3ABF92C240934CF883379646B /* NSMutableArray+SWUtilityButtons.m */; }; - 6F02BDB8C0F3BC4749825E74258B8619 /* DTAsyncFileDeleter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F3A3D6BADE58B71622C50DFF1A6FF39 /* DTAsyncFileDeleter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6F5088A027F8E260775497703C490CD8 /* FLEXLiveObjectsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D40613B771393A55680D88EEEC61DB34 /* FLEXLiveObjectsTableViewController.m */; }; - 6F651194A917449DAD75245B48A88F8B /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FA4E9215B860BBF43E6AF7A96D1D1B /* DTTextAttachmentHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 6FB563D396B456D8FEA7FA1F8BFF6FAC /* SWFrameButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F265EF81910948BE39F9824B4DE94C44 /* SWFrameButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FB86AE896353AB4FB1C0288D5F25292 /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = E9DA8B689510914319087A6ED82C7C33 /* DTBase64Coding.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 6FD423063DF5049B83757892707C8ABA /* AHKActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = F09B44C368B9C839E0FAEBF068BAAE76 /* AHKActionSheet.m */; }; - 6FE529E00E0AA0AA2556A419C7BBF892 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97A300E60E1BE23FA53A0B333E910E60 /* MobileCoreServices.framework */; }; - 705C1634BBBE731E156D758BF4870306 /* DTZipArchiveGZip.m in Sources */ = {isa = PBXBuildFile; fileRef = E5DE166CAF593FFB241DBC86A21BB7D1 /* DTZipArchiveGZip.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 709A9F5F828D5B408833A98706057CD1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13E46C080EE40508B23B845F0EC277BD /* Security.framework */; }; - 70EC792A81D5EF4F5EFA1B645EEF5BAD /* DTZipArchive.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F6445C781527BB1EE74DD4F08CDEC /* DTZipArchive.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 71585F0B990D36F55D60D0ABEC8E46A4 /* IQCropSelectionBeginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F938308C325B592FCEA711340A1FFED /* IQCropSelectionBeginView.m */; }; - 71C12B1FC74DFF5F66761B7719209DFA /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3189FECB805ABD15E5FD40E1326EA36 /* DTDictationPlaceholderView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 72681E7873D636A4EC1542649344E9BB /* AFHTTPRequestSerializer+OAuth2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FC088BB61511A69AC38C5F4C794429C /* AFHTTPRequestSerializer+OAuth2.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72C531265120C3B7548B06E481EDCE9C /* SCSiriWaveformView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A4CC95AA11004A7B335FC00A65326B3 /* SCSiriWaveformView-dummy.m */; }; - 732BB22B59C1B73521549F78D4A0FC91 /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = A7ECD035BC6281569481F5976881F20D /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73AF15F97517FA5A40BC657837F30E02 /* UIWindow+AHKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED1F59482E3033D963D4720DFEAE7B6 /* UIWindow+AHKAdditions.m */; }; - 73C7220A13FA0688E24357B54BE6901E /* FLEXKeyboardHelpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F2C176FF06E151F6A46C79A5AD13BE16 /* FLEXKeyboardHelpViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73E7475833B3FE3634A6D5E28FF96C65 /* input_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3A83F6141FF726443C4343819D8C1D /* input_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73FCDD6A47E2F884AF21BB86C42560CE /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DA16A373A26BBB2123E4C0E18F625B9 /* zip.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7430C96582020A7EE8C7DA894921B22F /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BC3E0E0FB72DAF87AB1DF473867D669 /* CTLineUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 7489CC65A172D63D8A5AD3FAF94E3FD6 /* IQAudioRecorderController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7A9F7A6DF170596E1C229718A311C9 /* IQAudioRecorderController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C4B197BEF1814D9FFB95152B853D48 /* FLEXCarouselCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 199778DB1A7E09231190B2612CA2DA49 /* FLEXCarouselCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 758FCF51D205040A37CED74B48ACFBF6 /* FLEXObjectExplorerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 19558C76B51E066B813B70C64BCD54DC /* FLEXObjectExplorerFactory.m */; }; - 75E142CA50129A87909B86B4183A69D8 /* NBPhoneNumberDesc.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A7BB6F13BE76C48FA8D859CB3C97139 /* NBPhoneNumberDesc.m */; }; - 75ECE822460E336464232194F67C6211 /* REMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C43D77B139BD0A1476E783B083241E /* REMenu.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 762638EF71214E3F8D6B1D08A112F42F /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = CA54D7B30D2DF761EF2AB60B9BF5A5CF /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 768B3A37CB91D1DC3AE3B6A0E88F87B0 /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E51C620923F003D185C3A9F2EB26DFF /* SRURLUtilities.m */; }; - 76E61ABC889B8FE95DBC54DB338C7839 /* APTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 572667F46D1B9FFAC8F573649B8E9064 /* APTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76F70F0F014FD00BB4423207160D7E96 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AAD89029B1CEF93713ADC6CF75D49F6 /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 770FF5C9E53AA502B0909D2B7FB6945A /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE7BCE107726EB1846BA00474EFE33F /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 776F06C966F297B9356D9A5FDBA5A49C /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F34976739B9D9D9A295A1E9C8C5C5BC0 /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 779BFC6B1826455B5D1CABCA214C611B /* FLEXClassExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA38BF669A3312F411F2C3BE8B754F0 /* FLEXClassExplorerViewController.m */; }; - 77D5A8333FA2951C196CD1AB972E3C8F /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E932C44C351B492A1A7EF58E664B2D /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77EBE1B1A16742431949DA70ABA032AB /* PHFComposeBarView_TextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BA2E6CB4653F7D039DD9E0973E3C50D /* PHFComposeBarView_TextView.m */; }; - 780B3D45A8ED0C9806AE372537D20670 /* APContactDate.h in Headers */ = {isa = PBXBuildFile; fileRef = A3621A64D6B9D9730D71815E64FEE2D6 /* APContactDate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 780BC9FCC4D2A7678E1E81A2A2D52CB6 /* SWUtilityButtonTapGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2344A4259EE99B3A6655A078CA6F56 /* SWUtilityButtonTapGestureRecognizer.m */; }; - 786D308376439613AEBBDA29CD7C0A6E /* FLEXTableLeftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E6EA3DC93C08180AEB5F94812C4C25 /* FLEXTableLeftCell.m */; }; - 78998136FDC20EA4CC67FEED9A0B31B1 /* SWTableViewCell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E66DAC71C04CCFEC85A40DBFE7ABC0F /* SWTableViewCell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 789AD9D80A26BE87D801F54680FCDE02 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 23AA760EE55EC0367B0DBEF0F5028DD4 /* ioapi.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 78A1D65A2B759F147EA6C3945105C7B7 /* IQAudioRecorderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A28C42592BC037244A15C49B3A165D06 /* IQAudioRecorderViewController.m */; }; - 78A88C1369ECD0F780E4A6FE8365B419 /* FLEXBundleExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 09B0A6316A485E766AA4D068DC91CC97 /* FLEXBundleExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78AE390A48C8558CAAA4070D9EA341D7 /* UIColor+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = E981EE64A22FB330C910C33449356B5D /* UIColor+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7947EBBCC21B29CE57A1B97C6C6217FC /* IQAudioRecorderController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C2792F786D4BD47D7270DF1FF91DD8E4 /* IQAudioRecorderController-dummy.m */; }; - 799039448763A97DE6272F90DDA0A360 /* FLEXTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C1BD446DFB68818EEF4BE9EE73DBE74D /* FLEXTableViewController.m */; }; - 79E9F1F1FA9FE18DD1B64FFBD1B049A9 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 528911BED3AB7AAC08D31D095376F8D7 /* DTIframeTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 7A1876553EFE40A7A32977205091A3E3 /* FLEXObjectExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 715F5A7F699E5FFEB36F1BB7163B504D /* FLEXObjectExplorerViewController.m */; }; - 7A84967FE3EB1F723F9CFBCA93181D84 /* FLEXInstancesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 488C892303279126A9F2448A5193E275 /* FLEXInstancesTableViewController.m */; }; - 7AD68480E7FA38AA77424D901A57C87C /* RMDateSelectionViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CA60BA9F24B7A8BBB19CDFC81CC012D8 /* RMDateSelectionViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AE0429093577576281C07E1C2DB0089 /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = DCBEEF4F0418D7F42999BBB22466AF56 /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B267DA900C8E641EAC2AA8C8E6C1BF2 /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AAC870DCFA62F62F09C83FF44ADF484 /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B319151FDB8F84BC6156C7608E4B4F4 /* SBJson5StreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9BB1F5E2E39212C99D05F37DB96C66 /* SBJson5StreamWriter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7BC8831EFF5F44C7DFA12C450F8E5B8F /* OMGUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AD841A1D476AA46A923F5A5E79D95A5 /* OMGUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CE2BCD03449A98659945FBC63645EC3 /* REMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D49248C0ABD703E32F29DD6E0A2FCA /* REMenuItem.m */; }; - 7CEBDA9AFE4777FD3326CAD39AD7D60F /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 170AB94FAB9ABC5C0FCB37F08605445F /* SRProxyConnect.m */; }; - 7D169838A1716663C30CE9707E21D059 /* DTSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 551F53DF64284B76BFEF22037722A542 /* DTSQLiteDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7D270F2ECC8C45EC5EBA4C32D7F12637 /* UIView+DTActionHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = C384E0FE74E694B5D2906781823BC3F3 /* UIView+DTActionHandlers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7D94A85201EF2820570D470AF283FD89 /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = A0FB758ABF2DC3D078F17A501528E52B /* DTHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 7DE126299E92ACC1FA583F3EE2208DB0 /* JDStatusBarView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D8809AA404A801D77157B6CBCF22DC9 /* JDStatusBarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E198822A5144A675309D565B191940A /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = F12AD97F9854664C0DBCE5AFAE5DE31F /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E8C16C945605425234EE885551C7E63 /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 291B5D2F159D6B4EFC6849C6F906AC3E /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E8CCCCC8EB4C80659770088EB905993 /* FLEXFieldEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BFA1A20A187639823BDAF418AC86EB7E /* FLEXFieldEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F61E14C5474B2472DAB73DBDE2B904D /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB5425190F5A1242504B37C019F33E0 /* SRHash.m */; }; - 7F76F1F36F89009369D3262D902637F7 /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = 481690244A2714C30237941F162F6B46 /* SRMutex.m */; }; - 7FDD40C3A2DB29826D76B391BA121081 /* FSCheckContentTypeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = F7F25A416DBE7844438558D1E187DAA7 /* FSCheckContentTypeRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 801DF30D1B4CBB81D4D4FCB28A4A18D8 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = FD3B1A88AFE5380A5CAE91A27E294607 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8043BA5183D48A9FCE592F31DE3069B0 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D1C8E3D8BBD988B5E69A4F8AA69ED1B /* SystemConfiguration.framework */; }; - 807B396F719C82B495EADC60045BEF41 /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 00A3683435A60055E7CEDED5186ED65B /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 809261040A9C9370CD8A85B65DEC658A /* NSURL+DTAWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C62FDD6C6B1A12B9FE31B4E2AE0BFC3E /* NSURL+DTAWS.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 80BA9911F6CBF78D25843A862AF4F578 /* APAddressBookRefWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AA95BC2941502FFC0A2EAE00CC4FC6 /* APAddressBookRefWrapper.m */; }; - 80E75DBD3762A8C04047DFD52FE9B2D8 /* FLEXFieldEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 632744D9C7F01AE30CD290C1A4CBFBCE /* FLEXFieldEditorView.m */; }; - 80ECDDF05B73528807EDC57512F3B611 /* FLEXLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9618E138A3F4347925BEC207752B91 /* FLEXLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8184054C05BDA8823AF7364CED8112F6 /* REMenu-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 18229859DBEE62FF7E1E44AD339E4A57 /* REMenu-dummy.m */; }; - 8185032137E62DA6E172447A94F3936A /* FLEXScopeCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E4241F221C2F1CB41BEB6C998F0E87F /* FLEXScopeCarousel.m */; }; - 82367C2BD8A964B96A9EB0311A3E433D /* FLEXClassesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C53160F17BA7CA192D32A381D3582E1 /* FLEXClassesTableViewController.m */; }; - 8276BE3569536AD2F0C4AD7306631A9B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */; }; - 82D29A3B32FCB2470F925F9EC21586C7 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 517FFC098D82CB32C96EBED73B000966 /* AddressBook.framework */; }; - 82D790065D26F4498BEAD8739B81AB98 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A8121ECAC3B05CB6A59E85B52DF9DCC8 /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82E27D4608ED2F80A9B415B1D2C68791 /* FLEXNetworkTransactionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B395DC1DA411B99E2E5542C2639C513 /* FLEXNetworkTransactionTableViewCell.m */; }; - 830C927FD6D938420EEDC664D71FB3D4 /* NBRegularExpressionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0545D4C667CACF19E5877E96A375D4A3 /* NBRegularExpressionCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 832CD6F61F1F1FCA28FA12813CC535FF /* ModuleConsole.m in Sources */ = {isa = PBXBuildFile; fileRef = B647778B466E42ADD3E0CB5757C0EB06 /* ModuleConsole.m */; }; - 83BAABAC63CEA8C49B68CB515CC66505 /* ModuleXMLHttpRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F1BACD8F9697F29E0E3A1A7C2F32284 /* ModuleXMLHttpRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83F51C45094DDBA8599189E33BA509A8 /* UICKeyChainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 502D2016ADF832FC3666AF6CB08CBC2C /* UICKeyChainStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84144906BDF4B496229626D76E6B1772 /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A3E45D8E389F60BBDA4D1062821ADA /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8473B3227130CF9F91D8C578F4C7BEFD /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 872E53CFD1085E0B05DA19A23A9688DC /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84B11076CA2998486B455AF09CD1D27C /* FLEXArgumentInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D7AE9B08BCC7A5611FB75AC56E06631 /* FLEXArgumentInputView.m */; }; - 8514811D611C8AB4B6BD3BEF27ADB1DE /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 528A7982BA9364138ED261DD9B6BA77D /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 857057F222053133975C165914F84EEB /* DTProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = DC28CC3C0E86B22A5ABEB180363617CA /* DTProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85D6252EC8FA9F98AB10CFB9186753F4 /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 076BF5EE52E2B71F551B4A594D0BDD3E /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8605A6C0028F16A4B07C2F715E2563D9 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 4299CDC1811FD1EECB4DB5EC55A627C8 /* DTTextHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 862162447C4485BFE7E0BFD18E0A4DA8 /* FLEXScopeCarousel.h in Headers */ = {isa = PBXBuildFile; fileRef = 88312E821A23572FF1D63EDD210D6842 /* FLEXScopeCarousel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86280CFB47EF665162AF8731489714C2 /* audio_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7225D54C287C3E3FBC18B9AF4D8F3C48 /* audio_stream.cpp */; }; - 8632F759A4172DAEB79B41EDF56366F1 /* audio_queue.h in Headers */ = {isa = PBXBuildFile; fileRef = CC4B107A6A4ADB9AF36368A173A781F9 /* audio_queue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86411CC407934478B47A6ED9EA802006 /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = 97BE351AFF77697E1B8B1B27757E4C35 /* NSMutableArray+DTMoving.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8655A5A4283BB5F17156EBC2C22DF6A1 /* FLEXSQLiteDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B94321C3E3FE46F83DC1FF82FC3A7FE /* FLEXSQLiteDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 869518C26CD1031AF54986FD4F6E0BD7 /* FLEXArgumentInputTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4634E4991F328EAE939D4C93931E6677 /* FLEXArgumentInputTextView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86983C9A2BBE1942A018FCFDF5B98781 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 95DAE815F898E1A93B8B11A759986E39 /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8732F2BA7295BA7D68A7834749915104 /* IQCropSelectionEndView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A6F1F1B6FDD023CDEDBFC80C07D099E /* IQCropSelectionEndView.m */; }; - 874D0694465FA174806B3A4B1D4290E6 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D1C8E3D8BBD988B5E69A4F8AA69ED1B /* SystemConfiguration.framework */; }; - 87A5253BD39184863B944731E9646697 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 19424C722E4620CEDD42FBCA98D500C0 /* UICKeyChainStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 87ABBE367A34D4F682B45563001FAFEB /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - 87C4E3D9D920604FFE30F18FBD6ACB0C /* SZTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = DDDB37925257A30BA84D5807DC028A67 /* SZTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87DB5E4BBE7908B09F6AB67BFCE84949 /* FLEXObjcInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B9F1B75F0A6573075AD7274C90B105 /* FLEXObjcInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87F6E677CD73B6030A1584B2C8DB9F39 /* NSGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = B77AF1015A6D0BBBF82A106B4031D83F /* NSGIF.m */; }; - 88143054344D1A28AAA46CCD3D88811C /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = A5F39E9594A7CE99A33CA30BD4FEBE62 /* SRIOConsumer.m */; }; - 884F2D67A25DC1E98CC52A1971FAE02E /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8208E65A4B9EA574E2D254E9286BCD22 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 885E3BCB595CC08FC0F22D3221371D8B /* AHKActionSheet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C73F73A2D9F3F92D1B48C272D3077EA /* AHKActionSheet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 88949655E8CFFED9A32189E4E4D0D680 /* FLEXGlobalsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 692348476D648C51B26B1E1D5B0EF9FD /* FLEXGlobalsTableViewController.m */; }; - 88992566AF34D262D04E91E523550A18 /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = D68CA08C7384C24511E96D86A1F3A767 /* NSAttributedStringRunDelegates.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 88FA923E22FC8E5BCA40EF0068B5DE95 /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 52762B80A432C12B7EFBC87C3CA383A8 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 898A31F4BE65701E0B5B977D2CB6BC75 /* FreeStreamer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D63F82EDAD117C9E975F2BB3107260E /* FreeStreamer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89E8A95FA1C18CDE2AD2881E9CD2CF86 /* HMSegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = B4AF02FC03754A90C84B3556DFD1DD4B /* HMSegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A448EA32FAE92BEDDC83C5BEAAA3F87 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - 8A61F6CD29D0E8460CA56F8EAB29C030 /* stream_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ED3133FEFC2467C11487557DF5756A2 /* stream_configuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8ABB21D008C372A07E2DE3F64D02D842 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 8B4ED6D88FC49B2A35B652DA59AE72D2 /* icon-info.png in Resources */ = {isa = PBXBuildFile; fileRef = 602B1D21962A01493E18CE194E4EE632 /* icon-info.png */; }; - 8B56662C00B0E2DFA46A9EA69F266749 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 8BC3DEF71F710F76EE5238A3510AFDCF /* UIView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = A140E670322308772DDF6839B9D6DFCA /* UIView+Layout.m */; }; - 8BEEC96659CF7509FA22651AAF425171 /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D259E26BBDA9B98BDF88EB4B5CC5115 /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CD10B083B4A5C9D531407BF4B122F60 /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F2E017D30638279291DD0B2F8FDD4D /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D0D92223384DCA4FBB7A3B7F737DE54 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 065D146005108A1C0DC95515CFDE4F25 /* CoreAudio.framework */; }; - 8D33147A3609543194CBA319250CBDD1 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = CF485FB9C7CA3225D92D784955B5EDB9 /* DTCoreGraphicsUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8DEDB81ADCDF4499793B1ACA0FAACB95 /* FLEXNetworkRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D6EF124F78785238597EBB9B69AFFF8 /* FLEXNetworkRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8E4FF1064EA2F7F97CB4FFEBC80D9DA7 /* TTTAttributedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F12DCBF02BDFFF51F240551B656BC7DD /* TTTAttributedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EAF9107F23780E662B89CA04E1F055A /* BBBadgeBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B5EF38935248E22B218E13D63803E18 /* BBBadgeBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8EC8B61B622DA732E64B446BCC74C340 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 8F28CEC926968854DB6A6185DC5203B6 /* DTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 94B2922AE61453475C06D165B1F3DBCB /* DTAlertView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8F329DBBA6D8BB20E2F3B1727B2D60FE /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACB73DC6EDDD066E9FFA6C87526D6AD /* NSURL+DTUnshorten.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8F3D10373D1EA519CABF530E5719D2EF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 8F60EC00B34B587DB3EE3FA44D8AED52 /* icon-error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 428DB70602DCEE373AC9B0C4B608613A /* icon-error@2x.png */; }; - 8F61416489108D91A862B72F46DA9EAA /* FLEXKeychainQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 30578C0D300FF6EA6ADEA0FC4E4931D7 /* FLEXKeychainQuery.m */; }; - 8F955856DDBDD0698DA3649B3412D1EE /* DTSidePanelControllerSegue.h in Headers */ = {isa = PBXBuildFile; fileRef = E18A3A5C59950FEDE6D0C97AB90322A8 /* DTSidePanelControllerSegue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FB42485AE4C726C7E8FBE51CA5204B7 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = EE779B9E19D7398131E0532E65FC8C1B /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FF1A719A3A4001C664290FDE030A83E /* APImageExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 744CA891DE97154A3654477FCEB2ACEC /* APImageExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 901F4D3472CB4E3F324F701B67077827 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B0AFA05E1D8C9DC6F6F10239602DC9B /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90CF57299354E4318CE55CF4CD61E5BE /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E41F9FE6F5667CCD5C183CFB2E087ED /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 910D2DA2F2D94BBF9B8288FD5C6D88C5 /* DTAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB7A1646F7357209B59BA685366AE89 /* DTAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 918AC9F896552573858E6A60EED0C394 /* IQCropSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A135D98CB0B5CF3C9545922C727767 /* IQCropSelectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 923E89E4799BF2715858C6E00B05D746 /* JSCoreBom.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A358CB924AE8A9F95E784F38641C5C2 /* JSCoreBom.m */; }; - 928011B145E880A322B27E02BBA4D447 /* FLEXTableViewSection.m in Sources */ = {isa = PBXBuildFile; fileRef = B1991F495A9CE99062F7474E67378944 /* FLEXTableViewSection.m */; }; - 92A2D26D70352BE8CE18CA743F40DE16 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A96CC55A2CAFD92DF26C78EEAEC1FC6 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 930C9866442A3CDE6D742950820F2669 /* IQAudioCropperViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 46281EEC6B8D6031E6BF4C7203990F52 /* IQAudioCropperViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 933E3CC735233FE14CE1C6931ED796D9 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115075BBB42B72D672EA461D5485A9A5 /* CFNetwork.framework */; }; - 939F07D9FFEC30A3F3AE5D0F2DE85B7C /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B5AC69FCBFB547343AB513CE8E3A560 /* SRPinningSecurityPolicy.m */; }; - 9459A0CF74E7A8F4E272B3D8A655BB76 /* FLEXNetworkSettingsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32203EE31F573687CA29747A9390663E /* FLEXNetworkSettingsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 946A0261AA9C2BFF0F5C014485624D30 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13E46C080EE40508B23B845F0EC277BD /* Security.framework */; }; - 94E7DCD32E75C77FA71791829362A3AD /* FSParseRssPodcastFeedRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DC38B92CE294F45F072E491B67BC63A8 /* FSParseRssPodcastFeedRequest.m */; }; - 9508D87F223F2C0A8B2CC85475AB70F6 /* APSocialProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 73B8A9143DE5663AC556A41DA66F6814 /* APSocialProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 952AA15E63EBFB4BCBC23076C6162682 /* DTSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = E1AD17E690A6F10B7B4AC19522E11D38 /* DTSQLiteDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 953EBB2A5FBEE22B43EED2A0880F204D /* FLEXCarouselCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 418D9A214DF5A1DDE02B884BBA3A943D /* FLEXCarouselCell.m */; }; - 95506003D3E2FCF2DD5BD9760B57F708 /* DTActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C4B0C188C5C060F82390EC545FCF5C /* DTActionSheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 959C5F3976507A747916FD35B1F5527F /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DC47169B8E30C3FBA11E32D72E524B91 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 963554A687F5205452BBA9372EE52A84 /* JDStatusBarNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8829696025A909095121D5683BFFA0 /* JDStatusBarNotification.m */; }; - 963723F5049B347BD5456643EFC7BF36 /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B62597F8B26E074D36DFF0E90B8475 /* SRIOConsumerPool.m */; }; - 96A95BC094B83A1E56B4B6834D16D269 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A98FD238964ED238860683EFC130891 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96D040FA9DCCC6563C02707DE853249D /* APAddressBookAccessRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 16864FF697BB1D4C1C65CD4E0AB8FA0A /* APAddressBookAccessRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 971DFB2A6E6C042A673026740F676343 /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = CBDB66B85D05E6287EA5408930F3C506 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 974389C74D696B6BA3BB431E92004DF8 /* FLEXKeychainTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA7D0E84BED7368467B8EF74E137B52 /* FLEXKeychainTableViewController.m */; }; - 975CDED7D86DB4230B747E1CA4677AC0 /* DAKeyboardControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FC8FE1E9825D62DF57C47ADF583FB5D4 /* DAKeyboardControl-dummy.m */; }; - 977B46E7ECBCF9949DDB240EE7E9F34A /* SBJson5Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = C182D71D9E76FB07C026EA0D34A76AE9 /* SBJson5Writer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 97C77EF5362BF137BF689E20A2686FDE /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBCF64ADE3735E2F76A3707959BC527 /* SRRunLoopThread.m */; }; - 97DD76459093FC1FA5E98B194547187E /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EACC9B6C9158F9F7D9B5DBB31783D91 /* DTBreakHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 9847EDE58535412BA04A0EA5F10D4030 /* PHFDelegateChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 252160211A974EB1A46AEC3E19BF02CA /* PHFDelegateChain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 985FD2F8A23B6D093B7EFB318B1FE74B /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = D3FB70E3022F0A09AF1D7215EF602A0D /* DTColor+Compatibility.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 986B31B87B7DC6B2AA698F475AA63BBC /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 742FF527263FB967CDD5BC63B72A00FB /* UIProgressView+AFNetworking.m */; }; - 9873D2DD1378FCE204AE757458A9D85E /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ADFD3746888CF1A155B596BBFEAE83A /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99142FD45CCDDF224231C990B23C02CD /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = C337B467340FD74E2B44880187A1154C /* FLEXNetworkCurlLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99C3ACEC360B5D990E4F6241DF81B645 /* NSString+IQTimeIntervalFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 34CFFA6592DD184D396F9F8FB724CE7B /* NSString+IQTimeIntervalFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A99FF824B7B755192B4D218F04BCB4C /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E17D802DF88671063BDFB108E30411A /* AFNetworking.framework */; }; - 9AB99422D642D3A6B1F0DB87E53EDCF5 /* FLEXCookiesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DBAAE5F749264DB714EC79237A0A21D6 /* FLEXCookiesTableViewController.m */; }; - 9ADDB9826DBB38D2320458FAB0871564 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = C6741FD2987718F27900A23DFE303F23 /* NSFileWrapper+DTCopying.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 9B2321579CEC28120E81A4ED1CDEA31B /* FLEXKeychainTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6901AD032FD24B4C4CD23780A95AF91A /* FLEXKeychainTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B2F4CF74736B6D536DA83BE1ABD2072 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFE60E8F3C60A95EE262A0B281E0879 /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B33E1C7881139D7265559F956496CA6 /* FLEXNetworkTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 89EE1F8881CEF6C851DDDCBDDBBA9A81 /* FLEXNetworkTransaction.m */; }; - 9B34539F3834424C456B4B5591B6AC1C /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E77F3E2D2C21D1F2132D2970E35BB5 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B8FAF2DC010F69325E089948A897766 /* FLEXTableColumnHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 868E9476F93AC954706428A1D56EDF01 /* FLEXTableColumnHeader.m */; }; - 9B9990EE474D71AAA3428DB0B4A38C86 /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = C1A63964D70C64A567DB17E1D9AF8950 /* DTCoreTextFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 9BA40D38A297E2601329C0C082D3BC02 /* NBPhoneMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = 3240502E5D8013891B5AC87E43283615 /* NBPhoneMetaData.m */; }; - 9BB31C87879F810EC3A6EF0DF2892060 /* REMenuItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F6B3FB296B2F8F7287718E03AF17B4 /* REMenuItemView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C5591D807585832BC82565FA8783BC7 /* stream_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1A445037469CA9F90942E0ABB163550 /* stream_configuration.cpp */; }; - 9C69CD930769DE3273F894A9DCF4567E /* APSocialServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 847A32348362EEDEEBF7F367F83317BB /* APSocialServiceHelper.m */; }; - 9CAE1C5F113747D4628F048FCEC2D1AD /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 774DB96CCD1DAF3FD2D4F2E86E5AB5AB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - 9CDC1F904242CF40C2DB1563A5C384DC /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = D2C615195137BE4B956ED2F8DF020F11 /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CE4843155E1E26907CE45D734940A74 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 05ED70ADD97441E94A644CB0B4D73DC8 /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CF77D37893452A5D3E496698ADF7014 /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FAA42FD68777B37DC811EC07B299B4F /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9D690E9802B581DD63BE64A17B58ED3A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - 9E1130D30027E9614C05ED02AAD13806 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB78597868604A7B6C94D13DB969AB35 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9E8A61547D5BC1C17F91BCB7441873A7 /* REMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCDB2CF47516B00AE16A679A3C7D5E3 /* REMenu.m */; }; - 9EC5FD41E5A98A3DA0EC8651B73E1C64 /* FLEXToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7376C211B8E31E8297D6B37DAD438A02 /* FLEXToolbarItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F1842D39CD8C76E5E72BF0D30520BFF /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F5F6321F39C7C6EF68D88B6E3734EE0 /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F3EB75DE84111CCE5FCEB9132E0A06A /* APRecordDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 97AE06B5F0F7193311C48374ADAA2139 /* APRecordDate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F8539D60C8665C2BC5CF488ECA2B254 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = 084F524E1ED3139197019362EAB4C1D2 /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A01B043DEFFED0BF0A5C6EA308762FB6 /* FLEXKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = D504E1969CFBC80B19AD64502EB7B5F6 /* FLEXKeychain.m */; }; - A05FC016E7EAE860B7A5A9C75E44805A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - A107C61505A75B2A0F0E830E35CC008B /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = EDC064B30D2CF10587598BA2BEF814BF /* SRError.m */; }; - A128CA958EF37665BA34CBD2B66CD306 /* SBJson5StreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = EF68547A8B6CC8A017075A3792973982 /* SBJson5StreamParserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A20E5E0A83818D0920AE959D76519ABA /* FLEXExplorerToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = F3995BBA3B466CA625783658DC311818 /* FLEXExplorerToolbar.m */; }; - A254EADAA01AE48243318972CFD67FF2 /* IQ_FDWaveformView.h in Headers */ = {isa = PBXBuildFile; fileRef = D1EC8F7C78226EAE6FC7AF0CC929A41D /* IQ_FDWaveformView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A28D961C0CBB8660BAD8733507016ECC /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED9524C818D7215BCFD0240DDA8334D /* SDWebImage-dummy.m */; }; - A2D67F3FE1BEB597AE02A13223768D4F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D52B64AA446A5532214698228CC45E14 /* AudioToolbox.framework */; }; - A342CDF46C75895E69ACEDA994C990B3 /* FLEXArgumentInputDateView.h in Headers */ = {isa = PBXBuildFile; fileRef = A199D8AB78103B3CB3276666172764A8 /* FLEXArgumentInputDateView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A36E7990E076203B6865AE3DF089FA11 /* RMDateSelectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E11756034350960B2A2A7A7DD9C225A /* RMDateSelectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3A804882E719E39C2EEBBC58AF7B2B3 /* DTReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CF42C8B5C46AC76813916166696785A /* DTReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A42B6E61195FD96E8EDCB3A2850D218E /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A123F795F4B2DE04BC403A06A754ED0D /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A47F231DB905C8961E79D7EC497AB566 /* INTUHeadingRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 235E96C419C684CF3F9E086C3EF4A7D8 /* INTUHeadingRequest.m */; }; - A4AAD0AE5D0322750CB17EFAA758AC57 /* FLEXColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 790A917F383C910A85C38C8361628DB9 /* FLEXColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A52FD90994E62A35685967B2838F1BE5 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C126F8AAA2F5F9E8039BAF206267C605 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A53BE744108147602C20A90A37B9F4C0 /* FLEXArgumentInputColorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F6323EF9CC5F75A726A967EA390291C /* FLEXArgumentInputColorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A54610594CB63B288D80DBE856F076BF /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E4D1ED88F04A238D7DE9EDA576C7342 /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A56C7011FE70AFED6D917B7139F49992 /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 77725B87B010942D033614C46B9BED1B /* DTCoreTextLayoutFrame.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - A57EF2ACE5519D0065009C97BC0BAC75 /* APAddressBookRefWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAF1E87AC1E90CA9DD6D612C7609936 /* APAddressBookRefWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5E82D055071E8053F87CC45FA8DCAA8 /* JSCoreBom.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E700FAED25BE958C3EF0753D13324BA /* JSCoreBom.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5ED73519C6324DB3BE69D59746C507B /* UIScrollView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = D8F4D980D7D3B48CBFFB50BCFFAB3D6B /* UIScrollView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5F5D33D937AA825991D922401779002 /* FLEXMultiColumnTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = A6C13E522484A74BCD47471DD57638E4 /* FLEXMultiColumnTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6282B829F5025F85331A67E834BD564 /* NSString+IQTimeIntervalFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C62451E74E47FB184190A716F6C7D25 /* NSString+IQTimeIntervalFormatter.m */; }; - A64D3F0F31DBB8D702B507DE8D5B324E /* RMDateSelectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FE15C0CDACDE466F86E50E27E3E4E08E /* RMDateSelectionViewController.m */; }; - A65049BC66A84656F59C7286FD584612 /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 025F60E39B9C7DAD590A6881CAE385A9 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A65BBBE8F98E2DE6DB259F9646D0FD16 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2544802C99D11AD537FED028E6985A5 /* JavaScriptCore.framework */; }; - A6A1A3E41D1985D2133FB7FD58A5D652 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 835863DBC2516B295BB91F8A991563BD /* DTAccessibilityElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - A6CECF76CF837D6628C41B7DEDD619B7 /* BBBadgeBarButtonItem-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CB94D58B94EE0A760934C1D54572CD4C /* BBBadgeBarButtonItem-dummy.m */; }; - A6E72474A41F9884598A7E1EF287FEFD /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 09D2D2CA4C80A919F4B858A1DDE986DC /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6ED1EDDEDCD7CB31ACB54B20AC3F076 /* FLEXBundleExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 774D0A881EB1E923C6FD797A75258541 /* FLEXBundleExplorerViewController.m */; }; - A7323FB0C94CDC950A0140C4678F42CE /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AF24383D5DE011E47A13A15DC4644A /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A748C2C59AED21417E3C3A11A229AE2D /* AFOAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = C1278C21AC80BA4F46754E26B5FF55FE /* AFOAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A75EA5F2FC8EF5D93F27EC3DE560725C /* REMenuContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 325C81C55277756B8536C427DE3FD36C /* REMenuContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A77E727C45AD9AFFB33DA47E67663F2F /* FLEXLibrariesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 00590FFF4B562E19197E6CA41F44A452 /* FLEXLibrariesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A79BEE3798C34883B389B9ACAAAD6B39 /* FSPlaylistItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FD47F41D07390463F8CAC5DCB510941 /* FSPlaylistItem.m */; }; - A80EECFD3C25A576ABA11955A9DD1068 /* FLEXObjectRef.h in Headers */ = {isa = PBXBuildFile; fileRef = C8F6CE6BCF5347E17ED1622E9395C4FA /* FLEXObjectRef.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A827391557BC97E2BC7A26D348F10C30 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = A93344EFEF95FE44A4B7AED1B2CA9C3F /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A870FC1E91C95EDDFB024D4E1418CD04 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */; }; - A87AA78865496161830021EC8B99D8CE /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FBD6C699C76EA33C662933E093779F1 /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8906F6003D20F1B2E9C5BFEF7AE9C1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - A8A3636A01BE0995470BCFE1D51B7B55 /* FLEXFileBrowserSearchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84993C5A44DC766A0F76381F9DBB86EC /* FLEXFileBrowserSearchOperation.m */; }; - A8FBF6EFD4CFD5128F892A3C71E0C563 /* SBJson5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CC1117AB70CB9DC444E22977D7B77C0 /* SBJson5Parser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9B9C9086B468C6DB3482C0E16304BC9 /* DAKeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = FB2C9841274A02C950772F1BB8352C6E /* DAKeyboardControl.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A9BA1272EB8A90CD5317FEE2120167F1 /* FLEXArgumentInputViewFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = B0F4FEF710BAB5AF5A0A32C4833AA1DF /* FLEXArgumentInputViewFactory.m */; }; - A9C7EC784735B75FAD76A12C8459D7B2 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = F16DF22B6F07635B7C6F8EC8D01138A9 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA363FB9417F413CF043C82A3656536C /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = F848E9F99780B37F0335D5A7DB01C1C7 /* DTFolderMonitor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AA51FF4DA51668EB6CE0C8AD2D6E75CD /* FLEXSystemLogTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C8C5FC75A3F1EAD106D8A2F943EE86B /* FLEXSystemLogTableViewCell.m */; }; - AA5DE800AE06A6A4A24795457A9175EA /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AEACBAC7A3F5F8F01F11B98534431D6 /* CoreText.framework */; }; - AA8532E63F7A291FD31C5975994B03A7 /* APSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 94C6F70EE02FEDB6E7DE16E00CB3F203 /* APSource.m */; }; - AAD11BA24C1AA69DD6B774C87DBE6EBD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - AB7A45D71F1F2D293508BE159A3D7494 /* DTSidePanelPanGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = F79E0DEB7BAB2C55298B868FDB629CF9 /* DTSidePanelPanGestureRecognizer.m */; }; - AB91D9A58904A0A933355F6C21A3E34E /* APEmail.h in Headers */ = {isa = PBXBuildFile; fileRef = 807CA6CEB5AFD3D42CC45F2A18637905 /* APEmail.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABD0E5C5CA7C10F3466BBE10A8DFA108 /* APRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = D510E69277CA8AF86E282C760846F6B1 /* APRelatedPerson.m */; }; - AC1B64030C4A434A27C9B5C7C737B4D8 /* FLEXTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = ADA1C058D8E035FEB8E02193A33A4276 /* FLEXTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC9B6F2352426CBA2B912CD813DD168E /* FLEXSubtitleTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 387287257B2F0560E33603EB26376572 /* FLEXSubtitleTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACA8FF93A4B9A5A5674AD1BD6493A3E4 /* APImageExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = AA5478CCE3398B2987EF9B66231687BD /* APImageExtractor.m */; }; - ACA9FD60C92BF87E1EF6026846E5892C /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 22C4E4A3A89EDD140F6FEC73FFBC3279 /* AFSecurityPolicy.m */; }; - ACBC02FB49CD343081856A8874C370E6 /* INTULocationManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A61CB8497F2C73DAAD95F71286C02E7 /* INTULocationManager-dummy.m */; }; - ACD08AED56C2B2EA144705C5A843D7F8 /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B1F62D60F8822CD21C9F621579F3193 /* DTCoreTextLayoutFrame+Cursor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - AD271A90871B26983DC68168763FD845 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = E4787984D9E1197C013D216A8B1A1515 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ADAAF13BDB1079CC22AE4AABC2A5F68A /* OMGHTTPURLRQ.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0984F2BC1EABCFFA9D2B4AA9C3175B /* OMGHTTPURLRQ.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE0F5E279894BD79A3069E1A79F61450 /* TWMessageBarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CB4576BC69FCCC0EFDF2AA3D0A07A1ED /* TWMessageBarManager-dummy.m */; }; - AE337EDEBC3FC7985C549A78A2E39723 /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 42DE2BFEFC468002E68559DEFC81BF4F /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE4DFFA06EE70BD83A8A1DFC37852EEF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */; }; - AE5EF577BF54B821784015EB461E6F49 /* FLEXAddressExplorerCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = A421F64D175E41780EB54DE0E9DE0F58 /* FLEXAddressExplorerCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE630626FD92006227F6965DE26FBDFB /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A3C3B22DC08A6B98DE32B4979B8CAB /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE990711FA570FB052637A2611C9B4EA /* FLEXWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46688ADA29BFC2BD489BF661E0EADCE3 /* FLEXWebViewController.m */; }; - AF055FF5877770738E75606AB98EB934 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 05359C465F68C5338E5C867CC3EAE382 /* DTAnimatedGIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AF18178C4D1E7B23E55F2DB5319F1D10 /* FLEXArgumentInputFontView.m in Sources */ = {isa = PBXBuildFile; fileRef = 983EC837A4A6FDDCF7C5D53B459483C1 /* FLEXArgumentInputFontView.m */; }; - AF308A95A55ABAC7AF4FF276E45ACFBF /* DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F0EBFB9C5F0764C3B08C111F746613A6 /* DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF50D949013A8916621573005B976570 /* FLEXTableLeftCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 277DE8ADDCBC34F845D324D32C7A3C1E /* FLEXTableLeftCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF783CBEEDC4C1C3F85283378763F50F /* NSURL+DTAWS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F7DB9966F56D9B5CECCDBD53DB6419B /* NSURL+DTAWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFB1E657D7083F3A1B5012805E1FDA44 /* FLEXHierarchyTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AD45BAEAB19C20423AE9A6C9EF2D2013 /* FLEXHierarchyTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AFDDEC39393E72103406890ACB7F61BA /* RECommonFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B628347782642A43B7EC8DC7274FB68 /* RECommonFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B09704B130A0EC6796C81A218B1577E7 /* NSGIF-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 45D0959EB7EBA19D3C1B3B4B395D0DA6 /* NSGIF-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B0CDDD23867D6F2AB606136BBBC1106A /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E29A64C2FA8DD1449367A1F5485EE3D /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B101C1FA2541492905341463851EB72F /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = EFD7166B5A4B9900712141DD1627CFB4 /* DTCoreTextLayoutLine.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - B119E2C7EB6F794CD659558B708B9CF5 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EE29D6648B21891CAF58BAC5F393A468 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B140200A6DF4E2FADC54E636789F99C4 /* FLEXFileBrowserTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2756228CA31BF251FF452CD35DFF42B4 /* FLEXFileBrowserTableViewController.m */; }; - B1CF4F887DEA415E4B1314355FB41DE2 /* AHKActionSheet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B151D6061C84B274211F3DEDDB388FC2 /* AHKActionSheet-dummy.m */; }; - B21B54432B6C689F48B5DDA13151F05E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - B291E54F88265B163D4FE95181D952F7 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D523A05600B2E6ED537D193C72A804EF /* CoreTelephony.framework */; }; - B295FE29D5C484F69AD6826354A54FE9 /* JDStatusBarLayoutMarginHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A491074D8FDB01E785206BD21DC4F16 /* JDStatusBarLayoutMarginHelper.m */; }; - B334910D2993AB9CCC5CFCBF17B69714 /* APContactDataExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6C3F47889FA9115242746386A1091A /* APContactDataExtractor.m */; }; - B34AF4AB5D115074EFE6CB49374F3A6A /* UICKeyChainStore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 959110195713050A7EAF6EEF34381C17 /* UICKeyChainStore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B36893679AD12A4B47DAE2BD484852D9 /* FLEXArgumentInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = FC38C7C8C704E4F6ED37BD52F1CFA3BC /* FLEXArgumentInputView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3CB11D09B203A01A934DCBDA1042C0F /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 6999AFE652719BC391E5A3D9BFCE8EBE /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B463F8558B60625F590B5AC500F04438 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF80218A116CEEB75C7386974BFFEFF /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B46E18AE210F0F6D8681CE996834669F /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 2841E12BD983547440DCB8D929D4EF11 /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4758ED665D888772F11207E0A5D8379 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - B4E543AE7B18AA40D835800E0D4EE8C5 /* IQAudioRecorderViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C2D480344A702B9C58DF34924CCD1FA4 /* IQAudioRecorderViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B51B7AD982B71317490785F06FF41234 /* FLEXNetworkTransactionDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D943A1E941659E7AC12C391374B15A28 /* FLEXNetworkTransactionDetailTableViewController.m */; }; - B6CD325A7E21BEC166A03C28C5C854C3 /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8545CB14E24FF526CB5152E9086FA913 /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7BD8859B3EA0F00197B53E73979650D /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = FF4B6A447DA65C56AE07B0D13F8DEF29 /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7E544748C6488DAAB0EDF5D5FE7B56B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - B8202E65F052456BE71A79936BDC6350 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - B834E5675F8576A55C8DDB3745C625CA /* DTASN1BitString.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F84C9020D06D4E481E6DD8ABBA264B2 /* DTASN1BitString.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B886581311531B486B616F2AF478A3F3 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */; }; - B8969F26949A5EDBA93057C37A76875F /* UIImage+DHImageAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F380C5942196896912954385985C3F77 /* UIImage+DHImageAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B8B9D4D24D6E94D71D25DA96F410B9EC /* FLEXLiveObjectsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A1E7A4ED1F0AB8657146BFEFEF5B2C3 /* FLEXLiveObjectsTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B91F35A31912B2C86B21106C31D4EAD4 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EE1A5E1EB2ED5D05F02167DF73BC51C /* DTAnchorHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - B936DEC14824DF2D61FB06DA426CE711 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = EC5AB1B4F3D160CD6BA55EC953920D35 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9517831CDE42F3EEBC29F41C6477986 /* NBAsYouTypeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B8B851A78FBDB7830C6A99909E1D5AA /* NBAsYouTypeFormatter.m */; }; - B9FBBD20F02AE2AE4E111D3300BDDB8B /* FreeStreamer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FD1C50E557D551E4FEC2FB690C25C07 /* FreeStreamer-dummy.m */; }; - BA83832BE928C7E44C21FEEE7231133D /* IQMessageDisplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D28F9CFCBC11366632BD5D5E9F7219C /* IQMessageDisplayView.m */; }; - BAC1B08D952EFA015284A8255CE18B56 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F0356E6E103425749BEB8891902E6D1 /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB66492837A818C1130FFBA3AE8581A1 /* PHFComposeBarView_Button.h in Headers */ = {isa = PBXBuildFile; fileRef = FB7CEF4B9C191B400A5CED0F57AAE1D8 /* PHFComposeBarView_Button.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB73A29C066919830C233175E0A54AE5 /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 49F268639578EBEF77F6C44AD158AEEF /* SRSecurityPolicy.m */; }; - BB87A7B562B55EEF28DE34400A52DA60 /* NBNumberFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = FCB90BF6B02308EB6694C86BEEEB89EE /* NBNumberFormat.m */; }; - BBAE376921C995894F80D4DD36AF957E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - BBC265A5F9F741579C7D31C5C8248C94 /* FLEXDefaultsExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AA95FAD78D3BCB1E4C8CF525ED730775 /* FLEXDefaultsExplorerViewController.m */; }; - BBC8ABF455247C40C6B2ABED99ED9B6B /* SBJson5StreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = E16353BFBA0FC1281FE7B2F4ABB12F5C /* SBJson5StreamParserState.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BBD5457006B78633A386E833236A479A /* FLEXExplorerToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2365F86A3A72C784D61723F8C3C4E38F /* FLEXExplorerToolbar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC59E749822496E6E98751CEDD571E3B /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 262D62538040B2AE0E9C563C2AC1C08F /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD2734E51850EF94EBC72957A359AC94 /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 420B1F416125DD3D626F7C5B59F1A810 /* SRLog.m */; }; - BD608ADAAAB87292B7F80FD55BD5A4E3 /* AFOAuth2Manager.m in Sources */ = {isa = PBXBuildFile; fileRef = 24B341086B2ACAC5B5068136F9640B22 /* AFOAuth2Manager.m */; }; - BD98046E2FE6E73A209319F9DBE09202 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FA59CC96028E599E0634E4630824444 /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDDC7E368DB6EA6985D052BAC62DE0B7 /* DTZipArchiveNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 56294C5EEAD32234DC1425768B6F0042 /* DTZipArchiveNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BE3E541F9C54B855E73B3AF5A7D3DB8F /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C5EB7718896613E826722EF646C0E5 /* NSString+DTFormatNumbers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BEF1AE60430CCA7D56FFCE44F3232975 /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = C24DE4DB70374783F27CBFEF6487C0D5 /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF838F6156AA99DC8DE5244A383A43BF /* SWLongPressGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F253BFC581EE0DBE973673B0025CB6EB /* SWLongPressGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BFB5FDDD51DF49EAE59093508615CF57 /* APAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = F33D67EF6B170BDA53B25422F50C09D7 /* APAddress.m */; }; - BFD6F31DD2752A46DD70751A1F701148 /* APAddressBookBaseRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E7F0D4033DD4C42AA9CB9ED2D4CB7B /* APAddressBookBaseRoutine.m */; }; - C0399CFB4C299DA61C70AC4BE8E4DC46 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = F15ECB817876211A709077D6F1EB4742 /* AFImageDownloader.m */; }; - C042CDB84C2C238FBE146BAA1BC86896 /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 73FCE57D70A762D3BD218B0391E60AF3 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C045B5F701DD530E0A4697EA239F1F3F /* APRelatedPerson.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E8438753DD0555D42FAC474B7E2167 /* APRelatedPerson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C06EB12DEE4E73F62B2409A7733F8485 /* APRecordDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C8D0B205B1C9918FB90837146671EA1 /* APRecordDate.m */; }; - C0AF5764EF573D99D0094CBA6CE306DF /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = E1227E688607DC11BCF0DD5D31A25831 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0C53372F66F3321290E99C1342C8B9C /* http_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = E4AD31FDA26518FB0AB42EEC37E54A14 /* http_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0F2064C9849D74973731B045C67EA92 /* SZTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A36DE7D2F2BAA963BBC6D01224231B28 /* SZTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C126AF4FFE6F641A41B3DA6F18010F95 /* BBBadgeBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 78B10E4030E682FDF3DAFEB7FB10FA0E /* BBBadgeBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C14C1DC873AEB6978F575758BB33C0F1 /* APAddressBook.h in Headers */ = {isa = PBXBuildFile; fileRef = DC6DC33235B9304584B0E13B483B59F3 /* APAddressBook.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1FD75D6C0D4C9AEA0D91AABD5DFF58A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - C2009751BF1343F0F5668A7024CA10C1 /* NSString+DTUTI.h in Headers */ = {isa = PBXBuildFile; fileRef = D335766C3DFCF0A52F532C8CFE25A928 /* NSString+DTUTI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C295272E5177147CF028545D59A6B236 /* FLEXDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA509959D3B19EDCE61A62FD6E7FC8F4 /* FLEXDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2A85E01D077B821AE818063872A41BA /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0828D8E1708DF7780C1ABB7BE737D0AA /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2CBF3E1D378718F5A7629C735AF1892 /* INTURequestIDGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DF8B1D18183403EAE47932EA21C1EC1 /* INTURequestIDGenerator.m */; }; - C31470E92B1A691AC3D3D55A127DCBF0 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9572B0A3869FCD4CB12FFB0F061843EF /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C373E627B757D4D8CA4C3440151A9523 /* INTULocationRequestDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 77F5D2C3B8753C48E21E9C0DD2BCD1CA /* INTULocationRequestDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3B178E89295EC3A4B889CAB0FD26154 /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = D51A3820C2A1A2C986D74E3D75B7BF32 /* SRSIMDHelpers.m */; }; - C3F6FD906DDD821855600D36B71B0754 /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E1F94832D82026755AAD32CF83D035 /* DTDictationPlaceholderTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - C40C83631A7D46392807DF2B97B85CBF /* TWMessageBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C37D5FB73A690EBB95ADEB9E81253A /* TWMessageBarManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C40CC61A9A198147936E8C9FF5F63326 /* FLEXMultiColumnTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9941B261CD1796A6A5FBA5F1DF31B058 /* FLEXMultiColumnTableView.m */; }; - C47F47C91C6759396F990926E60CA721 /* Pods-Jasonette-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 233E6458275E3A20881BFD42E2B4B0F6 /* Pods-Jasonette-dummy.m */; }; - C49D840F5197B00171D9DA24C7C9AFBA /* FLEXSystemLogTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CCC40A1E5649E139FD43639B250C420 /* FLEXSystemLogTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C547D3F4B73A787294DE95C1B7E81E21 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E89430E70392471774784DECEFF8D08F /* UIRefreshControl+AFNetworking.m */; }; - C5D3700F1B1A76A4645685F286D27DB2 /* HMSegmentedControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AEE5ECD99B346C8A094BCCC784F9E8 /* HMSegmentedControl-dummy.m */; }; - C6A09303127102325C51A22B430ACE6E /* FLEXTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DC52B059F9812EA3FD2263CB01F42EF /* FLEXTableViewCell.m */; }; - C6BA27EA141D3C7CE300B5695D2E9E49 /* TTTAttributedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F655A7570E8EB63AD833CA79CA1BF6C4 /* TTTAttributedLabel-dummy.m */; }; - C6C9694679CA09B1AF94B8B1B5AB4C3C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */; }; - C6F41F070C9AD82AED65FF44FEB7D26E /* DTFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D2E857E6E138F2ACD5F3C5A429F9B60 /* DTFoundation.framework */; }; - C713D18DFE89D348A66FB1ABC9E9A277 /* FLEXNetworkObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 34BFF7C0E446A1A652209F7BDC8094AB /* FLEXNetworkObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C754B14D0555A443D0D286ACEE17A01F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - C7C3115E62946C21D75AEC772E7A2501 /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = BFE5F142C120EBD15C067114E05CEF91 /* DTHTMLWriter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - C7FC0432CB5A1FE687E47C067AF5F7B1 /* FLEXSQLiteDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 57BE58BA5CDF596290D40BE457FC1561 /* FLEXSQLiteDatabaseManager.m */; }; - C85CBA28364D5375435CE2673E0A5C6E /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = D82E38BB47B35F22A453C96C9B210B6E /* DTAttributedTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - C8A892292A373037A19B8526E9529436 /* FLEXLayerExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A735C5F2060CAA9FDC8FCB0686671FF3 /* FLEXLayerExplorerViewController.m */; }; - C8C63782147EFC88AE5E53DC410C6D3A /* FLEXHierarchyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 50BDADB663342EF4517A740562288951 /* FLEXHierarchyTableViewCell.m */; }; - C8F1FB1ACA07D011B5B9FF2C7869F1E6 /* INTULocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8151B931EE4CB02873E6BA5B9AF564FD /* INTULocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9E071E0A0827F34CB239ACE9BE7918C /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 86AF84C761574816B6A142134ACDFC60 /* NSAttributedString+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - CA2C0D52F8C71DC27ED4F4AD47709375 /* NSString+NSHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BB2F2BC45C191B584F3BCFF4392495C /* NSString+NSHash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CA3C2A596CB1AF4AC74AD680369EA0BF /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DC06C3F57AE44459CA8A0DB10A910DFA /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAADEEC5A115F4F6B433AA01E5149095 /* FLEXImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C592F3A36C5B4C057998B7EDB1BACA0B /* FLEXImagePreviewViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CAD946E1FB7EB2EAE5A452A7A7F5CBED /* FSParsePlaylistRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 602EFE45F5B4511DE20D77B656220E0A /* FSParsePlaylistRequest.m */; }; - CB3A3F71574AF235BA3CF6B113C225DC /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD3F16C6A04121C6BAE8993EF484FDF /* DTTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - CB7223EE7CAFE15EB35F65E8C9A65ECA /* FLEXUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = A85B8B7A9E7F9C89955ED9C4015977BB /* FLEXUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB920DDD4BFB283CCB5C632FAA7EB8D4 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F23A3026D1C0C6F67510ABBC342F565B /* DTFoundationConstants.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CBA72DC12F1CC0B5E7DB45FC82D1B22E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - CBB2EC4037C3A4D232DEBCC2E98DC5C9 /* FLEXHeapEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = D043F708CDDB1F90F9A06B67C468DA7D /* FLEXHeapEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBFC141E3019C72FF6823D37E6DC28BA /* FLEXArgumentInputSwitchView.h in Headers */ = {isa = PBXBuildFile; fileRef = F79AEEE2731EFD7A09E2067504C88006 /* FLEXArgumentInputSwitchView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC19EC89ACF05DE9F5F67CAC7F9AF081 /* NBPhoneNumberDesc.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F6471CC02D47243436EDCCA2E98365 /* NBPhoneNumberDesc.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC2A9CD50FDE8301E20DBAD33497B777 /* INTUHeadingRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FB7899B47E4C179A197B8CA5C23327 /* INTUHeadingRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC4300D336A6FECD1FBCD7089852ADF7 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = AB82C2192A668AA0E5FE00F189F4301F /* NSDictionary+DTError.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - CC950580D3293705C12FEF7E61A29221 /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE5574FC74A9700DC310DE46BED36D5 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCDA0F8075DA2F3E6CBDE7990ACE2A77 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 56894A8AACBFD972F0EB23DF976A5257 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD4313CFE2CF8098AE16891693C7050D /* FLEXMutableFieldEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F877D7315232F06CC3AB685E68CB877B /* FLEXMutableFieldEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD824AC5EB0B67904E1AD99F9621E7C6 /* HMSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = EDD6D0E720DB22A7E9F65206D29E85B3 /* HMSegmentedControl.m */; }; - CDB8263EAD30C55F299D929837B39DB2 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A303AD6DE8C52A6318EB6AB293CC68 /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE008B38CFDDC905D40E48E10B03407C /* FLEXTableColumnHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF0482D2F33D9DA29476F19D15DB6F8 /* FLEXTableColumnHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE0C0F177A70563CF4C24B948F9AF21F /* SCSiriWaveformView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B3335CFEE48C371478F551CD1E6DA6C /* SCSiriWaveformView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE475F16E39363068F5E4C77F2681DA3 /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = E12B9F5E8FFC3DF06266D92FA3A53DF1 /* NSMutableString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - CEAC8772819F074F99EF37BDAF0EFDBD /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE7AB8C7CB1A03544D318F35CC5987A /* NSArray+DTError.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D0C699A3C41E5C90051423E54691319B /* JDStatusBarNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = E5DEBC8830EEBED16CF1CE9D7543D0D3 /* JDStatusBarNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0F960D4AE2D3ED85DDA7C25BC3D39C4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - D0F9630CE2300C5E353B55F87966786C /* mztools.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ADABF833A68E5778035698D382409C9 /* mztools.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D1192DC5379C33550C6B3973EB99B6B2 /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = B32C525D04AF40ED9014B31FD1FE6396 /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D17EA2A9D9F04A963399061D637617D6 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F2088C89A3375EBA8785ECC12A537EF /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D21EEA0D0592B5AD0191D86123298ACC /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF23DD7452B1B3B0E8B175FD528BD0C /* FLEXMultilineTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2213A842394433EB872D72FD8EEC0F2 /* SWUtilityButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = A28E2665C8BD0009EAAFC255332B3265 /* SWUtilityButtonView.m */; }; - D2AE2C3D31A00C4363042E8181A7DBE7 /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = CC06838690303F4DA7AF40958BF45B8B /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2BF60A87CB1F9147996E509F2FD17E0 /* FLEXObjcInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 87C731CD7F8E46304CBE735FED9BE8BC /* FLEXObjcInternal.mm */; }; - D3C3C4B893B4E594C684984B7C33A7CB /* FLEXViewControllerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E0ED8D906670F3B8C886F35E0E5DB867 /* FLEXViewControllerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3F203B678B8886A4E9360DFFC721163 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = DCDDFB4ACF8FAC5F6735FA031F843482 /* DTColorFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - D40FC8D95F20392FF0615E5A0E99810F /* DTProgressHUDWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 10C3D11226BFC9634D7E1B4CBE3C59B6 /* DTProgressHUDWindow.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4A2E29951EF2DC6A40BC22D97FA681D /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = E5BD0B6D7CB5473A90730412F9D010D8 /* DTObjectTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - D4B00E9A61B13849197E65901F23B03F /* caching_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ACEA54C5DC8C3BA971D585D9A87B1AF /* caching_stream.cpp */; }; - D4BC16AC6DAB9217C481D96F1F128F32 /* FLEXClassExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 56060A737B5355D3BE39B242354DEABE /* FLEXClassExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4C526F2B8C53BFF70DA8129012599DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - D4CBCC035A12321B0539AED034102012 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 5DF81AB19D9703820F926DCBEF724454 /* zip.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D4D345B1CEB24A6610FDA3FF46B6FF24 /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 92DED794ADD640C5865DD93BF67C5658 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5743A2A3930FB0509F6DF040F9EA5D2 /* IQAudioCropperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E91ABB00B9A0DA79E3E4073C6214CB7 /* IQAudioCropperViewController.m */; }; - D57BB33B8BCE7B14431B3EC8E3AB1DD7 /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB937E2D6DDE33EB2588B0944FB5F13 /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5B1366570776B4A46947A2100A5924E /* UICKeyChainStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 75DBC61504BC8F9F90CF9FAE107FAA1E /* UICKeyChainStore-dummy.m */; }; - D60FFC393AFAC268F4DA29ECD800EB76 /* NBPhoneMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = BF482B671BFBC6856CF3DE82684187F5 /* NBPhoneMetaData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6B6364C317411822F4FC9B32E4A0567 /* SWFrameButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 11D259986D6906636C6CD45C60AA0FDC /* SWFrameButton-dummy.m */; }; - D701347D9EEEA422D48BDB807B3F8BFC /* UIScrollView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 454EF6585B707490E255BFCBF2EB2FEF /* UIScrollView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D7054CDF7CB8AD19D3CF30FEA99AA182 /* SWTableViewCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0509A1A15F2A4B73EAEEC800F489A438 /* SWTableViewCell-dummy.m */; }; - D73821706685403BDF24333CC4E24B92 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ED1B3A564FA8ABAA858BA7B07B28FBC /* DTFoundation-dummy.m */; }; - D749018988F001B5766D14217991A69F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13E46C080EE40508B23B845F0EC277BD /* Security.framework */; }; - D766B62EDB05392EDC6E294C7D570152 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 361AB94FB4FC654A76F951414E37C23D /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D767F718B729C7558399521C5E5390F5 /* APAddressBookAccessRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A092D6ADC0D9417FC39C22C18EF91C /* APAddressBookAccessRoutine.m */; }; - D77B03FF0E6913A87C4F655E66980A38 /* FLEXClassTreeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 32979BC7202F6FED970E2C7C5BA7C3EA /* FLEXClassTreeViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D78590C91109FE301E43DECCE0C71FE4 /* FSParsePlaylistRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = DAD13C48C2C07729AE5EB6955045AE71 /* FSParsePlaylistRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7B4611B48B592EE8CED39DB74EFF636 /* NSGIF-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1366EC2DEF047886DC4770F181F90BE8 /* NSGIF-dummy.m */; }; - D7B80CDA97C8D3203CB980B3CE271958 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - D7DCED7284DDD82054E3E4BA04E2AFFF /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 936B922ED0C8C673CF16C437EA897BAD /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D839F9B6CC90BDA7100B37D308C55D94 /* FLEXArgumentInputObjectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53AF4145B2AC68B078DC9F1E4D6842F5 /* FLEXArgumentInputObjectView.m */; }; - D881418903629EF8ADFB9B17EAB8BFB4 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 692186D20ACD493FD60D0AEC8B449B75 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8AB5AE0249E75CABD0ED6D728E11107 /* NBPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = D20901577A61B36C526D5427EB900F52 /* NBPhoneNumber.m */; }; - D8DBA5A9393478393A55FD0ECA42F35F /* RMActionController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DDA6D9827B5722AC04019CE1602935BB /* RMActionController-dummy.m */; }; - D8FA17C481CE88FCC012BAB9751B8851 /* FLEXMethodCallingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B7292C56814A1334DF6C82161ED0C9 /* FLEXMethodCallingViewController.m */; }; - D952E6DDF14902ADB86E94706B7038E1 /* FLEXTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0220C54EA1896FF0F5FD5334B0F6C5A5 /* FLEXTableView.m */; }; - D966EB561A0A6A10BAF414F0B952E95E /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E579C05FF49D90FCA6E58B7381ADA81 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9B9DD179D07DA7861C3D34ECF649DD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - D9BAC1850B1D89DE8E359F246240ADAF /* IQCropSelectionEndView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F62A67C9FEDC2BD9C475F5B6355A148 /* IQCropSelectionEndView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9BFABE65A5831F8000409565214207B /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E30BB96F7BD1B45C557F38922526C05 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9C0CB9DD710B70DD3D97E5BDF8C3FE7 /* NSObject+DTRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = B4F61D15E542ED555238C2C4A80D81DA /* NSObject+DTRuntime.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D9D921F38A772D71D003820856F8F36A /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = ABC1E75A887A0778BF374BB158AAF91D /* FLEXObjectExplorerFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9F1F05444ECF9C78E6C9306D2498115 /* SBJson5StreamTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B897D0F92ABC751DE71092874D10D4F /* SBJson5StreamTokeniser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DA64B609482AC8BCD451212B9B8D8B10 /* AFOAuth2Manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BE44B3E317C602BD795009820C425D2 /* AFOAuth2Manager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA7EA282AC8D855C797D23C21354EED8 /* UITableView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = BA099A0CF331154C36E45C1A4BE7A5F2 /* UITableView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA8A58FBEE5E1D440244A3D1DCEBF835 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - DB3EBF85F999FA492AC1606CD522A7FE /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7716FA16F65B0ECD19827BAEEA61EA40 /* DTAttributedTextContentView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - DB7B983E0584556598473DBC20023C3A /* FLEXTableListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302C4648767B4DE7AA2E8E62FE19D84E /* FLEXTableListViewController.m */; }; - DB8DE25A53F0F7A0E6AA3BF09735FD07 /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = B6C7BAABB57F9EC074F1A7BD908E7CF5 /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC0494CDD6ACDEF38685DF6A4D1CD019 /* FLEXManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F7E0252D7CE3929D4476102974DD31A /* FLEXManager.m */; }; - DC0F03058984E1E5A40CDE50C0BE08CC /* id3_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = E03D0EC1EDE75CC9F7782E4E1BFAA3AD /* id3_parser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC2BFC3B22944FB4EDB6FCAAFD05C4AE /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4029936FDEF3C065A7BC58F39E8FE05A /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DC3D12604BB066766B048192CD981042 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = CE70F7109B640EEF2B57621E2A4EB0A4 /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC7DB4C1385EF0D65FB8F89FF89EA961 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B4324C8C0DA84D67C4D72505872B34E9 /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DCCD087A93BF459F93EC66F90C2E28C4 /* PHFComposeBarView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B99677CCC701E728609FE3973C228589 /* PHFComposeBarView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD11487B7451719729E30D5A8B4BB2E4 /* NSScanner+DTScripting.m in Sources */ = {isa = PBXBuildFile; fileRef = A6DB893E3A241188C685C0562286077B /* NSScanner+DTScripting.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DD19691B6961A3281B49A66C5A1975BA /* FLEXDictionaryExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F647B07C141083DB0492B8821328085B /* FLEXDictionaryExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE261A7B3FCED71790AEA0E59125DCAD /* SocketRocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEEC911DB18E5EA1DCDF59C7A6F5857 /* SocketRocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE36CC1F61A505DA1007858E82DEB96E /* FLEXWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E637F32F2A1B780B2A34ACC85B93A45 /* FLEXWindow.m */; }; - DE50C379E313825F4AF5663ABF4B7E13 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 0982CA6B17EF8674989EE083F9A541D8 /* AFURLResponseSerialization.m */; }; - DE8C46CFC7D5E8EF44729383BE9B0A19 /* FLEXNetworkSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5824980F5CC878E4E7184537E9AB473 /* FLEXNetworkSettingsTableViewController.m */; }; - DEEB08F5B6BC2D06B076D5255170F871 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B636776F10AD73061D50C4C7EDFCA498 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DF29048B281C2C950A572F32AEBADB50 /* NBPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 87830096B0D5331ABCD532C4E3BE2B42 /* NBPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF37D32B03986B341AC8C5E0E07E8597 /* APThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 532FB1B0F98CBFE8AF92AEA33A837B85 /* APThread.m */; }; - DF382C3967B11399DA441146C67C380C /* DTZipArchiveNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 674555CE74CB77C84D08626D3B3065B2 /* DTZipArchiveNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DFBCC547C3E4BD7DB1B28F0751CC9C88 /* UIViewController+DTSidePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 102F45BF2C1A1C3C3004765A88069067 /* UIViewController+DTSidePanelController.m */; }; - E013B70D88643F86E24B88AA6415002B /* TWMessageBarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0FB9D0D4C3E950FEC1C5572191F6B1 /* TWMessageBarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E03398A0B705C950C31F4AE37F635812 /* FLEXIvarEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0847F465CF5EDDC9545746E722A6D666 /* FLEXIvarEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E096DB3E91E0AA3B04523B959B4A2CFA /* libPhoneNumber-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AA9F116CA7A0B02610378D93294EB475 /* libPhoneNumber-iOS-dummy.m */; }; - E0CEE0F92A9ED7420514B631164B58E4 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = CD651360C574B05050A6FC64F920C3F3 /* DTAttributedLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - E10FFE8869F000A4EBB57DDB5C851C5A /* TDOAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 20A1C1EE383FB03EC536ADDD80FBBCC8 /* TDOAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E15E8E860A6F115165C2F34A46BECF3E /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 109068B6B98153CB936218AE970F3AC2 /* SocketRocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1AF4E85E8311F3F2951DD9A0A7CEC83 /* FLEXLayerExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 83F568B41BA7D531C4735401CD7BBFF1 /* FLEXLayerExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1FFE1EF0C9766DC61A3DE31ACD8B019 /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = B377881DD507A2498C225FC5DDE5AB7A /* DTCSSStylesheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - E2138AAEE16B13E812C0158BF8E07595 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = C2190544F7C9236FCBB69C5692D10D7B /* DTCoreTextFontCollection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - E28F6DDCCC020ED0C741FF29877A5988 /* FLEXViewExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9A52AE7397F9D8E595DE0C438CBC86 /* FLEXViewExplorerViewController.m */; }; - E2AFFB0A0BDD667A58AE3CD3B89E6FB9 /* ActivityStreamAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E8EC0F38D75F402DB3E7246D6601DB /* ActivityStreamAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E34053C6EC6367D266374303EB8793D8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - E370B6ED31D2168636A5621C576DBE24 /* file_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F6E87C8FE732C726E4D90309959332 /* file_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3AF4FD48BDC9CA4B6397D9CE0E6C06D /* DTZipArchivePKZip.h in Headers */ = {isa = PBXBuildFile; fileRef = B22938F25586C91428023A4779680D68 /* DTZipArchivePKZip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E41B84D8699648F19C2EA547DCFC7749 /* APPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A6553DFC76B0444269C2F48E6EAD1 /* APPhone.m */; }; - E46B7763DD0DCFE1703DD55F83B2931D /* UITableView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 91EE515F5C9B4150675C282875C197CE /* UITableView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E4E2E9AF9CE190CD145A7FAF73E206CE /* audio_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9376D088AC4FC38B79DFB05A9FD6AB9E /* audio_queue.cpp */; }; - E5139ADF7A58FECEA0C7D9874FF24F73 /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = CCC3956AF9191A743E690910F6A05D63 /* NSURLRequest+SRWebSocket.m */; }; - E51FCDBB483AC4B62A0FCFBB16248DBB /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 527989518798811C9AF2024CE931F685 /* CoreMotion.framework */; }; - E5388ED84FD5134BAB120E02C7924B95 /* TDOAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E23C960E86B16879515621F8D57DC04C /* TDOAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5692DF1DEB6B63DA2B17F36FC8399B1 /* APAddressBookContactsRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 702AE88D3598C4D9DC218B19BC95BB5F /* APAddressBookContactsRoutine.m */; }; - E5B08A17ED2A445F397F883CA09BB372 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B2EDC76756B699049F0A083400894FA /* unzip.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E5C4E4A99123C45751594FF65DB0A61B /* FLEXArgumentInputFontsPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE2A02F9ACC19295F4A642D2250293B /* FLEXArgumentInputFontsPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5C99EA93C999A34993ACA611339CF33 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - E5DFBF48AD1A79ACA2AF4D67A38D7025 /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E5E38998512AC331B58C80D2D9CE9F /* SRHTTPConnectMessage.m */; }; - E5F73FA2CD3048A6E9F1778A93848D43 /* FLEXSystemLogMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 35FABECFE9E56BCCF477C4BFC0A3FC8D /* FLEXSystemLogMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E607DF11B1B79EB7861EAAFCC787A44D /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E825D8D936DC3FF8DBB9C0DDF9BFB4 /* DTVersion.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - E60C925C50888D3B0CBCC41E4BB6B82B /* FLEXRuntimeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 607A80231556DB7CBECDCAA31DC5CD04 /* FLEXRuntimeUtility.m */; }; - E6213995CB89CD3D25A1CD6843BC85BF /* SBJson5.h in Headers */ = {isa = PBXBuildFile; fileRef = 2217687B36CB9D6945EDEC7513AD2E2D /* SBJson5.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E69A3887609B19B1A8FF548BAE6C28B9 /* SWLongPressGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 289C1E97D2E398374FA4F32A843F0366 /* SWLongPressGestureRecognizer.m */; }; - E7AF9CDC516727EA5E94DCB179C6A5D0 /* SWFrameButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C72D40EC9B18C09D23DE5ADF4227527 /* SWFrameButton.m */; }; - E7EC4C2967984373DB3C77F0292BF248 /* DTSQLiteFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = A01B59AE2032467F4694A4FBD505AEDC /* DTSQLiteFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E7F6E1A8B8000A91DDCCEC5C0D684AA4 /* JSCoreBom-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F56FA8A346DA9844A0003F8699216F9 /* JSCoreBom-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7F869C81DF85E7211463741D283ABD1 /* FLEXArgumentInputNotSupportedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 916AB2E8FCA938D8D3FF12D30010F83F /* FLEXArgumentInputNotSupportedView.m */; }; - E85C713BA866D2C540A02AE736AB5D7D /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B139A80291D9E9507F3D44DA3B529BF /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8D74E0A27550735177E08E357693593 /* NBPhoneNumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = D9B46F5886A9A12063A78D288879D580 /* NBPhoneNumberUtil.m */; }; - E8E8392E05EFA020BF0C378671ADDD10 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - E91428CFA7B73438217251BA9C54544B /* IQ_FDWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DE8B3B0565AE563E408E4A9F3B67ABA /* IQ_FDWaveformView.m */; }; - E91A69877D89CD049C170C6A6D62F77F /* SWUtilityButtonView.h in Headers */ = {isa = PBXBuildFile; fileRef = 866401195074BC0973A7586449FBA254 /* SWUtilityButtonView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAC771655E7523D79B9DA408D5E0A0B0 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CA804AC6FA20B2600B010E320A4EF24 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB1EE91DAAC67B346D8C24FE16F17198 /* APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 45612C5692984A9EA245DA0C4C277957 /* APAddressBook.m */; }; - EB324FEDA5FBF587B06584A85F89AC20 /* FSAudioStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D37991693FC097B678DA9B2650A543A9 /* FSAudioStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB7518BF021A0001CEA5DA6AE49422BB /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D1C8E3D8BBD988B5E69A4F8AA69ED1B /* SystemConfiguration.framework */; }; - EC0E22315B4050D6CCA797EB59328DD3 /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 4651E6622F02972A2208C55A578F7EBD /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC2148EDAF745070337B1F16EB204251 /* APPhone.h in Headers */ = {isa = PBXBuildFile; fileRef = 806DAFD8F46AF91F1E33FD068B56EBAD /* APPhone.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC312608948D0C7FDDCC19A174FE57D5 /* FSAudioController.h in Headers */ = {isa = PBXBuildFile; fileRef = A4582C94F3CEE550E18F6449FE1290A9 /* FSAudioController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECE6B23D52C9C2C79F4296887B24D1B2 /* DTSQLiteFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A45C43140819817D63D05C0DF468835 /* DTSQLiteFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - ED7B800B4F6785529C0ADA97603AE52C /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 003BA59CB298CB042F4A13FF7A237721 /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED7D9B273331D578F6DDF96B4C0CABE2 /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 56A6087C30E0EAEC4E5B3B575E063C73 /* DTCoreTextParagraphStyle.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - ED9E7E6E82FBA767753FD7E84F01A129 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA694895E397E22D6B25D9D29A713390 /* crypt.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EE88D98656AABEABEA7373AFDDE3FCA3 /* SZTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE8F1B61F67EC6D75C0EE3A24D43F127 /* SZTextView-dummy.m */; }; - EEA3D612B7DAF76202681D47ABBB77AD /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1556756BF1C23AC926D6364BB85E45 /* DTAccessibilityViewProxy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -DOS_OBJECT_USE_OBJC=0"; }; }; - EEB4A455551D7B917E1AD4B0A1A964FF /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E39BE1623F1B11A76FC22EC7A06B675F /* MBProgressHUD-dummy.m */; }; - EEFB76EB483ECEB97B55D95F678DA915 /* FLEXArgumentInputDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2225F5A869DA598F00433CE6BEB69E4C /* FLEXArgumentInputDateView.m */; }; - EF0A5EF1F5861CCB9C24DCE96A0F16CB /* NSHash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D75AE52B4D61737ED50714017A28DEBC /* NSHash-dummy.m */; }; - EF12A168733A846F4F227B7F08A269BE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */; }; - EF1314AD3233BDB01E96969E355F8F8D /* JDStatusBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = C956CBD2DCECA9BAF3B4DDE20A63E5EF /* JDStatusBarView.m */; }; - EF7D6111D594CB4ABCEEF763CB1DF409 /* NSArray+NBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 29129B02E241CBEC76590CDF19CF44F6 /* NSArray+NBAdditions.m */; }; - EF9085911E46AFF8CE6A3112F72072C6 /* DTZipArchivePKZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 6170EF8CDF07787817E954E56BB9B1A2 /* DTZipArchivePKZip.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - EFA23357C5876906B4FF1099D34C7E1B /* NBAsYouTypeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CF48F61408DCC59EA59462400CA6DFC /* NBAsYouTypeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F051156A6284FF7423391B9FE3DDBE5F /* FLEXArgumentInputColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = DC93312F0743FE28DCA28EF085249457 /* FLEXArgumentInputColorView.m */; }; - F06948DA520026F4C658FB5CCF585F22 /* FLEXObjectRef.m in Sources */ = {isa = PBXBuildFile; fileRef = 055ECA5EBCBA576429559B8A8BA20DE1 /* FLEXObjectRef.m */; }; - F08DD97AE1ED97D95A4B9E8CD0F40760 /* JSCoreBom-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F5B37FEF3F26ABF433BCDDED00F2C0 /* JSCoreBom-dummy.m */; }; - F0AE0C707D556620307AF1C8774EFCD1 /* NBRegExMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D3D459AB835A3340765AC3004A9360 /* NBRegExMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F14DDF2AE765122EEE6F170275DC8864 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - F17071A0932FECA640CAA533D5C16FF9 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD7DDBFAAFBE292FDF015EBE25D459E /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F259773E7A821FDFD873A3C1B387AEBC /* TDOAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 08AE6AF1A823EB17053B6FEF0874E2F4 /* TDOAuth-dummy.m */; }; - F3194C001EF8DB85B463F26BFDB51101 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97A300E60E1BE23FA53A0B333E910E60 /* MobileCoreServices.framework */; }; - F339C6623B5A9027046C72A17BAD65AB /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F20A2C088B1D60B7690542A9EF4B7EB3 /* AFHTTPSessionManager.m */; }; - F3F1CD5C7E65A923259E16433F4ADBF3 /* FLEXArgumentInputStringView.m in Sources */ = {isa = PBXBuildFile; fileRef = E4F2F525BCB4F1F967AADB485A0F227E /* FLEXArgumentInputStringView.m */; }; - F4256074A263683008AB224BF78B78C5 /* FLEXPropertyEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D4BFC87F87268A3124AEC51125D3075D /* FLEXPropertyEditorViewController.m */; }; - F4BBE6C71FD806C3B99C45351E85EF69 /* ModuleXMLHttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EFAC25459C887A2D79F51AC555586421 /* ModuleXMLHttpRequest.m */; }; - F4C9A629E6375F52F54A40E5CD87D56B /* file_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F92CD2C544119E504B28E3B57B082BE /* file_stream.cpp */; }; - F4D88482E2A1C62A05539C0FA5AF3A8A /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E3F7FEE62CFB351A3E52E56C9DA25E /* AVFoundation.framework */; }; - F4F2EE5C2E16755CE60F2B50EEC28433 /* FLEXOSLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = 44E1E9B895CE79FC2B5A86A2A4C31800 /* FLEXOSLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F51A694339FC6AAC64260FD67E9DED5B /* DTASN1Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 434442D1656B82307A269BDAB91756E8 /* DTASN1Serialization.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F56BE4E5EC7EABE79253F8894F38CEA3 /* NSArray+NBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5CECAF441F681DF0AB7694FB26A957 /* NSArray+NBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5967BEE3D8D9C56A774658763EC9A47 /* NSString+NSHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E50FF221F8ABC7808A68A2A8F90823 /* NSString+NSHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F59768F6127B841E4D2892D2B7261993 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 025F861BD4FD7510DDBD125921F310A1 /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5B49D3C10CEB7FE38A205BECC6218EB /* FLEXTableContentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F326DDD5B5695ED1CEC359AF91EEFF /* FLEXTableContentCell.m */; }; - F5EFE353A6373FDE7C295199CE8C985E /* FLEXKeyboardShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ADED79C3EEDC870C51BF0A6622401B76 /* FLEXKeyboardShortcutManager.m */; }; - F62773EADEEDF1003EF7D8B38DAD21EE /* FLEXColor.m in Sources */ = {isa = PBXBuildFile; fileRef = EFBBE285493DA67511C89DA71B82B91F /* FLEXColor.m */; }; - F6A54B8BE82BCC1E9CF43986F33710E4 /* NBRegularExpressionCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5E76E7D4BA486824D56D2CB14CBD16 /* NBRegularExpressionCache.m */; }; - F6AAD8D1D97ABF065ADED6768D0D30BE /* FLEXSetExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E88AE40AE581BA5ADC854D28C584B7F /* FLEXSetExplorerViewController.m */; }; - F6E9949E70ECF1F99891420594595BBF /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 310B3EDB4FAE61174320E1EBEE1670D7 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F71AA4CA21ABDE71D9E728793A73DF7C /* OMGHTTPURLRQ.m in Sources */ = {isa = PBXBuildFile; fileRef = 83D4761478E69E114DF523BFEEFEF308 /* OMGHTTPURLRQ.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F749713A76F0B0EAF2D0857DF75CA157 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A67CEFBB38E1976557F31F6DEB7AB1AA /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7E3DCFB6E8FBED871DE9D297CD3B686 /* FLEXAddressExplorerCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2283C48D99A173A3579523FBD0765612 /* FLEXAddressExplorerCoordinator.m */; }; - F7F85EBB95AC8FD5C892DAF5D32738D8 /* DTSidePanelPanGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = DD6F27F6C42EC3D294F34FF4C240B145 /* DTSidePanelPanGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F811B3FAEFDCCB9ACA25B4012E5D8043 /* FLEXCookiesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4320438835EE011B17FF3C582BDD15 /* FLEXCookiesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F82412AE0B5E5CF0ACADC4AA95D95A7E /* icon-info@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ACFAA84211391385F02B0694F51D0D1 /* icon-info@2x.png */; }; - F82DB8AA254102F9C71133C91ADE4D4A /* PHFComposeBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = F5C89349E30A08E8E4B87C99333DB34C /* PHFComposeBarView.m */; }; - F83E120F38D32B005C208CF17A95D7B6 /* PHFComposeBarView_TextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E5CEE5CD669FAB10E39C9F66FB4924D /* PHFComposeBarView_TextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F869A8974A53A9CCC74E72161D26BD33 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE24019BCEADAB481DCA5E066095F6C /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8B4CE094E560811327C68076EF8C35B /* APAddressBook-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A79FF8B6719D1609C9E9C181D8E5BB /* APAddressBook-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8D5DEC8ED67D8BFCB142AC6ECF8B032 /* DTSidePanelControllerSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F717E709933E16DD86AD13DF92F5866 /* DTSidePanelControllerSegue.m */; }; - F983642384410111AA15A25C765212FF /* FLEXUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5381A2E0FD2ADD63C4B15D83E73F2C03 /* FLEXUtility.m */; }; - F98745623050A4EA4A7A3D3FADE409FD /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E0037625247BFC809EB3E029AD6BF27 /* DTPieProgressIndicator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F9ADC3EFDAD8C8C349B6ABF9728EC974 /* INTURequestIDGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A05BDAAEB19276EE7B6ED2F11D4B46 /* INTURequestIDGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9EAA0B2A6C547064E69295AE11EBEA3 /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5326224DD6842882AD6F1087FE7890AA /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA9A917224DF77EDB0BA879C933D5802 /* FLEXArgumentInputViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = E79880929D7436C74A23FD40BF734654 /* FLEXArgumentInputViewFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FABA93D487F5C1A60E95F63BAF82C5B6 /* PHFComposeBarView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 868DE1EFD114A8FF2689DCF2E356B8FF /* PHFComposeBarView-dummy.m */; }; - FB2DE88657E25565676DC33467F7BCFE /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 424EB09168A9B08701838D2A7EDC94C2 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FBBFC317408B5186EF0DBEFF2193078A /* NSMutableArray+SWUtilityButtons.h in Headers */ = {isa = PBXBuildFile; fileRef = 73B89D9F822433AAC0785D592348EE03 /* NSMutableArray+SWUtilityButtons.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FBD9D37D20D64917D162778C172F521A /* FLEXInstancesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DE29B35333F3047245AE4F61620D7770 /* FLEXInstancesTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC02DA0C613B29362C2DB5BB93D97DE4 /* SBJson5StreamTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = EAF00C6720746B362298EA7317F206D0 /* SBJson5StreamTokeniser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC0998717144B227128A30BB492BB98C /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5967A38F7AC67FACF2527F5349DC23B9 /* AFAutoPurgingImageCache.m */; }; - FC39073F884FFE45D27F605E9EBC6474 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CA22015DFE6F402AB7E1D32EDB92CA59 /* AFURLSessionManager.m */; }; - FCA1A4AC0CCBA7AB0AE3C65BCD8A8779 /* APContactDate.m in Sources */ = {isa = PBXBuildFile; fileRef = E588F9E12D8303F9679AE6BAE1658AF2 /* APContactDate.m */; }; - FDCD384B0F69B92A41A737E4C68AA1FE /* DTASN1Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = CB0B65BB0E2DFDF7C2F95DB06BF1A7BC /* DTASN1Parser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDEA0BA38DBEC5BAC837675ECEA761E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */; }; - FE15B03D20458BCCE6A218E57DF4CCA0 /* APContactDataExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D5241475DD5BD581301EAE2C1BFBAF6 /* APContactDataExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF10B7E3A618E5FB871004EC1EB699F6 /* FLEX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D5211156C2864D5C07EAC40790141BB /* FLEX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF4B0BC961A5B085730A0C462F58253D /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 124D087CEF9C00948AF3D880B262E2B1 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF51FC0F2DFC80117A36A88240B83EA2 /* IQAudioRecorderConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 92FFA160C70004374764FB7DE5BAF832 /* IQAudioRecorderConstants.m */; }; - FFD8148FC8961F14226D6595212D488F /* FLEXArrayExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 659C54963EB5C71323D49C2FD62901B5 /* FLEXArrayExplorerViewController.m */; }; + 002DCBCBD4A1D8E605E62DC7D1446C80 /* FLEXSubtitleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 72059824EF1E7A34996FA9DCBA99737A /* FLEXSubtitleTableViewCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 007C2275E214CB4157F877C18A10C66C /* NSMutableArray+DTMoving.m in Sources */ = {isa = PBXBuildFile; fileRef = 065266EB5491D5CCDCBCE01599C21D5F /* NSMutableArray+DTMoving.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0097FBBB61C275FC0FB0F830858C8F22 /* SBJson5StreamTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = BEB53BE2CC04102C40C7CF499E58E623 /* SBJson5StreamTokeniser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01C25E82122F6C27A4664D66FDE163F7 /* RMScrollableGroupedAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F8D7B92A78B76A38CA494289CCA877E /* RMScrollableGroupedAction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01D7676292444CBE1920DCDA3A4634A7 /* FLEXTableViewSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 76CD28F54BC5446ACC9E710F0D729D3D /* FLEXTableViewSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01EC4055CF15A76B42EAEE6FBDB58DC4 /* FLEXTableViewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B7BC593E9DDE58F93086DBE561F61D /* FLEXTableViewSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01FE8C2BCA5C279EC7301EE08A26C657 /* DTZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F99F4BB02ADA6B4E6320038E3FE503E /* DTZipArchive.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 025C2EAC07651B039613AC3F72D03E44 /* AHKActionSheetViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AF24C9E960A5906FC875C70A50DAA2F3 /* AHKActionSheetViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02B2B5C98DC19C5C870B23F6533C0ECC /* DTHTMLAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = B9CF95B2F91AF0B258930EFE55FC81CF /* DTHTMLAttributedStringBuilder.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 02E4B19BE7E5EB777DB112D1A73604CD /* DTBreakHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F20399CE871252621CE4A2CCE51C03 /* DTBreakHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02F5C7B3DE3EB6B435D44491480115B8 /* FLEXExplorerToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 240C377A5EBED75631FBA182CCCFF349 /* FLEXExplorerToolbarItem.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 03177E4D67DB5B562845F7A01026F10C /* FLEXExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 829EDCCB45CFE70D7982D882F3A3A270 /* FLEXExplorerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0368EFDDF75297A5679E593B1740E286 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D71056B575F514F2956546FCE0DA8D0 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03B1E0517A44E8092F17D4A7D36A2FFE /* FLEXArgumentInputViewFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B34196F69477C7A65593424FFF4D1B /* FLEXArgumentInputViewFactory.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 03CA13757C68BDAD0A9194418D17AF9E /* APThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 7732CD186F68C45FA3623CDB22165EEF /* APThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 041F986B33FBBB4F14696F4DAE441679 /* DTCoreTextGlyphRun.m in Sources */ = {isa = PBXBuildFile; fileRef = 94FB05E3554341D9BDBF80BFFB64CC4C /* DTCoreTextGlyphRun.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 044D982DA49BEBF66F81A4580C4B7B40 /* SRURLUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E46171C70400FE32626522272478FAF /* SRURLUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04A489FCD2744F2FB031C12A9C7F7546 /* UIImage+DHImageAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B4E63B4CC0385E52B3CAFFFD31045632 /* UIImage+DHImageAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04A68587BE50B1628E11EEE3078B9BF3 /* DTTextAttachmentHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADAF6487E5A6C91D631E1F2EC64BB7C /* DTTextAttachmentHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 04B3DFCC54719FE7BEE4592800A5AB7C /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4665F85EBD58D6715F7372387D93EA4A /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 050EA52FB47721856D475FD7BEBEE30C /* FLEXArgumentInputObjectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE9745DA7E1479B05F6C32B2AFF0BEB /* FLEXArgumentInputObjectView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 051080D7749288AD69E0D90616A328DF /* PHFComposeBarView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 10E756A006978B5B6B43F5B4F8FCC56F /* PHFComposeBarView-dummy.m */; }; + 05A76237699EC0405DAAA68D3F99DDBA /* DTCoreTextLayoutLine.h in Headers */ = {isa = PBXBuildFile; fileRef = 1510CC098816658931E1F449C860276D /* DTCoreTextLayoutLine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05C4A8C9B05627DE7B082E9D264ECA02 /* JSCoreBom.m in Sources */ = {isa = PBXBuildFile; fileRef = B3B98D573855382F3E67C551A677E2F9 /* JSCoreBom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 05CD91E156EDBC2300A650AC90322207 /* NSAttributedString+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 14379351A21B3D58F067588050C0426D /* NSAttributedString+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 064856B2133C18F2E5C23D8A43FCE9D7 /* FLEXExplorerToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 847446884A02779B989DE12B1FC3231B /* FLEXExplorerToolbar.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0659AE8AA5D7117777CBE18ADCEC7304 /* FLEXTableLeftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 86F7FD7AE851E367A3E14DBE048DF3C2 /* FLEXTableLeftCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 066344908AF3A36CAAC7F8BE93D4BA27 /* FLEXMirror.h in Headers */ = {isa = PBXBuildFile; fileRef = 4430BC6D16ED138C6F0431EA7954FB59 /* FLEXMirror.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 069835E7FB01401D297AF7261C174CC6 /* UIGestureRecognizer+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 632837FE04D04CFD98958CE96EF079C8 /* UIGestureRecognizer+Blocks.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 06B0C429BEDB8D4734E26116ACEF7C63 /* DTHTMLParserTextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 9655F5F788A842D7761AB1E851E9DA6E /* DTHTMLParserTextNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07362F2248D79F150E4F9315CEBC82B7 /* DTSQLiteFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 323EC0E948ECDB984E2A5163F0FB2320 /* DTSQLiteFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0741033AA348342091E2D1EBE7E47F6C /* DTDictationPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB59E684C614382EB2B58E04DBF59EC2 /* DTDictationPlaceholderView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07B3AD876DAAB85823A263D3FC30F29A /* FLEXRuntimeKeyPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 8481B68C584827D9D31F0F29F25DC55D /* FLEXRuntimeKeyPath.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07D5D6B9EEBA46E79D02E2A8459899EC /* DTHorizontalRuleHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDC04C7DC935150B0990D2C3636084 /* DTHorizontalRuleHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07EA2CB23F75926A64D2F7D8733E3C4B /* NSArray+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 449615D5013EAB65B4992331CF3E32B6 /* NSArray+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 08037116FFBC0C2D422A5F6C8FF73DDB /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D74D727ACC34D033964C90A4D2DE754B /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 08061029BC836CAD4A78213EA51D8B98 /* NBPhoneNumberDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = 271B4588307B82C38C920695EE4DCE3B /* NBPhoneNumberDefines.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 082732132CAC9BA87FF4D3CA555503D7 /* NSString+DTUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A79AF20529841238546B3B66106EC9B /* NSString+DTUtilities.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 08377DBF55532ED4D626D7E02ACF3B92 /* NBPhoneNumberDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = F1784266A681BF6528925A9DCBDF3C49 /* NBPhoneNumberDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 084674DA7F959DB60F96771E22544BFE /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A16DCFC8ED94D684AB7E0E7F99D39AA3 /* ioapi.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0862FDC3375EE40C73FF659AA6625869 /* NSMutableArray+SWUtilityButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B4CADBE8331440C80CBA47FA8AFC0D9 /* NSMutableArray+SWUtilityButtons.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 08C1DC4EE027E1F719CDA31EB674D24E /* RMImageAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 771CE2A4297D94DEC70D38882596FF19 /* RMImageAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 093DA77810BB424068E5CC42CC718A35 /* IQAudioCropperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D41A18021E1B24C77897C98E105BBC /* IQAudioCropperViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 094FB7129648AEB896FEFB7AA02CC24B /* APSocialServiceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C978A87B64833A5E675182FE6BEE8A /* APSocialServiceHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0970E773D8451052BE128C1020C55CF7 /* REMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8011C2E41CD34FBBC24AF4DDDAEC52CB /* REMenuItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 09A713BF350378226C4B648C3E6EE1AA /* APAddressBook-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54A642ABA6713FE13CEA750A4D3AD565 /* APAddressBook-dummy.m */; }; + 09A9BA230C9DF9E1541818C783DA81C8 /* FHSViewSnapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BDE1F8F1C024BAC5FDA9084581B9EE0 /* FHSViewSnapshot.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09D4340C5D7840F4B9631A88CF6AD852 /* FLEXMethod.h in Headers */ = {isa = PBXBuildFile; fileRef = DC5D273680A973B9DF2A1BAC5AC4D8DF /* FLEXMethod.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A66F10395092E9BDD7FBDF35F678343 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 0A7B779E70C54F7292B534CB3A956C1D /* APAddressBookAccessRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BB202111958BB14E75302263E34A61E /* APAddressBookAccessRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A9BF1BF0403F96D534C508B62B2C0FF /* AFHTTPRequestSerializer+OAuth2.h in Headers */ = {isa = PBXBuildFile; fileRef = 913ADC71F2C84BBA74807421AC657A44 /* AFHTTPRequestSerializer+OAuth2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B33CD08B7FFDBA702374C35CCBC822E /* NSString+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AAE8ABF7AFC8CF7FB8E8488ACAF19B7 /* NSString+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BA3B10AA9621036436CB04C1AB8F843 /* flex_fishhook.c in Sources */ = {isa = PBXBuildFile; fileRef = 6C66921953D1E4B9C08E137EFCF0C835 /* flex_fishhook.c */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0BCD469198F23BA5A8F9B37093945952 /* SocketRocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A26EEBAF27F375595C7F99B3A83E82A /* SocketRocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C03CB7754294040A6C63A23FC191956 /* INTULocationRequestDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 45C80D89FA10C77CA3331FDC9B0A4945 /* INTULocationRequestDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C6A25917C6D5E6155CA0B0D27B16589 /* IQCropSelectionEndView.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A3CEC7CEE3185EC0C5605E9A1DCA30 /* IQCropSelectionEndView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C7EFE7FBFB06733EAD35B47C17C37B6 /* NSUserDefaults+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 84C3CFD8576EEEBA478FB51F6E98ED02 /* NSUserDefaults+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D6CDBFEDF31F59E63640FAB9C7B50F5 /* APContactDate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5FBE58282DC7F28DF8918034FB3A97 /* APContactDate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0DA01D45497F9DF753D20352DF6EA85C /* RMActionControllerTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = AD03D57815980BAA42895E9397CBE574 /* RMActionControllerTransition.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DAFBFCE3072DB3453D12607027AF060 /* FLEXObjcRuntimeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 85263567B681E054FAD92A895D8F0D38 /* FLEXObjcRuntimeViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E40D62D472ABD7610DF48B50C0529F0 /* FLEXSQLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E4FF1C1B72F8CE962AEFD84BE7D5394 /* FLEXSQLResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EC92DD216C19B1771319E121F213D36 /* FLEXTabsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 168B9D87CB46219393A8BFA526F5D74D /* FLEXTabsViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0EF4EDE682299EAAE93048AD8D21D0E0 /* FHSSnapshotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 20FE7C8A8082AE53A3A24F93A27AE858 /* FHSSnapshotView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F7B3DF3C166FB76FA68ABCFD79EF870 /* NSTimer+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4D8039A32331A7BD1B556333E3A32F /* NSTimer+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FCC287290804DA9FEFFE1E821CAF8CD /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = E7FBF97F131404C703F7E98B12F848F8 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10A1AEC3E7FD7587F0215E23D1AB38BB /* UIView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D474932649083EBFE62B5F2322A027 /* UIView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10DE997CB96B5DDC60562881193E8D20 /* FSXMLHttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E53C4A5496F171A411217F14548DAF7 /* FSXMLHttpRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1109B45AD75319782CD0ACCCC2BD2D62 /* APSocialProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EEA43450F919333F6D075D8969E89F7 /* APSocialProfile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1150104E7B978A0C6B0B59FD42532C35 /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = D277A218EA6BE3EB94A0A6EE19695567 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 115ED742404147BF10AFF3461D54E19C /* DTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = ECA576B6E438931913D215D503BAC37D /* DTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 116009665297AEAF2C9D10122C7CC44B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 119E2109B31D6F01E05F51A40BFBB0F9 /* NSString+Paragraphs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB6A097885ED18A60407D9B12325857 /* NSString+Paragraphs.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 122B18A02EB8B0755434D715406056DC /* NSData+DTCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = C44EEB71815D0C8504E6FB5207215EEF /* NSData+DTCrypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12799003A3E5C96D1C25BE79B8078D1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 12E59F7AC009B3D4E28FC253194FCD9E /* FLEXBookmarkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B61EB1BF1F93AEC05E56E361D592FDEA /* FLEXBookmarkManager.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12FE108482793205BC0EC68BA82EF63F /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */; }; + 13191A859A4C41066334D86A8110EDB7 /* SWUtilityButtonView.h in Headers */ = {isa = PBXBuildFile; fileRef = DD31E2EE1DEA6D5756FF05E94FF67843 /* SWUtilityButtonView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 134D67E4FBF0EFC41B7DD994A434D744 /* DTIframeTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A0F9B6A0ED29DC9C88FD3D6B9670F42 /* DTIframeTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13CDA83FFE23084113CA6747402B69E7 /* FHSSnapshotNodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F21CBBDCB4A3B6CBE0F090847240E7C /* FHSSnapshotNodes.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13D48445A0FE9356115C56AB24851742 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */; }; + 13F3EBB6B89DC54618D420D6D80DB737 /* IQAudioRecorderController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D15DFDC5386D98654AE7BB758DA9B45C /* IQAudioRecorderController-dummy.m */; }; + 143411EA9FC00B5B13724D82847C824D /* PHFComposeBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BABF22CCB96C51A10E73CB6BDA64696 /* PHFComposeBarView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1436766B9E891712BC7DFBEDD08D6729 /* AFOAuth2Manager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0E5F3E0A33A8A24B97CBD48170E3 /* AFOAuth2Manager-dummy.m */; }; + 1498727E94FA7C70BA33FCDB801AE6DD /* SRDelegateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B81179C7A3AA4EF4E976F4A58592B29 /* SRDelegateController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14A3DA719F9568EAAC5EA84595C19AEC /* FLEXMirror.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E4A6FE49B0330D9EADE8B1D46DF3FE3 /* FLEXMirror.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14C2B8D8701E70F5A4D9CAD7350C7917 /* NBPhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 88CA8FCA2D23F7E49E7079AEAFFC3E97 /* NBPhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14E4FC6D4D45E8D85A68AA2F34151A46 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F8C4CAF28816F1CF6585F8D7ED716E /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 151B50B1B60FBF65DF912FE434F5B198 /* APAddressBookFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 8758E98311C100D695E9DD39354A339A /* APAddressBookFramework.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1582EECEB29C9AAF44B2D590305A5B93 /* IQAudioRecorderController.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0D921514C29D18E23B256FFDAB80C42E /* IQAudioRecorderController.bundle */; }; + 15A9EF1EDC0251416833C67F0766B949 /* FLEXRuntimeSafety.m in Sources */ = {isa = PBXBuildFile; fileRef = 820E9103F76FEAB783DAEC8E54A889BD /* FLEXRuntimeSafety.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 16BD0599DB37CCE496ECF5C274DF9838 /* DTFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A8765576F90E80003B46CEA76F7D213D /* DTFoundation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17877AB8E02007ED940814C40DC1C631 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 179531D0BD81DC0D06EC6D7ECD380315 /* DTSidePanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D5B3AAD59B94623B75CD2D169007B1 /* DTSidePanelController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17961147FB591CDDDFE9954CE1A702F2 /* FLEXBlockShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 191C7E73A5D8E99E678A67F6D43C0EFC /* FLEXBlockShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1862CA6C7DE5E450851EC17AEE0AEBD0 /* DTHTMLParserNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E1E9497569A271023757472504DCD0D /* DTHTMLParserNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 187B7F6B0B4AC91FE2ADD1CCEEACCE4C /* DTAttributedTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B294AD709ADB1020073FB1365211838 /* DTAttributedTextCell.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1891BEE40B474A299C264C9BFD0BE9F0 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DEE989214F2CDAE82BF7D864D9108FF9 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1895F7D7CDB0BEB1129B2CE3C1143774 /* APAddressBook-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1590134F61F8B8C824B0A99B8BDE18 /* APAddressBook-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18E86CA6E9B4558ACD007C1B2BF92936 /* FLEXNetworkSettingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 496390F89555A04A7FEE90035A2DB2A9 /* FLEXNetworkSettingsController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 19463D02004A8B5A2DB1D177A72DE964 /* NSData+NSHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 580D06719889EDE978961CB1F251642F /* NSData+NSHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1960911EDB625F62FB81F8C7AC8C0DB0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 1960D9120450C6CD6BF8EA20E163257A /* SRMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 85834310D6000948519601B683380C8F /* SRMutex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A317E1791272F6F51AD692300460109 /* FLEX-Core.h in Headers */ = {isa = PBXBuildFile; fileRef = 40AFE6C47E923263464A9453BEF30317 /* FLEX-Core.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AE7C8A951166F6BB643EABD436B0518 /* PHFDelegateChain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 381B1646C523369A20914ED412CBDD5B /* PHFDelegateChain.framework */; }; + 1AEA99F4D6D07F71877E6957F8340472 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3453F86AFDC53E9D31CAF1080998A32F /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1AEE89214FBF27A61B8FF2EC18724DF7 /* SRSIMDHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = DD10C33DE6EC1D700F803E794DF11D88 /* SRSIMDHelpers.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1B0C680FADEB84D40C30815E03B13512 /* file_output.h in Headers */ = {isa = PBXBuildFile; fileRef = B3D29644270870E690E2D1B8A91AE5C6 /* file_output.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B13EBA651E621FC19565D6F32B7C79A /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC163C08CC27AECF1902A9F73E77CB1 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B47481658FD4748FA6AADC4295F2A6E /* DTCoreTextLayoutLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A9E8DAD356225BC100B04F2B3BDAA1 /* DTCoreTextLayoutLine.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C589D57EB3E700BCB915CA1C5714F19 /* FLEXNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = A078AEB56CE337D16DC5D83A8F102AAF /* FLEXNavigationController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C9ADF9D199AA7A6523EF94568980119 /* IQ_FDWaveformView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0030B7858D35171945AF51297547B1 /* IQ_FDWaveformView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D2386DB1BDA8972788D053F582B8BC3 /* FLEXArgumentInputNotSupportedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2D0A0353C2CCE7CD1DC9411443DE25 /* FLEXArgumentInputNotSupportedView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D43A97EBF24237F15F54BAD7DEB1DDE /* FLEXRuntimeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 64192CF1E2B7E9FADE995B54FDBE9E68 /* FLEXRuntimeUtility.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D4A4779A2F5BCFD4C04AF95C50D7BDD /* FLEXRuntimeConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 38551FEAC72CA33C4619149E8F003EC0 /* FLEXRuntimeConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D5061CA8E21466E67F95BF538729776 /* DTColorFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = EAB647DBFDCEC0728B523A4275E45A6F /* DTColorFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1DA2FEC43CA2CA902FB1F3DA2D9B9D84 /* FLEXColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 76703B1EFF3179F2DA85BB449FB87606 /* FLEXColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DABC29EA4EFE0E5F411C53781895E76 /* DTStylesheetHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B0731C2ED879E40EC20EE83DD01B6ED /* DTStylesheetHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1DD50B12185BB9036795CF5F99102DDD /* UITableView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB93C19B9FAE20233842A6EA10B6109 /* UITableView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E6953BE3DAF98EF20715E34C1C095A9 /* OMGUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 876D124428E5FC268ADB04B9E6452F80 /* OMGUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E7B67F8F0129C82A4306131EDE7EF16 /* SBJson5.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A443FCBEBF624C30A486DC6F810F72 /* SBJson5.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EA7E9AF6C65E9934144B3C0F50B72F8 /* SZTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 361A051717FBEA3827F6A2133C47D079 /* SZTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ECF48261E3607E16CB3952B2B57465F /* FLEXKeychainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D37DD1E83EB721796E1F7234FCDD85 /* FLEXKeychainViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1F8B8A808B7C3284200FDEB8E42EECE8 /* FLEXArgumentInputViewFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 48E107416181C2A8AFD964D1748F6E4F /* FLEXArgumentInputViewFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F8BF8977F61C8DD822294C5815EA418 /* DTProgressHUDWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 87ED9DB52EE84B95117513538CA696DD /* DTProgressHUDWindow.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1FD6A7D333C6E30E1240478256C2EDE9 /* FLEXObjectListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5304F25A0C3075A3CA726786108BA5AB /* FLEXObjectListViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1FD75CFA043C789BE438ACD698F19602 /* NSArray+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = C712905EB1D700C6499464A95FB4B407 /* NSArray+DTError.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 206CD71E1788176C3B24E5ADE6962232 /* OMGHTTPURLRQ.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBEAC381DFAA52662B80C32DA6CDA520 /* OMGHTTPURLRQ.framework */; }; + 2078C6854ABEE20BA757DF50B1071AE4 /* INTULocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D90AFBA122000653B40677DC2E95011 /* INTULocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 207D5BA045D41335592B27EBF0D232B5 /* JDStatusBarNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 38EC0D9ECEF1B8CEDE9C34FBAF43D5EB /* JDStatusBarNotification-dummy.m */; }; + 20C6D57F8557A496F1605E05F2F8A32C /* APAddressBookExternalChangeRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B58BBD84F4CB8F084B8898CB33F92AC /* APAddressBookExternalChangeRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20E6AE18BE91E5E9C3B5AD19E7C3CED0 /* FLEXObjectExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA984E08FC9C91074BCF3441CED410C0 /* FLEXObjectExplorerViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 219B79C7B052A12DEFCDEE249415EDF6 /* DTTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = F465B3BF49EB382226B679320E176B20 /* DTTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21BADDF6CEB496F05EDD4F41B9D8BD19 /* APRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = C1ED6745CD7AE2716ECE8078AF203451 /* APRelatedPerson.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21CD46C21CEE8C67FF6D8192100A447A /* DTAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F7C04120E6DE171012711B6A156E4DC /* DTAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 228CF7088D8A20B592EA3C69927CE474 /* FSCheckContentTypeRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 59229BA9B048B7CBF7916E4D08EB9CFD /* FSCheckContentTypeRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22C92B6A033981388F94BCC120DE7C84 /* NSAttributedString+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FDCB0BA5C19425ABD16ADB58A7684F2 /* NSAttributedString+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 23C73A8409946D24703E133AFCFC2E99 /* AHKActionSheetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D6C57D13EC200064BE93BD0067A3CA7E /* AHKActionSheetViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 23DBC7646BEF7EC6440345FC4FDE4026 /* AFNetworking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4C1D06BCBA925A5DA67CD403C0082C1 /* AFNetworking.framework */; }; + 23F6EC6B41CAA377201C13FF58D93A02 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 48282D192DA2C3430DC645A53C8F3EC7 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24E17C472FB4EA25A9D89747D490EA70 /* RMDateSelectionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4A0ECCB02AB8D65E58ECE92D586AB3 /* RMDateSelectionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 254FFECEBCCA092EAF13EB68F2D46626 /* FSCheckContentTypeRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 769DD709B4E94F46451FDBD4B0E80A6F /* FSCheckContentTypeRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 255F9016C4C76DA28E882E99867629D8 /* DTCSSListStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE84B862425109C7B5469D0770BE688 /* DTCSSListStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25D560E51691BA2EF21D2ECED726D839 /* FLEXFieldEditorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D87D4ED3E4C4A21A83644AAF0B76E6F /* FLEXFieldEditorView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25EF53728634D7D69565183FCB34C233 /* DTActivityTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = D975B9F852E7E80A293632787518BB84 /* DTActivityTitleView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 26113896D21A8A3D878601A3E5911A33 /* NSString+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 05E468F10B92B1B63F52DF06751B98B6 /* NSString+ObjcRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2615DBD9DEB37381EAC3BA5C7D2D6D0B /* NSMutableArray+DTMoving.h in Headers */ = {isa = PBXBuildFile; fileRef = 73520FDC76719B7E997AD1DE09B84EAB /* NSMutableArray+DTMoving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 261CAC7E24852E652D4090555FB22991 /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00253C10B4397FC1265133084A756946 /* AFNetworking-dummy.m */; }; + 2651E020401ED2535F3B26D3C8F4379D /* APContactListBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B9E4072D6F936B2049599EADB78817E /* APContactListBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 268486613D8534C94AFF28C70C08630E /* NSURLRequest+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = F29BF246846901AD3E77532463BCE8B5 /* NSURLRequest+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26CFA5579BF4762E346667D797D2F63C /* IQPlaybackDurationView.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6D87C80ED3FFB25169A25DDA07C9D3 /* IQPlaybackDurationView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2703554C5805B818419BFBF42A9957B1 /* REMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDA2D026233177144F2A60861DDAC57 /* REMenu.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 271A981A272B88A242204504A9231B8A /* UIPasteboard+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 569C4CCB9097492210FE9199C7EF6C93 /* UIPasteboard+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 273E9B53026C539C49EEFACE11347CC1 /* INTURequestIDGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EB546B81FBC4E0AD9FA5902ED682A8A /* INTURequestIDGenerator.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2773EFF94A470875790130A091F13524 /* FLEXManager+Extensibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 0240995CE469F1D2AAEBB3344CD1A50F /* FLEXManager+Extensibility.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 27B4174F54DA10B4B81181E2B75184D2 /* FLEXArgumentInputStructView.h in Headers */ = {isa = PBXBuildFile; fileRef = 36655ADCE875159F7223C994C1DCB650 /* FLEXArgumentInputStructView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27CF5BFB4C02B662EDB5739EFA47CCE3 /* DAKeyboardControl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D6C475117C400880DD881902A8523D /* DAKeyboardControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27EEE415AE18DF093E30C119AA9EBFD9 /* FLEXArgumentInputFontsPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 10D0B32C2D423CFF0E15B149A4BBF70C /* FLEXArgumentInputFontsPickerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27FD92EB15D10FA502E198C7EC5252E9 /* ModuleXMLHttpRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F7E31479D510B2F062D4F1539337F9 /* ModuleXMLHttpRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 280228F3120A597523FFE9EFAAB6DE6F /* FLEXManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AE84BC9ECA8D2E112875A0111F42A574 /* FLEXManager+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28238FFEB523B6BA649825ADE042B9FA /* FLEXKeyboardShortcutManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EF174797873BD09C911A8433D64D447E /* FLEXKeyboardShortcutManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2856126EF666A37B537C85CCEBA00C20 /* FLEXExplorerToolbarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = FF5B2138EB628DC147983C0A12D19C13 /* FLEXExplorerToolbarItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 285EEF47FE261554A5EC046C82E19FA6 /* NSURL+DTAppLinks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8092F8DEDE8D7259F3E227EFF1AF1D52 /* NSURL+DTAppLinks.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2867E9916D78302F3631EF788A02A30E /* FLEXDBQueryRowCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FCBF86BD9EC3384724FA848536B06788 /* FLEXDBQueryRowCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 28782A4DC7B575BDB816D926C430DA19 /* DTLazyImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 22EB57184BC8FFFAF46FACA5444B3C03 /* DTLazyImageView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 28E12120F746D66A159C890632CA6728 /* PHFComposeBarView_TextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A958617A8CD3606C2FF74CF5E029950 /* PHFComposeBarView_TextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 28FC7A4A4AFA341C710EB2077A870481 /* DTBreakHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 45F348595522719BD1E383E47A0C5604 /* DTBreakHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2956390FAAE7967B68E3A08718FAA9C2 /* UIMenu+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 4276CC02142BF4887AB3E21B19A90FD3 /* UIMenu+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2977BC7AD6187C9D3B59389285D76E1C /* APAddressBookBaseRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 334D0989C3924B7E62ECB88C053A3EC2 /* APAddressBookBaseRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29A21C6EBE917425C227AEF57ED528C9 /* DTBase64Coding.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CDF0D8C84ED40198A9CE92C15C07543 /* DTBase64Coding.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 29A8167DE1AA6DC694504E008F87C6D0 /* APSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 256FCAB914929D9C917ECBFDEB9103A5 /* APSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2A155AE8D2AB85AE5BFBD93D621CDA62 /* NSURL+DTAppLinks.h in Headers */ = {isa = PBXBuildFile; fileRef = E652554A1BCD3A171C6F83E4377351D5 /* NSURL+DTAppLinks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A2458B24156FC03ED47BB42309B7105 /* UIGestureRecognizer+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = CD92D7BCB8CB60723E64EF8F4E5B0C3D /* UIGestureRecognizer+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A3CB3FA17179AA5AC2FC01D06BA7F72 /* PHFComposeBarView_Button.m in Sources */ = {isa = PBXBuildFile; fileRef = D65AA14353D4FE1763A91C03AD639988 /* PHFComposeBarView_Button.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2A6E9B437048D05FE0423672EA01D851 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DFD305CB21F713A4250781B772AEF06 /* CFNetwork.framework */; }; + 2AB43A88AC85E7E9230B25E6D4099A17 /* DTTextAttachmentHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4EB0829964D6584B95FAB116C3DEFD /* DTTextAttachmentHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B0A7BAD406CD1CFE67D3F3324669220 /* INTULocationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = D11780699A57C0A4CDBA8AC4E889CACE /* INTULocationManager+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B1882D305F355C882158F91A5978C81 /* TTTAttributedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EC48DB885F5F05F87CD900A5CCDF2BBD /* TTTAttributedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B513AD57D7355C38ECFBB63A59A4074 /* DTCoreTextLayouter.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A2D17796D4B51F4288C78E33B8A279 /* DTCoreTextLayouter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B55C6CA7E5B1416C72398FDD160024D /* APContact.m in Sources */ = {isa = PBXBuildFile; fileRef = 3291B1CAA3402E950716B88AD541AB45 /* APContact.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B84F0340B6EA49505DE62033ED980D1 /* FLEXViewControllersViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E288E222276F39A24902C7C59C07F60 /* FLEXViewControllersViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B87F47F1F02AABF9890C42D673085FF /* FSAudioStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F210A9426AAFB0F6227FC96D2FCDD12 /* FSAudioStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C37B355C8BC8C2D451C5F93FB35F2E7 /* NSAttributedStringRunDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = F62AB3FAD072A698373BB287FD2A7CAC /* NSAttributedStringRunDelegates.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2C8618F3D4CB8F2D6A73AF80C96C9817 /* FLEXNetworkTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A3191B8E24F37985E0D123CD1692ACF /* FLEXNetworkTransaction.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D263F15C0192DCD547EC6D506C7F22A /* FLEXArgumentInputDateView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DDC476C5D417A6722752F490742558B /* FLEXArgumentInputDateView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D3DA048DA40C51027ACA79E1021797D /* FSParsePlaylistRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC5CA141313C8513E97A4AB5FA0B7E8 /* FSParsePlaylistRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D842E281197E01D6601F732662073D2 /* FLEXHierarchyTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1DB158FEC739E7BB402075C2840620 /* FLEXHierarchyTableViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2DB3B4948FC22E6B32A3A84F743D07DC /* FLEXRuntimeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 516758C8621AFBD1F9B4B6C878880C4B /* FLEXRuntimeController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E0CCC62A6BF6E9A6D58E09C124307BE /* DTCoreTextConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 575B4523E5FB00B499335E8A25BC72FC /* DTCoreTextConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E2F203613EBF7A494EAED7B4828A4AB /* JDStatusBarNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 479EC7C429B6206E6A162652BEFAC404 /* JDStatusBarNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E56BDD2B5C3C1E52C84A1ED84AB512E /* NSURL+DTComparing.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B96E27F320C9D7DA84AFCF14D802AF /* NSURL+DTComparing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2E71D658DC69C054A1F9DB242CCA63C4 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + 2E9479ACFAA65EDBA31E9D4465BF3931 /* TDOAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A246CDA888B712D9A6298A0BA3B3ED0 /* TDOAuth-dummy.m */; }; + 2EA9E8C111FDA0F7051746C133E189B9 /* DTListItemHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC3E2FE64EB5E2A99B3E34B49AF8854 /* DTListItemHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F02B8CAB6ECBF3BC2CE223BF16640BD /* ActivityStreamAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 73387FD2691E0D818E25DA021EE7C316 /* ActivityStreamAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F79323455362B9C86F4059E36535F77 /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0635F3CD4A800D9D2A528F54F29B24 /* UIProgressView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FB9475A9EB11A8511A89F87697F5E7B /* UIColor+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC83ED826113467293C5BD5A18645E5 /* UIColor+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FC538A749C957F9AC58B8F618FAB406 /* DTListItemHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD4AB1F7F8E6E7262462223A5F74FE4 /* DTListItemHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FCE96ED6A51C6B2FF29E76B77F91D01 /* AHKActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = C9FE2109ADEEC05B64D5153967C7C234 /* AHKActionSheet.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 303990F1DF20F36519E14A1E269028D0 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F64DD1EB9821F0A966C498485F3B52D /* SDWebImage-dummy.m */; }; + 309ED4F59EBEE68A3EA745E2F71A0940 /* DTAnchorHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = A200393A74D460711A5D1F8FB5AF3F46 /* DTAnchorHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 30EE89E3FD8F62A95E9860FD1ECD9782 /* FLEXRuntimeBrowserToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 475824F43B073C628A95E8A5BB6233A3 /* FLEXRuntimeBrowserToolbar.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 30F4B8F4316C651DA6363226A89A3F4F /* FLEXKeyPathSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = A126CC73EE40996C66668D1B5E62E4AC /* FLEXKeyPathSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30F861B610E7521B1FEBF07BA8D003E7 /* RMActionController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EE01EA5ADFAA689C52870D92389CEC7 /* RMActionController.framework */; }; + 312F91C65E30A17DBE1EFDD0AEEF6261 /* FLEXViewControllerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0E1DA564C507FACCBB24AA3A5FC48D /* FLEXViewControllerShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31B7CFBD5F1A3331897907EFED935977 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + 31FC9FA09A95A047B7704DE064A6EB4A /* FLEXLayerShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 03CEFEB1F2BC649BE5ECCDAE08DB998C /* FLEXLayerShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 321709A008E18BBD1C3E9F0DEC968C63 /* DTAccessibilityViewProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E7A902F020DC6E3EAADBB19511D5D4A /* DTAccessibilityViewProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3248EE0A2E66E7EBD3C3561352A7128E /* DTVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 54EFA6D02D1F6F603EFD9F528375BB8B /* DTVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 328532FE3B5B2B907F47E72DD6DA12D4 /* NBNumberFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 53750375135C9570C37D33F517B55AB1 /* NBNumberFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32970820170663C51170282F06510936 /* FLEXMethodBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 184582CBB8B7034924660C449B7245CE /* FLEXMethodBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 329D8AB0B9067AA6EB88332B8986B6B2 /* SBJson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 719FEBB159E9B60C99911EE3534C10E2 /* SBJson-dummy.m */; }; + 32AE87726C48FEFF82B81536189E5EB6 /* APSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5EBA8130FE36306BFB3D4DE72A8907 /* APSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32BE482A17197154839F56BA4FF78C97 /* DTAnimatedGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD0141340CB0EE5F568066AF4711E95 /* DTAnimatedGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 338C94714913D825FE0CC27FC666B5DB /* NSMutableString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AF0DBFDACA70BA9F4DCC08E290A5970 /* NSMutableString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 33E66F00FB3E377C20DC002CAEE1A7FF /* JDStatusBarView.h in Headers */ = {isa = PBXBuildFile; fileRef = B6F16B82469320F5EBBCE7628D936C72 /* JDStatusBarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34597DC4FD6102F17A69571F063D8BDF /* FLEXImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C773D766BFE42C2165618EA8CFC3321 /* FLEXImagePreviewViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 345CD3010E76159FFCDBB6FE244F4AD1 /* FLEXKBToolbarButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 922610CF77AAAECB147BBBAF4BE7F291 /* FLEXKBToolbarButton.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 349698F09B4CADC161E0383613CE5A68 /* FLEXWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = B78ACB34B187632A9B327A7B5E3E8684 /* FLEXWindow.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 34F10608437401B7F270BFFBF129DE29 /* NSGIF.h in Headers */ = {isa = PBXBuildFile; fileRef = BA2DBF0D876E9A031845C2D180EEF762 /* NSGIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3503B3FBA341E54B5C076F7B2FF27922 /* SCSiriWaveformView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115385682966AD7F6D538B473C910B42 /* SCSiriWaveformView.framework */; }; + 350B3A1B339CC203465190FD3CA2C89F /* FLEXViewShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 54041772509480637AF21C271544F66F /* FLEXViewShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35461402E93462A0DC305C77FCC5698B /* icon-error.png in Resources */ = {isa = PBXBuildFile; fileRef = 63884B03AFE122D8018DA0B316DDCB31 /* icon-error.png */; }; + 3585A64BA6FA4A4E1F4E4AC95E37F7A7 /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 52559B6C4B3032756996053F0E26238B /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 358E62FA1F55DDA42E42517DCD9CEF8A /* APAddressBookAccessRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EC052ACACA9630000CEAEC1796E2D1C /* APAddressBookAccessRoutine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35AA81EF9121F04EDB63D1687A73A278 /* SZTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = A4DDBFBD5F4A8E6CAF9C584A49F90C99 /* SZTextView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 36086C7EAD2D8ABE0DD7252F99067FAA /* DTObjectTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = B8CED6E31EC14BA48D8AF4C7BB45C765 /* DTObjectTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36EEE8A65AC14D0B369AF7D1B19CBB78 /* NSArray+NBAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CB816B2445DA8C1A10BDC50D57908CA /* NSArray+NBAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36FD5DFA9146AFEB2587AD414BA71B21 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 37025BEABF9F89195CB8775E7DC74054 /* FLEXFieldEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 08F3110F185D731EDD06853426F50C8F /* FLEXFieldEditorViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 373F2C279A71638F080B04A892C3BA02 /* DTSidePanelControllerSegue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDA725011F6F3BDC2916D99A2CB4887 /* DTSidePanelControllerSegue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 379A5B86EE2EA93646B3493BEF8B85C1 /* SCSiriWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = 60777474E2B24B5C45701AA544A3BCE2 /* SCSiriWaveformView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 37D3936C61AE79B5EB74BE55EBDC51B3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 37F5C8B96A6CCEBA4BAB9F897B582225 /* UIWindow+AHKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6582C61795E7288CDEB7AB1A58B99B00 /* UIWindow+AHKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 381EC180148D6E36CC440524A103A776 /* NSAttributedStringRunDelegates.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B7EEFA24AB3BD964AE31750FA202895 /* NSAttributedStringRunDelegates.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3840E4F32A0E6A881E7BB698D5A15EED /* FLEXKeyValueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8963C03F781CD740226B4C0D62CE9EC9 /* FLEXKeyValueTableViewCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 386EB94B7251F047B054537A6664FB92 /* NSString+DTFormatNumbers.m in Sources */ = {isa = PBXBuildFile; fileRef = 3703A27A6B61DB855E8911B1FD67C36E /* NSString+DTFormatNumbers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 389CDFD752E2017C6FD7312FE66DFB6F /* NSAttributedString+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E702550999A13D60DFF27AA2FE09791 /* NSAttributedString+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38B71D764F89199136B1C805B2C6C330 /* FLEXObjcRuntimeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 98F8D926C64EEF2675AEDE78D60284D4 /* FLEXObjcRuntimeViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38C1D9CC90E28B616BC98DBDFE819835 /* SWUtilityButtonTapGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = EC2CCFE865B27C4091BF1BB63F9413CB /* SWUtilityButtonTapGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38E8417B90294FAC4C08DEA6048AD115 /* FLEXOSLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = B0082E4A62AAB78F53B1F3B080BFA1A5 /* FLEXOSLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 392FF979484B7F1BEA80D3215340E7A1 /* SRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DCFBEC541EF30BD69D340D771FB8A4 /* SRConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 393258AC59DEB4DDA024B84DDF84584F /* UIView+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 8439AA86A9A9FFD86A905F99CBECA74E /* UIView+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 39A239D72435E25B0C35C7C80297604C /* FLEXOSLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DBF40FD1EB3A6CBBE68E2211FD2F2C9 /* FLEXOSLogController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 39C1F9C3F9BC37FBDAB87F03F8CD072B /* FLEXKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = AB7ACC9C3E0F08D8AEDEBF846C9CF648 /* FLEXKeyboardToolbar.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3A693B34F1E1EC031941CE111AE06DA0 /* FLEXArgumentInputTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D8BD246223C519F3CE5CDF34D560543 /* FLEXArgumentInputTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A69549F45F19AD86AF8DB89FC063AA0 /* SBJson5Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8457027CAC5116155A2A074C731F1BF7 /* SBJson5Parser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B5365B2B236413ED488D5F8C82C9F0E /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 2E099C7C317100D0B86114045D88A208 /* ioapi.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B5AC2C0D1A5B365E0183D4973E9A1A0 /* DTImage+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 2100BF68E14CAFACD1792382D2522818 /* DTImage+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B9DCC7B7CFAA4B16BBB13500E6272B2 /* FLEXSearchToken.h in Headers */ = {isa = PBXBuildFile; fileRef = F1D01516661723A1D365FDB4BA6E97B8 /* FLEXSearchToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3BD623BBD0FA46015EAE6D28FB6B7A13 /* FLEXLayerShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CC367002CB509DF436D2DE42E47C41F /* FLEXLayerShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BDCA99BC8AE516C36D7C9ED11F8A074 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 785402C0F2D579F83ABD828E3E6BB4A8 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BDDBF7B4DAE13621479E9CFE2AE3F98 /* RECommonFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = D4FD35F4EB0C679F851EFA1D6DE349D6 /* RECommonFunctions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C0110956E834DEE271935D2A1AAAC01 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F847149D560A471FA9F83D3FA633A1D9 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C09618AC85C8A24A6F54C18219BB21F /* FLEXDefaultEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDE185B81D85D1B845C5E17995A2816 /* FLEXDefaultEditorViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C24517B42E32F313BAB2A05E6A570DD /* NBAsYouTypeFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0DCDDA8AA6EFC94A6C2D48CA0108F1 /* NBAsYouTypeFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C6986E982E7F914B1EF2D78E066E873 /* SRIOConsumerPool.m in Sources */ = {isa = PBXBuildFile; fileRef = 95DFFBEAB03A034C2D588E072509BD73 /* SRIOConsumerPool.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C7F3BBA13F2EF5EE9DA553BD3E938FB /* DTImage+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 75768D4780F31C45D87F16EDF232F529 /* DTImage+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3CBA888714E04635A8ED58ED9AE96920 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 3CFC43AADF6691942A22122D13DCD4E1 /* RMActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = DE56F746CA8ED814C10CE427E96AFC73 /* RMActionController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3DD59DEB5897FC3BC18CB8F77B090DAB /* DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 9882C5446AB74F168A6D5C511D0A879D /* DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E2A1AAAC47031FCE372A724936166DC /* UIFont+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = AAD4BAC7D10DD584A62D1D9AAB216927 /* UIFont+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E4D4B457DC1E90EED0E271833C1EA90 /* DTTextHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C6D26021850C7AD8E85D4AD873AC93D /* DTTextHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E580858D3A6699F68018E1AB3173D5B /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D9B0171EB9CBBE2B4E4D74555D457A2 /* SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3EA9918BBB9541E08A6AD242B97B6A71 /* FLEXAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CC661EC3AF8AF59D60A6EBDEE8BE0F0 /* FLEXAlert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F138B106DA21CCC6945A8D2870A5F0E /* DAKeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 06E6C89D9847E242CF8F81378A0302AC /* DAKeyboardControl.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F407D7E5B43A57B04244F198F3CD546 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D5BA284A05EAAD16F15F4353EBEDDA /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F4F63B3C63F06C6F3E22C30AA01E266 /* FLEXShortcut.m in Sources */ = {isa = PBXBuildFile; fileRef = 72D1E5DCAFC03F0117516EBEE7B70026 /* FLEXShortcut.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F5144C410F91AC75C35997996688F25 /* DTCoreGraphicsUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18450FBA6C9B83829987B5A47BF7F95E /* DTCoreGraphicsUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F56A77F4F70D09C62242508FC38B43D /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = FF39772C4AA081514723EF659C24573B /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F700D66E723459F1D3502BCC9F4F857 /* IQCropSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 308F5682DAB39122E39079481A677424 /* IQCropSelectionView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F7607F35279641D15334131D0AB4E16 /* FLEXKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 825D49BC6B240F50F43E67FF152B389B /* FLEXKeychain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F8566379714D5702C1491AF9A14634E /* NBNumberFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE3D76A659940DE1CB391258989C5F1 /* NBNumberFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F86CF5DE3BFE69A5C2C61FCE66A23CF /* JDStatusBarStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = CFBC9747BE835EBC03AC0A2CE5C8B54D /* JDStatusBarStyle.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FBDFBD157D8615F8D9A47ECA32B2212 /* IQAudioRecorderConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B0972BB3F03F7C0DE47D23CE8CCAEA9F /* IQAudioRecorderConstants.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 40551F0911AF35B9B66C05B0B61F8A32 /* APEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = 59D5BD0A7C41D6AA5513B7F5BBC80DC9 /* APEmail.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 405FDAA110BBAF59F69E472CF949D5DC /* TDOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = B66AD122EF9D9E2682C8A06E891C4435 /* TDOAuth.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 407EC75E402863D1153091E8DA164399 /* NSAttributedString+SmallCaps.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B4BEEE207D8BB614B0745D2817986C /* NSAttributedString+SmallCaps.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 409F4B1779C12A65A916105CCD6FEFA6 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5D6ED58D7D88F738C03D8F4E364D46 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 413D120C0F2A3B23E47753A04FC09068 /* FLEXRuntimeConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B3469A888470DECA1230A2D8BF8D8F /* FLEXRuntimeConstants.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 416067B3796E5C09CC41AA7DC236A0D0 /* NSString+ObjcRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 36F031EE19B50E0421C93518C038AD0E /* NSString+ObjcRuntime.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41643AF6DD24C149CE100EA630699396 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = A5FCB3C8DDD57B43867FF3DF2FBE2EAE /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 41AE22D804A97190C48550FB683C575F /* DTBlockFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFE68EDD4C560B9F975D526785A13B5 /* DTBlockFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41F82C0999EFCE07EFE6E508471F1F4A /* SBJson5StreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BD7CB7A6540150E722BC2B318E0DE6B1 /* SBJson5StreamParserState.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 421718BB62B9EFAAA6859CF6E507FC37 /* FLEXMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E78CC223EA0DFDAEB2DD2C53EB574EFC /* FLEXMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4290F85C697AB05BE401546F6F85175C /* OMGHTTPURLRQ.m in Sources */ = {isa = PBXBuildFile; fileRef = 0383919C55FC68160DA3769922869ED2 /* OMGHTTPURLRQ.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 42958C16D9C1D35746A2F86F5BDC4D1B /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 843ACAC657A1FB2457DE27692F7CA24E /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43890C788D95FFEE176D85CCEF46173D /* FLEXIvar.h in Headers */ = {isa = PBXBuildFile; fileRef = 90A961FFAB3DFCD4B09D4D9EFBD6B133 /* FLEXIvar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43ADD0BC2D8876271A9DAF74BC81D6DA /* SRSIMDHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 7249D22A4A0C2FDE2A710CC73D771627 /* SRSIMDHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43BAF4E17937E4FF73BE6F4F0843C960 /* FSParsePlaylistRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 52674D49D87A4A486099B8778969C693 /* FSParsePlaylistRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 443837F4C9D03F92786D655865B7CFB3 /* FLEXClassBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = CC357CD91F53DD2907DA100FDDE5732F /* FLEXClassBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 446DD6C37D53EA4AE3830CB41A2779A4 /* SBJson5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A03EFFA2289B965ECFB5C028A90427 /* SBJson5Parser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44BE7A0D0798F1D9C4C40F28963D0E6F /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 61E28EC6990C67076138744F68D21C38 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 454EFC10A7ADA09798F30FDD2242BE0D /* input_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D91614841CFE21B4EF2E073644E5D5E /* input_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 455F88C3EC1A4A4AF0F9644D0500309E /* FLEXGlobalsSection.m in Sources */ = {isa = PBXBuildFile; fileRef = B19630EE02699F33A1C33F4DAABD93AC /* FLEXGlobalsSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 457BE15B44E0D10A99818D648F2F5E66 /* DTExtendedFileAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = B93418D2EB8FBC25843178CDD2EA4071 /* DTExtendedFileAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45B36F5831F54867E453E29D3126C71A /* DTSmartPagingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 267AEE253C482CAFCDF60DD2C6CD1D17 /* DTSmartPagingScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45B747F87BE4E1DE1A70BFA2B4305DF8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 45F6A5CD594A2D1E4308C93975F3C2D8 /* FLEXNetworkSettingsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 510E4796E68862D66F160B52C29B91FB /* FLEXNetworkSettingsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45F6B47601C920D59FB030305297F245 /* NSObject+DTRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = B01A39D50F8495D24464543E9D8DA8DA /* NSObject+DTRuntime.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 461E1D56EBA79DE8E65AA1A512A33DDD /* FLEXDBQueryRowCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 94987AE4422A8989D9A9AFAC87347879 /* FLEXDBQueryRowCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 469F9C9E66C59CFC896080E9AD0A78C3 /* FSAudioController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D16AC0C01090118BCC6FE5ECE4374E2 /* FSAudioController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 46A14C0AA1DBD912F3546C9CECC520E3 /* DTDictationPlaceholderTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C1D4A06CA9AF8A4AEB61BC99745AF5 /* DTDictationPlaceholderTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 46D8A745CAEBDAC0238FCB5033C63015 /* FLEXShortcutsFactory+Defaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D0759318A70841227FF8E517A7B7E6A4 /* FLEXShortcutsFactory+Defaults.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4747D7DECF54FEB25966636524C955C1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EABC993900DCD6B869B47E27BB6B1FC /* CoreText.framework */; }; + 47CA52C97BF7A3CBA669E908CF1D0A09 /* IQPlaybackDurationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4910C94819CB7633B726E63EEEDB6BE6 /* IQPlaybackDurationView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47E9F6C4991CCAC64AC1FAEE61E5BF9C /* PHFComposeBarView_Button.h in Headers */ = {isa = PBXBuildFile; fileRef = D705B22257B9E05D00A4C9D1490E2C10 /* PHFComposeBarView_Button.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 480A335DB30C28222150A8390D759A15 /* FLEXProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = F70B26AA7F96647287E91A1843F45ED6 /* FLEXProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 480D096B0E6BE803B5C36646BB027AB5 /* NSAttributedString+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD14B2748FE1EB3579FC5C8E93651C1 /* NSAttributedString+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 486BB429C102B4E0EA7655D2A416283B /* UIView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D5FD622370665EB88A5F9CBCB671799 /* UIView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48BC99499160D48686DC9A075C96B4F0 /* NSURL+DTComparing.m in Sources */ = {isa = PBXBuildFile; fileRef = F34A18BE39E3FEC8BCB4F50D80FFC20D /* NSURL+DTComparing.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 492CB91D75C4F86887C2D888761C55AD /* NBRegExMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 69E9B6A6D26B0C6C9C0361B41571832A /* NBRegExMatcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49AEB12845843CCC4A3D45940D3BCF6E /* FSPlaylistItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0224A571EA0096DD07F25ECA9B561560 /* FSPlaylistItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49B9F93FB25D167DD5791E78E230A6CC /* FLEXSingleRowSection.h in Headers */ = {isa = PBXBuildFile; fileRef = BE460AC55A863064991F4E3D27F57847 /* FLEXSingleRowSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A18FBB5B44EB3C50E6811C1F9D48E17 /* DTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA79E6BA489D7D612D652B7F30441D3 /* DTAttributedLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4A31D32B34A7E18C0D63831C6C016D44 /* NSMapTable+FLEX_Subscripting.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9B700570B77718178E6266E1334F5A /* NSMapTable+FLEX_Subscripting.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4A661D583D9950A3C33D38FD600CDB6A /* FLEXHierarchyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E094966B96D7682983E52FF1D9FC12 /* FLEXHierarchyViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4AAC5445D1FC8FC02DEDE17BDB7DF4B7 /* FLEXASLLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = 92ADE9BFB002C499E180ED865BCAE216 /* FLEXASLLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4AAC806DED611214571D777F0777A93D /* FLEXViewControllerShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FF193138C49D5DB0E076CE1505F804 /* FLEXViewControllerShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4AAE5E337CA4FECD84E6BD26A81EC555 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 4B001EA7AAC78CB6E68506F72FD73A7E /* FLEXProtocolBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F70B96C094EAE303D959102B9ED795B5 /* FLEXProtocolBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B1CBDD4DB5849E10C1FFC82669CB86F /* file_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53E2D986BF8E441ABB1BAF261526B321 /* file_stream.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B29D38EDDB75BCB365332D8A29BA70E /* FLEXNetworkObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 87BB95649FFB1ED39E250EE83E6B906B /* FLEXNetworkObserver.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B48FEC0E7F0B0DACCDD9AE9977E5309 /* DTColor+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DD65F487E4BA0E9643D8AA4814D8B07 /* DTColor+Compatibility.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B754CC2A4DF6E7D058E05B257094EF9 /* FLEXObjectExplorerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AABD45CF4696DEB15D7F64EE7E45CB4 /* FLEXObjectExplorerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B776F35E19AD54620AAD46A164F3D8B /* FLEXMultiColumnTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DF686C359BA3C6503ECFAC6FC14E915 /* FLEXMultiColumnTableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C39F8E7E4260023E123BDEFADBC5AF2 /* INTULocationManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FA1D2103BEEEB431E0BDE8047D765B9D /* INTULocationManager-dummy.m */; }; + 4C5871062C8966510F3F7D6402357740 /* NSGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C43819912DC4120FC64EA4C0395A444 /* NSGIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C95C435C30C6F7BFEA777721A843C1A /* DTSidePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = D6ADD5E8CD8512DE3C13DD2C20BAB8F1 /* DTSidePanelController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4CB659152FA00EA03711D7CDCB89118E /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 53390D2EF21DC5D86510CED1CDC93011 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CD9E2D661CB0761EA54FD481BBE4E8B /* FLEXObjectRef.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E255A29709D4721FA0C72B33227F00 /* FLEXObjectRef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CE2C6A4E9442451EF00F1C9588FB836 /* FLEXMultiColumnTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5299FDB840E147597FD36F5BB23A0189 /* FLEXMultiColumnTableView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4D4D11A0262744543FEC6FA2D2322E8A /* TDOAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 674F6F2FB688D5001F638DCF45A3CEAE /* TDOAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D7681F290E06F6A3AEBA671E84A1716 /* APContactDate.m in Sources */ = {isa = PBXBuildFile; fileRef = CABBD5035ACE5C4F86E9656A8E6491AA /* APContactDate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4D93896078D3A524508828A6BCCF21C5 /* FLEXPropertyAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C9C7DC2EDB1C67ED772453F41DE4430 /* FLEXPropertyAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DD306D89A167B3D13034847553446C2 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A3789D8821F34BD0F90A144EACBE80AD /* AFURLSessionManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4DF74B6FF430EAFF80D0640023E43FF2 /* RECommonFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2685E2593B2C0C31B26BBEB11BFFA80E /* RECommonFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E00C88EB14A595592D0CE1357679172 /* REMenu-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 92E2C996320335786A3C04277835EDF6 /* REMenu-dummy.m */; }; + 4E4B376D1A52FA8A4EB8636C4BC8BF4D /* FLEXRealmDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 532A2AAA75A75AC841BD24A90086CF0F /* FLEXRealmDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E7FA447279DD45B1C226211095B1B4D /* audio_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3555CCD7C6588FFFBE590CBBF3D45E82 /* audio_stream.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4E91C46F41B383B04C6C4109B85AACE5 /* FLEXCollectionContentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 8705F4256376C637C0F1C08CD4FE8543 /* FLEXCollectionContentSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4EEA9D2BC65C1C48B2A659ED2E1CFF84 /* DTSidePanelControllerSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF61FCB772D8FB2BA89FE53677C1B60 /* DTSidePanelControllerSegue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F46961954098FFCE0439BD15F875CE6 /* FLEXProtocolBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = E0EE46CEF6B2E44223490B468B714896 /* FLEXProtocolBuilder.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F5F9685C7802749A676CDECB561D343 /* NSMapTable+FLEX_Subscripting.h in Headers */ = {isa = PBXBuildFile; fileRef = 961252D99237F9F7FC4BA72D1D71298D /* NSMapTable+FLEX_Subscripting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FA5BE578368763496BF8BDBF19E8BAC /* UITableView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B607EE07CBDF8190A16B4C08FD6507 /* UITableView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4FE92369BC89072B862D5940CEF25106 /* DTZipArchive.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CE82FB8CA7EFB6D80FCE59220FC483E /* DTZipArchive.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5090F5C569CAC44656DFF7159C7C53E7 /* DTActivityTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = F9D975452C65D8C039F3926AB288F9AC /* DTActivityTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50F301D4DD0754D972432FA968A8F8E5 /* FLEXSQLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = E52898B7F103F91D92D703DD03DA6805 /* FLEXSQLResult.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5113345C153493F6620B99945A01324D /* FLEXTableColumnHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C548294066CD56BCB0F6310BF70B2C /* FLEXTableColumnHeader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 512738E798D864E94E1046F6BE9E7670 /* Pods-Jasonette-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5808BBE73D0D5D40AC148ED20055F6AB /* Pods-Jasonette-dummy.m */; }; + 5132C39726DC10975050FD807A6CD64F /* FLEXArgumentInputFontsPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = EEF12618689A9210DB2A06CB3AC3595B /* FLEXArgumentInputFontsPickerView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51B7886AA817D8CB8E290964D37C49FD /* SWCellScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 43236CA31C87082971B11360C8BEB1A0 /* SWCellScrollView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51FA5552F63C50F4B43F729941E76B79 /* FreeStreamer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FAFD4B0E30270AD8F5EE83A90542651 /* FreeStreamer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 524A63E216C35B039D986F261F31ADED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 52CF628D32C1CE6931F2BD4D660A6075 /* SZTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B63B33A36D085205B2D8FC2C9A2361F5 /* SZTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52D8C9BCD6D54A78E0A848600DD0AFEB /* NSArray+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 425926A47F77FC987863810EB86C7A80 /* NSArray+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 535FF372D53FA23B676E27F09D016334 /* FLEXBookmarkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 595F9CF1F98BF8B4838887E2188C5FCA /* FLEXBookmarkManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 537E018815EB5B672D17037975AC1853 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B5E4C91D6A289128C5FB4385DEC3E17 /* UIRefreshControl+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 53B53C67CB9CC5962ADD81BFBFDC7E87 /* UIImage+AHKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FAF448666E518954719067B4B598A6A /* UIImage+AHKAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53E402CD331B33A1AD993AD6CFD5501F /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FAA8A225379CF79D994C4C188493C25 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 540A8E35B005F68AD8385F6031F77133 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 543F7021538C273C0AEBCFCC2103D55C /* FHSViewSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = AE2B9BD95C6C32DC4037CFE587889BCE /* FHSViewSnapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 545BA30CC22F705F74417706E67C0F38 /* IQMessageDisplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DE5E176A639CC2AF48F24483A63970C /* IQMessageDisplayView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54B9BB7ADB57619F1A53C348233EA23F /* UICKeyChainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = BE6892859C1B618A038EAB1DCA6A9A05 /* UICKeyChainStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54C7D158210F01F8A6B5E670657B3B50 /* DTLinkButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D70C6653EF654D0152245BA342543B14 /* DTLinkButton.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54CFC998F03C5D57D822C4BBDD28124A /* DTCoreTextLayoutFrame+Cursor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E004463D2348E81CA8412ED155CD1C0 /* DTCoreTextLayoutFrame+Cursor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54E9931CF201DD8A5D6408E6C7D71851 /* DTScriptExpression.m in Sources */ = {isa = PBXBuildFile; fileRef = A55C3E4AC2C9B1B22E44DCBBA3057D94 /* DTScriptExpression.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 551023644BFF66A5EB1298E390944A76 /* FLEXColorPreviewSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D651008D3EBD141D430610EFD5F3D93 /* FLEXColorPreviewSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5571A4204B0496B43B0E07ED9B57865E /* FLEXTableColumnHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B63BB6CF7E8F7A2D8AEB933715E23007 /* FLEXTableColumnHeader.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55A5454DAD9F9BA364D8250099B70EA0 /* FLEXScopeCarousel.h in Headers */ = {isa = PBXBuildFile; fileRef = A4932A83E75DC9B20FAC866F2F54CF75 /* FLEXScopeCarousel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5619A62349BB722895F6721126E85151 /* INTUHeadingRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E8ED0434B3B4BB6A5173C0C0DFB7BC6 /* INTUHeadingRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56372868284C8E34B7E01A31E061652B /* FLEXObjcInternal.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4AC71F5D986E829C21477710E0D7D5E5 /* FLEXObjcInternal.mm */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56AF85E073455825C99506599442BA4B /* PHFDelegateChain.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE12A42CA42017C26E5D0A1A1712853 /* PHFDelegateChain.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56C5BCA95F8F83D55D15BDDB5BD5E271 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E499BD426DA5BBC8A851F129D0DD335 /* MediaPlayer.framework */; }; + 56E96F6555019EA66D5562CA08EB79D5 /* FSParseRssPodcastFeedRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = DBF67CDFD49039113FDCF9B15032497C /* FSParseRssPodcastFeedRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 572864AD5F5CF03A4190ADD9FE9F0AF5 /* DTSmartPagingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AB997E8C7917EB2614452DF78C0CC5 /* DTSmartPagingScrollView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 576600D5F3B7A3F263696EC9FF7179FD /* OMGHTTPURLRQ-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 913877BE66FEDFDFD3D033E497B3D274 /* OMGHTTPURLRQ-dummy.m */; }; + 57B0335F3577FB9AD740546867F33647 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 57B8B8E5822E44BB22D51AE4F4822383 /* NSArray+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = D88295CE802CA9E503C93F8E9B579F47 /* NSArray+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57C7F9DECD62BD1F9D635781A305156D /* FLEXCarouselCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57398F3C8EBC7F798A81FE77DFD79228 /* FLEXCarouselCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 57E39F55F23F1176ED958D87D9E8FECB /* NSScanner+DTScripting.h in Headers */ = {isa = PBXBuildFile; fileRef = 98369B4EBE5A95AC2AC3E08F3422D808 /* NSScanner+DTScripting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5807B665F2519B3E08FD047AA0366F53 /* Reachability.h in Headers */ = {isa = PBXBuildFile; fileRef = ADA430B91ECE5215E7893505F1DF4A27 /* Reachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5836B924915C4F421A9ED28A625409D2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 583ABB804A510125490C604A1D54296C /* FLEXTabList.m in Sources */ = {isa = PBXBuildFile; fileRef = D8C5DE28D2CA96BCB734FEFD89300D55 /* FLEXTabList.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5894675EB1A4C9FAFA46E84FB2CCF4D9 /* APContactBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = FB783D6312A6E5CD1671DB4E492AA275 /* APContactBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58A68C141919F0879CCB0FC52EE12801 /* SBJson5StreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A0FA2AB44CE0E3CD7EF458739BF37F9 /* SBJson5StreamWriterState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58B8AB5D01390D4A1DC1482FCFEA7F91 /* NSRunLoop+SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 745916A36BE5BFCEDB74DF2DCC66A2CF /* NSRunLoop+SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58E326D7581F4A8F75EAB800D6BD9BB8 /* DTAccessibilityViewProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B7546516607DE0B06E079B3952BD544 /* DTAccessibilityViewProxy.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5914D44E66907D33EEF3276FEE29BF43 /* WKWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 642BEB8C9D0C4E49E885E45FA13FEFD9 /* WKWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 591CD4A62927763EE248D63819576AF9 /* icon-success@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 84BF3403C55F449DA06123619999D56F /* icon-success@2x.png */; }; + 5936EE1B16CAA1456C500C3F11C65E25 /* DTHTMLParserTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = BD9F61655FA4F4176034E767F96CADF4 /* DTHTMLParserTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 594EB96E36D91FFCAB2313BF7CF62238 /* FLEXObjectRef.m in Sources */ = {isa = PBXBuildFile; fileRef = E1C3C614C23CB499362D5867A152D600 /* FLEXObjectRef.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 59634F95A06BFE138CCD6976B9F5CCCD /* Pods-Jasonette-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 08799A6F2B9348BA32AD2A6D6B26A349 /* Pods-Jasonette-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 599705652097D30B0BF001A7045A2269 /* FLEXRuntimeKeyPath.h in Headers */ = {isa = PBXBuildFile; fileRef = D2FE70430FEF475FEB2DCA64570429FD /* FLEXRuntimeKeyPath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59AF40E68708A58BC0190BD7550BFAE0 /* JDStatusBarLayoutMarginHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D24FA8ABF2E44647DBD458FA263C1144 /* JDStatusBarLayoutMarginHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 59BC5DC2F6BFB72631D485A4888B6AA0 /* DTCustomColoredAccessory.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC8D5E162C7833216D924C71181AA24 /* DTCustomColoredAccessory.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5A4DBFBB5DFC60C19202F9E6C28D52A5 /* REMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FC960457455EE88A8BC3710E2722930 /* REMenuItemView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5A7FF6CFBEEE1106DA551F65094E57E4 /* id3_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE65349500846C2B404B374C73660CC /* id3_parser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AA4E7017696DECE6EFF00D85C20162A /* NSURL+DTUnshorten.m in Sources */ = {isa = PBXBuildFile; fileRef = 359E2B7FBF0B952B5A60662B019D24AF /* NSURL+DTUnshorten.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5AA5C84B790D617B82762DF146D788C4 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AD830984D53FC4CD38E8B1CA5E68779 /* UICKeyChainStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5AB0D1D8D270313D6858F46022188FF8 /* RMActionController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F8DAF1C61CEEF284CC1AD22391991B50 /* RMActionController-dummy.m */; }; + 5AF99F3812C82FC003E077EE4B9E6AD7 /* FLEXKBToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DB853DAD4E01CA82D250A1D63734E833 /* FLEXKBToolbarButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B2125C8F5D15278C068E57ADD6526D9 /* NSObject+DTRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C28351AA855B90AE231082B3F029C44 /* NSObject+DTRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B2469A667FE6076C9A72128924E2237 /* JSCoreBom-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 85A6DFB00BD20CF301588FB7BB392B00 /* JSCoreBom-dummy.m */; }; + 5B274B5D2F7C62913A0F6523BEFFA6B0 /* FLEXScopeCarousel.m in Sources */ = {isa = PBXBuildFile; fileRef = 55CCB6B07F9F41496526502B02439089 /* FLEXScopeCarousel.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B2F50AE3424EE8C2EBF0435DFC390AB /* FLEXNetworkTransactionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2CB95301FF9C80DCE9CF12348C0370 /* FLEXNetworkTransactionCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B4EB6A3C30401A577C48798646375FA /* SRRandom.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA61E9DB068B8699938637791065836 /* SRRandom.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B84F61DCBFB1567484C7AD4B4B03CCC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0EEFF8DAFB86B146B67FF3352F004F9 /* AVFoundation.framework */; }; + 5B8605824D1FF895B15389A9A5E26629 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 5B96D63453D4CDF5C6E5AEC81ADFC410 /* SRError.m in Sources */ = {isa = PBXBuildFile; fileRef = A1301B2D249315F65E0F4C7E564CA701 /* SRError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BC4E6E9F707D41FEB503D1E8C67AC0F /* file_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FD7C50C5B92A61CF6BD72E899F2C857 /* file_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BDD7552E1D8F44B0AED38F35A5AD1F1 /* DTCoreText-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A6E081BAB5799AC5C3DD61163309408 /* DTCoreText-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BF0316F0599D4732F975D8B55B90CC1 /* DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = CA8DD0CDB832F6F7776379B505DBB905 /* DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BF27B881498FA89F6E9CB9B49D01003 /* FLEXClassShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 2914B996BCD1154FE8177BE348CE4AEE /* FLEXClassShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5CF1B9177A5660758B9CEE62C94CB113 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EEEC5B3FC38BD7675066354CBF01E3D /* Reachability.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CFCF5C66F4FA15767D73FB6C29FA1EF /* SBJson5Writer.h in Headers */ = {isa = PBXBuildFile; fileRef = FEDDD3B4C7C51EAE0748A37FCC89328A /* SBJson5Writer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D15D19E6EB9D060378FFE7122A7D895 /* DTZipArchivePKZip.h in Headers */ = {isa = PBXBuildFile; fileRef = C99F47677CB345749D8DCB7348783A28 /* DTZipArchivePKZip.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D30BF6B6A901A93C02BC6E050B41884 /* DTFoundationConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D0E24401E43F61FDE0CF85BEF23CDE2 /* DTFoundationConstants.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5D686E3B6677D67015CE6B4E4242FB0D /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E499BD426DA5BBC8A851F129D0DD335 /* MediaPlayer.framework */; }; + 5DDDDF6B0BF41DEF1680B024B6973619 /* OMGHTTPURLRQ-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0909843821FF578B1F7CC95931079917 /* OMGHTTPURLRQ-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5DF925793E4C32F9BF13989ADFC766C4 /* SWFrameButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D92A2FA11A35065F67EE518464B2FD7E /* SWFrameButton.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5E917CC1306CDA4B5866ECCF61D9584C /* UIWindow+AHKAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DC82941001664190D534F2647CAA826F /* UIWindow+AHKAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5EEF2154F3355D41C0D40ACE09E884EA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 5EFA8ECB828AB410D970E5EFE0F85384 /* FLEXNetworkRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 69CAD424ABC114922A053950FF25B216 /* FLEXNetworkRecorder.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5F11D70B708015C54EED43C2BD1D6038 /* FLEXRuntime+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 13B87DDA74AB10C9F77FEAF04D84F511 /* FLEXRuntime+Compare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F177D4D65E678E6895551C7E71DD65F /* BBBadgeBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EB1E869E3715F6BD0194CAA68523DDE /* BBBadgeBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F2E459576E80FB415A0653534022608 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 5F7FF3755D5178DD764F77A2121B18CA /* FLEXSQLiteDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C511F737CFD57D70D08A651CA53C6810 /* FLEXSQLiteDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F8D28B98BA067036F92D63146022565 /* FLEXCookiesViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF7C72EA9CB531D5A030BA35C4BD4BE /* FLEXCookiesViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F91495C5A4B80D49CF7EE5130664291 /* DAKeyboardControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 984AABA0F872FE91511EBC38C59858AD /* DAKeyboardControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F9F4E1C69724C832F25EDAC8858D1CF /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C276B87C7A6E53EA55D219B5B00A6CD8 /* JavaScriptCore.framework */; }; + 601BC21DB1C80CB0DFBB5CBA5D0B6E25 /* DTCoreTextParagraphStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 81066231C6C2A0ED96B411AEDED60CE2 /* DTCoreTextParagraphStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 605496B39473C8D95BACD8BAAC8214D9 /* FHSRangeSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = F99308A4488E85C6C14B56184B7A0BBD /* FHSRangeSlider.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 611F568D2E60B3D4BDD168EE0950D219 /* FLEXManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DA281EB991EF37495C077D0E3B005483 /* FLEXManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 618945A36725A41E746E8697944608E7 /* FHSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F076555AA2AAC4B97E9EB08D0BC5A1D /* FHSViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 61901C85DC6B9955D757CCCAAC039570 /* FLEXTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = A275B3FF46072F2429F3833EE622944B /* FLEXTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 619882208725A95064B3CC4F90A2EAE8 /* id3_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0D8BBFEF4650EE41D10DD5621D609E3 /* id3_parser.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 624FBCCCD5BC96D006E873CFC6F316E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 625715E8ABEF8A01992E0BE1CACABD3D /* FLEXTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A88D87E7A9C2F3302A6AD3ECA8208B57 /* FLEXTableViewCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 62996C9CAA8E203DB7F6A9451BF94611 /* DTVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 08D06FA8C50D3BD53AC9438DFC90546E /* DTVersion.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 62F1105D10BD170BD203A54608CEF446 /* OMGFormURLEncode.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E5D6C4ABDD321558A67839B08BC51B8 /* OMGFormURLEncode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 631DB1B4A751FD40D8DA33552E060E09 /* DTFolderMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = E5E981F9CA66315B3EE0B4B5197881AE /* DTFolderMonitor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6404ED5F51B2477962B0991F70A25D4C /* SZTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C2FCBC6964CFE0FF0AFC851FE7D04C9E /* SZTextView-dummy.m */; }; + 647551509AECBA92D91C34585EA308F9 /* DTCoreTextFontCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 83B87A4EBBC71500DE2B17E3D980453D /* DTCoreTextFontCollection.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 648BC9339D2A5E552C7ECC90C88BFB49 /* DTCoreTextLayoutFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD4A3112C3F1CB1EE252D4F46F1144F /* DTCoreTextLayoutFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 64F46B6A8DBA885AF570A54A082D1BAA /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 64F4FC439CFD4D937994BCF7B964AC1D /* PHFComposeBarView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3DE30FB49335567254765F924999CD /* PHFComposeBarView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 650F425DC11BC890AA81C9A431EF8E05 /* DTHorizontalRuleHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CE7F6CF30BC2F07DDDA58AECA7AEDC6 /* DTHorizontalRuleHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 654D5CE67C358D6A1B660A26A9190E23 /* NSProcessInfo+RMActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE250527407DF775C7ACEDE95D27015 /* NSProcessInfo+RMActionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 658243958C57AF24E5267AA05F67EEE2 /* DTAnimatedGIF.m in Sources */ = {isa = PBXBuildFile; fileRef = CFF5F39168B54BE289D5AD6BD4728D7F /* DTAnimatedGIF.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 65BCA9A99F3BAE94A5D760C82EB6AF7D /* APSocialServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F6E55484A1349EFFA5A91491DD5BF15D /* APSocialServiceHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6654A5AE75955EFF839423D73E962402 /* FLEXClassBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ABA3A41260E5D825CA19AE49B4ECD72 /* FLEXClassBuilder.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 669F67786039E292EBEADED66826EA86 /* FLEXArgumentInputSwitchView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B052C0CB2F075654DDAB1A157D07D16 /* FLEXArgumentInputSwitchView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66D71CBBA642AFBC12178D2E40CA6AA6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + 67685713F83D6AF25ACFEDDD81D4BCE9 /* SBJson5StreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D82B3C54D33038DB64437395FA6FBD7 /* SBJson5StreamParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 67688E88E6FED3BD4498AB3E49E5082D /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E80EE06E76744A71EC0142C5791ACFDB /* CoreMotion.framework */; }; + 68049CD4B46DEEE13641F0736AC4E8A7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */; }; + 68135DDF8455BC883D02FA432E833260 /* FLEXFileBrowserSearchOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7A34502C89044200242B46513117F6 /* FLEXFileBrowserSearchOperation.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 683725345A0582312D8B691076CF5070 /* SceneKit+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A653929D34325CB24AE563E03B62EE0 /* SceneKit+Snapshot.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68374AFFBE589A03B53FCFDBF771B6BA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8325B8F92F190DC3D058746E45C00C3 /* SystemConfiguration.framework */; }; + 687377C61E6C5FDA0EC0DE1E80D0928B /* FLEXWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 85CE0124C69F7A107EB352782D960FE3 /* FLEXWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68A06A438826C3743B86A10400FF23A8 /* FSParseRssPodcastFeedRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F99ABE0542ADF79F50D1FBB385A76D /* FSParseRssPodcastFeedRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68A869F33983C25C9452A9843B339151 /* NSCoder+DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 714429E4383D1AC166B7A11A2A9C5D7E /* NSCoder+DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68E411E21692D1A916EC46C7F6A9DCBA /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DF68492FF9B3E597DE270004E41B2F5 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 690C8E336679DF63E6BC7DDF7BE24592 /* RMAction.m in Sources */ = {isa = PBXBuildFile; fileRef = F2418F9D42782196418C0D344ED3DA1D /* RMAction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69B456834488C3D781F7088100BC49B9 /* SWUtilityButtonTapGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0046FAC0553ECDCB0E0EB842ECA2F442 /* SWUtilityButtonTapGestureRecognizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 69CD05E489990F69F74C4C794DBD26E7 /* FLEXSystemLogCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0329C2AA21E13E797AB18273E651C987 /* FLEXSystemLogCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A3BF493EB8E0A62C52763ED5BFE9D97 /* FLEXArgumentInputFontView.h in Headers */ = {isa = PBXBuildFile; fileRef = FF4866D5B426AF08723CDEB44F1B1D80 /* FLEXArgumentInputFontView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A7B28103B14C5E1DB6067E274FAE184 /* APName.m in Sources */ = {isa = PBXBuildFile; fileRef = BAED4BDAC4035A44527D8D78FF1EFC17 /* APName.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A7BAE543EA7BB90BD836A2462E0E614 /* UICKeyChainStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CF7459A23E478724B0574C05CF4C1F8 /* UICKeyChainStore-dummy.m */; }; + 6AC18AB45328FBD2D962015B27D7D62E /* HMSegmentedControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E754605D188120811807F2891CFE1591 /* HMSegmentedControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AF51BB20785DB542B1750879F7D460C /* FLEXArgumentInputTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 06ED8759E8B2DC57E43C77F2D6337A48 /* FLEXArgumentInputTextView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6B1C46E925D7CFE1A43165772B6946CC /* SRSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F18AC4BAFCF8AE523B7E2ED4042529D /* SRSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6B422C9CB24581B0D870DC6F4F07BA41 /* FLEXResources.h in Headers */ = {isa = PBXBuildFile; fileRef = E5E1091ADDF9A15EB7552F7FBE976547 /* FLEXResources.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6BA168140752991D04EB4133E7D24F99 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 97BF1A0A417BDF39D7113368038DAD05 /* AFURLResponseSerialization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BA6FB2CA5A89DCF1B35E9C87182A26C /* FLEXVariableEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3443AB58C66B6E70BB26822FB7CE4FAF /* FLEXVariableEditorViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6BB70FCEF9CEFC6A6D6180F94CED0FE3 /* FLEXMetadataSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 76C6B96BF3DC75254D086D966CB4C22E /* FLEXMetadataSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6C0178FA2A156177E74E9CD081F7BAEB /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = B6AE0FFDA61D56E9E1C086AA3F791020 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6C14BCC2C6F4D58E8010E917B74B6B84 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DC716084BB995B80B607B16BD725DDFA /* AFNetworkReachabilityManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6C159F7964ECE16EBB10FD01A8BD7E80 /* FLEXShortcutsSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AC63EA19E09B66AD0AED0BB1F98A7F /* FLEXShortcutsSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C24F9AC87DD70991BF889D1F727F079 /* DTObjectBlockExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BA0C66247E1E8E9EBC3727199EE7E21 /* DTObjectBlockExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C42C116AC0D957370CAD69E77727B6C /* SCSiriWaveformView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6252CD13C255CF4C03F4C884227EDAB6 /* SCSiriWaveformView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C560EA9B49D2346C52E30214AA2F741 /* NSURLRequest+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 853B03AEC9C0186AB46D5DD7E0B979B5 /* NSURLRequest+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D02BA2C7070DAE97598560E07AD136C /* NSRunLoop+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = E49899625E3D827D6440CBE6CB4377DA /* NSRunLoop+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D0EB87A1A499AD6ABD45D4FCAA1ED10 /* APThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 494B3E923318B12C9D1DA41B8B737864 /* APThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D3EFB81141B39BC8C2C62D8B87C1D70 /* HMSegmentedControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D4E093FB08B0AC7CD5926C8926D1B226 /* HMSegmentedControl-dummy.m */; }; + 6D4C5D94612B20893DB455907539A23E /* FLEXMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 0318179DD31021BCC4BA68397344457A /* FLEXMethod.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D98B82C049D3C156F695D956691BBBB /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4EE79FDCDA47638884504C34FEE96E /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6DF721A470ED67A5EC3294E8F733C510 /* PHFComposeBarView_TextView.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E4481204BF758ABB6E82F31A7D031F /* PHFComposeBarView_TextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EED2E6055C4576C20C9D298F39543D8 /* FLEXColorPreviewSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 664646B5CA3289A278530402814D64E8 /* FLEXColorPreviewSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F3E8A9A598C423E876AD670A314909E /* NSURL+DTAWS.m in Sources */ = {isa = PBXBuildFile; fileRef = 7482601748B68C5E11494A337FFFB339 /* NSURL+DTAWS.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F61E4A779C863F682EBB343E22C9A07 /* APRelatedPerson.h in Headers */ = {isa = PBXBuildFile; fileRef = C16BA25512537A84BDDA5915842FF8B1 /* APRelatedPerson.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F79F27517AA6D2B01D9F15CD10F768C /* FLEXArgumentInputColorView.m in Sources */ = {isa = PBXBuildFile; fileRef = F870F4554813A03F90EE30481E6BFB86 /* FLEXArgumentInputColorView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6FB454FD1EB381E8DF9FE70B42C4F232 /* REMenu-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 795F106D507EB0A74E221D794F58D76A /* REMenu-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FF006E5E2F4D75ADF9A02B58EAF2FC2 /* mztools.c in Sources */ = {isa = PBXBuildFile; fileRef = 83FEC47A8ED2EC9FCD00CA34985DF78E /* mztools.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6FF845B478A05D81FFCB38A7EFA1B0C3 /* FLEXViewControllersViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C00447E9FDF6FF7D506EDB386D38039 /* FLEXViewControllersViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6FF92A45E1EDA501206F196D5BC79011 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 700B3231CD89946E9F6955CA46B8F6BA /* REMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 932AD74859FB72D6891FAD278005A963 /* REMenu.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7012C769DD8819F5A89EB63A36735D2A /* DTCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 2700093A8130D356B9BB2BE7F29AC424 /* DTCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 702663CD731D6C2396B5232A66B57494 /* FLEXBlockShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EA198FBC1F8F6AAD8E45550A0932E51 /* FLEXBlockShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7080AF5B266FD97972A85902F519615D /* Resources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F4E2B1AC73977F10254628C0B7EBE38F /* Resources.bundle */; }; + 709A9920672557AA7FDF2FAEE9F39644 /* IQAudioCropperViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FCC205FD687D9A3245BAE433FCC4EFE /* IQAudioCropperViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 709F3B506B967EBD51DFE88C7FE96013 /* FLEXMultilineTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = A28E3C6B4333168A89C996E19EDD66E9 /* FLEXMultilineTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70C22AA1CB9521BEEEF637AEFCF4A25E /* NSString+Paragraphs.m in Sources */ = {isa = PBXBuildFile; fileRef = AD410AB9E074E04C7B35B20E15894787 /* NSString+Paragraphs.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 70C5D855BA53EC124F3EC89F52C46D3D /* UIView+DTActionHandlers.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D9B917723F9181146753A6C996B5EFF /* UIView+DTActionHandlers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 71038296DC223D35D766651604AD7AA6 /* DTSidePanelPanGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = C3D4EC58F1A9FE8E9785D29CCAA3A53B /* DTSidePanelPanGestureRecognizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 719ED7245C102E769E0716F7535E9B6F /* NSString+DTUTI.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F402A3EC0E08E72B97A1F54135B14E /* NSString+DTUTI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72C06A5FFF77F781E097520E1732818E /* DTCoreTextFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 920DF64FD43BFD575866505677D0B0E1 /* DTCoreTextFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 72FBED6192672F4ABCB0B286BCD62493 /* NSScanner+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 9500F15401782F0AD7E9D90B1BC3A6A4 /* NSScanner+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 730C776225712211192E3A3192938B56 /* APContactDataExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = BBDA18E29EF0A3F30B570BCA5262D724 /* APContactDataExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 730DCE616EE03FAE6FDC60F3C64E27C5 /* APImageExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFFDC4CFEA9857C5258E6C04420C824 /* APImageExtractor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7338FA1C0EBCFED9E899A0B7730B3C59 /* UIView+DTActionHandlers.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B7DC3E0A0E5FB544014D30086C4D06 /* UIView+DTActionHandlers.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 734304BAC5E7DE72639C1CF2C21D70B8 /* UIImage+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D2AB27CB0359A5D3920790067959B8DC /* UIImage+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 734EF3ECC80EC57DF88F681BB893A371 /* TTTAttributedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CFECFCD26DAD6FEABAD9C3672DD31B67 /* TTTAttributedLabel-dummy.m */; }; + 738D799967110A59881CC5CE1A96A999 /* NSMutableAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 4230648155956E5BA98C94F3F73B15AF /* NSMutableAttributedString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 738FA1A18993801D81C1FE8A41A3B92C /* NSData+NSHash.m in Sources */ = {isa = PBXBuildFile; fileRef = A029E76D3E057B5238FC7B44E6655652 /* NSData+NSHash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 73A76339D17764EA0B69DDB78C67941D /* FLEXMutableListSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4846A1F007F56809E02F5D5A8C934C64 /* FLEXMutableListSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 73F0E14D95184849A5A253B5BBC4A53C /* UIView+FLEX_Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = EFFACD7D66FD7CACA3101E7E6298A0C3 /* UIView+FLEX_Layout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 741805361D45A1B360999485C7C9A2FA /* NSString+DTUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 55234810A6BCCBC73C83F45CBDCE1EDB /* NSString+DTUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 747FCCC277155F25137008714558AEFC /* Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B4E19D5B1F25035473C24110157B852 /* Reachability.framework */; }; + 74CABE0DD96960B4FAF7F68A0E721E0F /* DTCoreText-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0C5F0CB096C4113C5D9DF5C97D8AF1B /* DTCoreText-dummy.m */; }; + 74D5EF09D8BB58205E021098EFE2DBD1 /* icon-error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F787D8C79DD3AC9113D8D406AF403FA1 /* icon-error@2x.png */; }; + 74DBAF94FBF5BE616319FEEC6F01D85F /* SRPinningSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B35A8547F10A8D2E1E934CE4FD6EAC7 /* SRPinningSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7505779C0EE9F8F114F2598F4339D45E /* FLEXNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 17F2AE761B72DEA4DCF7EC4429055A2C /* FLEXNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 751642D128D67C113F1DDBA77230949B /* NSDictionary+ObjcRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B9E2AEC04E10AA97FF997ECFF5CD6D4 /* NSDictionary+ObjcRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75178DECBE39A69035B9711E18E9D2FD /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9397011602308627820692C2118D220 /* AddressBook.framework */; }; + 759F734F20DB40987619A36A978C33AB /* FLEXManager+Extensibility.h in Headers */ = {isa = PBXBuildFile; fileRef = B51276CC3BCDADEFC6E5122339E99A9B /* FLEXManager+Extensibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75A0BC5C5A57E73D050711A90D41C8A3 /* NSObject+FLEX_Reflection.m in Sources */ = {isa = PBXBuildFile; fileRef = DEDC4B4F4CA7DA15E840B68FDD568950 /* NSObject+FLEX_Reflection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 75BB9D632296D12CD0D5B36D44545F87 /* FLEXMutableListSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C3F483B630FFE171126FCA8F0CFD3A /* FLEXMutableListSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75CBB2893D09A7BDB672FDEAF3562CFD /* FLEXProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 47AF04B9B3129AE8926E2F7EC89983E6 /* FLEXProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 761B92E5B6C21B7785E8BF368726369D /* WKWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A0F0549583368445B907B0AE11E4D869 /* WKWebView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 76322126B45649F04213077E6282B44F /* AHKActionSheet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B243229E4D418674E2B6B5CB39265D98 /* AHKActionSheet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 764FD885D7676402D1522862DC702A53 /* NBPhoneNumberUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E3E8B85E9546BC1C9D790F0EB545320 /* NBPhoneNumberUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76CFA7063982BC708106415C0C9A89AF /* FLEXImagePreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CB597FE284D0FCD3C49DDE5D734537E /* FLEXImagePreviewViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 774CA8A72257E8A19F24B9E608A77671 /* FLEXFieldEditorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 27C9D4AD22F960E08C7DE3A2DF406291 /* FLEXFieldEditorView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 779E2225A0BDB68AA643655581A1B0CC /* FLEXRuntimeKeyPathTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 214879172CC4A58D33319E97A23A6358 /* FLEXRuntimeKeyPathTokenizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 77BD1BC48E9CBE22BEC4E364A4F50DA2 /* FLEXNetworkTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 6309F514AA8FF539D1A9F3E32B7A06BE /* FLEXNetworkTransaction.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 77EF88FC00534A355465AC506766C0FC /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DDDF2383AEAB26437399F1F2C5019255 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 783F206BA87D204B95E3C1A615FC644B /* NSString+DTUTI.m in Sources */ = {isa = PBXBuildFile; fileRef = BDFB9FCEDBD59EC2964ED0F1122BC2E9 /* NSString+DTUTI.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7856704F2646D82A3EE7BA2251DE3652 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */; }; + 786B5107C9471D3218071C8F2D2BAA2F /* RMAction.h in Headers */ = {isa = PBXBuildFile; fileRef = D7A30B7BAFABF8F34D6B7FB90BF3F834 /* RMAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78AFCAFEE148906EDB79750949B10D56 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 790A27EEF908B0B1710B302FA96654D3 /* DTProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 673F3001FFFABA94578E7CB63D374837 /* DTProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79159467642F82839F5DE6C37363371D /* NBPhoneNumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 2865C3BA2BC138BF3AE3EBAFF87C1466 /* NBPhoneNumberUtil.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 793C6E3AFE8C4D36D7473C3442F76E2C /* DTVideoTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C712DC3206415AD7C7818179B9683C6 /* DTVideoTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 79474B9A95573A42FEA91BE149FEFC18 /* DTCoreTextFontDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3D4E3BBD78BD79F8E4F2D43C33CA84 /* DTCoreTextFontDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79496839A133C99B9B36ED921B5DF867 /* APSocialProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 188EC7CC92ADAF3D81AFC9788A2A2D5C /* APSocialProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7965FEBD9865CAE277D1BB0AD3F10199 /* SRProxyConnect.m in Sources */ = {isa = PBXBuildFile; fileRef = 82132962F09EE13080BDA3F8C1B2EF07 /* SRProxyConnect.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 796CB3098A2D5AA13AC0840113261B62 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA1303674161F051805E5C9C852B9B6 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 79784551B995FBE11CFA12456FA773A6 /* INTULocationManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D48AA2A96348CB7D832FF9A73B9AAD4 /* INTULocationManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79AA826E0517E506A2F996F91479585E /* FLEXGlobalsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A9FE92512FD716AA5A0C3A0FE9409758 /* FLEXGlobalsViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79ABB9D9ECD99B0D7136B42337A74FCB /* NSCharacterSet+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B2A0507D6601EF2D53E1D698C3DD3C7 /* NSCharacterSet+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79BFFE1C53358D5CE5808C4C03D3F5B1 /* SWTableViewCell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0DA4068AB54241190934833176A702 /* SWTableViewCell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79D22764454F041FCBD841325DF210F8 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A72438B90A91A20FEB2A8DA248197C4 /* UIActivityIndicatorView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 79F803AFF8893089C3E72E9E4AFC7D47 /* NSCoder+DTCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 5707B92A88AB1C2D74D2DD862197DB23 /* NSCoder+DTCompatibility.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 79FF77CDE28DAD1208E0C447A53B5882 /* DTASN1BitString.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF2E48D7B824BA5D9B81E118198FE20 /* DTASN1BitString.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A03CF7D14B268A6A9F5C96A34A59EDC /* NBRegExMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 2313292EBBDAF0A5A569EF43BEF08AF1 /* NBRegExMatcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A96B51FEA9FBE9F832C904AD95489B8 /* FLEXShortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CC9540F9736915DB7E28481A5BBBC1 /* FLEXShortcut.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AA86D6DB4A6AEE64CE80FAE465B8141 /* FLEXMetadataSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4826742AAF47B0EA39E83D26A3AAA83E /* FLEXMetadataSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7ABEAF5A0D753ECE7F2433045CAE187D /* DTColor+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = D25A2ED5FA01EC26D4D1F79220A38E5E /* DTColor+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AFD08C551D2D40508D0EE7C94FD2751 /* JDStatusBarStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = B9573285DD1A79DB35C70648E4CE5605 /* JDStatusBarStyle.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B68381B3F4BD1935E1A191264DC9215 /* DTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 08ED423900B819A51250183F372AB807 /* DTAlertView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7BAE9A063916466B4B698D93EAABC1A3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 7BDD8806C36736DEEF5659D3B832A0AF /* TWMessageBarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BBAA2821B57C5E2F03130C6DB662630 /* TWMessageBarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BE55214272B402366B073224E601235 /* NSUserDefaults+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F3994C220306F4E686E4584E6FB5D24 /* NSUserDefaults+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BFE7309AD5E973B330F5961F3C26323 /* DTAttributedTextContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E72124CA95803E95A02031BFFF781DE /* DTAttributedTextContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C427C3A77DB575EACF5928FAA34B919 /* FLEXRealmDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1928EA02DD98BD7285643703CC2EEAE8 /* FLEXRealmDatabaseManager.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CAF47560D0A024E9E273BAF8DA968A9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */; }; + 7CF529BEA59674951373DBEA5B85345F /* DTCoreTextConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EB16C3F1AE65645C3CEB9AEA94C4B32 /* DTCoreTextConstants.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7D64EFF1B369D36DDB8A5219998521B8 /* NSString+DTFormatNumbers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D8EE72500054594724432F2603D11FE /* NSString+DTFormatNumbers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E0F5A7D3F475C2F5A77EFF81BA4CD6D /* FLEXBookmarksViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B8B7B01871F482BA3E1BB0FEDE6B946 /* FLEXBookmarksViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E3BDD69545F3E5D346446B4A3F23354 /* FLEXObjectInfoSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D0CFE322D568260C686E56B68371A3 /* FLEXObjectInfoSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7EE81307AD22DFAC09403C2EBE20DC02 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 7EEF83DD236E7D5CDF6B6CACA88DD064 /* RMGroupedAction.m in Sources */ = {isa = PBXBuildFile; fileRef = D9AA427BD24C4E18FF7DD21291DFC9FD /* RMGroupedAction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F0B7DCB4BB6C24E3B06B8E04388E61A /* FLEXNetworkMITMViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F45287FDEE47273C1750295561F377F9 /* FLEXNetworkMITMViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F468899A073AFE13FCBB0F788806E07 /* NSURLRequest+SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = A5C21A56FC972264CC5BEA5D456C6A1F /* NSURLRequest+SRWebSocket.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F61B8F1B669C3CC145246244903C38F /* FLEXLogController.h in Headers */ = {isa = PBXBuildFile; fileRef = 444C9351AC90D63C67A50BE5308DF463 /* FLEXLogController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F620FF7D9B2E0D703F761662E698CD5 /* FLEXObjectListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E4E1B2446AC425C1506C4FB0DC074567 /* FLEXObjectListViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F74D31182D00213F1BA61C9C2E403B5 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */; }; + 7FED99FEB283923367B5483E58CBF296 /* FLEXImageShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D97600B41F0B757F2F442D21A2AC95E /* FLEXImageShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80113DFF2EF6EFA92359BEE5E43F828C /* FHSRangeSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = F68016BB420AEAF19F05567AB2752BCF /* FHSRangeSlider.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 804D5B9C67EEFBBAF98F7C0D022B4871 /* JSCoreBom-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 826C240F89F12A388895B0D117C16D17 /* JSCoreBom-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 804FA8D2272AD32448FA067D94DFEE72 /* FLEXTableContentViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8955D8E969B5B5B7F8641FBF17659951 /* FLEXTableContentViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8055E7AB597D53D509D8F5670D0C851F /* IQAudioRecorderViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 108890F41913AE7F172A7391EFE43474 /* IQAudioRecorderViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 805E1DC0152A2A00BA2695DBC7780E41 /* FLEXKeyValueTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD8EB50B82BB8B4F397149BC5B68226 /* FLEXKeyValueTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80989B989A5068C3A78F3E038B77F82C /* FLEXSystemLogCell.h in Headers */ = {isa = PBXBuildFile; fileRef = D5D0BB9A8025619E8CA73FAA1FB512A2 /* FLEXSystemLogCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80BE364DE4ED6E481E825D7B3B504D0E /* FLEXDefaultsContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = C0CE365568F87FA6800F1B01C4FD68B9 /* FLEXDefaultsContentSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80C2622BBC507DB84778F237C792EA5C /* FLEXHierarchyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D12D27AEBCF16393291E64A7247D9A1 /* FLEXHierarchyTableViewCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 80D12EB7B804DC1A8D491C69E595F93C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */; }; + 8138991EACEC30905708A7B7EC8FABA4 /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C0AEA2B795CFEC399872E3506E759F80 /* AFNetworkActivityIndicatorManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 813B22FB025DA3FC2878BBA30EF79BAF /* SCSiriWaveformView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA0ACA8346C2F70C6FE24388596295A /* SCSiriWaveformView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8150A1C517FB8B2B9A30C09E663F8F4C /* FLEXObjcInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 05D1D3F53D8D05EEB400DBDA2EF3ECE3 /* FLEXObjcInternal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 816FE87BA44BFD45DC944F259B81C15B /* DTFoundationConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CD9EE59CF23355D81AF93511B24EB81 /* DTFoundationConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 817B1FB6C0BE2BE533361FF44C915C1C /* NSProcessInfo+RMActionController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8FE6AEADCBB9717BA5378AD08536AD3 /* NSProcessInfo+RMActionController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 81A33BB5D6CAFC575074850AB69BA1E7 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7336D004B72377475BE5BC6AD5D01D /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81B9E2F21B1EF9FE4E769103108DEA8A /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A30A07AFB6ADD8288720404260C1F9C9 /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82222260D6F57A6707DA1D55BAE2EB89 /* FLEXRuntimeController.h in Headers */ = {isa = PBXBuildFile; fileRef = F12955C51FA76A9CA1B8878B9620EA16 /* FLEXRuntimeController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 822A58D4AB73D44729A407ACA2811D20 /* UIBarButtonItem+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D0E7B0D4C56E5ED645573FC6EEC8963 /* UIBarButtonItem+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 828EF378DDB1F850D8ED8B685F3E6233 /* DTObjectBlockExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FBD0F3973FE263354220AC751BB35B5 /* DTObjectBlockExecutor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 82A5A8EE0222682F9D52FA8879FB487E /* UIFont+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = FBEBCE0CEE5A44CC047ECAC92111CDAA /* UIFont+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82BCE3CF53EC816BC2AD785038C244EB /* FLEXExplorerToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DFC49659DBDCE6B928E224FB51E677A /* FLEXExplorerToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82EFE412D04C3D2BC86CA34B47D8D03F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8325B8F92F190DC3D058746E45C00C3 /* SystemConfiguration.framework */; }; + 834265773E618B9768504F8801632F00 /* RMAction+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 76F6CB672AF5B3F27EEC26BBECA74463 /* RMAction+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8356265C3113FE76A9CA68D74E055212 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 8367ED634900AD0FCB85A5B41466B039 /* PHFDelegateChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ED53C4D92516B575684D9F8E2CDB4C2 /* PHFDelegateChain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83A99E20918F0D48ADE8805241E737F2 /* NBRegularExpressionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FDB7C07BD35492C61668457E957D178 /* NBRegularExpressionCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83B47F2B919376A27F7C5B13571C5C8E /* SRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D2C237BE97A334906FEBAA99D5E2EA88 /* SRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 83C49CBA4D61DEE667B20EE3976CEBE0 /* FLEXSQLiteDatabaseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E6A6FB8913E323B7AF9D8AE78CF88B6 /* FLEXSQLiteDatabaseManager.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83D41360F05130C3C1A1DCC4428EB090 /* NSAttributedString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = DD2DB063F6B94FD197B0E421C03C502C /* NSAttributedString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83F6D2FD350618FE16C51C7DCF0DB2E5 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EABC993900DCD6B869B47E27BB6B1FC /* CoreText.framework */; }; + 8493AE22EEF0B541B96824079FAB92C7 /* APName.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2E65BB3F37F69ACA895F3D383F0E5E /* APName.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84A4F44E73D43F0683A990DD9B677CAE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 84A74089372EF9ABDCA466F625ED51EF /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A89ACA15A9583032D2D1CC9A768F04C /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84AE7616596C1D85B4B2A7EEAAE33C9C /* APEmail.h in Headers */ = {isa = PBXBuildFile; fileRef = 54D0553EBF50B7A545FAC19DCA665E07 /* APEmail.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84BC9FCCC511EE7C9A4B8CC13025BF77 /* SRMutex.m in Sources */ = {isa = PBXBuildFile; fileRef = 5942E01A5C46245BA706B98DFAF08959 /* SRMutex.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84C13E1E0BAB870B6EBC3D56724E7F34 /* DTScriptVariable.h in Headers */ = {isa = PBXBuildFile; fileRef = 7223E290E19E3E8D9A8AAE27C061868D /* DTScriptVariable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84EF5042D6FD290A3C03127FF96B57A0 /* stream_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 85ADC9628588250129D3A1C4C3D8D86F /* stream_configuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8512001BF5B979F1711BB0AD6FF1194A /* APAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A6759A1EF50B0B74CE30CCB0A6E1F16 /* APAddress.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 858FE09FCFC88DD62DB1D2B817459C4E /* DAKeyboardControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F49A654448F9F73780F2B5451C89E1B7 /* DAKeyboardControl-dummy.m */; }; + 859C73A3B5B887C8D7E02C8A8C3EC453 /* SWTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EFEFFF466D348628C227F68055285728 /* SWTableViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85A7230F416A426CE71CABC04F194403 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 99DBF2D6F202193E7472466E4FEA03A5 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85EF4DF2B2B6DB583C68FFE5BDAE8022 /* DTCoreTextGlyphRun.h in Headers */ = {isa = PBXBuildFile; fileRef = D2A1CAFBC36BF8FD0F2BD7DE2B585555 /* DTCoreTextGlyphRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86515CF48EDFDA99A7B243BD32E84A66 /* PHFDelegateChain-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ED122249A49DF8819428A2525E549429 /* PHFDelegateChain-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86561B033C2B47DA116C8AF63325DEFA /* NSDictionary+DTCoreText.h in Headers */ = {isa = PBXBuildFile; fileRef = C277CFF17E7E1A99F3AE60B375CDFD34 /* NSDictionary+DTCoreText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8687BE1C44982C3EEF6C92539BFF2C03 /* APAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 431E63EC52335559B3454DC9CA71C36C /* APAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 868DE5B45567907635A78ECFEE9FA81E /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = BF271A833D9154250C25455F300192A0 /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8701430AA9629A7E6CDC2A6AA9BE0AA4 /* FLEXNetworkTransactionDetailController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8204B88C912A506B4538EFF9F394C2B9 /* FLEXNetworkTransactionDetailController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 870A8C0F5E1F7CA18B1A3EAA9E2C3984 /* SWUtilityButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D890D567ABB81EE8F739BC7DF2C3BB5 /* SWUtilityButtonView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 873D84089C07D426E1BBC0EC67BE1D28 /* DTHTMLWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 35759C9D92E84C363B403586FC9704EA /* DTHTMLWriter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 875D6DE94137D81E62FD8E8FA124B3A1 /* DTImageTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1756B08EF6F92497C85E8E7EC68CE200 /* DTImageTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87888D161E30316867F771EC0CF19EDB /* http_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B60570A686BF21B1E20C890436385AB /* http_stream.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87B202727BDA00BC65F73F76AC2E469A /* SRPinningSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4474CD27C3955CDAB3CBB876702ABC3C /* SRPinningSecurityPolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87F890C8A0B8D241CC297DC4E4EDDAB4 /* DTFolderMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A8DCAA6AFAB820AB4AC78632C2B34EC /* DTFolderMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88BC0BBF5F7A70234582FAB5E03EA0F5 /* DTBlockFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C651F2C8E9C9E7074009CA2F8FC52108 /* DTBlockFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88FCBB7BE6D06B1688FBD32B042B9DA1 /* FLEXSystemLogMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B183788C8B482A27BF8A124544A3F30 /* FLEXSystemLogMessage.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8940FABD25C09A121D0E9EF781EB47B6 /* FLEXRuntimeClient.m in Sources */ = {isa = PBXBuildFile; fileRef = DE659F3346E23838366637EEEC8FB8AB /* FLEXRuntimeClient.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89ADCD5310344E26D010A8F12FB84416 /* FLEXManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B9857927370D40CE850DC11C41A740F /* FLEXManager.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89CC6C8129429AED79F1BD7AD22669A1 /* FLEXTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 599036A694797D985CFFDE1C27E02943 /* FLEXTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8A4A44D8B480187D48835037771078C4 /* FLEXNetworkRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 98EBB14538DD0FE85D130344B8100035 /* FLEXNetworkRecorder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A80D50DC7CE62FA7B7581C03B36B19C /* icon-info.png in Resources */ = {isa = PBXBuildFile; fileRef = 4F5DA8AFBD3C01732E1860E82AA061EA /* icon-info.png */; }; + 8AC28F7DD47C4988060ECF815AFD0214 /* FLEXRuntime+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = 43894FA81F52E6BE73B0580231F45026 /* FLEXRuntime+Compare.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8AD32E89CBB5216F34A38DE6175FBE80 /* SWLongPressGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F5A67368B52F3CCE5514EC959939C8 /* SWLongPressGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B39240E3399A2EA6278EC39B416A18F /* FLEXHeapEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BFEDF5F9DEF6A42DC44D995AFB20FDF /* FLEXHeapEnumerator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B54EBA9F648476C786340932DB0A7FE /* FLEXCarouselCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F2DBCCF3460EAF77EA7B8B75C75B942B /* FLEXCarouselCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B86690A0BC1D9355876CF78B1CA0344 /* PHFDelegateChain-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B8D000E2A956739B492114C3A77D8AB2 /* PHFDelegateChain-dummy.m */; }; + 8B8EFF6F38071843AF1A0619EF98E6BE /* UIView+FLEX_Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 579E31721A8511E7C31D9042C90024C7 /* UIView+FLEX_Layout.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8BA2C6294AE5FF132934A5EA7D8F0B9C /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 932B7410227349419CAD850A5D89A241 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8BBC0DD647B3E09935B791254115E55C /* APAddressBookContactsRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 85FCBB40F9F0845DCFBA2BEB0EB3ABCD /* APAddressBookContactsRoutine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8BBCC3CE993D27AB3D549F4AD0BD193A /* FSAudioController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0492E93A4721430B8E6F88AB47DE2621 /* FSAudioController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8BF2AF00B31B279B2AA74BF762ED3550 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BE167669194E9CBE6BFEC4FA2B5BEAEE /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C1A1F601759B942CD9D115835CC2D49 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B902977DB9E3B7A7B8EF56A81395B0 /* CoreServices.framework */; }; + 8C82F5C0DB7E25D3A24B1AD96BC4B401 /* DTLazyImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 08397B06C54ACD60EC0DE50BB57220EA /* DTLazyImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C86D485CE8C79E4FAEA058CA3357841 /* DTSQLiteDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CDB1BC4F2C90A655D240F6E4ADFF42 /* DTSQLiteDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8C8A0FF45122507799EB62E999023B1E /* TTTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B23B017DE1F1499363F0664A0E7F72 /* TTTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C9D39DEDA1858729DF60249E9906CC8 /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 09BA36812A094CE9193A9C550471C031 /* NSString+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8C9F707632A76004B9ABB6A63456B732 /* libPhoneNumber-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 600453E78395C6EBE032211F7B5EA25E /* libPhoneNumber-iOS-dummy.m */; }; + 8CB0A498D4FD52C3AD71FB50AD7F49F7 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DFD305CB21F713A4250781B772AEF06 /* CFNetwork.framework */; }; + 8CC3DF88B4B0DC750EE6F1CE6B1DB494 /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FBF1A4B7F35056901EA0A55239BEDCB /* FLEXNetworkCurlLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CC72B2A3E066CC24BE00F99F98851AA /* NSMutableAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 93ABA451D1E6B9B79212546A180AC502 /* NSMutableAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D0F9500C4248CE55412442BC1B8CEFD /* FLEXBundleShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 489CB2881C04E492524E39EB183AA852 /* FLEXBundleShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D68F48C1453A6D61B4A62E004CEF76A /* FLEXKeyPathSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F1B841187477268F44E19E89CB9D03F /* FLEXKeyPathSearchController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D818DE43EEC978F4F754E34A0FBB927 /* NSString+NSHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B702BC013138673D514290FCC4CD98C /* NSString+NSHash.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D8DC4ECBF22E7A3DA090A0D502A3940 /* FLEXArgumentInputObjectView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D21A7AC9BE7102C6328E403FA3D4C33 /* FLEXArgumentInputObjectView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E4BA43DE796339CFE0902DE6997A230 /* FHSView.h in Headers */ = {isa = PBXBuildFile; fileRef = EA479FA6DAA018589FF85EEB338234EA /* FHSView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EA8CCC57DAA9AE3B5982E19EDA4D3A3 /* DTZipArchiveNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEE9FE133D0F515CD9FDDB8BA90FEA5 /* DTZipArchiveNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8EB2161DF2D8695DA8F3A68ECFAAE749 /* NBPhoneNumberDesc.h in Headers */ = {isa = PBXBuildFile; fileRef = E806D22BAD3192C71B3C4629905EF193 /* NBPhoneNumberDesc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8ECEB67C1417C8FC84AE458510BCCAE0 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8034FF44633272658CFE570D2D0DA0 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8EF17C56E8AAF7D12907C2C0145B6342 /* FLEXKeychainViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 10701C818F4A4D82137E305CB033D913 /* FLEXKeychainViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F2452B75F0FFA6BFAC7C382F8810A0A /* INTUHeadingRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B193D05DEB4F68CE3CC5B5B9759994E /* INTUHeadingRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F68049FD2AF69B7476B2CAC0E13D9DA /* APAddressBookContactsRoutine.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F977E418BBF3AB76482E21783B63480 /* APAddressBookContactsRoutine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F8139E903A082543375C5583511211B /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F91239B37A2AD2A491E0DC07032C78E7 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FB8D2BC93C9F7E71FDDF705C8B60F1B /* DTZipArchiveNode.m in Sources */ = {isa = PBXBuildFile; fileRef = F6268C1EA07ABE582516CB63F84E4955 /* DTZipArchiveNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8FEC3085CB6A9FA834C3C1398D8A0EB5 /* APAddressBookExternalChangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE8B11965B7DA7048A0C7D79B2D06D85 /* APAddressBookExternalChangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 90E1A564762D8C21C135A42D1DAE018D /* FLEXCodeFontCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 46F2EBA324145D420BBA3DFB1718800E /* FLEXCodeFontCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 91364510E311B73A998A4EF134455F2B /* SBJson-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D523AB3DCA3AE00AD356B5E0C1F765E6 /* SBJson-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9140AFBE4162CA4545CC96C2B5B5B40C /* NSObject+FLEX_Reflection.h in Headers */ = {isa = PBXBuildFile; fileRef = 79A8499704F446C0F3B8D4B4BA47D3B1 /* NSObject+FLEX_Reflection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 917511E2BA9FA5A30116FC0B8C3D696C /* DTDictationPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7ED063C1BFBE1EF7A4B81F9DAF73DF52 /* DTDictationPlaceholderView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 91B342F1BE7F96D280A0889D4AE97116 /* DTSidePanelPanGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = E76D4007EA543F40DC30137DD966AA07 /* DTSidePanelPanGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91D4FACBCBA39A3C00F66299E4BB467F /* DTAttributedTextCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB8B49FDBF934EC716B198E6AAA6BB9 /* DTAttributedTextCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91FA65E0FFB4E1524E35C57A322452A1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 921C6FC9D0333B4FEBC90D803B97E539 /* APAddressBookRefWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D284697EB6E1A932E9BD70ED3DD99B2C /* APAddressBookRefWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 924817F2128925FB4086C215F672356D /* FLEXNetworkMITMViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 479E70D9ECB7889979F693F664970367 /* FLEXNetworkMITMViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9258A33DE82BDB241E80BE59D0BEEB1D /* NSMutableArray+SWUtilityButtons.h in Headers */ = {isa = PBXBuildFile; fileRef = 56169B1C69A812F25BC91F5ACDD35700 /* NSMutableArray+SWUtilityButtons.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 925F1AA4D9FB85975B30C5EBAC7BA0F0 /* DTAttributedTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = CBDDAB73759118F9499130F54C284DD7 /* DTAttributedTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92C9E5BF1854D9E2B1E1A6685AE0B93D /* FLEXCodeFontCell.h in Headers */ = {isa = PBXBuildFile; fileRef = E9F1B955D0975D295065201644EB1BFE /* FLEXCodeFontCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 93816C1585130121F25408101C0B2F76 /* NSScanner+DTScripting.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EBDC30BCDEF9E130E24154F2E6BBE2 /* NSScanner+DTScripting.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93A94FE7BD24AC71CDABB6BDF03E20BE /* SRHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 39A3DCB8CC27EAEB5BF6BE58447D4F53 /* SRHash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93BF4E9AF819AB4DFE3957AB08EAE9D6 /* DTScriptVariable.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A9A8DC2641992629867857CCBE7C8FD /* DTScriptVariable.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 940167EF1F9C1F6069735566F73E440F /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AEEFC69439630896D56057325D90E21 /* AFURLRequestSerialization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 94234D40C443D8A7126850AB6E484AAB /* default.css in Resources */ = {isa = PBXBuildFile; fileRef = C09C1482BDB18FDC9DAFE74B051DF049 /* default.css */; }; + 942F9590EB515AB63D195591DBA3DD35 /* SBJson5StreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = 60BD091CEE741B68BA4E6C9315949912 /* SBJson5StreamWriterState.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9451061588588184FC4B2EB13233D65E /* RMActionController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F60AD413A65C8827E2FE9A67C91C96C0 /* RMActionController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 948981849E5C49A966E991F8DCF62BBA /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8668AA3F5FA5E2A3AF98C2FD5393628A /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94B3B2DFE8942F01D95BAF8E295682AE /* OMGHTTPURLRQ.h in Headers */ = {isa = PBXBuildFile; fileRef = 64687ED38628C58AF10C4315ADA5CC11 /* OMGHTTPURLRQ.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94FF409F4BFCEDCC9AA97BB273CD8105 /* FLEXObjectExplorer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ED898203A56B317EFCE6F9C7C28F6B7 /* FLEXObjectExplorer.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95E4273565D931FD395EAE47B02FB8E5 /* FLEXFilteringTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E731E790506B8ADF4035DA353D90385 /* FLEXFilteringTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9630B8291C821D4A3CD7A3947829CE99 /* TWMessageBarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D796E758F74E0D9138D8F5E2B97DB7C /* TWMessageBarManager-dummy.m */; }; + 9658798BEF1A1E1FA3BF2D557DCB9150 /* FLEXObjectExplorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 135F220EB523843A62795583A2F2A12F /* FLEXObjectExplorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 967BC3EDDDFB1A34700C98AFD52D50F4 /* DTTiledLayerWithoutFade.m in Sources */ = {isa = PBXBuildFile; fileRef = 2130C0C12629465B1685F45A2B096DAE /* DTTiledLayerWithoutFade.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 969641CF56F65B42AC045D72E7AB258B /* FLEXArgumentInputNumberView.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DC87446019AA3252019721A0901DE1 /* FLEXArgumentInputNumberView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 96CC09020B362D7FDBF3E8768B084030 /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 549C39D2968D75FD476F7A9DF183459D /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 970BA97A347068AC29A936C556689F8D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + 9800440261F73D144D3F3A4EAE669581 /* DTHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D60A28DEC26AFB133D68AE311068F69 /* DTHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 981F682FD063FDEE84D7257D40D96F6D /* APContact.h in Headers */ = {isa = PBXBuildFile; fileRef = 992CDED25EE8F8CBC99D6F13DF495BDF /* APContact.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 989830E223FA3A1BDF355AC7DAB460B6 /* FLEXArgumentInputColorView.h in Headers */ = {isa = PBXBuildFile; fileRef = C786728F5D47D4544B6904BD8452A997 /* FLEXArgumentInputColorView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98A610023926BC16463CB53861CD8A46 /* APJob.h in Headers */ = {isa = PBXBuildFile; fileRef = F33155D38AB1DA2F593F95E346B66AE3 /* APJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98D3054857A0D19617C78EE2ABB77A6D /* flex_fishhook.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DD2E0E45A9B885BC30408B0E15C68A3 /* flex_fishhook.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9974F45C517475C7D8806F9FDB998FEC /* NSHash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 002D08B8686CAD5A63BC441CA91293E3 /* NSHash-dummy.m */; }; + 99788CCDD26B028DFEF2E0E5E1757172 /* FLEXHierarchyTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 413DE188CD2A8443F227B5E05CFAF747 /* FLEXHierarchyTableViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 998408FE5E15F82608BE3BACA2914028 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0EEFF8DAFB86B146B67FF3352F004F9 /* AVFoundation.framework */; }; + 9A1496E31E527FFE7320FB34B26CA03E /* DTLinkButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 916CBF3DB084F2C596AC9FFD287E71B1 /* DTLinkButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A4C6ED9E12CE3CC2B1A64BC83D73165 /* NSAttributedString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = D877C91D516279D1AD44282E048FCF92 /* NSAttributedString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A7EB66E14A79FF684EF976DC126320F /* NSGIF-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE8A4C815EF8523D4982C53E0230B21 /* NSGIF-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AD6CD07D6290389199AD46D0FE28B4C /* FLEXUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 14963FE1DC595E61E18507240C0FBFAC /* FLEXUtility.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B0CA241C1D90372A5320B31557D67A3 /* UITextField+Range.m in Sources */ = {isa = PBXBuildFile; fileRef = F63B10E0A84172108B8E76B9E7BC4DCA /* UITextField+Range.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B516856D0867D1714B359ACEF3A77AC /* INTURequestIDGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 745C8BD6593568161EE55E7160814243 /* INTURequestIDGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B9BF9B1FCD7D86C5504AEEBB3B44751 /* DTZipArchiveGZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DC98519A5B6DBFB330DC7072FAF842E /* DTZipArchiveGZip.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9BC9150BAB3ACED9D3F305B02337F833 /* SRHTTPConnectMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 68D7125CE841BB9E525142DA57009D4E /* SRHTTPConnectMessage.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9BE65B0C034DA58A2CFA7D21DBF5878A /* DTTextBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DCE140B7332F3FDA1466ADBBB7D68A65 /* DTTextBlock.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9BFEC98648704226BD53595091201833 /* NSFileWrapper+DTCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 585C378D2A61140846420F9C3BEBB159 /* NSFileWrapper+DTCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C709497188DEFED3BE7041B0D125A13 /* FLEXShortcutsSection.m in Sources */ = {isa = PBXBuildFile; fileRef = FE7F232022C03A2C147835997EE41400 /* FLEXShortcutsSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9C7EDBF58ED1B4C3E330A6EA6619654B /* DTZipArchivePKZip.m in Sources */ = {isa = PBXBuildFile; fileRef = FC1C08796E48EDF4D7CC9B7AB59F5F1C /* DTZipArchivePKZip.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9CA83E234DF9005B1F4DFEE913AD0514 /* BBBadgeBarButtonItem-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9967C31E78896FBD9FA253FC36F29AB6 /* BBBadgeBarButtonItem-dummy.m */; }; + 9CCAF91E57FB73A5BDAEF9555F06609B /* IQ_FDWaveformView.m in Sources */ = {isa = PBXBuildFile; fileRef = AAA63BE11F4DF10A6770E07D718EC12B /* IQ_FDWaveformView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D5FA563EA66569424F650DCC1B622A2 /* ModuleXMLHttpRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC29A563B34AC2D874014EB53196569C /* ModuleXMLHttpRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D78D6CC03FFE458D4DC6DB7F99308C7 /* NSAttributedString+SmallCaps.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D67C9FF86FF56F6FFF39BFC74B28711 /* NSAttributedString+SmallCaps.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D7A270582AFD338CB2534FC075C0E66 /* FLEXDatabaseManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE8FEE1D1B9596407A5ADA81D6CF94F /* FLEXDatabaseManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DB97C854A0E13818C137FA3B260EABB /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + 9DC1A76968A91F3CE0F8B73915828FC4 /* FLEXArgumentInputStringView.h in Headers */ = {isa = PBXBuildFile; fileRef = D04CCE7F728734F5A61362C7B854D40B /* FLEXArgumentInputStringView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DE712D104DC47D81B6DD3F74E8243F1 /* icon-success.png in Resources */ = {isa = PBXBuildFile; fileRef = 8FA9775229EE18D4C9F94E9AC2438DC4 /* icon-success.png */; }; + 9E10D372C484381BBB01EB22148B80D7 /* DTTextHTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D1C02901F75FA1FBF61E14E1EBDCA6 /* DTTextHTMLElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9E21D26FDE14FE8A32DB49FFCC8FC687 /* DTPieProgressIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = C8C6176141594729919C7035BAED9E55 /* DTPieProgressIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E4B70BF4DEE17FB6482C8245A881855 /* NSString+IQTimeIntervalFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 113E112F35E33A0009F406087FCF3EC0 /* NSString+IQTimeIntervalFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9E57560B6C13539373236890661D6362 /* FLEXTabsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9569B08F876C96D4902A0A2D291F6913 /* FLEXTabsViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9E92F4E8463AF797A559F388C26176EA /* NSString+DTPaths.m in Sources */ = {isa = PBXBuildFile; fileRef = 72761E2BA114AE211CC815206B4F71F6 /* NSString+DTPaths.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9E9902B23BECAFE280F9C6F770440A8A /* NBPhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 47A90A704E0987134E04BF2D617C14B4 /* NBPhoneNumber.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9ED3E3CA71DDF425ACDAF4088A7684E7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + 9EE96E3DA60AE21305639C0884011052 /* AHKActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = DE131F87221F3043B3705D09E14BBAF5 /* AHKActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9EF26843C36D6B15793FFAC149FA6F57 /* BBBadgeBarButtonItem-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 736D3E88E13D309111421B524690241E /* BBBadgeBarButtonItem-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F0B78CC0498C39990D026FDB486707C /* ModuleConsole.h in Headers */ = {isa = PBXBuildFile; fileRef = 090A3D626951CA260033F4E8BABEEC6F /* ModuleConsole.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A02D5BF0D24A54C57829B0F54225269C /* UIBarButtonItem+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC54FEEB486D2CAC85C5DCF5EF01145 /* UIBarButtonItem+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A07272558B47BB1C7CAAD5443507FA6F /* INTULocationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B77750ED39532835B012601CF3FC85 /* INTULocationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0EF48E0461AA3B2E2EAEA38FE712EC4 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 09ACC823B9BE596D7C115A38C1B5A02C /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0F6E3D7CEA819A80F23BCBAD3BE5833 /* NSString+DTPaths.h in Headers */ = {isa = PBXBuildFile; fileRef = DB199EE7946058F4943C2053B0B2C68B /* NSString+DTPaths.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A123AAA29B065AFDDBDDBC60902FD71C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */; }; + A1320FC99B347682201C21BCC96AF5D5 /* AFOAuth2Manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 358CFF6FEF8258C233AA11303552BF8A /* AFOAuth2Manager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A16384A8E29213041024816D19787327 /* IQAudioRecorderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E999199EEF40927279B02060E3D4002 /* IQAudioRecorderViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A20A19B9009CB6633AF701DB778EC4C9 /* DTCoreTextLayouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9699B6532774A4B9CB1275AF5E34692E /* DTCoreTextLayouter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A215DB4F956FBEAE70503B0C876C7118 /* REMenuContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 211119BA1CFADDE3524824CC3E4B6E66 /* REMenuContainerView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A25BBCF4E79C6BE696805B52CC19978C /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FA3A1F37B7AB5E2B4094CDD72D0B166 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A29F871234D8852DE7C6B62CED70F9BD /* DTCoreTextFontDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 78860BC0476204CDC8446FA3D0B34DA2 /* DTCoreTextFontDescriptor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2B7DE05765D5A43482206EB2B8F1600 /* APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 53E55F3C08B06720B0C4A04BD61E2367 /* APAddressBook.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2D79DB64427E12C57AF5F7A2C39A6C9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + A33678F98D94E985FC1370A020415AA1 /* FLEXArgumentInputFontView.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAF533C772D580CD14FDF4B8691D122 /* FLEXArgumentInputFontView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4022AAC3FF3D1F9BDB07A4C0E7F7CD6 /* RMDateSelectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DF0EFE351D02F3F797FE8ECC021DAC5 /* RMDateSelectionViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A40D856F38CC6B469A6E2AF199ED290A /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = E307B2DC551D0125A97E8B49223258EF /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A43396D2A838E8C7CDCB3A57700C23DF /* FLEXArgumentInputSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = 55459FCDDE2EA7126FE79CDD30DEB5DC /* FLEXArgumentInputSwitchView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4454C51287FF7F675DD1A6CF5C489EE /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 941451FA71507516A655684957AD2FAA /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A46E07A9C2C43E74EDDF63B1BA2D546C /* DTCustomColoredAccessory.h in Headers */ = {isa = PBXBuildFile; fileRef = FEF271B1F3FE5EE2C4431CF87816EC42 /* DTCustomColoredAccessory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4DC724D30B8774FD4C6228028A0F977 /* HMSegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = DEB2FBAE58D1C59A91EC9CB07BFF64E6 /* HMSegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A51AD76D59C1D489D419C1BB45B43D30 /* DTWeakSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 60276CB631A2C9D6AAD516BF4FF93B77 /* DTWeakSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A536AB69DFF230FE03034F4EADCBFB2D /* FLEXKeyboardHelpViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A7227536777BADB58E76439A738B327 /* FLEXKeyboardHelpViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A53FEE897D860F9A661F68F6B4619569 /* APContactBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = D00D7402CD29F413E5E9966BA33201A9 /* APContactBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A55E4BE1EEB322196F1B76E5F078C994 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D1789C2DE4DEC1D0D9622401DF31CCB /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A56F493FFDEBD570C3C364DEEDBDC690 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = BE2B695FC8C2AAF893FAB20C0E7DC37E /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A587CD1A38241C9A102DF72555B993D5 /* FLEXHierarchyTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F71FC37EC511A0AA27833222B56BB156 /* FLEXHierarchyTableViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A58A7BE2982A6BB013E192389CE9DF9F /* DTHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 65458DA86960B5A9D2B2C703A58CBD07 /* DTHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A59D5D0C546245A247CEF4600273E355 /* UIApplication+DTNetworkActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = C8F42069BC534A3B5355828D37EC3E05 /* UIApplication+DTNetworkActivity.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A5C3A5254260A5874A98790782ACE6C9 /* REMenuItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B03E0BB54E18400FD822EDF7183A51E /* REMenuItemView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5C3B7C3976BEDE0683D590FE729A1ED /* FLEXArgumentInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = E1535989317B7636E47FBE8A66C6CF33 /* FLEXArgumentInputView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5CBFC54AD5295453DFC6AF6D4D2721C /* FLEXRuntimeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 21DC699BCE63ED17BCA5BBBA209CD75E /* FLEXRuntimeClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A601994621C892656F60D1A1292A9565 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + A6084D7614259B58B8271161E0DD2AEF /* FLEXFileBrowserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A58ED9CAFDE5C9695331803858439D1 /* FLEXFileBrowserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A68CA0655464A7A762C52BCCF0DA1B98 /* TDOAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BD13FACB149C283B1DBAD25FEA77BE6 /* TDOAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6954CC41B36DF6CB44290731F7314ED /* FLEXTableLeftCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AFD62602F74E1FD45D51BD91029581 /* FLEXTableLeftCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A6CB45CFCD7C48969C47D51CD82A5633 /* FLEXMethodCallingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C51C9CB8B11EC2D118F38F90A8D4EAA6 /* FLEXMethodCallingViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6E8D2CFB2C94EDCCD1100D8E2A33320 /* SBJson5StreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 328A09608D3392602CA37431D74092B6 /* SBJson5StreamWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6EBC25F73D0A87B5CA4667B39446CFE /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = C668F4E70971F1C1AA1A7CA5EF4194AF /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A74A3CE977E75E975A756C4B5F8FEA29 /* JDStatusBarNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B98ACCC34D45042EB62E4CA407F81C /* JDStatusBarNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A75DE21C27297CA1EBEA5FF687DF3714 /* FLEXFileBrowserController.m in Sources */ = {isa = PBXBuildFile; fileRef = EE3F010EB34A84AEE01741089B525A48 /* FLEXFileBrowserController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7D772EDB18AE5B8457A686D549F3CC3 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + A7F2AFAB2E5128E25651C257FA699386 /* FLEXArgumentInputNumberView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93622956403B6189AD7668DE1022747A /* FLEXArgumentInputNumberView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A80CF4030C52C09DABA206342620530E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + A8CA547E6DE7017D2581157F861CDCA6 /* JDStatusBarLayoutMarginHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 05671AC6A1E52D9EF055B08B252FEF77 /* JDStatusBarLayoutMarginHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8D01814315F1346BB1DB607A29CF90B /* FLEXGlobalsSection.h in Headers */ = {isa = PBXBuildFile; fileRef = CD6187BBCBB963C457A727F887E0BBDF /* FLEXGlobalsSection.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8EED92B0C5E0EB17E5858DE0B979ED9 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + A92D35654D41635D547A056DC0BCD817 /* FLEXSingleRowSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4ABC2CCC9EAFD34DBFEF44B46FC9D68F /* FLEXSingleRowSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A937FFB15FE679E1962E23759A055130 /* FLEXArgumentInputStringView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9375871C2646D8463E40AEACD7E5E7D5 /* FLEXArgumentInputStringView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A951E8E774BE04ACD42A8EBBA57C3A1A /* NBPhoneNumberDesc.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C4D99F7884E9B9040D0EF9DD5ECFED9 /* NBPhoneNumberDesc.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A963839D24FFA7A463CC3BB21342B374 /* UIImage+DHImageAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E08E980D6E07A6C1813621F515B86703 /* UIImage+DHImageAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A97377280227909E4EC3F19E59C71068 /* ModuleConsole.m in Sources */ = {isa = PBXBuildFile; fileRef = A481273DB2AD555C6F3582186B412F00 /* ModuleConsole.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A992D7E7022B1189841CCACEFD6BA0D5 /* FLEXBundleShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = 824B075084DD7B2086975E01C99A8E71 /* FLEXBundleShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A9D61DDB6D3EFE25C1CE626692E9E571 /* FLEXClassShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = D757ECF8B81D69D734326F5BEC005AA1 /* FLEXClassShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AA048E6EBE595D761F205266BF196B27 /* FLEX-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 627522CE23791DEED45E06EBA9C38BF0 /* FLEX-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA0A0A306E12021E1FCE28FAE0DE946B /* RMScrollableGroupedAction.h in Headers */ = {isa = PBXBuildFile; fileRef = BD589F34C17E1DD9DC3928C2541C0015 /* RMScrollableGroupedAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA54B2D379FE9C15F2F21E543A326255 /* FSXMLHttpRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 235E6E491AB1D5FEE8A3A3D65051C746 /* FSXMLHttpRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AA6C7C96D6AE4195A528511F9C7EACFF /* AFOAuthCredential.m in Sources */ = {isa = PBXBuildFile; fileRef = 243BD68643D5810814604C2CD7B8CAB8 /* AFOAuthCredential.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AA9F95D96BF52099904C2223AFA5A8E2 /* DTFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 61535A975981FD7519299E7635FB7511 /* DTFoundation-dummy.m */; }; + AAAAE5B555C9687769E96C3B026E1F93 /* DTPieProgressIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 60494E31D214884BE2E25A36B5DBFA57 /* DTPieProgressIndicator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB50D0DAB71846554F599F10556CA03C /* DTCSSStylesheet.m in Sources */ = {isa = PBXBuildFile; fileRef = B6AF341D38A8229D9B10A055EBB3423F /* DTCSSStylesheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB7E0B0E55F56C473E16741DA810F0D7 /* DTASN1Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = 46B6297851A5C084387DD79CC6F0700E /* DTASN1Parser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB89490772A34CBFFC0CCEC2C9CEEDAE /* FLEXArgumentInputNotSupportedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 564BEC7E78AC07EEB1F7F02D04B93555 /* FLEXArgumentInputNotSupportedView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABEB7435CEE72FFA9CDFF6539B811EC2 /* FLEXSearchToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 03DBA6BF4A17FF4DCF818A82D62C7AE9 /* FLEXSearchToken.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABFCA6506606812799687CB13277F103 /* FHSSnapshotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FA982DB54DE9210736AD89C89A016B2 /* FHSSnapshotView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC1A595672246FB743ADDD9DB0D24A6D /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */; }; + ACB170EEC2D4C7FD6D8D0E9368EFDE27 /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 21F521728D6F6154A7364E6C3891A7BB /* AFAutoPurgingImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACCE9D98BB5CD8B5D81B01D1F2550B28 /* FLEXDefaultEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DED2DF51360A8C1FD4E1D2CA071F5E0B /* FLEXDefaultEditorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ADA86441E110E90899F5D14FD2DBC290 /* FLEXTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = DD4385531B6D2667A2491B22562A9784 /* FLEXTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE0341F59D50A626450DB954FC00C485 /* SBJson5Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = 08369255761B9EEB1B9F32C5453773CE /* SBJson5Writer.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AE46C74D4B034E4BB01F081BA5DBBCDD /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D26CCA0A92C81CCD5E0EDBE0B2816E4 /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE8592759AB22E3B3EB6386202FE93BA /* FLEXTypeEncodingParser.h in Headers */ = {isa = PBXBuildFile; fileRef = FE9C3226E64B16B17E66417FD8B76563 /* FLEXTypeEncodingParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEF58C21288F7771D553E339FD3C3525 /* UIScrollView+DHSmartScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BD2E75E98A6CD714792745E86B24640 /* UIScrollView+DHSmartScreenshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF4445D042B5A7C067ECC400242B31BF /* CALayer+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 61174303DD602CFBFB1302309BA33BFD /* CALayer+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF5521480B667D6CA26BC99C42A81948 /* FLEXLiveObjectsController.m in Sources */ = {isa = PBXBuildFile; fileRef = C8BC444F95706BE203EE30A7A7773DA3 /* FLEXLiveObjectsController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFEC94B9D62C021E02B7E9DCD4BB429B /* NBPhoneMetaData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C84C33E88A62F1645DD947A4DEC89D2 /* NBPhoneMetaData.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B021DC2E022C70F75436D95DB612FC47 /* file_output.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E264EAC9DCABD244F56AF168664C1527 /* file_output.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B057E923400A0AE2B5E3BE3573B22DC5 /* audio_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF6A7F951BC6517C1E3F088FFE9DC86 /* audio_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0B9E5118EB497882A0E2B39441AAF09 /* DTColorFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B5806D2004242B9EC2411B0A46C3E3F6 /* DTColorFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0CCC8FF25829BC2326C9D9D43A7B00F /* DTStylesheetHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ECE815A8473E061D11E417343DABCE7 /* DTStylesheetHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B13A63379AA95B1A0DF15B8BECA7CDAA /* JSCoreBom.h in Headers */ = {isa = PBXBuildFile; fileRef = 679A02B83DC946E8A8FA306C34384CB5 /* JSCoreBom.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B1FA739B98C9F4DF633CE7610D896571 /* DTAnchorHTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EBDCAAD121C64711C2206118E9E92CCE /* DTAnchorHTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B20DD8C278CE8A49AB2463D917D71F0E /* FLEXAddressExplorerCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 43BCA909FE08A54BE2EBF674B8FEC0F6 /* FLEXAddressExplorerCoordinator.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B25FB34D354D99B2E29E1037D05427DC /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = B8A8F895EC547141C86D53709922B878 /* zip.h */; settings = {ATTRIBUTES = (Private, ); }; }; + B2AC59DA93D8EB36A8C4A6829E5FA55B /* DTCSSListStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DFB91E30B1640D9167171136BC2C35 /* DTCSSListStyle.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2B2542DC588058140ECEB6279D8D505 /* FLEXNetworkTransactionCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C1008A5A0662C4D06CA70EBA68AE2514 /* FLEXNetworkTransactionCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2CD5836C16B8F5814072BF99A0DB01F /* FLEXIvar.m in Sources */ = {isa = PBXBuildFile; fileRef = 70A494B258CDBA67EB93A96ED97E0785 /* FLEXIvar.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2E2C5CAB08A2B611F2F7338C42D3692 /* DTAttributedTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C8E86F472A46C731FBBFBED592677E2 /* DTAttributedTextView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2EF37FCF8B331DEE5EB27C8CB61F288 /* FSAudioStream.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C0D98546863EF620AA6CEED451401EB /* FSAudioStream.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2F4A2B2302D204B50DDDE1E449380FE /* SRIOConsumerPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 58F85549C896D52F6685E60F5EF376D2 /* SRIOConsumerPool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B368B784E76C166F58B8E32AE24F13D9 /* DTCoreTextMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 7059BA504D31FC403CD6A19402F3A0B2 /* DTCoreTextMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B375937E13086973A1074AF797F123FC /* FLEXMethodCallingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 309F48006B772851697FB1ED9089BFDB /* FLEXMethodCallingViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3A717D646F2230D14454CA10758A2CF /* FLEXWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CAD70ECA2E5BF6B2AE975E7A2D762F2 /* FLEXWebViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B3FACC6B3AF996A30435E10E53B66ED8 /* DTCoreTextLayoutFrame+Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C994B08375B24253CAF2AE370ECA1B1 /* DTCoreTextLayoutFrame+Cursor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B41BDE27F362516D4530F5332AD81154 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C4A8039800F1DBE22653AD92A5E385 /* AFHTTPSessionManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B442F5827A2842FF79FE7D8C1D5CB0A9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + B461B903E4663AFE97A8C0D3844A96F5 /* NSString+DTURLEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C62173126A39440F0EA6B28FD800FA4 /* NSString+DTURLEncoding.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B4809B68AEBBF63402A90A449D953F02 /* SRIOConsumer.h in Headers */ = {isa = PBXBuildFile; fileRef = A335E35D10A8FD56B41025780EC383BF /* SRIOConsumer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B48438D63E936C3313D5CCAD2E92033B /* FLEXArgumentInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = BBC1C069FD824BE54D5199C3AC55CBDB /* FLEXArgumentInputView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B4D1F0062762F19E59639EFED4CC0F53 /* FLEXShortcutsFactory+Defaults.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB779695A13D1DECD43ABFE358EBBBF /* FLEXShortcutsFactory+Defaults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B53F201B44E36E87BC49A5AA951CCB98 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + B55475134D5BFC78B028C54E8AE71948 /* DTCoreGraphicsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A3BEC1CE1E102251B1C5E01712281D37 /* DTCoreGraphicsUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5741E729242D9EF486F9FCCA5CB47D3 /* DTCoreTextFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B11D5806DE4E6AF6FFC13B4ECE3103E /* DTCoreTextFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B61B1319AC1D8CF11DFF57F350FA2029 /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 79BCF4FFB7930EA5D93951681411C6C5 /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B63F5278D90A6B6C35C3535A16C19490 /* audio_queue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D1D32997DE2B0BE499D2F9BD4D35892 /* audio_queue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6459E49627FF45147D31ECAC66C73DC /* OMGUserAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C57AD11264BFF53C20E6BFFCC382270 /* OMGUserAgent.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B68212C425AE8095C884B89F763DBCCE /* AFHTTPRequestSerializer+OAuth2.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E2084AC78997B7471738D82C394EA43 /* AFHTTPRequestSerializer+OAuth2.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B6BDF6B9076C585130A37E17DF216754 /* DTCSSStylesheet.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F55DFC6740059BD39992FD3D909909 /* DTCSSStylesheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B6CCE1E29AA9791F4BB96F298D9267CD /* Reachability-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A0702D1FE5B5852843B50DBF7788377 /* Reachability-dummy.m */; }; + B6CE07ABFCF196CD3D4C4F46110B9029 /* DTIframeTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 289A7B06D81476B28215D9864C8EC746 /* DTIframeTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B74C34708359B205351351E79932F07B /* SBJson5StreamTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D0D334915059C36ACCD818B3338593 /* SBJson5StreamTokeniser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B74E561B0BCAD05AE3E4C649A37BEED5 /* FLEXGlobalsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FED99B3B79CFB1948CE5CA881D6749DF /* FLEXGlobalsViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B77056ECCC21E61E594DEEB340DA799F /* DTImageTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 0148F90B56DA0DB2CBC09353932D79BE /* DTImageTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B771FE345C3E13E5389E2762946FDB99 /* NSString+CSS.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B78E0D7252C4E48AE420CCC060B9275 /* NSString+CSS.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B78BF9C40C0A9B00A5310BC79D6AEAD2 /* DTScriptExpression.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9CE8B30CA8E19717B011E36E9AFC7B /* DTScriptExpression.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7DB959FE62BD5F8898976C20F6E0162 /* UIScreen+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 54E1EB2C391923D837464ABF04988EE9 /* UIScreen+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7DFB68CCDE62FB71E6D7CE3EBB298F0 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7CEBE51E4FDFC4085E4A53DAD0D78D /* AFImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B801DA63C56C2E515C86F46715C1FE14 /* icon-info@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B76B864CE2E4DDF78240DC4395022547 /* icon-info@2x.png */; }; + B8416B082E3939F15CF93E71A489D482 /* NSDictionary+DTError.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E5D1CC0C6E3FEB893DAD59C4DFF94AE /* NSDictionary+DTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8708D2F0C3FB9AFA169505616FA07FF /* DTAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2C33131956AE30202E677FCE6AE814 /* DTAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B893DB45B6FD11E4FD5A928FD685784D /* FLEXFileBrowserSearchOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FE6369973241C33445A2243E36D63172 /* FLEXFileBrowserSearchOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8B02D1D315E348BE2382D8ED0B37B3E /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 018CA73C0BD72EE136ED86AA36BAD82A /* AFSecurityPolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B8BF73445FE3B3EFD774D35ACEDCCADB /* FLEXExplorerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C952E3C913E187A4DDF1E6555742CDE /* FLEXExplorerViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B8E5999D95DD23610112EB5AB233042A /* FLEXTabList.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C323032424364FE6261FB47CFB82923 /* FLEXTabList.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B941EE45092119E98B294A8857091FBC /* http_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4544755D721FEC38459A9350F61BCC /* http_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B95D690B09E499A634A8A88EF6826938 /* FLEXTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 39BA6AC1B9F5C778058A0E5ACE45B296 /* FLEXTableView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B9626F1BFB4AEC7374D5854E7B512CF9 /* UIImage+AHKAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 999BC28F519908F3FA30DAC5E56AF9C6 /* UIImage+AHKAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B998F07D5322219FE4ED8D4AF3881BFB /* AFOAuth2Manager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D13952404623207BEB9BA74A1056BBBE /* AFOAuth2Manager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9E2AF404293CE290274190D13FCC239 /* FLEX-ObjectExploring.h in Headers */ = {isa = PBXBuildFile; fileRef = 7734B3597F1CD577A3754C4ECDB3238C /* FLEX-ObjectExploring.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA3A6DC820EE2A430BF604D4DFDEF38E /* FLEXRuntimeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD6C14B9B046084DB69276AEE209010 /* FLEXRuntimeUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA51442A0B60E3277290709E548F64A0 /* DTHTMLAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 985FC9CAF96CDAE1F9C23CF1AD174998 /* DTHTMLAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA61B5E60217F0E813A6AFB0F2F0AA71 /* FSPlaylistItem.m in Sources */ = {isa = PBXBuildFile; fileRef = F1949B44672BB047CC6396CC98EFD402 /* FSPlaylistItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA709ABE847FC5FE08A0DE04EC028158 /* DTExtendedFileAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4E9D08BE4D42A9E1CA7FD450B1873B /* DTExtendedFileAttributes.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB290C910E1C3798731575AAD89F22CD /* DHSmartScreenshot-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9CA071FECECAFFFC7EF580EA7621A4 /* DHSmartScreenshot-dummy.m */; }; + BB6F139DFF0DCFD174EC8A1FA4BF561E /* NSDictionary+ObjcRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 001A5E6A81242FCA8F0C516B96E7A1DE /* NSDictionary+ObjcRuntime.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC051A384DD14360CE23651D5D250DA2 /* INTULocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 50955A021D54E5D707A9B1A930CBA42E /* INTULocationManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC552AE89D79C80DBB745E140FCBD6AC /* IQCropSelectionEndView.m in Sources */ = {isa = PBXBuildFile; fileRef = C760F67E19D81F6F08F7B9491AB15736 /* IQCropSelectionEndView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC6A7673017C15F80EDF5E3B961F5178 /* FLEXBookmarksViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F03DA9FE31B3890BED978D5E155364C0 /* FLEXBookmarksViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE2EA64598C0E813036D90ADA033E8C9 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 239AEF27589B9DF6A872418C38F31AC7 /* CoreTelephony.framework */; }; + BE43566E47DACA4D09FD11BB2E2D6DC3 /* UIPasteboard+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 4891EEE1E8889A884B5A72C5B4A5F33F /* UIPasteboard+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE9044639E9B2102A5CA6983E30D6413 /* FLEXVariableEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E9CF7D9F1AFCD8EA30AC8D9CAF48EA1 /* FLEXVariableEditorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEA2A10EEA3170403833F74C2DE5B8E3 /* FLEXMethodBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 885698E49A160D407D648C56B8846ECC /* FLEXMethodBase.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BEB1156366E50C7DFC49BB4B8DB83289 /* APRecordDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A3BDACE7385DEEFECFC0DD2B9E2546 /* APRecordDate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BF31361925C34717C1A51F9634A0C142 /* FLEXNetworkTransactionDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5106286979560A74BE343A60D63E7B6 /* FLEXNetworkTransactionDetailController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BF467AE337AE3539114D8901C5A41F64 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53C1FF0E60E9420CE14B2669BE77E0D7 /* AudioToolbox.framework */; }; + BF7E6AD7E83859380607DBDFD2453889 /* FLEXBlockDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 30FB0362F010A58FE71E2B72B940F2A9 /* FLEXBlockDescription.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF92898E744A2C49960010ED31FF18CA /* APAddressBookRefWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A45A2C9B03F1110645B05CC1FC41B3B /* APAddressBookRefWrapper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BFA5FF96CF7FBACDEE5E10F8CEF08902 /* DTSQLiteFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CE10D2E1AE3DFCA0B8911D9915BB2DE /* DTSQLiteFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BFD17318B4B78F5F7859ABAD87DCBEB3 /* NBMetadataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F489D98DE728D56A037C179AC635711E /* NBMetadataHelper.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BFE48AF9CF03C3F1588F856410089351 /* NSURL+DTAWS.h in Headers */ = {isa = PBXBuildFile; fileRef = B9487941140447262E6C10853693763C /* NSURL+DTAWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFEDCED1AAF1F4820161B2D50E6A9839 /* NBPhoneMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F4D08CC88206F890D7ADD1414649143 /* NBPhoneMetaData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0059F961E73A59688435B35CD9352AC /* SBJson5StreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = B2EF20CCFADBD27C45419CC4F251B4F5 /* SBJson5StreamParserState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0226A7C2D5D2A5A1FA75B87DD373252 /* NSCharacterSet+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = F5DAE44BE68914D25BD324B9360680EA /* NSCharacterSet+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C0291559A98729F42098114712C2BF27 /* DTTiledLayerWithoutFade.h in Headers */ = {isa = PBXBuildFile; fileRef = 79DDD5E8C1DD09D82A9DF75DDFF54A5B /* DTTiledLayerWithoutFade.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C050D1E7E2461E706C58CAB600F8B51A /* FLEXResources.m in Sources */ = {isa = PBXBuildFile; fileRef = 1945BF85D3AF7C9FC7FADD9741FF1AC2 /* FLEXResources.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C09FEF954AA91F7357151B67BD9BEC68 /* NSHash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 158816052E45B203BA41B81EB8DD72EB /* NSHash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0CAD0C4C01781EA88B50FF63C3494ED /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1632A73459E0D3A1897AA039EF45207B /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0FDCE9EBB06710D53393E9B01D62E3B /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ACD6E43FFFA43D8CF3B335DCFFA4A647 /* WebKit.framework */; }; + C183D9B2209FCD0FE3618243A6B7C484 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + C190D95F981D0851BC35894C5B01A4D9 /* FLEXTableListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3938F1160B8DE6C9314C3C1B685893F3 /* FLEXTableListViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1AF32DE6F5A58837991375FC227CCF8 /* caching_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B11128B58D190F573444835435BDC894 /* caching_stream.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C1FC9A6D39B4FB73EE957931FDCE8040 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D5F5D11DAEBDACB55A77005631642B /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C25710DB8BFE82282837D9C0D2D92E54 /* DTCoreTextFontCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B9377FE85D82A8D83AFD602D8D028308 /* DTCoreTextFontCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2855D13A9EE0075D5F4E0683D48D1BF /* DTHTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = AFDF61A12DBBBCA507B66D64FDE70203 /* DTHTMLParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C28E103FB49C2D4AC4FB3C47F91E91D1 /* DTLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CEB32BA8E881BBC2CE76E7632502268 /* DTLog.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2A57077194D5C0B9A72136DEE421F51 /* FLEXObjectExplorerFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = ED9A28E67C107796EA05E33C04B4B096 /* FLEXObjectExplorerFactory.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2ACFFD53186F23ECCEFA81EA8B926A1 /* NSMutableString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 117310F0305BDA98F0A4B2CD661A2671 /* NSMutableString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2C00F28545ED36FF5B1487FBA40E105 /* SWFrameButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 78353BC86AC56DB01C67C4BD7928FA4F /* SWFrameButton-dummy.m */; }; + C30A6C92E3781E3AFD8D2B3A8FC306B8 /* libPhoneNumber-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BBAA64D7B5805BEF78757C9A52D7E04 /* libPhoneNumber-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C31CF1C534C47B5766B60AA47D141FFB /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = F277048A6CDC33521D08BB0CFFB02B9A /* NSString+HTML.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C32499BBE59CA5332A9C79406D65D559 /* DTHTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = E6971E6FD90EA031A02813C2F3320A3A /* DTHTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C36EE88964D3040330740C8BE6FC97FF /* IQCropSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E6B44B57E7B4471ACDC1839B4FF3F7 /* IQCropSelectionView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C378D007AC1BA1DB54DE7EC1EAC7638F /* FLEXKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AF7EDC7B63B9E0589C06718B2ACDE0 /* FLEXKeyboardToolbar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C39F4C38E3A91D1E2172B1ABF825F378 /* NSData+DTCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 25209E0C10DCC70A6E14B4B10EB338B0 /* NSData+DTCrypto.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C4A20362D1A3400C5881228C1655C3EC /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B26405962A86C62E5C6575FFA1ABECB /* unzip.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C4C7AD40C388B18784DDEBB9E7F714DC /* RMDateSelectionViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0E71CCE2474FF2419CB9D5937AFBD4 /* RMDateSelectionViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4E9915110E1A5914616B0541B043B44 /* DTBase64Coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FD45416F8E03498ADBA0589F9C1BB1A /* DTBase64Coding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C55050F7014DF5547FEA9745C0BE87F7 /* FLEX-Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB633B4F3BF2B4AF9BC51FCBE3A6957 /* FLEX-Runtime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5789BF2AEE6433FA8669F8822EBDA05 /* APAddressBook.h in Headers */ = {isa = PBXBuildFile; fileRef = 69CA72F2C220E8C1E9D7D12606923A0E /* APAddressBook.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5DB2BA85606DBFB7CCF819B66F9A1D6 /* FLEXRuntime+UIKitHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = EA557DA1A326B7B7DCFEC095847B8874 /* FLEXRuntime+UIKitHelpers.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C623A3F63090363FF0D28A24A4B0C74A /* SRLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FBE509209B95C705B008B5E10EEDBC /* SRLog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C630EC37DAFFFE619DAE7DC7DB3FE86F /* audio_queue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D741473B5276E2C5199F3F8A281FB98 /* audio_queue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C66972F73B855151438A2D4E8D0DF2E7 /* SWFrameButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1A55EBA3950DD1A9A807599D4DA6A0 /* SWFrameButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C680A4E170658B3C64C5864894F015B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + C6C84AB4551062187688DB459D4129F6 /* NSDictionary+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = C908103F4D9BB7065F7F03A5D4AA71A3 /* NSDictionary+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C71E399CB15FD91171EFDAE164736090 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FBCFED0871815861403858026DC54117 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C72F14D7A62EE6FB00AA7B439680F362 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + C75275904F22D3EBBDDCBE141424E7AA /* FLEXNetworkObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6821D3ACDB5CA1B63C1D7589FED4C7 /* FLEXNetworkObserver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C754C7A0BD520D137C64E21510FCD460 /* FLEXRuntimeBrowserToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 57BEBD7065A708D9D818865C5D4314B9 /* FLEXRuntimeBrowserToolbar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7A0A5AC0223851322ADD747966049AE /* NSRunLoop+SRWebSocketPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CC4A62FCB2CD24B8B791968781100F1 /* NSRunLoop+SRWebSocketPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C81DFB1E45C1BFB1D87C43FC9564BEAE /* FLEXRuntimeKeyPathTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 721A9259F0791F855D4D0AF8929D380C /* FLEXRuntimeKeyPathTokenizer.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C862FD8E27BAA0383F75869E318273F7 /* NSTimer+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 807216B8F8DC6959E4E4C4E4CAE94408 /* NSTimer+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8938DBFF283B5C9E055E326B10CD08E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + C8D04DA52DB94DF80027E76BB6CF1F3E /* FLEXRuntime+UIKitHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C600D8DC01B455BC6296D31E2773D91 /* FLEXRuntime+UIKitHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8D66B6B5594DA3AD3F9E934C0941807 /* NSFileWrapper+DTCopying.m in Sources */ = {isa = PBXBuildFile; fileRef = 002D4B1B0B9B23D82E0CA10CD96B05D4 /* NSFileWrapper+DTCopying.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C98B4996B3503F91653A439CA6A0916A /* FHSView.m in Sources */ = {isa = PBXBuildFile; fileRef = 296BA21F300212CFEC30F69AABFA46CE /* FHSView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C98B7768158567CB1323A9701C307D8E /* FLEXWindowManagerController.h in Headers */ = {isa = PBXBuildFile; fileRef = 571F10CC7B7D0B873D8E53F6F75515D8 /* FLEXWindowManagerController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C9C10E6E222942011C0205766E077762 /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = D434FF7175C54B54FF15E273354A77D8 /* TTTAttributedLabel.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CA6D112CB20D2B98982E41114F311666 /* DTASN1Serialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A3CF3E548B970691396E862DAA29435 /* DTASN1Serialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA8538BCE87715AEE04C97D6D7E73981 /* input_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4660E0042C93AD93C8008AC4539E1643 /* input_stream.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CACAF4F4B67D69E989E1ABD8C562A856 /* NBGeneratedPhoneNumberMetaData.h in Headers */ = {isa = PBXBuildFile; fileRef = ECACC82F235633EFB673D0E7B532A117 /* NBGeneratedPhoneNumberMetaData.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CB27A06C7EAFBFA04873E499B2030BA3 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = A4FD80B7B91FE718E3B53328FE2A307B /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC10130A66F8627851C8424E5E8CA34C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + CC370FDF53DE8F74FA7F029ADC9E5A30 /* DTProgressHUDWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 130E2B4A35E4AC526552481F9214F1EC /* DTProgressHUDWindow.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CCCC1A9FC0058963DB59F40CF5C53474 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 2942E45921548E93C640E1508BEF54ED /* crypt.h */; settings = {ATTRIBUTES = (Private, ); }; }; + CCDE281E1F60E3673668036FF2417CE6 /* UIView+DTDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = F6C70948300C5297B93E758FE51EE642 /* UIView+DTDebug.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD1C898ADA05A99EED3620B3FE10BC6B /* IQAudioRecorderController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C0B9A1D654315BF8D8A4295890C6BFF /* IQAudioRecorderController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD24E6363A854BF2F3A1232B66A24BE7 /* FLEXHeapEnumerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 80135B3DAF2C67767F4D9CAF3DAEE5F8 /* FLEXHeapEnumerator.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD5B58064467BAC26A3B90A965583301 /* SRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 16E470D6A79510B4F1FEC3FB6092D63B /* SRLog.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CDDF8FB899C40C6F87BBA8D6B69F556C /* NSString+DTURLEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E3FB8CAB53F4B7E0C9BFFD43CD61981 /* NSString+DTURLEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE3FB59E93C205FD6B493F124CFA9DDC /* UIApplication+DTNetworkActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 765B0D9FA3D85E15DA37ACE4706D184D /* UIApplication+DTNetworkActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE733EA1720FFC6674810323A16702F3 /* UIViewController+DTSidePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = D39ECF712982709EA77A053E682DDB14 /* UIViewController+DTSidePanelController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CEB82FD190E5540B979E30ED914AF2CB /* UIView+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EE90CC5E943A0359E15E2EDDE3B192 /* UIView+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEEDEB3808C0A1571B8E16B78BC2626D /* APAddressBookBaseRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 9198785C02A82C194B44D8BDC557B562 /* APAddressBookBaseRoutine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF1EF4B31B4F4328D570FAD76AA2DD79 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C2904B61517BCA03652297C352FB6190 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF299D1A5344D716813CBE48DE170597 /* DTCoreTextParagraphStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = 50A2E832D49AC6ABC48779A948E03981 /* DTCoreTextParagraphStyle.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF33D49D6108A10E8D731C466AEBD89C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + CF37FCFE9D3E92A5821E59CD9740D1E7 /* NBRegularExpressionCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 388F08709F81732E785503E1227F8165 /* NBRegularExpressionCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF66742EB734594627381107C37F050F /* UITextField+Range.h in Headers */ = {isa = PBXBuildFile; fileRef = F8FF64800D93CD9364656616D8D54D8E /* UITextField+Range.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CFE77FD23B3E6AC0EE62E33AB2C644CB /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1107E32DE500DA81378FCA612EC6F45C /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D03EF5432ECD342931E274E1EAB4869D /* NSScanner+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F52F2AB1E2C35C1041E2577176330DA /* NSScanner+HTML.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D04EA1277BB20698AA9EA9DC54797EAF /* DTASN1Serialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0763B9C564B7F5E6C2100F38944A1B /* DTASN1Serialization.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D06D881B85C1F597BAD0342624B634B7 /* FLEXRealmDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7084941C36A5660CB27F779246996DB3 /* FLEXRealmDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D08117880BEC71D18B1E82BC2AD91269 /* FLEXCollectionContentSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 29F70D8F7CB82446F899CCD7C14D3A2C /* FLEXCollectionContentSection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D15DC1F556BC33C76E0A4EF6C6E05FBE /* APTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3747C11CF96542568B3CF09FCE223547 /* APTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1EA3586C8157FED23161C1CC1E4F6E0 /* APPhone.h in Headers */ = {isa = PBXBuildFile; fileRef = 218B2240812412AF0461C77BF25CA6E6 /* APPhone.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1F74786EB653514EFD27BFF95FEAAA1 /* APContactListBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BE9CE29299A9C50CDA5B73F5EAE93BA /* APContactListBuilder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D2590DF40A895DB23D605173E3208081 /* NSNumber+RomanNumerals.m in Sources */ = {isa = PBXBuildFile; fileRef = EE619684931D8892641F3BC9DB5B2AAA /* NSNumber+RomanNumerals.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D26B237AF45A16D41E4151A72F22A408 /* FLEXSystemLogMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C1C8F95759EAD616E0451E5B75A6C4 /* FLEXSystemLogMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2997FED73DBE2D73A1FD8260E7FA157 /* SRHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 0352367A2BB30CB850FBAD59C940AAFD /* SRHash.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D2C8D2ACBB25ADADCFF379A7CDE18C09 /* DTAsyncFileDeleter.m in Sources */ = {isa = PBXBuildFile; fileRef = E28D798F8390DB5D32114D498C4481DA /* DTAsyncFileDeleter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D2E47E0488FA37A14E6CB2A8C402902A /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 62077C0B6278112FD17AC8B73692997A /* MBProgressHUD-dummy.m */; }; + D35277188D419BE7950D9F9A800CA771 /* DTDictationPlaceholderTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 864E668F951E85DA3738F4050EDD229C /* DTDictationPlaceholderTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D377CC18F71A2A0EDAAFC283DCC57E78 /* FLEXTypeEncodingParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FA4ED1572B99C493A1F0BFD3C2B43B6 /* FLEXTypeEncodingParser.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D380D2F3C0C2810C514F413FC65B13A7 /* APPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 58AF0171A7CB93B1CC449880EB7ED4B1 /* APPhone.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D40484C12FE8F85A9C5917095BC7CA5A /* RMDateSelectionViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B4C4227F50344FD84A072C1E9E5C8143 /* RMDateSelectionViewController-dummy.m */; }; + D49B472FA76DDF5582C7636EA189C6EC /* APRecordDate.h in Headers */ = {isa = PBXBuildFile; fileRef = AE37BCB539361B2DD2FE1DE5F2D0A24D /* APRecordDate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4A075BF4BC73F86A71D8462A6E2A55A /* DTHTMLParserNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 72AA7139B921F7E8D9FD9579A3361983 /* DTHTMLParserNode.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5CA730881C2861C591F6C291A6907ED /* UIScrollView+DHSmartScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F2482213A1E276EF7B5388B8FA6E6A0 /* UIScrollView+DHSmartScreenshot.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D61A3A78CDF9D196FDBA2653C9A6DD44 /* NSString+CSS.h in Headers */ = {isa = PBXBuildFile; fileRef = CD37D9C9CF892992D2AB49344EFD4EFB /* NSString+CSS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D629BE81814AED22D94513D355A34212 /* DTAccessibilityElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 6499664C3D3D12E33AC4BED1910844E6 /* DTAccessibilityElement.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D633E443284D5A6FFF82D0FFAA5CD55E /* FLEXCookiesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 86E0104D58C77AF87D1C6E2DA46B7AB7 /* FLEXCookiesViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D65A932DA7AF267412F35B661CE80518 /* SWLongPressGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 80052E3998270C3A96C7E325E07B357D /* SWLongPressGestureRecognizer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D67778C9A37822AF2EE359559757AD48 /* RMImageAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 7527570298EBB22C02AA1D5778A7D1E1 /* RMImageAction.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D68F0B4A2D65D1C3FAFBBB11C3D51FE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + D6B3E2BCEB090123FFB9EBF509254AF5 /* UIImage+DTFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE12C638CC195E9FAFBF7319D5530D03 /* UIImage+DTFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6CF9453A4CA9AA54B373A1AE955FF77 /* TWMessageBarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8868D46A08F0580224637B452CA4C046 /* TWMessageBarManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D72C3DE9FFB20FB1367D64A030C19C3E /* INTULocationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FE597523EDEF968C77B01685BF05EFE6 /* INTULocationRequest.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D8736CD7086F020B48E0C3BDC4BC7CCB /* SRDelegateController.m in Sources */ = {isa = PBXBuildFile; fileRef = FE3FF948CFA7668F2E994A30D36F698F /* SRDelegateController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D881CD79DF22F3C179339C6A55824004 /* FreeStreamer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BC9494E3163598C985E96DBA0BE99C84 /* FreeStreamer-dummy.m */; }; + D8A21A5BA995F219E3D71747D9DE577E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + D8B4146577B6F707BAF6D210BCC0F430 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0EEFF8DAFB86B146B67FF3352F004F9 /* AVFoundation.framework */; }; + D8DC3D480ECA681AD57F788B2B0BA4DC /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = F1F3CED6540D9077B5763C7A39F07C72 /* unzip.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D97D1A1D406F551D151035B7F7BC1EAF /* FLEXKeychainQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 9009D85242271158797C8F97F7DDA1F7 /* FLEXKeychainQuery.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D98645994B0BF71CD0E6654EF1753A03 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */; }; + D9C916B7CE75DBEDA6083B422071BD31 /* APImageExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 97B0B7CB4BA0450A2746A9484E98E199 /* APImageExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9D6C9CF19445F1A7C510F3F2FA8AF39 /* FLEXBlockDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 948D5A76E28A213A30AEE1BAB05B3972 /* FLEXBlockDescription.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D9D9F6EA3EA518AC08ADF990A99E8710 /* DTSQLiteDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D5134647D2AF1E64F7BB4ADDA97E67B /* DTSQLiteDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9DF92E6BAA360D0C6D30D40E085CE93 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + DA4ABA5018CF4B581FF525960A98D11B /* OMGFormURLEncode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D660401E38170752115DFE8617DF310 /* OMGFormURLEncode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA7FA44C93FE0891B52102CC836440DE /* FLEXFilteringTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C6CE05686ABDFA639897913F3FEDED2 /* FLEXFilteringTableViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DB0038866411D300F5679D013E3812D9 /* DTActionSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = A54F7BC2E35257E3F8BE6421D84A6F1D /* DTActionSheet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB2A6863D1AE62448F5B3E335387E872 /* SRRunLoopThread.m in Sources */ = {isa = PBXBuildFile; fileRef = CF3266BD9F18685BD95A1A2233346E35 /* SRRunLoopThread.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBB19D73C091BE29BA85E654A64987CE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */; }; + DC15319E34C50A21738F2106D707C140 /* FLEXKeyboardShortcutManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 09383ED027CD6B941FA42B1D2E006CCE /* FLEXKeyboardShortcutManager.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC1B4AD85DB20F24BEC11FDF4390A0A7 /* REMenuContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = DB113A5E89138A209DC07CB2CDEAAFAC /* REMenuContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC3CABD8B9FA244075656C930928F88F /* FLEXKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E5185FC017521D8355C6F7A6AAACD32 /* FLEXKeychain.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC44935A5039E53398677A31BCFE6C75 /* SceneKit+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C478AD3554A06D046E04A46CEDEC8A5 /* SceneKit+Snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DCB554A5FCF3B6DA1092467BE0F4D935 /* IQCropSelectionBeginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 16FCA05FD03C8E19CD7C7ABBAA8FAA39 /* IQCropSelectionBeginView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DCF5CA3FC203EA2C5BAAF8873277124B /* SRURLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 50FBD0D7D7763CF0720C02FF25DB9A94 /* SRURLUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD381B452ECDD51569CA47302E69D1AF /* DTReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D545569043D5C95CCAB3B6D62A307AA /* DTReachability.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD7BF526EC9FAEBE63B72790B1C01C8C /* DTTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BADEB3D1B61747AF8F217494859A5E1 /* DTTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD916FF2F53D982DC9748505A8F5021C /* UIViewController+DTSidePanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 20783966C716EE77AF50F2B32A2BCA63 /* UIViewController+DTSidePanelController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE5BFE2919D6A0167EF00C6EE5269697 /* AFOAuth2Manager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23EA484AF45F531310DC3603084BCF4D /* AFOAuth2Manager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE9DEA9BD889AF7AB0AF62E15D1304F8 /* FLEXKeychainQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9AE625DA3AA3059422F6B96F028C60 /* FLEXKeychainQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DEDA1A634DEB2D3AFF3389BE6B010B6A /* SWTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 174B0ED22B870AE674C4476564D33805 /* SWTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEE180BCA3A305DBC15BD067BEA17375 /* FLEXViewShortcuts.h in Headers */ = {isa = PBXBuildFile; fileRef = 2632A8986040CCE8FABD1C03052E55AC /* FLEXViewShortcuts.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEF786F399FA40D8568E8CEF45132B2D /* SRSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C2550A829B2B0943787B2F4AE302D93 /* SRSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF5054AB72C38268F2E208FCCFB5719B /* FLEXTableContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B43499ECCE09C248382F2F4B182595DB /* FLEXTableContentViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DFDEE464FB58E4BBE4949FEE8F9CDFEF /* RMActionControllerTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFAB0F31F5518CB1C36BDEF161ADBEE /* RMActionControllerTransition.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFFBAD7693AE9B9CC6F5725E98FE9D28 /* FLEXHierarchyViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F966BD2F09611F8CDFD4A4D1DF03827 /* FLEXHierarchyViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E011215437382C3ECC799536C8F7EED7 /* SRProxyConnect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA108B6718BC9F3FB1D42EE809DDCFA /* SRProxyConnect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E03B0902A176920CF725462CC9D1F174 /* FLEXMultilineTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F892D5CA8A20AB0F6DC922EAD389B776 /* FLEXMultilineTableViewCell.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E05B24AC697ED384C17BF64DB954A3FC /* FLEXArgumentInputDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 589F4250F896280E34AD0C32D0131FEF /* FLEXArgumentInputDateView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E05DF0A438FB11CA49AEF959E34EFF74 /* DTAsyncFileDeleter.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A4CCD030CB39845F7149D68845F25A /* DTAsyncFileDeleter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0B8FEA9C4A127E1ADA1AB5959ADB1D0 /* FLEXTableListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 609CE51C6268A8D2179AF6C292B4EFDC /* FLEXTableListViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0C16899727D2F0B6A35D2354BD67FE4 /* SBJson5StreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1470F7210D81DEB1DE9135C22A15108F /* SBJson5StreamParser.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E125E01D1661AED61704E6D061C5A0F1 /* APContactDataExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E24E5EDF0B14B9DE2FF399B71B0200 /* APContactDataExtractor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E1AD114DBFA17FF19F824F3E7A7DA43F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + E25B21DD0AA732055F7127430368500A /* NSString+NSHash.h in Headers */ = {isa = PBXBuildFile; fileRef = A23ABDEED49B2A76722858E7681731A3 /* NSString+NSHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2D7A08BA1CF39E74DBA34EC8546F38E /* FLEXRuntimeExporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 19368D61F22E634FDC3BFFBDAB3A8F58 /* FLEXRuntimeExporter.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2DD5207EF5ABCE4033277E909BAD5C6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E31B6731F57E7DB3B8715CE39994F082 /* CoreAudio.framework */; }; + E36BBF2B20A7CC37A9910592454A8439 /* NSDictionary+DTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E1C4688E3E3502DB9DD7AA6ACB09D6B /* NSDictionary+DTError.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E394BDF5A92DC3F98AB3DD6C08BE1FFD /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 14902A5745D0E8A5D310591783999468 /* SocketRocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E39C5104DA1AB5C9EC8C1AB1111922DA /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BE5BA9388B38DD51E7054400100E375 /* FLEXNetworkCurlLogger.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E3A31E91C4FFD4864EDE7E3D08F2C0FF /* IQAudioRecorderConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5358A505EA091CA18BE6C7921239EE /* IQAudioRecorderConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3C3C3A98B5E881FC08D054C0E5F646A /* FLEXUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8D2160ADAE6BAA12585ED5EDB6A2D /* FLEXUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4997A4CB748BE6920B86ECAA899247A /* SCSiriWaveformView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 341FAA4F453D917F3C5526D7FE54E4E9 /* SCSiriWaveformView-dummy.m */; }; + E4A14549CE46DABDE63273406583751D /* SRRunLoopThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 87C221D04B4FDF17CC3BAEFEB981EDCF /* SRRunLoopThread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4B8BA75A090AB392A76D14BC4BBE8A7 /* DTActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B9442323A5730012E8EF8380E36E53D /* DTActionSheet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E54C99E4F01D95A4272385AA495C0D4B /* SWTableViewCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E0F2A45E805D5224959B87DA63BC807 /* SWTableViewCell-dummy.m */; }; + E583ED285BD4284B22EEDD440C00B642 /* RMActionController+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CBD9DCBC0D191EA10430FF06E3ABEB /* RMActionController+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5B77AB6C3B3B820F767EC630E08A92E /* CTLineUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = A3FA2EFE1F19A8A872F416F45C5094D2 /* CTLineUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E5FA7F22DDD92428053AB02E66A910E0 /* NBMetadataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AECFFF1B13025BFFC08A1EACA020F00 /* NBMetadataHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E694E6CB0EF5DECDFA1995A756FDC9F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + E6960A9FB6C4585A6D8A966CEAFA8134 /* DTZipArchiveGZip.h in Headers */ = {isa = PBXBuildFile; fileRef = 11FE939F5CFD35243D341936CA26740B /* DTZipArchiveGZip.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E69C6066A9C468CDAAEF52321EEEB157 /* FLEXManager+Networking.h in Headers */ = {isa = PBXBuildFile; fileRef = 76D8FC0EAB9CB3D5CE848326DDC7B3D6 /* FLEXManager+Networking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6BE6AD9F3DF13DCC3BC0061F33743D6 /* NSURL+DTUnshorten.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EF054CF1BC3854097F909CAED9580A /* NSURL+DTUnshorten.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6D64FBA7848A78059F632C03E8A6395 /* FLEXASLLogController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9017373D22329B32E123C58BD7B3D3 /* FLEXASLLogController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7189B3D3C256108776CDA0F1A28FFE0 /* AFOAuthCredential.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A17429BC33D0D4B7A683E5343482EE /* AFOAuthCredential.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E75D0CD5CAAEC1FF40DFA8AFA0B630E6 /* FLEXTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96A818790875679DED3E5455903D40B1 /* FLEXTableViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7E8B1A0B805373D62BF0B99FDD80AFB /* APAddressBookExternalChangeRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A0306FEA4D752C843625EAEEF26E214 /* APAddressBookExternalChangeRoutine.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7FFA8CBD41025ADD1E25F2D2AF6504D /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */; }; + E847A776128E8E1E8082D93171379E9B /* FLEXManager+Networking.m in Sources */ = {isa = PBXBuildFile; fileRef = 985E9BC261260914DAD0B8F80BE33208 /* FLEXManager+Networking.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E8530F7DC8635DA6E536207C3600C605 /* SRError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AB577AC68AA917CA638EFEF2FCD780B /* SRError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E929DF568762CC27E3ADADDDF4C75D2A /* FLEXWindowManagerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9907F73C39F11E1AB908FC536359BEFD /* FLEXWindowManagerController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E936976B34DD65E1D3253B9D55EF6F86 /* DTVideoTextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 424CE5AE0FDC906234D47B797E2569E9 /* DTVideoTextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E95ABE58605C8FC5A0B5CBA69885BF88 /* JDStatusBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 90F737AB4F7D4A361B0367283E41B608 /* JDStatusBarView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E95DD7EA06ACC5B6FE06A5902B9CA1FA /* FLEXArgumentInputStructView.m in Sources */ = {isa = PBXBuildFile; fileRef = C197CBE834200C6AD94C29475727C929 /* FLEXArgumentInputStructView.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E97CC067963C528C29BF64F9961052D9 /* FLEXProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 40DFD05C01872AA39C1458362A89D3FD /* FLEXProtocol.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA17BBE030929397EA4550BBCC4B4437 /* DTAttributedTextContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 403163F1F38F2846264AAD66E660C9C9 /* DTAttributedTextContentView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA19ACA7DC067B16A346C6817011CA9A /* FLEXGlobalsEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 6555F4AD293E8A62B79666191AD44B7D /* FLEXGlobalsEntry.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA6E649A5F4A9C1AC0B2B3F1CDED5BAF /* SBJson5StreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C9F695850B16F9058BAB79CD54F5030 /* SBJson5StreamWriter.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA7F5E78340933B524E9E4DC675D7480 /* NSNumber+RomanNumerals.h in Headers */ = {isa = PBXBuildFile; fileRef = BCE21FAA362DAF601E7F4A5C42321FD2 /* NSNumber+RomanNumerals.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA86854445827F9532DF097A98080DC0 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6D6B6EDA06F1BC13B05982902F629F /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA95E317D66D3C118D89DEFB174DAE5B /* mztools.h in Headers */ = {isa = PBXBuildFile; fileRef = 433FF0BF784294CC74EE50DECDAFA730 /* mztools.h */; settings = {ATTRIBUTES = (Private, ); }; }; + EAE4F84171DB360DCAFB27C1D4EC0668 /* UIScreen+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = FC99CD3D2BC49F3753B5C026834F526F /* UIScreen+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAFAC1649BA898C0D7077BF37BC5427E /* PHFComposeBarView.h in Headers */ = {isa = PBXBuildFile; fileRef = 10418C9DCB9E75D7ABB45308D1276E57 /* PHFComposeBarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB0C16CCB550AB69017B95CD0C18C256 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EC21C248F12785197C09A17EE49F156 /* UIImageView+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB2A4C29BE958CCB03B3FD9FAB927F1F /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = E6AFCB09635F358A9BE1A485AC5052BA /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB47A72DA28EE0B99D9B1BDEEF6F2EB0 /* IQMessageDisplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = E987D1C71C185A8A4BCC1D580991B8CF /* IQMessageDisplayView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB4F7CF30396FD1F738DB8DD8EA064BA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + EB502D25ED1F2A6A1C993CB79CCCCF2B /* NBAsYouTypeFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = D2701F1479D89B35D4EF27F1D5F17957 /* NBAsYouTypeFormatter.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB62FDB482265374A7099CB275764778 /* SRRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF63610F82AEDF3F8F46FB3CDE3D82E /* SRRandom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBAEDC622192E8801A1349FD397574D1 /* DTFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02F6059AE10EC5577C99A4867C058877 /* DTFoundation.framework */; }; + EC6F9654B4F0A38FD66C253728D659DD /* caching_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 77490B74EE23BE98EC12F73193974B10 /* caching_stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC7748F0E242DE788C0F64C15B1EDCFB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + ECB09EE1539DE0423068ABAA9CA5FF54 /* DTHTMLWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 821274D80BC83D71C7FD8FC9144F0E5E /* DTHTMLWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECE37F0547581663D4C6FE41415F7BFC /* FLEXSystemLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D968CAE39FAB5B30D533DC9903A656 /* FLEXSystemLogViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ECFC270848545655C87C22FEEC872E0A /* RMActionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 572C8C5F1218AF4DE4A49729577A33B0 /* RMActionController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE1AA175ACB4FBAAB7103EE6FBF01026 /* FLEXImageShortcuts.m in Sources */ = {isa = PBXBuildFile; fileRef = FED3AC56009E3AEA1E3E352D88B27964 /* FLEXImageShortcuts.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EED3EFFBAB0805F042A0D902A3C89312 /* SWFrameButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A1C49B0D5F7B9383BA478821467562 /* SWFrameButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEF574C9E4458EB16F62C9C959A1CC5E /* FLEXGlobalsEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = A405C31027BE5E6C0D4F5B59EB003E1F /* FLEXGlobalsEntry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF52EF90D701516E7C8178FE0191D01D /* FLEX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E1E382507D3CCCB95D54E5DF8D42EB5 /* FLEX-dummy.m */; }; + EFA706291E1A6F2925CF8D2AB7E8A0F1 /* SRIOConsumer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3396DE7605695340A78B53D1D927516E /* SRIOConsumer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFD9C1CDE35F03D16FF9699B7E620ED1 /* DTObjectTextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C99166F47F2585ADEAA26C9D6EB90D6 /* DTObjectTextAttachment.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F03CB37D759505CC43B788D14D8CF60B /* FLEXProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = CFE40888131E8FB124445AA8F8D3143E /* FLEXProperty.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F06F85C0571AAA884351590943E8712C /* FHSSnapshotNodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3403BD6F593C47D4C33BC4380F6CA87E /* FHSSnapshotNodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F096EBF518469AF9906745668F7D3330 /* stream_configuration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46C260D1772565B128D6A570E93129B6 /* stream_configuration.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F157869CC61946CD19689CF39CBACC3F /* DTCoreTextLayoutFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 409CFAA7242E7D7EF4E88FDDC016DF2D /* DTCoreTextLayoutFrame.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F18169661CE752147FC049D66C604872 /* FLEXRuntimeExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = EF2DC5E8C13279A82A2211D167744F6D /* FLEXRuntimeExporter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F1836D635C7FE287335DBC22F1C3D840 /* RMGroupedAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 30AD638588599A5D5E0151BC5D2192F8 /* RMGroupedAction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F18C699B9D82D729511C216D84ABB2F4 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 882EDA9A5A8843C5BE04FACEE1A3DCB8 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1E040D72F87CE5C0C31662B8717EF20 /* UIMenu+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A9AFF87FA166A02F8140D890A833286 /* UIMenu+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F225735542DCC27B8AE57E9D39295D66 /* UIFont+DTCoreText.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CEFCAD991BDA5EED078A40B6E24B50F /* UIFont+DTCoreText.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F22B078DC80E8BBA084C9B3A1CEEF880 /* Reachability-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0CEE47C188E2411B60D3E581F7C54E /* Reachability-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2469E246F18D9303CEED72B12BB196F /* DTReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D280C2C35A22ABEBE9233E09B11774A /* DTReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F31E74B8E946059946152C8808C296E0 /* FLEXFieldEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D1B7FC692D99B52D25304729695630E6 /* FLEXFieldEditorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F36AC4EF50DA3CF6CC6DB018227B1110 /* FLEXDefaultsContentSection.m in Sources */ = {isa = PBXBuildFile; fileRef = EF97F18A71813674F4F15B825CF6D829 /* FLEXDefaultsContentSection.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F373E08D2E301F604751C0E5C5996B18 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + F3A4527A0BB8C4ECBF43B21F28A7DB11 /* FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 829F18162BCBA0901A795006B5416C9F /* FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3C847E1C5B2757654C7993B44E16825 /* DHSmartScreenshot-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C4AF6FFD3F2F0BA3C60854C39B3083 /* DHSmartScreenshot-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3CEC8624D8CEAB38ABCEC333FE5030C /* APJob.m in Sources */ = {isa = PBXBuildFile; fileRef = 8093992CD3EC3F8E026BF018FE0094E3 /* APJob.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F48936F1491C200EC90A8A0479379C7B /* DTTextBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 559A06E925FD477E0E70603BB825EA7B /* DTTextBlock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4C284C08C734CDEC182D775EEFFE70F /* DTLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 726231912AF8FA00D1E9A5274C0B7599 /* DTLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4F6B01DEB438BFE858A995ADABB3EF3 /* REMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3817A3BA79FECFB77F52162917901057 /* REMenuItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F50E0776DA7C9D66D8D4BDBDBC4AB4A5 /* AHKActionSheet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 051F04604B2BE2E3472BFBEB231578ED /* AHKActionSheet-dummy.m */; }; + F5B1CE4B1F9E1F774238D0B1C262EEB7 /* FHSViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BE6998E73DE6CCC443E50B0E6B87858F /* FHSViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5F5AC47DB4D59F4A8B8895DB0E1E22E /* NSString+IQTimeIntervalFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CCEB84969B7C0842A475239438693CF /* NSString+IQTimeIntervalFormatter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F64C1EAB224243616BD75341A699DCD3 /* HMSegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = D5C15A832FF7CB115CDB69CBE663F3F4 /* HMSegmentedControl.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F6AC8B45DC4C2FCC3B9214F9A1A6120E /* FLEXPropertyAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = AE20E63F604D9EA99DE94ECB1524E27E /* FLEXPropertyAttributes.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F6B3172EA138579B5B581090471B11FE /* IQCropSelectionBeginView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F78D7F5E7E4B2149E95620BD8BA5BD0 /* IQCropSelectionBeginView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F73838B27D61B4BAD67051A8E3C64F72 /* NSGIF-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B3D5A058DACD2B482111D932318D8A7 /* NSGIF-dummy.m */; }; + F7E10FBB2E30075A6FA7A503A20979C5 /* SRHTTPConnectMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5B31A5D30958729E4D920CE3896A9C /* SRHTTPConnectMessage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F80559155CB1407277B67714B64EC18C /* DTASN1BitString.m in Sources */ = {isa = PBXBuildFile; fileRef = FD203B0FB8A97B55112E52572F0B6175 /* DTASN1BitString.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F83FB2FC0D79DEC7E52C20E52D248B80 /* CALayer+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = F93C261B72CF415FED393D52BF9DA7A5 /* CALayer+FLEX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F85624370A667BAD52A46736ABF00106 /* JDStatusBarNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = CCD27C18259F8C10EB0C2AB92C9F51B1 /* JDStatusBarNotification.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8BB42CD924EACEAADC628130C5E90BB /* NSString+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AB4C806742477A12D5E26D4D9E3ED8B /* NSString+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8D237D10BC7F5919D9E8356C5834E44 /* SWCellScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B39A6F2A3777667BF3FFD3CDE9140C8 /* SWCellScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8E3384D17048E56451003B51AA0B593 /* FLEXRuntimeSafety.h in Headers */ = {isa = PBXBuildFile; fileRef = DADC78E9A981E2057A10118C12245F48 /* FLEXRuntimeSafety.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F96092E6884493A678D3D651DE387C50 /* FLEXSubtitleTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 026ADBD17EB07FAD15D15CEFC1573A79 /* FLEXSubtitleTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F981A748791E13654348FE8BB32FE555 /* FLEXAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A73871AF8714EE242BF51E9139A290 /* FLEXAlert.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F9D683EC3C28807A84B7D15EE705F954 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */; }; + F9E1F74FD5E5054189224AF11AE5543F /* FLEXAddressExplorerCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6029D4A09BE1D74F5F581B0C349A3832 /* FLEXAddressExplorerCoordinator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9E6AF795CDDB97044C9EB7EE2B09237 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + FA477D5A2901D2F029A0832B617F04BC /* DTProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F7031AFAC7E614F30512B73052B49B /* DTProgressHUD.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FA58942AAE2E21147B1B0CE0D0822E97 /* UIView+RMActionController.h in Headers */ = {isa = PBXBuildFile; fileRef = 024315D666286AD7E2D70D73B99A2C19 /* UIView+RMActionController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA9CCAD049C30F6F07B48930F08D6E72 /* UIView+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = DC723AB3B15462F4EE3855AAB24DF3E2 /* UIView+DTFoundation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAAA7775E7C668F96FC32805D2316692 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D62E0140E803C34055680C2A10DF4C /* UIButton+AFNetworking.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAC19B1FD31D034EE11211DAC5AB5564 /* TWMessageBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A151B710913BAE9DA712D5A6DDE49B2B /* TWMessageBarManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAE5610F3AA05CA88A3BB91CD4D9173F /* FLEXKeyboardHelpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D5A507AC60F40F9831EC9BCFEF251 /* FLEXKeyboardHelpViewController.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB2D7FEC424982D83FCE0195C57E2DCB /* NSArray+NBAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F5F19320A6A35E163C501276DCC4CB3 /* NSArray+NBAdditions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB87E00B0C3B4F3405E08C43C4978824 /* FLEXSystemLogViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C64F98D10BC3B37ADE22C38C156BCC /* FLEXSystemLogViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBB315EBC9D0D8010CB35B6FA028C413 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + FBFF7CEFC57B9B3D76844B06FE60D063 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */; }; + FC3A2B9F42FD32BAEB7A6BBFC0952375 /* UIView+RMActionController.m in Sources */ = {isa = PBXBuildFile; fileRef = BBCE61B8CC60A2E0071F587F49418E75 /* UIView+RMActionController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC51E9CFC9C500F8606A697A931C525C /* CTLineUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 429B5E520B3095C41B3E06090291047F /* CTLineUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC968186280D8CBD7F1D2A12A6CAC885 /* FLEXColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D26B064F0BBCA21CFC2E900A20672B7 /* FLEXColor.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FCBFE8224ED3B4B52BA389BAB835821B /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6520E57CB1C03329BCEA4E564BDE618 /* SocketRocket-dummy.m */; }; + FCC6ECD96AFAB09BDE9516D7677FAC88 /* FLEXWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = E9DFBBBDCAED23575EDADF065D0C0202 /* FLEXWebViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCCEE247711D5889C944F437F8DDED04 /* UIColor+DTDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = F2CCF24CFB7E83004AD75541CD624C39 /* UIColor+DTDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD36973E09C5BAD16137D67E7A3BD3BF /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFEEDFF9641FBA2DBAD75D4C68B70EF /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FD501D71B259275D6420686F2DE4E04A /* UIFont+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = D06F6DB304441E650D6327A91D07F337 /* UIFont+FLEX.m */; settings = {COMPILER_FLAGS = "-Wno-unsupported-availability-guard -Wno-strict-prototypes -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDA3ED0912E150DCD16DEABBDC81AB3E /* DTASN1Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 02B226C8F836857901CE6C52DA10C8C8 /* DTASN1Parser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FDC64C56B87E357B142FA953197E6C2E /* FLEXLiveObjectsController.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A2C00FB728B7163D08A2DC4AB69499 /* FLEXLiveObjectsController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDDF0307D303A138B1E95A657C003FA2 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6236D80A8E5D4E0A2589E88509AF05 /* zip.c */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE22EE7A0E242C206BC5B468CCA77354 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FE617195F5A51366B13DAA0541424726 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE5BC3C0E3B272621708D531188DF587 /* FLEXObjectExplorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FEE46C2089701F367345357C7926850 /* FLEXObjectExplorerFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FEAE7E78BE971DBBF872AEC487B689C2 /* BBBadgeBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A73B8BB098AFB3464177001B2C2B15 /* BBBadgeBarButtonItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FF0EE7E6F869E55DA268F25622674EB9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */; }; + FF7F22FEFD3EDB92ECC7FAD8BCE7279C /* UICKeyChainStore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C3F02E84C166B698AF212F73CA9108 /* UICKeyChainStore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFB0DDC17872B9521389BA52161C2F01 /* FLEX-Categories.h in Headers */ = {isa = PBXBuildFile; fileRef = B282B2E9D99E31B009D5406C2C77EBA5 /* FLEX-Categories.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 035222BDF9A414CF372D1EFB482719EE /* PBXContainerItemProxy */ = { + 03CADFE3CA693343B86E2D3E9D693FB6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7D03E663BD4329BB02BEA5C4259A28AC; - remoteInfo = SCSiriWaveformView; + remoteGlobalIDString = 7406ECC476A62C8FA502AD0E8D1240BE; + remoteInfo = UICKeyChainStore; }; - 0619528A7B15E6830BBDBE517FAE8C75 /* PBXContainerItemProxy */ = { + 095C8FF706CF7A9BD68A3C5AB196C280 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = B661F6B2A4D53F3A1F5A0925C752E388; - remoteInfo = "libPhoneNumber-iOS"; + remoteGlobalIDString = 227BBE5BEC64BA0EAE27D2254B7BFAA8; + remoteInfo = SWFrameButton; }; - 0A44F718D07E3F6A40AF716C8ADC6139 /* PBXContainerItemProxy */ = { + 0C2D0E87DB8F80D0B38DAB5B52160731 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 9AD48931F9D7F36D3269DE407ACDE4DA; - remoteInfo = RMActionController; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; }; - 0CC083056A64B080DEBE525FA9C7873C /* PBXContainerItemProxy */ = { + 0FDA8728CD50F6BF72B6DE1B525C0BBF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 82B7D0D24512027B92E1BCFB49F2FC1D; - remoteInfo = FreeStreamer; + remoteGlobalIDString = 0C24CB0E87A728A11AA1124CB360D6A1; + remoteInfo = "DTCoreText-Resources"; }; - 12157FECF15F2745D7AA62DD2071957A /* PBXContainerItemProxy */ = { + 17A9CB45706220D34F9F36034D63641D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D1CCA53310013DC011604B1B4236B9B9; - remoteInfo = "DTCoreText-Resources"; + remoteGlobalIDString = 9487B084D206F15C70584B251B79A311; + remoteInfo = RMDateSelectionViewController; }; - 16A9C2CF4D87F8D1699469A956944EA1 /* PBXContainerItemProxy */ = { + 1829A0C51C2519D28259E5DA39093F82 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 60C5D41946161054FD44CFAFAA3B4D14; - remoteInfo = HMSegmentedControl; + remoteGlobalIDString = AC337482C8CEE36C809E23FDC64FC799; + remoteInfo = APAddressBook; }; - 2A09D17C4D0CB48D0354C5125E10376B /* PBXContainerItemProxy */ = { + 1A9AD09F21E465AF68D79F6B9643002C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 190026D091222FA1C9C4F63F8A6EF3D1; - remoteInfo = SBJson; + remoteGlobalIDString = 3AEC09E383B46D12E00628362EB86D67; + remoteInfo = FLEX; }; - 2A32FE6FE2EBB8387DBF5C664F4C2C68 /* PBXContainerItemProxy */ = { + 1C7C7547CAB40B6C4969D1D18337E938 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 82B26312EB7846033C795530DC0FD67F; - remoteInfo = SocketRocket; + remoteGlobalIDString = 8F6E5A5BF72D62CDFD25F91A7CFA3309; + remoteInfo = DTFoundation; }; - 2EA7D6656A029C3AAAE17B4DB51026E5 /* PBXContainerItemProxy */ = { + 285ACE224F8DEF09AD5AE4150FF30B70 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5E3BE6A21C2416E7EBD68B59281FCE02; - remoteInfo = NSGIF; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; }; - 3293E59C1E602E5BEEBB510D475724C0 /* PBXContainerItemProxy */ = { + 371AB377703FA7448421D23FB6E26AD6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5808033EF96F84CEC42633AA2D3F637D; - remoteInfo = SDWebImage; + remoteGlobalIDString = 1948D0B63D2CF6A48E18B0B292BC6091; + remoteInfo = SocketRocket; }; - 34FCFEA3C8CC92D25F9B1412257A5298 /* PBXContainerItemProxy */ = { + 4192BF24832AD579F89BF361E03AE572 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = F5A071230F00E7E32386E8310A2DA6FB; - remoteInfo = SZTextView; + remoteGlobalIDString = 5E4069B2BCC908BD892C971DCD91EB8C; + remoteInfo = AHKActionSheet; }; - 35572F843F10080A206B9FEC220BC708 /* PBXContainerItemProxy */ = { + 4E494F5CA787496FC5F9AD9CA316A18F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C85BB5559C4F5CDE5F6B261B4EE0C54F; - remoteInfo = BBBadgeBarButtonItem; + remoteGlobalIDString = C3AAC0817EA4DC8BD9C0046F50078BF9; + remoteInfo = FreeStreamer; }; - 401335F08B23D215C8ACC2FF73F1285F /* PBXContainerItemProxy */ = { + 503636D1AF31E17D8B51A0A6AC0CC3BC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A2B588A0B3DE0C5843F6866C2D3C96DD; - remoteInfo = DHSmartScreenshot; + remoteGlobalIDString = CAA047C0F5E4106F3904E8497FA17F97; + remoteInfo = Reachability; }; - 42007C698A09E649C83A444EEF2A2FD8 /* PBXContainerItemProxy */ = { + 536C7D31C32C4F7D99B7DFC0CF6F9062 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = F704787946C680A43977C21E937624CF; - remoteInfo = SWTableViewCell; + remoteGlobalIDString = DE59D3D21AECD5F399E953205FB55A86; + remoteInfo = OMGHTTPURLRQ; }; - 47F820A7F6B7C481C747E2152B96D464 /* PBXContainerItemProxy */ = { + 56E7551416085C4A1EA189FF15796E4B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 9840A7F641CB3A28ED681EAA23B3A070; - remoteInfo = AHKActionSheet; + remoteGlobalIDString = 04D19091436A065548D73C175B077CA4; + remoteInfo = NSHash; }; - 483DDE2871B6864D762E426142D3182E /* PBXContainerItemProxy */ = { + 63E1029E4C81F1CF4A2C1BFEDFDCBDB4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 86F00601FD3BF53D97B8E68A538AF4F3; + remoteGlobalIDString = E077C5049157367A707E75CFDAB49F84; remoteInfo = TTTAttributedLabel; }; - 5A77C18F0D7C662BC64F0DB641FF06CC /* PBXContainerItemProxy */ = { + 64D746FBE8FFE3709705C0AAAD6B5F55 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 92DA820CD3CCA231F765AB9682FA766B; - remoteInfo = Reachability; + remoteGlobalIDString = 0130B3724283586C0E9D2A112D4F2AA1; + remoteInfo = AFNetworking; }; - 5FAAF476CA9574417A79D68AC78C634B /* PBXContainerItemProxy */ = { + 6B20F68FF139B32E0778008CF57C5B9A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C9AB71DF8DA2C131DC2C4DD93877A561; - remoteInfo = DTCoreText; + remoteGlobalIDString = 348B34D6B9B73E53B3B7E13F1934079C; + remoteInfo = BBBadgeBarButtonItem; }; - 6029830B3395EE0984179EBA1AEAB523 /* PBXContainerItemProxy */ = { + 72C208DBE29590811A3217D14BA21162 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C4DDC75F9C182E9D3A72423E2B66B21F; - remoteInfo = NSHash; + remoteGlobalIDString = 12066ADDDC81D6D9F1FECEAA97C55D82; + remoteInfo = RMActionController; }; - 62FCF8A376A59CA81B418AB0750E45BA /* PBXContainerItemProxy */ = { + 79041FA7904F5D2821D89322C28BA1BA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7373AB0671FDF6D195D58D335D03C003; - remoteInfo = REMenu; + remoteGlobalIDString = DA7C4D3C2DEFEAF833D56EE844ADC77A; + remoteInfo = JSCoreBom; }; - 656E234E527CDED576EF950FC699C4F4 /* PBXContainerItemProxy */ = { + 8026AF13F5FCE1321C30AA3E5B6413B1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 43ABF39E6EB521622728B65060463901; - remoteInfo = AFOAuth2Manager; + remoteGlobalIDString = 0759FDF590D13F2CC841F8AFBEE34987; + remoteInfo = TDOAuth; }; - 67680AE6716CFE56076D6D1E4E4EC3B1 /* PBXContainerItemProxy */ = { + 8275920CA27D3BE48CCA54E9AF3BFED1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = E09595D164AB76AD6D892B137D508E81; - remoteInfo = DTFoundation; + remoteGlobalIDString = 8B9227BF2FD05182EAA381C73EB78441; + remoteInfo = NSGIF; }; - 67DA6361A7A4DFDE4EBF6AC8FF994642 /* PBXContainerItemProxy */ = { + 85FA80B19E6E3DAB8D0A316B97341057 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3C92F34A664B526FC676F4034F18925D; - remoteInfo = INTULocationManager; + remoteGlobalIDString = E1C8C155FEE070887D779FD917378BA8; + remoteInfo = TWMessageBarManager; }; - 7538EE9CE8553B8892FFDB1B05270BF2 /* PBXContainerItemProxy */ = { + 898460057A525C3A5DB6F5C78A9F6E10 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AC877FA2DB24167FBA0E50094C7C9D23; - remoteInfo = PHFDelegateChain; + remoteGlobalIDString = BECD36891A8DC297700F9296F5634B97; + remoteInfo = "libPhoneNumber-iOS"; }; - 7AA2B17FD03618DE73A737722FDE187C /* PBXContainerItemProxy */ = { + 8E5A06CC080A0C7B09CA89B3CF7A09BC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AC877FA2DB24167FBA0E50094C7C9D23; - remoteInfo = PHFDelegateChain; + remoteGlobalIDString = DE59D3D21AECD5F399E953205FB55A86; + remoteInfo = OMGHTTPURLRQ; }; - 86B3B27D3A6B29772B517E27CC293DA9 /* PBXContainerItemProxy */ = { + 8F7A3C60FDE95A088F0B518DE4E78DD6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7AD7B519FB10D676CDBE9F4B3C65D6B7; - remoteInfo = UICKeyChainStore; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; }; - 98DE71253D648B624ECA307292F190B3 /* PBXContainerItemProxy */ = { + A39223333C95CF87A45B49CDA1DAB2E4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = E09595D164AB76AD6D892B137D508E81; - remoteInfo = DTFoundation; + remoteGlobalIDString = 55A8712154E944BC7E33DE1D156E4BBC; + remoteInfo = PHFComposeBarView; }; - 995850A5042C98423989EEB51E52FEF9 /* PBXContainerItemProxy */ = { + A5CDD748D454E82EEFE7F73CC6A120BE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 977AA9FA7297E4D244CB03C53FDF1916; - remoteInfo = DAKeyboardControl; + remoteGlobalIDString = 12066ADDDC81D6D9F1FECEAA97C55D82; + remoteInfo = RMActionController; }; - 9A338808E5EB89BC5E2132A8B83288E8 /* PBXContainerItemProxy */ = { + AD129238917F45EA5B0D083F96DFA207 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C5635985C9FCB8A3529BCB087A3B72B6; - remoteInfo = IQAudioRecorderController; + remoteGlobalIDString = 58947B832E91651A9900C44834D21B76; + remoteInfo = REMenu; }; - 9A84DD4D544FEF5FE3FF708FE64F9FB7 /* PBXContainerItemProxy */ = { + B76C94C055D90A33606922ECE7AA0E3C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 037435BA46F89806ED78BA9295251016; - remoteInfo = FLEX; + remoteGlobalIDString = D76BE29FE832155DDE00968858DCAB38; + remoteInfo = SCSiriWaveformView; }; - A075188AC22091AF8D216288D4DEEBE4 /* PBXContainerItemProxy */ = { + B8B12EA969520EC29CE7D02B005A2BBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 92DA820CD3CCA231F765AB9682FA766B; + remoteGlobalIDString = CAA047C0F5E4106F3904E8497FA17F97; remoteInfo = Reachability; }; - A096E5FDFAFD8D93A8B16EA82D7D3686 /* PBXContainerItemProxy */ = { + C53E27423AC012BB8D38BAE77AF74726 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A38CBBB392959A220AF6E1DC305E77B0; - remoteInfo = SWFrameButton; + remoteGlobalIDString = B4CEB0284B4209C3EB1D2921056254BE; + remoteInfo = HMSegmentedControl; }; - B18FF5A77660DD97F17947E0900B79E2 /* PBXContainerItemProxy */ = { + C7FB3FC0B95D1FCCF7ECA7943889491E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AE28BD5EEB0DF7799198DF9206AA8FBF; - remoteInfo = OMGHTTPURLRQ; + remoteGlobalIDString = D76BE29FE832155DDE00968858DCAB38; + remoteInfo = SCSiriWaveformView; + }; + C8028261AC644FF6C038578D5F92D36F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 18EBA128F21272535E33AD2077BE9EF9; + remoteInfo = PHFDelegateChain; }; - B3A6D9B340F980EE1CF403FF71C2446A /* PBXContainerItemProxy */ = { + DD5A5E933FC2AC021F64CD6D6085E706 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1B21AD41EA8EE760ABE8B62F4AB9A473; + remoteGlobalIDString = EB07D88E59040F928F73F9A46CA65C69; remoteInfo = JDStatusBarNotification; }; - B506FE3ACB1FE79E3C5CB86FAA1144C9 /* PBXContainerItemProxy */ = { + DD6B0CB15F78D72F6F2C74D9DE3B3FD2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 42FC5CF7AC172D642DA52EFCB8B8A9CD; - remoteInfo = TWMessageBarManager; + remoteGlobalIDString = B88F4EA0695B6B3165C64594850D72C7; + remoteInfo = DTCoreText; }; - B6FB5A1325D31F599B8E064A08CFF004 /* PBXContainerItemProxy */ = { + E1B50E88E0C917F44DBA990E8130A1D6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 557B87E4A5AC450B0AE08ACA6490028E; - remoteInfo = PHFComposeBarView; + remoteGlobalIDString = 138527DFF3FD347B53F0B37BAF725E3D; + remoteInfo = DAKeyboardControl; }; - B79C4C739DA00791FE6E117EEB0C8BD4 /* PBXContainerItemProxy */ = { + E28F17235F0D4F1A0F00EB4E630FC697 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AE28BD5EEB0DF7799198DF9206AA8FBF; - remoteInfo = OMGHTTPURLRQ; + remoteGlobalIDString = 62BDCEA95B58162F679294C9302CF231; + remoteInfo = INTULocationManager; }; - BD77160D9958EB39AF470CEEF594E834 /* PBXContainerItemProxy */ = { + E45E3944D49B954992A86480CB4142DB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AD408BAB384B6DDA88A50A16FB158B66; - remoteInfo = MBProgressHUD; + remoteGlobalIDString = EBAD01DD961D84E76900A33BE7FB2600; + remoteInfo = CYRTextView; }; - BE9B24F166528106ADBB9BC7DEB335BD /* PBXContainerItemProxy */ = { + E6E9FFEE8EEDC6C1DFE7C0EB8183B95B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = DB2558BC2636A026A53063CD7BE931B0; - remoteInfo = AFNetworking; + remoteGlobalIDString = EDD538E91ECEB947B84FB22FC7425180; + remoteInfo = SZTextView; }; - C84CE9909B4547AB84F0685931450606 /* PBXContainerItemProxy */ = { + EDA4545B8D3591C05A58A3F259D3BB63 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1CDA796DD1DF09FEC12EF61E29A9E127; - remoteInfo = RMDateSelectionViewController; + remoteGlobalIDString = 18EBA128F21272535E33AD2077BE9EF9; + remoteInfo = PHFDelegateChain; }; - D110D8FE17AD7B236CFC4B3223069AB1 /* PBXContainerItemProxy */ = { + EE791FD4C0CFC61CD701BBD30D293DB2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7D03E663BD4329BB02BEA5C4259A28AC; - remoteInfo = SCSiriWaveformView; + remoteGlobalIDString = AC60DD87A4716856282507DFBBBE720C; + remoteInfo = SWTableViewCell; }; - D1725947DD5851E6425C50417D8F4F43 /* PBXContainerItemProxy */ = { + F29DCAFC02FCE973CE452F51306228AF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 9AD48931F9D7F36D3269DE407ACDE4DA; - remoteInfo = RMActionController; + remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; + remoteInfo = MBProgressHUD; }; - D3EE8B6B03B7EC3333B231111FDDADA0 /* PBXContainerItemProxy */ = { + F64DE4E692F422CF62FA165D532328F3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = DB2558BC2636A026A53063CD7BE931B0; - remoteInfo = AFNetworking; + remoteGlobalIDString = D27AAB10D754F414F3D10804770A1567; + remoteInfo = AFOAuth2Manager; }; - E9C35AEBDEF3F8A4A59237DAA9ED1712 /* PBXContainerItemProxy */ = { + F836C9B09599ED720E715E945807F8D3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D2A2DED5A53736DF6E0ED9F4A0877BB9; - remoteInfo = TDOAuth; + remoteGlobalIDString = B0F1C48D098B58DC43BBE0AE75933BA3; + remoteInfo = DHSmartScreenshot; }; - EEADBF2E49B061616CCDCFEBE80464A2 /* PBXContainerItemProxy */ = { + FCBF22B777B7249474BB405BA61DC6FC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 4C88BE8B7ED20010F6B5442E1CE749C8; - remoteInfo = APAddressBook; + remoteGlobalIDString = 99A737B746331762ACD053E5EF1415F7; + remoteInfo = SBJson; }; - F05086C82E9D8BEC960E9C03E164467C /* PBXContainerItemProxy */ = { + FE3F4C342D58B05CE6B491FD2DFA07D3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = AE001715EDDB6DE052255F8C384E9F11; - remoteInfo = JSCoreBom; + remoteGlobalIDString = CCA24ECF8C3E122E885F6912C0262B90; + remoteInfo = IQAudioRecorderController; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 003BA59CB298CB042F4A13FF7A237721 /* SRHTTPConnectMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHTTPConnectMessage.h; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h; sourceTree = ""; }; - 00493C974FE3C2FC3B0B6222BA5ED693 /* UIImage+AHKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+AHKAdditions.m"; path = "Classes/UIImage+AHKAdditions.m"; sourceTree = ""; }; - 00590FFF4B562E19197E6CA41F44A452 /* FLEXLibrariesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLibrariesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.h; sourceTree = ""; }; - 0060401B5ABDF7627088C24E4866B620 /* SBJson-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SBJson-umbrella.h"; sourceTree = ""; }; - 00A3683435A60055E7CEDED5186ED65B /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 00F7C698E12C25B24646F0EE07DFEDFC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 011A958F97F8F94B4225695A5C858C89 /* SocketRocket.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.xcconfig; sourceTree = ""; }; - 01E094DD2A7CC7861A8CF80FD07A373C /* FLEXSystemLogTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.h; sourceTree = ""; }; - 0220C54EA1896FF0F5FD5334B0F6C5A5 /* FLEXTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableView.m; path = Classes/ObjectExplorers/Views/FLEXTableView.m; sourceTree = ""; }; - 025F60E39B9C7DAD590A6881CAE385A9 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; - 025F861BD4FD7510DDBD125921F310A1 /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; - 02D0F0E36078FE736418D3B81DEFB41B /* JSCoreBom.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JSCoreBom.framework; path = JSCoreBom.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 031282C71E79C5995707D8E8699854B6 /* TWMessageBarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TWMessageBarManager.modulemap; sourceTree = ""; }; - 035B3CA637504D56481DF978B1A5DACC /* RMActionController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RMActionController.modulemap; sourceTree = ""; }; - 0399DA997C18628E4E183415AF49AAC5 /* FLEXTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewCell.h; path = Classes/ObjectExplorers/Views/FLEXTableViewCell.h; sourceTree = ""; }; - 041EB0712265FF6E997059CFC24783EE /* SRProxyConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRProxyConnect.h; path = SocketRocket/Internal/Proxy/SRProxyConnect.h; sourceTree = ""; }; - 04A741FFEC176D472148D6FE35C0AC43 /* SCSiriWaveformView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCSiriWaveformView-prefix.pch"; sourceTree = ""; }; - 0509A1A15F2A4B73EAEEC800F489A438 /* SWTableViewCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SWTableViewCell-dummy.m"; sourceTree = ""; }; - 051C4C073508AD5C86D7B0744F212411 /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; - 051E14F217E39785978192242DAF7155 /* IQAudioRecorderController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQAudioRecorderController.framework; path = IQAudioRecorderController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 05359C465F68C5338E5C867CC3EAE382 /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; - 053CC07010598A11A9CA0312DFB643D3 /* FLEX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLEX.xcconfig; sourceTree = ""; }; - 0545D4C667CACF19E5877E96A375D4A3 /* NBRegularExpressionCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBRegularExpressionCache.h; path = libPhoneNumber/Internal/NBRegularExpressionCache.h; sourceTree = ""; }; - 055ECA5EBCBA576429559B8A8BA20DE1 /* FLEXObjectRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectRef.m; path = Classes/GlobalStateExplorers/FLEXObjectRef.m; sourceTree = ""; }; - 05E47B5CE4905C23D5BBA83A356BF8B5 /* libPhoneNumber-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "libPhoneNumber-iOS.xcconfig"; sourceTree = ""; }; - 05ED70ADD97441E94A644CB0B4D73DC8 /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; - 065D146005108A1C0DC95515CFDE4F25 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; }; - 06ABB95F6029DC0C46C1B610200BB6BE /* APContactBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactBuilder.m; path = Pod/Core/Private/Builders/APContactBuilder.m; sourceTree = ""; }; - 06C8CD40F7573ABB32D37D4986CF6518 /* NSString+DTUTI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUTI.m"; path = "Core/Source/DTUTI/NSString+DTUTI.m"; sourceTree = ""; }; - 076BF5EE52E2B71F551B4A594D0BDD3E /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; - 07AF24383D5DE011E47A13A15DC4644A /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; - 07F8A787A986B14DBBE930E8146FC79A /* FLEXNetworkRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkRecorder.m; path = Classes/Network/FLEXNetworkRecorder.m; sourceTree = ""; }; - 081CFA2F2EA68EE6278C933BE1130B44 /* JDStatusBarNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JDStatusBarNotification.framework; path = JDStatusBarNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0828D8E1708DF7780C1ABB7BE737D0AA /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 0847F465CF5EDDC9545746E722A6D666 /* FLEXIvarEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXIvarEditorViewController.h; path = Classes/Editing/FLEXIvarEditorViewController.h; sourceTree = ""; }; - 084F524E1ED3139197019362EAB4C1D2 /* SRIOConsumer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumer.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.h; sourceTree = ""; }; - 08AE6AF1A823EB17053B6FEF0874E2F4 /* TDOAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TDOAuth-dummy.m"; sourceTree = ""; }; - 09099B19A3D6838BCFCA9E0E32A52CC7 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - 0982CA6B17EF8674989EE083F9A541D8 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - 09B0A6316A485E766AA4D068DC91CC97 /* FLEXBundleExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBundleExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.h; sourceTree = ""; }; - 09D2D2CA4C80A919F4B858A1DDE986DC /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - 0A0FB9D0D4C3E950FEC1C5572191F6B1 /* TWMessageBarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TWMessageBarManager-umbrella.h"; sourceTree = ""; }; - 0A3760CFEE99160586FDC1E19FD258D4 /* Reachability-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reachability-prefix.pch"; sourceTree = ""; }; - 0A45C43140819817D63D05C0DF468835 /* DTSQLiteFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSQLiteFunctions.m; path = Core/Source/DTSQLite/DTSQLiteFunctions.m; sourceTree = ""; }; - 0B011B7E825F49E887D2E9C09AC44E07 /* TTTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TTTAttributedLabel.m; path = TTTAttributedLabel/TTTAttributedLabel.m; sourceTree = ""; }; - 0B0984F2BC1EABCFFA9D2B4AA9C3175B /* OMGHTTPURLRQ.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGHTTPURLRQ.h; path = Sources/OMGHTTPURLRQ.h; sourceTree = ""; }; - 0B44458A77A7CFEF038996A84E4D398C /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; - 0B736D31AABAF4A293557B523EDA52DB /* FLEXKeyboardHelpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardHelpViewController.m; path = Classes/Utility/FLEXKeyboardHelpViewController.m; sourceTree = ""; }; - 0B94321C3E3FE46F83DC1FF82FC3A7FE /* FLEXSQLiteDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSQLiteDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h; sourceTree = ""; }; - 0BA95EB4697D3059990A109CB20E4678 /* DTFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTFoundation.framework; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0BB78F7977A16CC52CF8D281842DAD47 /* INTULocationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationRequest.h; path = LocationManager/INTULocationManager/INTULocationRequest.h; sourceTree = ""; }; - 0BF0CA69E5EF5DEE00C115CB539C418C /* PHFDelegateChain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PHFDelegateChain-dummy.m"; sourceTree = ""; }; - 0C62451E74E47FB184190A716F6C7D25 /* NSString+IQTimeIntervalFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+IQTimeIntervalFormatter.m"; path = "IQAudioRecorderController/NSString+IQTimeIntervalFormatter.m"; sourceTree = ""; }; - 0C72D40EC9B18C09D23DE5ADF4227527 /* SWFrameButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWFrameButton.m; path = SWFrameButton/SWFrameButton.m; sourceTree = ""; }; - 0C81A10593D850F9148DF4B3BE8E3AC6 /* NSRunLoop+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocket.h"; path = "SocketRocket/NSRunLoop+SRWebSocket.h"; sourceTree = ""; }; - 0CDE4A00D393E6382A4D66DD6DCA224B /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; - 0D09E48810B69EF840F1D53AC595548E /* FLEXManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXManager.h; path = Classes/FLEXManager.h; sourceTree = ""; }; - 0D3C2981C7A49D4410509F4838CCDE5B /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; - 0D5241475DD5BD581301EAE2C1BFBAF6 /* APContactDataExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactDataExtractor.h; path = Pod/Core/Private/Extractors/APContactDataExtractor.h; sourceTree = ""; }; - 0DF23DD7452B1B3B0E8B175FD528BD0C /* FLEXMultilineTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultilineTableViewCell.h; path = Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.h; sourceTree = ""; }; - 0E0037625247BFC809EB3E029AD6BF27 /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; - 0E0A1083888D624A4F68FB47D5A2148A /* FLEXImagePreviewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImagePreviewViewController.m; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.m; sourceTree = ""; }; - 0E835EAFA83F2A9B3A2F4732EAB46231 /* NSData+NSHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+NSHash.h"; path = "NSHash/NSData+NSHash.h"; sourceTree = ""; }; - 0EAC80306119C91498443D029EB9AB17 /* APSocialServiceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSocialServiceHelper.h; path = Pod/Core/Private/Helpers/APSocialServiceHelper.h; sourceTree = ""; }; - 0F0741EE5FE70D3C0C4D17BF56A567FB /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; - 0F50F1EF775314CF44AE84C535F40645 /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; - 0F928A03C4490A820F68602A4435BFAB /* PHFComposeBarView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFComposeBarView-prefix.pch"; sourceTree = ""; }; - 0FA59CC96028E599E0634E4630824444 /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; - 0FD47F41D07390463F8CAC5DCB510941 /* FSPlaylistItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSPlaylistItem.m; path = FreeStreamer/FreeStreamer/FSPlaylistItem.m; sourceTree = ""; }; - 0FE242884A8CC93736498B7730370094 /* Pods-Jasonette-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Jasonette-acknowledgements.markdown"; sourceTree = ""; }; - 102F45BF2C1A1C3C3004765A88069067 /* UIViewController+DTSidePanelController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+DTSidePanelController.m"; path = "Core/Source/iOS/DTSidePanel/UIViewController+DTSidePanelController.m"; sourceTree = ""; }; - 104698CD09FFFD99E91D5B4D7F8AA7A4 /* DTScriptExpression.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTScriptExpression.h; path = Core/Source/DTScripting/DTScriptExpression.h; sourceTree = ""; }; - 106211D24A7AA7AEE92C703FE566C66C /* FLEXAlert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXAlert.m; path = Classes/Utility/FLEXAlert.m; sourceTree = ""; }; - 109068B6B98153CB936218AE970F3AC2 /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = ""; }; - 10C3D11226BFC9634D7E1B4CBE3C59B6 /* DTProgressHUDWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTProgressHUDWindow.h; path = Core/Source/iOS/DTProgressHUD/DTProgressHUDWindow.h; sourceTree = ""; }; - 10D63DF40896F438A90A02642C8A0AA5 /* SCSiriWaveformView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SCSiriWaveformView.modulemap; sourceTree = ""; }; - 10EABD547ED7532D88C5B7DADC7A94CD /* JDStatusBarNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JDStatusBarNotification.modulemap; sourceTree = ""; }; - 10F0CA104863E154574BC66AE8BF7851 /* TTTAttributedLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-prefix.pch"; sourceTree = ""; }; - 110E311DED94C4BCA10ED3BCEE4CAE6C /* FLEXNetworkObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkObserver.m; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.m; sourceTree = ""; }; - 115075BBB42B72D672EA461D5485A9A5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 116DC6A652F7C0E89D2169EA2EB69384 /* SZTextView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SZTextView.framework; path = SZTextView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 11A6C338097664AAD9E7EE886D82B0E9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 11ABB40003A9B60F97133EB7B7B9D569 /* FLEXManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Private.h"; path = "Classes/Manager/FLEXManager+Private.h"; sourceTree = ""; }; - 11D259986D6906636C6CD45C60AA0FDC /* SWFrameButton-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SWFrameButton-dummy.m"; sourceTree = ""; }; - 124D087CEF9C00948AF3D880B262E2B1 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; - 1331C92AB1ED843CA54591E93CA96198 /* NSGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSGIF.h; path = NSGIF/NSGIF.h; sourceTree = ""; }; - 1366EC2DEF047886DC4770F181F90BE8 /* NSGIF-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSGIF-dummy.m"; sourceTree = ""; }; - 13B23E4A6B6BD97B78A8C5C4B8E84354 /* SWFrameButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWFrameButton.h; path = SWFrameButton/SWFrameButton.h; sourceTree = ""; }; - 13E46C080EE40508B23B845F0EC277BD /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 13E5C2D79494C9D9CC8C638313803C36 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - 14741E32483AD7253EBC66C24EF99B7B /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reachability.framework; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 15DD2CAEC873FC0E7D4F47F3D48C4965 /* APContact.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContact.m; path = Pod/Core/Public/Models/APContact.m; sourceTree = ""; }; - 15E50FF221F8ABC7808A68A2A8F90823 /* NSString+NSHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+NSHash.h"; path = "NSHash/NSString+NSHash.h"; sourceTree = ""; }; - 16864FF697BB1D4C1C65CD4E0AB8FA0A /* APAddressBookAccessRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookAccessRoutine.h; path = Pod/Core/Private/Routine/APAddressBookAccessRoutine.h; sourceTree = ""; }; - 16ABB2B0349D265EA9D4CC8D80E390A4 /* RMActionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMActionController.h; path = RMActionController/RMActionController.h; sourceTree = ""; }; - 170AB94FAB9ABC5C0FCB37F08605445F /* SRProxyConnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRProxyConnect.m; path = SocketRocket/Internal/Proxy/SRProxyConnect.m; sourceTree = ""; }; - 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 175E97B58AB6FEC91E0BDA8AF81D83A4 /* FLEXOSLogController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXOSLogController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m; sourceTree = ""; }; - 18229859DBEE62FF7E1E44AD339E4A57 /* REMenu-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "REMenu-dummy.m"; sourceTree = ""; }; - 188544ECC9957D6CBA663D5B8B7BB7F5 /* APJob.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APJob.m; path = Pod/Core/Public/Models/APJob.m; sourceTree = ""; }; - 19424C722E4620CEDD42FBCA98D500C0 /* UICKeyChainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UICKeyChainStore.m; path = Lib/UICKeyChainStore/UICKeyChainStore.m; sourceTree = ""; }; - 19551E8499D9FA837439E46222E032BC /* FLEX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLEX.modulemap; sourceTree = ""; }; - 19558C76B51E066B813B70C64BCD54DC /* FLEXObjectExplorerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerFactory.m; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.m; sourceTree = ""; }; - 199778DB1A7E09231190B2612CA2DA49 /* FLEXCarouselCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCarouselCell.h; path = Classes/Core/FLEXCarouselCell.h; sourceTree = ""; }; - 19A8B19C7222EFCEA45063A33394FD25 /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; - 19BF33EC0E3B511759B040C38DD92559 /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; - 1A12AE7BA9D1823E9C31BD584B238163 /* FLEXNetworkTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransaction.h; path = Classes/Network/FLEXNetworkTransaction.h; sourceTree = ""; }; - 1A2F77D352EBDADF569E21B7DC8787D5 /* DTProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTProgressHUD.m; path = Core/Source/iOS/DTProgressHUD/DTProgressHUD.m; sourceTree = ""; }; - 1AB9550774C5D293E8BEAD3936D73314 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; sourceTree = ""; }; - 1AC5C17C89918AD23E6DCBA1240295EE /* APContactBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactBuilder.h; path = Pod/Core/Private/Builders/APContactBuilder.h; sourceTree = ""; }; - 1BB2F2BC45C191B584F3BCFF4392495C /* NSString+NSHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+NSHash.m"; path = "NSHash/NSString+NSHash.m"; sourceTree = ""; }; - 1BB4136603998652B2E1B3AAA69F91FA /* UIView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DHSmartScreenshot.h"; path = "Classes/UIView+DHSmartScreenshot.h"; sourceTree = ""; }; - 1BCC20A028CEE99E080B21156F995286 /* SWFrameButton.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SWFrameButton.modulemap; sourceTree = ""; }; - 1BD569E0A890EC7DFCAA3D3D57C8BA73 /* FLEXSubtitleTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSubtitleTableViewCell.m; path = Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.m; sourceTree = ""; }; - 1BE44B3E317C602BD795009820C425D2 /* AFOAuth2Manager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFOAuth2Manager.h; path = AFOAuth2Manager/AFOAuth2Manager.h; sourceTree = ""; }; - 1BF1D876A99E6F600782016BD0B25701 /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; - 1C8D0B205B1C9918FB90837146671EA1 /* APRecordDate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APRecordDate.m; path = Pod/Core/Public/Models/APRecordDate.m; sourceTree = ""; }; - 1CA0F6C8A26104EB03B31E4EC09953A4 /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; - 1CEEC911DB18E5EA1DCDF59C7A6F5857 /* SocketRocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-umbrella.h"; sourceTree = ""; }; - 1CF48F61408DCC59EA59462400CA6DFC /* NBAsYouTypeFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBAsYouTypeFormatter.h; path = libPhoneNumber/NBAsYouTypeFormatter.h; sourceTree = ""; }; - 1D63F82EDAD117C9E975F2BB3107260E /* FreeStreamer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FreeStreamer-umbrella.h"; sourceTree = ""; }; - 1D69D31E727AFDF524586A03DB652A75 /* Pods-Jasonette-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Jasonette-acknowledgements.plist"; sourceTree = ""; }; - 1DC1C9D954DE8DD48876E54E70294E94 /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; - 1E29A64C2FA8DD1449367A1F5485EE3D /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; - 1E4D1ED88F04A238D7DE9EDA576C7342 /* DTCoreTextLayouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayouter.h; path = Core/Source/DTCoreTextLayouter.h; sourceTree = ""; }; - 1ED9524C818D7215BCFD0240DDA8334D /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 1EE1A5E1EB2ED5D05F02167DF73BC51C /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; - 1F9C7FBA8D5E4325C08BF5CACD218AC0 /* APSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSource.h; path = Pod/Core/Public/Models/APSource.h; sourceTree = ""; }; - 1FD3AACC5DC13CD990F1D4B152B27170 /* DTZipArchiveGZip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchiveGZip.h; path = Core/Source/DTZipArchive/DTZipArchiveGZip.h; sourceTree = ""; }; - 1FFE60E8F3C60A95EE262A0B281E0879 /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; - 20033E63A017A79D63884F6AB383B13B /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; - 2014FD1A3A666B475076CD94D5FC8ECA /* AFOAuth2Manager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFOAuth2Manager.xcconfig; sourceTree = ""; }; - 201ECABDA0E05EE41544C13362C2B386 /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; - 20A1C1EE383FB03EC536ADDD80FBBCC8 /* TDOAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDOAuth.h; sourceTree = ""; }; - 20A496C72B5C0A294BFDA12F8E31538A /* INTULocationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationRequest.m; path = LocationManager/INTULocationManager/INTULocationRequest.m; sourceTree = ""; }; - 20E5E38998512AC331B58C80D2D9CE9F /* SRHTTPConnectMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHTTPConnectMessage.m; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m; sourceTree = ""; }; - 210FE372B9D3C94B682E4A74A922198F /* FLEXClassesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.h; sourceTree = ""; }; - 215CC70A94FB4F3A7152F96C7235287C /* OMGFormURLEncode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGFormURLEncode.h; path = Sources/OMGFormURLEncode.h; sourceTree = ""; }; - 21A303AD6DE8C52A6318EB6AB293CC68 /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; - 21D5A0991DE9BAB971785366D29013F1 /* APAddressBook.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = APAddressBook.modulemap; sourceTree = ""; }; - 2217687B36CB9D6945EDEC7513AD2E2D /* SBJson5.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5.h; path = Classes/SBJson5.h; sourceTree = ""; }; - 2225F5A869DA598F00433CE6BEB69E4C /* FLEXArgumentInputDateView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputDateView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m; sourceTree = ""; }; - 2283C48D99A173A3579523FBD0765612 /* FLEXAddressExplorerCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXAddressExplorerCoordinator.m; path = Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m; sourceTree = ""; }; - 22A7EA3F196AF12EE218F97A3049FA1C /* RMDateSelectionViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RMDateSelectionViewController.modulemap; sourceTree = ""; }; - 22C4E4A3A89EDD140F6FEC73FFBC3279 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - 22C71D507277CA51C842B2A817948243 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 22D344B94FE0D3002F648824A317F491 /* FLEXTableListViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableListViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h; sourceTree = ""; }; - 232B592350DE0C821EDC814960C1FA2F /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - 233E6458275E3A20881BFD42E2B4B0F6 /* Pods-Jasonette-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Jasonette-dummy.m"; sourceTree = ""; }; - 235E96C419C684CF3F9E086C3EF4A7D8 /* INTUHeadingRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTUHeadingRequest.m; path = LocationManager/INTULocationManager/INTUHeadingRequest.m; sourceTree = ""; }; - 2365F86A3A72C784D61723F8C3C4E38F /* FLEXExplorerToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbar.h; path = Classes/Toolbar/FLEXExplorerToolbar.h; sourceTree = ""; }; - 23AA760EE55EC0367B0DBEF0F5028DD4 /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ioapi.c; path = Core/Source/Externals/minizip/ioapi.c; sourceTree = ""; }; - 246D99D70D7047C304152DEA5910994B /* NSAttributedString+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTDebug.h"; path = "Core/Source/NSAttributedString+DTDebug.h"; sourceTree = ""; }; - 24B341086B2ACAC5B5068136F9640B22 /* AFOAuth2Manager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFOAuth2Manager.m; path = AFOAuth2Manager/AFOAuth2Manager.m; sourceTree = ""; }; - 25066EADA65A04FE92EC9324A769342B /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; - 252160211A974EB1A46AEC3E19BF02CA /* PHFDelegateChain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = PHFDelegateChain.m; sourceTree = ""; }; - 25623BF828B34806A7A20A64B28F68C7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 260B9952B840263DD13C078E5CEBECCC /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; - 262D62538040B2AE0E9C563C2AC1C08F /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 265B19C853A3C08B1AA8B695E7176CDC /* FLEXWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWindow.h; path = Classes/ExplorerInterface/FLEXWindow.h; sourceTree = ""; }; - 26785D1C2E071576264D15A225899AA5 /* PHFComposeBarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView.h; path = Classes/PHFComposeBarView.h; sourceTree = ""; }; - 26D3860EF6BB43DFF7BC24A7F355572F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 271611DCE41D42A8ABC7E3E7FAE6F516 /* FLEXImageExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImageExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.m; sourceTree = ""; }; - 2756228CA31BF251FF452CD35DFF42B4 /* FLEXFileBrowserTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserTableViewController.m; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.m; sourceTree = ""; }; - 277DE8ADDCBC34F845D324D32C7A3C1E /* FLEXTableLeftCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableLeftCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.h; sourceTree = ""; }; - 283A842D3313B8AD89CCCDF0804CA153 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2841E12BD983547440DCB8D929D4EF11 /* DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreText.h; path = Core/Source/DTCoreText.h; sourceTree = ""; }; - 289C1E97D2E398374FA4F32A843F0366 /* SWLongPressGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWLongPressGestureRecognizer.m; path = SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.m; sourceTree = ""; }; - 289C875EE0587A1B18031AC9B1455DA7 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; - 28A08E1337430D951D0F52CEA2768AF4 /* NBNumberFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBNumberFormat.h; path = libPhoneNumber/NBNumberFormat.h; sourceTree = ""; }; - 28E80878156EDDE690C214A37A566408 /* FLEXNetworkTransactionTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionTableViewCell.h; path = Classes/Network/FLEXNetworkTransactionTableViewCell.h; sourceTree = ""; }; - 28FB7899B47E4C179A197B8CA5C23327 /* INTUHeadingRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTUHeadingRequest.h; path = LocationManager/INTULocationManager/INTUHeadingRequest.h; sourceTree = ""; }; - 29129B02E241CBEC76590CDF19CF44F6 /* NSArray+NBAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+NBAdditions.m"; path = "libPhoneNumber/NSArray+NBAdditions.m"; sourceTree = ""; }; - 291B5D2F159D6B4EFC6849C6F906AC3E /* NSURLRequest+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h"; sourceTree = ""; }; - 29B1E12538E72897C4665BB7B0821312 /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FLEX.framework; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2A32B4C26F736FEB7FB9777DBDDA425F /* AFOAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFOAuthCredential.m; path = AFOAuth2Manager/AFOAuthCredential.m; sourceTree = ""; }; - 2A491074D8FDB01E785206BD21DC4F16 /* JDStatusBarLayoutMarginHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarLayoutMarginHelper.m; path = JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m; sourceTree = ""; }; - 2A4A5A9B446BD29C6F4B29FEAC51A7D9 /* HMSegmentedControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = HMSegmentedControl.framework; path = HMSegmentedControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2A8E64B438CA0224D41F48F7243BC98E /* PHFComposeBarView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFComposeBarView.xcconfig; sourceTree = ""; }; - 2A921D353D780D143178E19FC5EDE583 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - 2B395DC1DA411B99E2E5542C2639C513 /* FLEXNetworkTransactionTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionTableViewCell.m; path = Classes/Network/FLEXNetworkTransactionTableViewCell.m; sourceTree = ""; }; - 2B4AC9C8B37DE25E08BC1A02C78C34ED /* JDStatusBarNotification.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JDStatusBarNotification.xcconfig; sourceTree = ""; }; - 2B5EF38935248E22B218E13D63803E18 /* BBBadgeBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BBBadgeBarButtonItem.h; path = BBBadgeBarButtonItem/BBBadgeBarButtonItem.h; sourceTree = ""; }; - 2BB1C5C8FA8F8F787956B36994655165 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BCCEA31FF61F4F09EAFAEC08D59F0F6 /* UIView+DTActionHandlers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTActionHandlers.h"; path = "Core/Source/iOS/BlocksAdditions/UIView+DTActionHandlers.h"; sourceTree = ""; }; - 2C14404F42CCE7479F8F26CFB13B8B85 /* FLEXSetExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSetExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.h; sourceTree = ""; }; - 2C6D7B21C31C90C04DFAA2E3183FD067 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - 2C9618E138A3F4347925BEC207752B91 /* FLEXLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXLogController.h; sourceTree = ""; }; - 2D5211156C2864D5C07EAC40790141BB /* FLEX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-umbrella.h"; sourceTree = ""; }; - 2D7AE9B08BCC7A5611FB75AC56E06631 /* FLEXArgumentInputView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m; sourceTree = ""; }; - 2DAF1E87AC1E90CA9DD6D612C7609936 /* APAddressBookRefWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookRefWrapper.h; path = Pod/Core/Private/Wrapper/APAddressBookRefWrapper.h; sourceTree = ""; }; - 2DB5A01D71AB6A74BAC8EC177D451936 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 2DE8B3B0565AE563E408E4A9F3B67ABA /* IQ_FDWaveformView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQ_FDWaveformView.m; path = IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.m; sourceTree = ""; }; - 2E17D802DF88671063BDFB108E30411A /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2E4AB33537AEBBD305648ADF742E0AF0 /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; - 2E66DAC71C04CCFEC85A40DBFE7ABC0F /* SWTableViewCell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWTableViewCell-umbrella.h"; sourceTree = ""; }; - 2E700FAED25BE958C3EF0753D13324BA /* JSCoreBom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSCoreBom.h; path = JSCoreBom/JSCoreBom.h; sourceTree = ""; }; - 2ED1B3A564FA8ABAA858BA7B07B28FBC /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; - 2ED5213A867F4487542B65E227D3C024 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2EE24019BCEADAB481DCA5E066095F6C /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; - 2F51BFAEF1903A5111D888842A6F4E0D /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; - 2F7E0252D7CE3929D4476102974DD31A /* FLEXManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXManager.m; path = Classes/Manager/FLEXManager.m; sourceTree = ""; }; - 2FAA42FD68777B37DC811EC07B299B4F /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; - 2FB0970ACC26B32755BB247B5B5B8388 /* HMSegmentedControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HMSegmentedControl-prefix.pch"; sourceTree = ""; }; - 2FF3A164B8691962676D1E92DAC41FA9 /* SRDelegateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRDelegateController.h; path = SocketRocket/Internal/Delegate/SRDelegateController.h; sourceTree = ""; }; - 302C4648767B4DE7AA2E8E62FE19D84E /* FLEXTableListViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableListViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m; sourceTree = ""; }; - 30578C0D300FF6EA6ADEA0FC4E4931D7 /* FLEXKeychainQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychainQuery.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m; sourceTree = ""; }; - 306C6033059CFC7A0C2FAFE581517378 /* HMSegmentedControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HMSegmentedControl-umbrella.h"; sourceTree = ""; }; - 30794A4A4B3E2765414D0297052791BA /* FLEXAlert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXAlert.h; path = Classes/Utility/FLEXAlert.h; sourceTree = ""; }; - 30B9F1B75F0A6573075AD7274C90B105 /* FLEXObjcInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjcInternal.h; path = Classes/Utility/FLEXObjcInternal.h; sourceTree = ""; }; - 30D564A294E90E707C5823636EB873C1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 310B3EDB4FAE61174320E1EBEE1670D7 /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; - 311050611377408363E3C20E1496BD9F /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; - 3114DBEE92E39D1B9F11A45689D3CE41 /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; - 315C99237CCD850597FEE5DE64AF5EEB /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; - 31685A66CB1B8D09B5DDFF7538985E54 /* NSHash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSHash-umbrella.h"; sourceTree = ""; }; - 318D529FBBACFB31C32B65B0E44D0EC1 /* DHSmartScreenshot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DHSmartScreenshot.framework; path = DHSmartScreenshot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 32203EE31F573687CA29747A9390663E /* FLEXNetworkSettingsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkSettingsTableViewController.h; path = Classes/Network/FLEXNetworkSettingsTableViewController.h; sourceTree = ""; }; - 322B13E35772F6A6E4B3344A26D76CA7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3240502E5D8013891B5AC87E43283615 /* NBPhoneMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneMetaData.m; path = libPhoneNumber/NBPhoneMetaData.m; sourceTree = ""; }; - 325C81C55277756B8536C427DE3FD36C /* REMenuContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuContainerView.h; path = REMenu/REMenuContainerView.h; sourceTree = ""; }; - 32979BC7202F6FED970E2C7C5BA7C3EA /* FLEXClassTreeViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassTreeViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.h; sourceTree = ""; }; - 3351A3AC463F5C91DB7817F666907990 /* SWFrameButton.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWFrameButton.xcconfig; sourceTree = ""; }; - 336B1B814BF3C65C2F5A68E7CDFDC5D1 /* SWCellScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWCellScrollView.m; path = SWTableViewCell/PodFiles/SWCellScrollView.m; sourceTree = ""; }; - 33974DC3D084271B00AA8ADAADB5B288 /* JDStatusBarLayoutMarginHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarLayoutMarginHelper.h; path = JDStatusBarNotification/JDStatusBarLayoutMarginHelper.h; sourceTree = ""; }; - 346CC4AE4C60558B15CA52D474983F16 /* NSScanner+DTScripting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+DTScripting.h"; path = "Core/Source/DTScripting/NSScanner+DTScripting.h"; sourceTree = ""; }; - 346F6A7E2E541786322C84E60A10EC1A /* FLEXSystemLogTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewController.m; sourceTree = ""; }; - 347602E3770137BA2E86C1AC67088DD3 /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; - 34AE5A3F648DF2A4338161FD01E40580 /* AHKActionSheetViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AHKActionSheetViewController.m; path = Classes/AHKActionSheetViewController.m; sourceTree = ""; }; - 34B7292C56814A1334DF6C82161ED0C9 /* FLEXMethodCallingViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethodCallingViewController.m; path = Classes/Editing/FLEXMethodCallingViewController.m; sourceTree = ""; }; - 34BFF7C0E446A1A652209F7BDC8094AB /* FLEXNetworkObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkObserver.h; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.h; sourceTree = ""; }; - 34C0F54516F26E67DE9BA8E152C294B1 /* NBRegExMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBRegExMatcher.m; path = libPhoneNumber/Internal/NBRegExMatcher.m; sourceTree = ""; }; - 34CFFA6592DD184D396F9F8FB724CE7B /* NSString+IQTimeIntervalFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+IQTimeIntervalFormatter.h"; path = "IQAudioRecorderController/NSString+IQTimeIntervalFormatter.h"; sourceTree = ""; }; - 34DF29BEE47B0D35BED82334809AF629 /* OMGHTTPURLRQ-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-prefix.pch"; sourceTree = ""; }; - 34DF8ADDCBE435BF63E563C7C267009D /* id3_parser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = id3_parser.cpp; path = FreeStreamer/FreeStreamer/id3_parser.cpp; sourceTree = ""; }; - 35346BACF0AF2C3DC53C066FC3AF5DCA /* SCSiriWaveformView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SCSiriWaveformView.xcconfig; sourceTree = ""; }; - 355CC84277CD580D693E9F17F539C1F6 /* UIImage+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DTFoundation.m"; path = "Core/Source/iOS/UIImage+DTFoundation.m"; sourceTree = ""; }; - 3595306CA5F5DCA6BE99A1DC29E6C42B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 35DF165C2109A53A7F43FC602E978E31 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 35E8438753DD0555D42FAC474B7E2167 /* APRelatedPerson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APRelatedPerson.h; path = Pod/Core/Public/Models/APRelatedPerson.h; sourceTree = ""; }; - 35FABECFE9E56BCCF477C4BFC0A3FC8D /* FLEXSystemLogMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogMessage.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.h; sourceTree = ""; }; - 361AB94FB4FC654A76F951414E37C23D /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 36AFE5C2475F91D0FE2F81886658519B /* SZTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SZTextView.m; path = Classes/SZTextView.m; sourceTree = ""; }; - 379515B0789358171BB0EB6529D2F884 /* REMenuItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuItem.h; path = REMenu/REMenuItem.h; sourceTree = ""; }; - 37F67AC18C0A50A001DB8DF1FD2F91B9 /* JSCoreBom-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSCoreBom-prefix.pch"; sourceTree = ""; }; - 384AC07E989EF83B131F226B71B430E9 /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; - 387287257B2F0560E33603EB26376572 /* FLEXSubtitleTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSubtitleTableViewCell.h; path = Classes/ObjectExplorers/Views/FLEXSubtitleTableViewCell.h; sourceTree = ""; }; - 3970410E40B01DFC4D891FC48AA4F1FB /* icon-error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-error.png"; path = "Classes/Icons/icon-error.png"; sourceTree = ""; }; - 399ACC0C9B04A4707F46AEBBAE7C2437 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 39BA38F2B8D34383684D8D0C09B73910 /* NBMetadataHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBMetadataHelper.h; path = libPhoneNumber/NBMetadataHelper.h; sourceTree = ""; }; - 39C5EB7718896613E826722EF646C0E5 /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; - 39E155782CDCF4D13D17CC87E2D5A1A1 /* Resources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = Resources.bundle; path = "DTCoreText-Resources.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3A1E7A4ED1F0AB8657146BFEFEF5B2C3 /* FLEXLiveObjectsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLiveObjectsTableViewController.h; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.h; sourceTree = ""; }; - 3A6755BE10B72C5426022E1A30BBD16B /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; - 3A96CC55A2CAFD92DF26C78EEAEC1FC6 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 3AC9D2E925C9A180C78226D87CAAE497 /* FreeStreamer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FreeStreamer.modulemap; sourceTree = ""; }; - 3B139A80291D9E9507F3D44DA3B529BF /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - 3B3A6553DFC76B0444269C2F48E6EAD1 /* APPhone.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APPhone.m; path = Pod/Core/Public/Models/APPhone.m; sourceTree = ""; }; - 3B5AC69FCBFB547343AB513CE8E3A560 /* SRPinningSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRPinningSecurityPolicy.m; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.m; sourceTree = ""; }; - 3B628347782642A43B7EC8DC7274FB68 /* RECommonFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RECommonFunctions.h; path = REMenu/RECommonFunctions.h; sourceTree = ""; }; - 3B7CC660B6EE458F46529272C74D3258 /* Pods-Jasonette-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Jasonette-frameworks.sh"; sourceTree = ""; }; - 3B8B851A78FBDB7830C6A99909E1D5AA /* NBAsYouTypeFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBAsYouTypeFormatter.m; path = libPhoneNumber/NBAsYouTypeFormatter.m; sourceTree = ""; }; - 3C989B19DD083EC583BD8346DD7B1C43 /* Reachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; - 3CAE33FC0216EE9A1264B5FDF3CB6E99 /* FLEXClassTreeViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassTreeViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXClassTreeViewController.m; sourceTree = ""; }; - 3CB738349A50190EC83EB5B47BA08FF4 /* Pods-Jasonette.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Jasonette.release.xcconfig"; sourceTree = ""; }; - 3CB7A1646F7357209B59BA685366AE89 /* DTAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAlertView.h; path = Core/Source/iOS/BlocksAdditions/DTAlertView.h; sourceTree = ""; }; - 3CC96D99A5FF4AB5E81B37EF291511BC /* NSHash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSHash.xcconfig; sourceTree = ""; }; - 3D1556756BF1C23AC926D6364BB85E45 /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; - 3D259E26BBDA9B98BDF88EB4B5CC5115 /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; - 3D3544449382D4F630416FCC09B43508 /* BBBadgeBarButtonItem-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BBBadgeBarButtonItem-umbrella.h"; sourceTree = ""; }; - 3D8F6445C781527BB1EE74DD4F08CDEC /* DTZipArchive.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchive.m; path = Core/Source/DTZipArchive/DTZipArchive.m; sourceTree = ""; }; - 3D9DA94B90593EBD8664CAFC338C29DA /* FSXMLHttpRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSXMLHttpRequest.m; path = FreeStreamer/FreeStreamer/FSXMLHttpRequest.m; sourceTree = ""; }; - 3E41F9FE6F5667CCD5C183CFB2E087ED /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; - 3E51C620923F003D185C3A9F2EB26DFF /* SRURLUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRURLUtilities.m; path = SocketRocket/Internal/Utilities/SRURLUtilities.m; sourceTree = ""; }; - 3E579C05FF49D90FCA6E58B7381ADA81 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - 3E5BE7F851935DF5ADEA098FF6C8EEEF /* libPhoneNumber-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libPhoneNumber-iOS-prefix.pch"; sourceTree = ""; }; - 3E962DD1E00E9DF6803CD9F85D778AF7 /* Pods-Jasonette.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Jasonette.modulemap"; sourceTree = ""; }; - 3EA2A54CF2A0A743D21B89E262F21CCF /* BBBadgeBarButtonItem.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BBBadgeBarButtonItem.xcconfig; sourceTree = ""; }; - 3F00397554FE65FCD87D48384D7542AE /* DHSmartScreenshot-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DHSmartScreenshot-umbrella.h"; sourceTree = ""; }; - 3F0356E6E103425749BEB8891902E6D1 /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; - 3F1A6A033D3C83A1971877D209067BDD /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = ""; }; - 3F2391D9C602D54700E7C415883229CD /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; - 3F3238E8FB79C75517B2CCB9979005E0 /* INTULocationManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = INTULocationManager.framework; path = INTULocationManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3F954AD1BC73538C8C601868F4F4A8DD /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; - 401671E1232D5EF781E0EAC13522FD09 /* UIColor+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+DTDebug.h"; path = "Core/Source/iOS/Debug/UIColor+DTDebug.h"; sourceTree = ""; }; - 4029936FDEF3C065A7BC58F39E8FE05A /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 4034D4646878E193FB63C45FCE37F8F4 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Core/Source/Externals/minizip/ioapi.h; sourceTree = ""; }; - 408E5F58E8CB774B4213FF9C478B7D32 /* FLEXFileBrowserTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserTableViewController.h; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserTableViewController.h; sourceTree = ""; }; - 40D1A2E12B1B453F7DAD590E72C69397 /* RMActionController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMActionController-prefix.pch"; sourceTree = ""; }; - 418D9A214DF5A1DDE02B884BBA3A943D /* FLEXCarouselCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCarouselCell.m; path = Classes/Core/FLEXCarouselCell.m; sourceTree = ""; }; - 4191DB56EB6B46A9EA0315F7ED025E67 /* SRDelegateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRDelegateController.m; path = SocketRocket/Internal/Delegate/SRDelegateController.m; sourceTree = ""; }; - 41E187689DD717DD616C3C68C07BD3A7 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; - 41F4D99F4A16AD8C9492086FF8CF6724 /* DTZipArchive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchive.h; path = Core/Source/DTZipArchive/DTZipArchive.h; sourceTree = ""; }; - 420B1F416125DD3D626F7C5B59F1A810 /* SRLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRLog.m; path = SocketRocket/Internal/Utilities/SRLog.m; sourceTree = ""; }; - 4241B2CB47194CBC35A6911C09D21121 /* FLEXTableContentViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m; sourceTree = ""; }; - 424EB09168A9B08701838D2A7EDC94C2 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 428DB70602DCEE373AC9B0C4B608613A /* icon-error@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-error@2x.png"; path = "Classes/Icons/icon-error@2x.png"; sourceTree = ""; }; - 4299CDC1811FD1EECB4DB5EC55A627C8 /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; - 42DE2BFEFC468002E68559DEFC81BF4F /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 430EFCFF0CB56FDBCE231FF94D931EDF /* SRRunLoopThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRunLoopThread.h; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.h; sourceTree = ""; }; - 4312AC8045A9523BBDA92EA881260CAD /* REMenu-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REMenu-prefix.pch"; sourceTree = ""; }; - 434442D1656B82307A269BDAB91756E8 /* DTASN1Serialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1Serialization.m; path = Core/Source/DTASN1/DTASN1Serialization.m; sourceTree = ""; }; - 4383780137AD6EBC331C98A674D85D2A /* FLEXArgumentInputNumberView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNumberView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m; sourceTree = ""; }; - 4418A7F72BC17CAC0C35D16F8C9B41B8 /* DAKeyboardControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DAKeyboardControl-prefix.pch"; sourceTree = ""; }; - 44E1E9B895CE79FC2B5A86A2A4C31800 /* FLEXOSLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXOSLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h; sourceTree = ""; }; - 45495AE4FE92B37E892170BF78584ABB /* FLEXDictionaryExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDictionaryExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.m; sourceTree = ""; }; - 454EF6585B707490E255BFCBF2EB2FEF /* UIScrollView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+DHSmartScreenshot.m"; path = "Classes/UIScrollView+DHSmartScreenshot.m"; sourceTree = ""; }; - 45612C5692984A9EA245DA0C4C277957 /* APAddressBook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBook.m; path = Pod/Core/Public/APAddressBook.m; sourceTree = ""; }; - 45C96A57E757799E5AFBF92D7408FB71 /* RECommonFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RECommonFunctions.m; path = REMenu/RECommonFunctions.m; sourceTree = ""; }; - 45D0959EB7EBA19D3C1B3B4B395D0DA6 /* NSGIF-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSGIF-umbrella.h"; sourceTree = ""; }; - 45E667D168F0A0EC3C3F7980F14DEF27 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 45FAF14D2E912131E973FED9C634CAE6 /* APContactListBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactListBuilder.m; path = Pod/Core/Private/Builders/APContactListBuilder.m; sourceTree = ""; }; - 46281EEC6B8D6031E6BF4C7203990F52 /* IQAudioCropperViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioCropperViewController.h; path = IQAudioRecorderController/IQAudioCropperViewController.h; sourceTree = ""; }; - 4634E4991F328EAE939D4C93931E6677 /* FLEXArgumentInputTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputTextView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.h; sourceTree = ""; }; - 463F8B83307F2595FA7EAE617F4F309E /* IQAudioRecorderController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQAudioRecorderController.modulemap; sourceTree = ""; }; - 464E35DD28A5D00C024FACFCD10F17F6 /* FLEXTableViewSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewSection.h; path = Classes/Core/FLEXTableViewSection.h; sourceTree = ""; }; - 4651E6622F02972A2208C55A578F7EBD /* SRHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHash.h; path = SocketRocket/Internal/Utilities/SRHash.h; sourceTree = ""; }; - 46688ADA29BFC2BD489BF661E0EADCE3 /* FLEXWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWebViewController.m; path = Classes/GlobalStateExplorers/FLEXWebViewController.m; sourceTree = ""; }; - 46B77B27DB7CBC4D299F73831B3A6CB3 /* SBJson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SBJson-prefix.pch"; sourceTree = ""; }; - 46E7F0D4033DD4C42AA9CB9ED2D4CB7B /* APAddressBookBaseRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookBaseRoutine.m; path = Pod/Core/Private/Routine/Base/APAddressBookBaseRoutine.m; sourceTree = ""; }; - 47118026110DEB408CD4ECCE80D5EFBA /* SocketRocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SocketRocket.modulemap; sourceTree = ""; }; - 47CDDBE29EEA6FE6BA39A06B8E7E4C26 /* FLEXIvarEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXIvarEditorViewController.m; path = Classes/Editing/FLEXIvarEditorViewController.m; sourceTree = ""; }; - 47E52BFCF60FE2A43DEF74EED2E75961 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - 48079E13FE814951D588D4E102DAE5DE /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 481690244A2714C30237941F162F6B46 /* SRMutex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRMutex.m; path = SocketRocket/Internal/Utilities/SRMutex.m; sourceTree = ""; }; - 488C892303279126A9F2448A5193E275 /* FLEXInstancesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXInstancesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m; sourceTree = ""; }; - 497DACA09B1AF0C7C6F056D5EC4F3AEE /* OMGHTTPURLRQ.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OMGHTTPURLRQ.xcconfig; sourceTree = ""; }; - 49F268639578EBEF77F6C44AD158AEEF /* SRSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSecurityPolicy.m; path = SocketRocket/SRSecurityPolicy.m; sourceTree = ""; }; - 4A0312B6BF1345E2CE38CD7515451551 /* FLEXExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerViewController.m; path = Classes/ExplorerInterface/FLEXExplorerViewController.m; sourceTree = ""; }; - 4A25842526BC58F6FE5B9E88768A9F15 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - 4AEACBAC7A3F5F8F01F11B98534431D6 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 4B0EF460632E099850E6FA7F7504E9D9 /* FLEX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-prefix.pch"; sourceTree = ""; }; - 4B2EDC76756B699049F0A083400894FA /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; name = unzip.c; path = Core/Source/Externals/minizip/unzip.c; sourceTree = ""; }; - 4BA2E6CB4653F7D039DD9E0973E3C50D /* PHFComposeBarView_TextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView_TextView.m; path = Classes/PHFComposeBarView_TextView.m; sourceTree = ""; }; - 4BCD92D4F40281CCF9EB7794E9E81BC2 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; - 4BEBA1E83A797A92F678390376FC9517 /* TTTAttributedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TTTAttributedLabel.modulemap; sourceTree = ""; }; - 4C1C96A5F159D92214662D6F6FA1E7D9 /* APSocialProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSocialProfile.m; path = Pod/Core/Public/Models/APSocialProfile.m; sourceTree = ""; }; - 4C977A7974E7F2A432E97A6DAE8B2F85 /* FLEXArrayExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArrayExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.h; sourceTree = ""; }; - 4CA6D12BEC506A1FDA7780F7F0E03CD5 /* FLEXASLLogController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXASLLogController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m; sourceTree = ""; }; - 4CCC40A1E5649E139FD43639B250C420 /* FLEXSystemLogTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogTableViewCell.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.h; sourceTree = ""; }; - 4D2E857E6E138F2ACD5F3C5A429F9B60 /* DTFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4D31B8FDFB387E867B599908BFE6EC82 /* RMDateSelectionViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RMDateSelectionViewController.framework; path = RMDateSelectionViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4D8809AA404A801D77157B6CBCF22DC9 /* JDStatusBarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarView.h; path = JDStatusBarNotification/JDStatusBarView.h; sourceTree = ""; }; - 4E4241F221C2F1CB41BEB6C998F0E87F /* FLEXScopeCarousel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXScopeCarousel.m; path = Classes/Core/FLEXScopeCarousel.m; sourceTree = ""; }; - 4E4FE8498C4C80FF2294EBF963B91684 /* AHKActionSheet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AHKActionSheet.modulemap; sourceTree = ""; }; - 4E5CEE5CD669FAB10E39C9F66FB4924D /* PHFComposeBarView_TextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView_TextView.h; path = Classes/PHFComposeBarView_TextView.h; sourceTree = ""; }; - 4E88AE40AE581BA5ADC854D28C584B7F /* FLEXSetExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSetExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXSetExplorerViewController.m; sourceTree = ""; }; - 4F27EC3BACB1FE37BF085E20BD7CAD55 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4F3A83F6141FF726443C4343819D8C1D /* input_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = input_stream.h; path = FreeStreamer/FreeStreamer/input_stream.h; sourceTree = ""; }; - 4F4776337571480F4EF37313A9BC558F /* NSURL+DTComparing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTComparing.h"; path = "Core/Source/NSURL+DTComparing.h"; sourceTree = ""; }; - 4F62A67C9FEDC2BD9C475F5B6355A148 /* IQCropSelectionEndView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionEndView.h; path = IQAudioRecorderController/IQCropSelectionEndView.h; sourceTree = ""; }; - 4F779F5FDC502CB17D38CDA4B910F177 /* NSHash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSHash-prefix.pch"; sourceTree = ""; }; - 4F92CD2C544119E504B28E3B57B082BE /* file_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = file_stream.cpp; path = FreeStreamer/FreeStreamer/file_stream.cpp; sourceTree = ""; }; - 4F938308C325B592FCEA711340A1FFED /* IQCropSelectionBeginView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionBeginView.m; path = IQAudioRecorderController/IQCropSelectionBeginView.m; sourceTree = ""; }; - 502D2016ADF832FC3666AF6CB08CBC2C /* UICKeyChainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UICKeyChainStore.h; path = Lib/UICKeyChainStore/UICKeyChainStore.h; sourceTree = ""; }; - 503404F3357CE70B9FE3953AAE32D003 /* FLEXASLLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXASLLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.h; sourceTree = ""; }; - 50A78E85A5C5E9F7A794C625FF34352D /* DHSmartScreenshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DHSmartScreenshot.xcconfig; sourceTree = ""; }; - 50BDADB663342EF4517A740562288951 /* FLEXHierarchyTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewCell.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.m; sourceTree = ""; }; - 50E932C44C351B492A1A7EF58E664B2D /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; - 510C686AD8AE00A79583D4615287A67E /* UIFont+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DTCoreText.m"; path = "Core/Source/UIFont+DTCoreText.m"; sourceTree = ""; }; - 513E160F8F3010109DA38DD4AA45C58A /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; - 517FFC098D82CB32C96EBED73B000966 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/AddressBook.framework; sourceTree = DEVELOPER_DIR; }; - 519E251A7E063DF83E33441CEA6B8F09 /* libPhoneNumber-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "libPhoneNumber-iOS.modulemap"; sourceTree = ""; }; - 51C9AAC2C8BA616CDDDFB6ED7AE40599 /* SBJson5StreamParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamParser.m; path = Classes/SBJson5StreamParser.m; sourceTree = ""; }; - 51EB962C1DA80BA9F267B3A39F7F3942 /* audio_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = audio_stream.h; path = FreeStreamer/FreeStreamer/audio_stream.h; sourceTree = ""; }; - 51F5B37FEF3F26ABF433BCDDED00F2C0 /* JSCoreBom-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JSCoreBom-dummy.m"; sourceTree = ""; }; - 526F7CCD4DE14D9D4E9DE303D5041553 /* IQPlaybackDurationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPlaybackDurationView.m; path = IQAudioRecorderController/IQPlaybackDurationView.m; sourceTree = ""; }; - 52762B80A432C12B7EFBC87C3CA383A8 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; - 52787F4F83BC9541911C3E2E8590D7D0 /* DTSidePanelController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelController.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelController.m; sourceTree = ""; }; - 527989518798811C9AF2024CE931F685 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; }; - 528911BED3AB7AAC08D31D095376F8D7 /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; - 528A7982BA9364138ED261DD9B6BA77D /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 528D6C2EEF4372B3B714C29EDD3B0832 /* FLEXObjectExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.h; sourceTree = ""; }; - 52F326DDD5B5695ED1CEC359AF91EEFF /* FLEXTableContentCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.m; sourceTree = ""; }; - 5326224DD6842882AD6F1087FE7890AA /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 532FB1B0F98CBFE8AF92AEA33A837B85 /* APThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APThread.m; path = Pod/Core/Private/Thread/APThread.m; sourceTree = ""; }; - 5362D9D77EE5965634942644200D8D10 /* FLEXArgumentInputStringView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStringView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h; sourceTree = ""; }; - 5381A2E0FD2ADD63C4B15D83E73F2C03 /* FLEXUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXUtility.m; path = Classes/Utility/FLEXUtility.m; sourceTree = ""; }; - 53AF4145B2AC68B078DC9F1E4D6842F5 /* FLEXArgumentInputObjectView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputObjectView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m; sourceTree = ""; }; - 53BDFD414105F3A6420D56B4828FA029 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 54050775A4C3864DEDC51400E3DC21AC /* INTULocationManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = INTULocationManager.xcconfig; sourceTree = ""; }; - 542AED4FFD6305FB32D4BFBEE5D5D426 /* DTScriptVariable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTScriptVariable.h; path = Core/Source/DTScripting/DTScriptVariable.h; sourceTree = ""; }; - 551F53DF64284B76BFEF22037722A542 /* DTSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSQLiteDatabase.m; path = Core/Source/DTSQLite/DTSQLiteDatabase.m; sourceTree = ""; }; - 55241A106C2AE0E537E9EEED249CF55D /* SBJson5Parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5Parser.m; path = Classes/SBJson5Parser.m; sourceTree = ""; }; - 553D68EA4E14EE1E8537DDA11EDFCB11 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking.framework; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 55442B4C3FE71D874309E53D14581064 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; - 56060A737B5355D3BE39B242354DEABE /* FLEXClassExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.h; sourceTree = ""; }; - 5610F1552C37FE6905EB2FD119C55DE5 /* IQAudioRecorderController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQAudioRecorderController.xcconfig; sourceTree = ""; }; - 56294C5EEAD32234DC1425768B6F0042 /* DTZipArchiveNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchiveNode.m; path = Core/Source/DTZipArchive/DTZipArchiveNode.m; sourceTree = ""; }; - 56894A8AACBFD972F0EB23DF976A5257 /* DTAttributedTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextView.h; path = Core/Source/DTAttributedTextView.h; sourceTree = ""; }; - 56A6087C30E0EAEC4E5B3B575E063C73 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; - 56E1F5CED4D92536754B9933F2945A9A /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; - 5716DAA9FE253DC73A74F6AD02DCDEFB /* SBJson5StreamWriterState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamWriterState.h; path = Classes/SBJson5StreamWriterState.h; sourceTree = ""; }; - 572667F46D1B9FFAC8F573649B8E9064 /* APTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APTypes.h; path = Pod/Core/Public/Models/APTypes.h; sourceTree = ""; }; - 57BE58BA5CDF596290D40BE457FC1561 /* FLEXSQLiteDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSQLiteDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m; sourceTree = ""; }; - 581C06D2AD6A944466CC8C93234308BB /* DAKeyboardControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DAKeyboardControl-umbrella.h"; sourceTree = ""; }; - 58208E7D03BD787D908FA8E4F6EEB8DA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 583460F762B34C8AD0AF96EC5307DCDB /* APAddressBookExternalChangeRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookExternalChangeRoutine.m; path = Pod/Core/Private/Routine/APAddressBookExternalChangeRoutine.m; sourceTree = ""; }; - 5838F38ECC23D2621CBB56354FD24DC0 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 58A3272A6461BB0F6B3BE82596C39FFB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5967A38F7AC67FACF2527F5349DC23B9 /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; - 59B21DD364ED7191DD0812C2A975B9DA /* FLEXArgumentInputNotSupportedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNotSupportedView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h; sourceTree = ""; }; - 5A558BB449925114C72D0869B6075618 /* FLEXDefaultsExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultsExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.h; sourceTree = ""; }; - 5A7739F68E6EDD46D7681D31C9A09805 /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; - 5A8829696025A909095121D5683BFFA0 /* JDStatusBarNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarNotification.m; path = JDStatusBarNotification/JDStatusBarNotification.m; sourceTree = ""; }; - 5A9BB1F5E2E39212C99D05F37DB96C66 /* SBJson5StreamWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamWriter.m; path = Classes/SBJson5StreamWriter.m; sourceTree = ""; }; - 5AAC870DCFA62F62F09C83FF44ADF484 /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; - 5ACEA54C5DC8C3BA971D585D9A87B1AF /* caching_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = caching_stream.cpp; path = FreeStreamer/FreeStreamer/caching_stream.cpp; sourceTree = ""; }; - 5B0AFA05E1D8C9DC6F6F10239602DC9B /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; - 5B6AB429233A413611E58B91E5BECA19 /* APContactListBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactListBuilder.h; path = Pod/Core/Private/Builders/APContactListBuilder.h; sourceTree = ""; }; - 5C511E890EFE892D27880620A9C9966B /* APContact.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContact.h; path = Pod/Core/Public/Models/APContact.h; sourceTree = ""; }; - 5C80D4CF03E04D01733CBEEF0C1591F6 /* DTObjectBlockExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectBlockExecutor.m; path = Core/Source/Runtime/DTObjectBlockExecutor.m; sourceTree = ""; }; - 5CA960EC62CEC903B7994A99E876C6D6 /* OMGHTTPURLRQ-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OMGHTTPURLRQ-dummy.m"; sourceTree = ""; }; - 5CB23C6E86FE2C212BF12EBBBA7F7AB4 /* APAddressBookExternalChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookExternalChangeDelegate.h; path = Pod/Core/Private/Routine/APAddressBookExternalChangeDelegate.h; sourceTree = ""; }; - 5CC1A62678BA86A5609A7E34F62A13DB /* FSCheckContentTypeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCheckContentTypeRequest.m; path = FreeStreamer/FreeStreamer/FSCheckContentTypeRequest.m; sourceTree = ""; }; - 5CF42C8B5C46AC76813916166696785A /* DTReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTReachability.h; path = Core/Source/DTReachability/DTReachability.h; sourceTree = ""; }; - 5D3D059687201D4BBA31D8124DEBD936 /* SBJson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SBJson-dummy.m"; sourceTree = ""; }; - 5D432C60EE6535479A58D8216721EE3C /* FLEXMethodCallingViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethodCallingViewController.h; path = Classes/Editing/FLEXMethodCallingViewController.h; sourceTree = ""; }; - 5D60321161BB405E4D6ACB1F10E7B3AF /* Reachability-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reachability-umbrella.h"; sourceTree = ""; }; - 5DA16A373A26BBB2123E4C0E18F625B9 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Core/Source/Externals/minizip/zip.h; sourceTree = ""; }; - 5DE7AB8C7CB1A03544D318F35CC5987A /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; - 5DF81AB19D9703820F926DCBEF724454 /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; name = zip.c; path = Core/Source/Externals/minizip/zip.c; sourceTree = ""; }; - 5E24B14F5FEE430E855F0991ECA632BB /* AFHTTPRequestSerializer+OAuth2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "AFHTTPRequestSerializer+OAuth2.m"; path = "AFOAuth2Manager/AFHTTPRequestSerializer+OAuth2.m"; sourceTree = ""; }; - 5E5DF4C07D250FD6802A7284992665F6 /* APAddressBookContactsRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookContactsRoutine.h; path = Pod/Core/Private/Routine/APAddressBookContactsRoutine.h; sourceTree = ""; }; - 5F243ACDBD912A9F510F7CCD99EFAE7D /* DHSmartScreenshot-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DHSmartScreenshot-dummy.m"; sourceTree = ""; }; - 5F4320438835EE011B17FF3C582BDD15 /* FLEXCookiesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCookiesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.h; sourceTree = ""; }; - 602B1D21962A01493E18CE194E4EE632 /* icon-info.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-info.png"; path = "Classes/Icons/icon-info.png"; sourceTree = ""; }; - 602EFE45F5B4511DE20D77B656220E0A /* FSParsePlaylistRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSParsePlaylistRequest.m; path = FreeStreamer/FreeStreamer/FSParsePlaylistRequest.m; sourceTree = ""; }; - 607A80231556DB7CBECDCAA31DC5CD04 /* FLEXRuntimeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeUtility.m; path = Classes/Utility/FLEXRuntimeUtility.m; sourceTree = ""; }; - 6099BDE6CEEAFD3FE824CA5730777F3E /* FreeStreamer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FreeStreamer.xcconfig; sourceTree = ""; }; - 60C801C344F2192EA53CC6FCC3E088FE /* INTULocationManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = INTULocationManager.modulemap; sourceTree = ""; }; - 6164CB83D962C4CA9B1BC981FE007781 /* FLEXPropertyEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXPropertyEditorViewController.h; path = Classes/Editing/FLEXPropertyEditorViewController.h; sourceTree = ""; }; - 6170EF8CDF07787817E954E56BB9B1A2 /* DTZipArchivePKZip.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchivePKZip.m; path = Core/Source/DTZipArchive/DTZipArchivePKZip.m; sourceTree = ""; }; - 61B28B06B600C69667B396E129B7C6C5 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkCurlLogger.m; path = Classes/Network/FLEXNetworkCurlLogger.m; sourceTree = ""; }; - 61D3B4C8E4F29B550C006455FC428B29 /* APAddressBook.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = APAddressBook.framework; path = APAddressBook.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 626B30E7285718DAE34EA3FE5CE82601 /* http_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = http_stream.cpp; path = FreeStreamer/FreeStreamer/http_stream.cpp; sourceTree = ""; }; - 632744D9C7F01AE30CD290C1A4CBFBCE /* FLEXFieldEditorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorView.m; path = Classes/Editing/FLEXFieldEditorView.m; sourceTree = ""; }; - 63E12866C1EDA1E6E8EE1DED2CFC18A4 /* Reachability.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reachability.xcconfig; sourceTree = ""; }; - 646B47846A0CCEC64E273C7232F48375 /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; - 647801C4D9AEFBC80F87A3DE48A45CEB /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; - 64AE86A4174ECE589CE404811E6BEA63 /* AHKActionSheet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AHKActionSheet.xcconfig; sourceTree = ""; }; - 64ED5E2F92C7AE3DEB6D8B647EDED15E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 659C54963EB5C71323D49C2FD62901B5 /* FLEXArrayExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArrayExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXArrayExplorerViewController.m; sourceTree = ""; }; - 66196CF3AAA01E8A783CB47BDF87F3B5 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 6648BA3C4E28CD013CA57461384415EF /* AHKActionSheetViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AHKActionSheetViewController.h; path = Classes/AHKActionSheetViewController.h; sourceTree = ""; }; - 665227015E93D6A0D7970467CEE3E7C0 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 66CF7F80F139EDB4D3B70E0BBA93DA52 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - 66D319C9EB45B34197023C0F7C881862 /* SCSiriWaveformView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SCSiriWaveformView.m; path = SCSiriWaveformView/SCSiriWaveformView.m; sourceTree = ""; }; - 66E77F3E2D2C21D1F2132D2970E35BB5 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; - 674555CE74CB77C84D08626D3B3065B2 /* DTZipArchiveNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchiveNode.h; path = Core/Source/DTZipArchive/DTZipArchiveNode.h; sourceTree = ""; }; - 674F00ABBE625D01BCAF7FCC8DB85342 /* AFOAuth2Manager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFOAuth2Manager.modulemap; sourceTree = ""; }; - 67A235E14AA38F5DB441F14CC44F651B /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; - 67AEE5ECD99B346C8A094BCCC784F9E8 /* HMSegmentedControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HMSegmentedControl-dummy.m"; sourceTree = ""; }; - 67FD4687C3AFD36A832764120D72D1AB /* IQAudioRecorderController.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQAudioRecorderController.bundle; path = IQAudioRecorderController/Resources/IQAudioRecorderController.bundle; sourceTree = ""; }; - 6841B667935D5F7AF6DF9BB121FCE323 /* SZTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SZTextView-prefix.pch"; sourceTree = ""; }; - 68D3E8836D2BFCAF9ACE69CAFB685927 /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; - 68F6471CC02D47243436EDCCA2E98365 /* NBPhoneNumberDesc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberDesc.h; path = libPhoneNumber/NBPhoneNumberDesc.h; sourceTree = ""; }; - 6901AD032FD24B4C4CD23780A95AF91A /* FLEXKeychainTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychainTableViewController.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.h; sourceTree = ""; }; - 6902717064749154F383EC2D796D5FE3 /* FLEXArgumentInputStructView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStructView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h; sourceTree = ""; }; - 69202E90B9F5BC72E866B7A2C2E64281 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; - 692186D20ACD493FD60D0AEC8B449B75 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; - 692348476D648C51B26B1E1D5B0EF9FD /* FLEXGlobalsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsTableViewController.m; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.m; sourceTree = ""; }; - 692A213FABEAAE1206ACCDE41FE2F9F3 /* FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEX.h; path = Classes/FLEX.h; sourceTree = ""; }; - 6999AFE652719BC391E5A3D9BFCE8EBE /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; - 6A4CC95AA11004A7B335FC00A65326B3 /* SCSiriWaveformView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SCSiriWaveformView-dummy.m"; sourceTree = ""; }; - 6A705BB935FFD33E97659567904F3C2B /* BBBadgeBarButtonItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = BBBadgeBarButtonItem.framework; path = BBBadgeBarButtonItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6A9C380C1F8E98598276DBDB07E717C6 /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.h"; sourceTree = ""; }; - 6AAD89029B1CEF93713ADC6CF75D49F6 /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; - 6AD7DDBFAAFBE292FDF015EBE25D459E /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; - 6ADFD3746888CF1A155B596BBFEAE83A /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; - 6AFC5B1169CBD3816237A656BCEADCC0 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; }; - 6B1F62D60F8822CD21C9F621579F3193 /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; - 6B71F4D52E695DA2B041D6CE0FC1F631 /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; - 6BAED06F7C8DB1A5196A9B89B6031E2F /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 6C12BACEF9761018BB080B4E6EF2312D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6C2F252FE80E1FD2C9C56463D50FF7DE /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - 6C3667BE1B5CB40159570B6231660871 /* SWTableViewCell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SWTableViewCell.modulemap; sourceTree = ""; }; - 6C8C5FC75A3F1EAD106D8A2F943EE86B /* FLEXSystemLogTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogTableViewCell.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogTableViewCell.m; sourceTree = ""; }; - 6D0BEC90ED8112E7B0773B4C764030EF /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; - 6DA4F082CFCA6BF5814CAA79BDD60D99 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6DA5D976DEBEA96C79435ADA5F48BD9D /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; - 6DBB91FD9C95F6DB31A9A1C648E3476D /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; - 6DE07D2BD898DCDD5B4C310C960737B9 /* FLEXRealmDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRealmDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m; sourceTree = ""; }; - 6DE5574FC74A9700DC310DE46BED36D5 /* NSRunLoop+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h"; sourceTree = ""; }; - 6DF8B1D18183403EAE47932EA21C1EC1 /* INTURequestIDGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTURequestIDGenerator.m; path = LocationManager/INTULocationManager/INTURequestIDGenerator.m; sourceTree = ""; }; - 6E11756034350960B2A2A7A7DD9C225A /* RMDateSelectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMDateSelectionViewController.h; path = RMDateSelectionViewController/RMDateSelectionViewController.h; sourceTree = ""; }; - 6E23AB6257D7151393371ACCC76E9CEF /* SBJson.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SBJson.modulemap; sourceTree = ""; }; - 6EACC9B6C9158F9F7D9B5DBB31783D91 /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; - 6ED3133FEFC2467C11487557DF5756A2 /* stream_configuration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stream_configuration.h; path = FreeStreamer/FreeStreamer/stream_configuration.h; sourceTree = ""; }; - 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 6F0555BE47801F69C39D049800668ECC /* icon-success@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-success@2x.png"; path = "Classes/Icons/icon-success@2x.png"; sourceTree = ""; }; - 6F6323EF9CC5F75A726A967EA390291C /* FLEXArgumentInputColorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputColorView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h; sourceTree = ""; }; - 6F7E6A675E68B7B6EDAA440D94618922 /* APName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APName.m; path = Pod/Core/Public/Models/APName.m; sourceTree = ""; }; - 702AE88D3598C4D9DC218B19BC95BB5F /* APAddressBookContactsRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookContactsRoutine.m; path = Pod/Core/Private/Routine/APAddressBookContactsRoutine.m; sourceTree = ""; }; - 70A05BDAAEB19276EE7B6ED2F11D4B46 /* INTURequestIDGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTURequestIDGenerator.h; path = LocationManager/INTULocationManager/INTURequestIDGenerator.h; sourceTree = ""; }; - 711BC7CEE51FB9A2D57CC59F9C839BB2 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; - 7152F6BB0B41547546BFBD92CDE12346 /* DTScriptVariable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTScriptVariable.m; path = Core/Source/DTScripting/DTScriptVariable.m; sourceTree = ""; }; - 71576946D651BF1F2729C359EFBF9795 /* UIImage+DHImageAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DHImageAdditions.h"; path = "Classes/UIImage+DHImageAdditions.h"; sourceTree = ""; }; - 715F5A7F699E5FFEB36F1BB7163B504D /* FLEXObjectExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXObjectExplorerViewController.m; sourceTree = ""; }; - 7225D54C287C3E3FBC18B9AF4D8F3C48 /* audio_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = audio_stream.cpp; path = FreeStreamer/FreeStreamer/audio_stream.cpp; sourceTree = ""; }; - 724DB3E50807BE9026DAEE2CADC2DB2C /* FLEXKeychainQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychainQuery.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.h; sourceTree = ""; }; - 728002332EAE28CB8620524F6AE370CB /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - 72F70E98328D102C67D0D2EC2893F8AA /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 7373FE274C304384A42EAE330B218514 /* TDOAuth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TDOAuth-prefix.pch"; sourceTree = ""; }; - 7376C211B8E31E8297D6B37DAD438A02 /* FLEXToolbarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXToolbarItem.h; path = Classes/Toolbar/FLEXToolbarItem.h; sourceTree = ""; }; - 73B89D9F822433AAC0785D592348EE03 /* NSMutableArray+SWUtilityButtons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+SWUtilityButtons.h"; path = "SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.h"; sourceTree = ""; }; - 73B8A9143DE5663AC556A41DA66F6814 /* APSocialProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSocialProfile.h; path = Pod/Core/Public/Models/APSocialProfile.h; sourceTree = ""; }; - 73FCE57D70A762D3BD218B0391E60AF3 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; - 73FF8831F31F1FD925A7F94D4FA5E655 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 742FF527263FB967CDD5BC63B72A00FB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 744CA891DE97154A3654477FCEB2ACEC /* APImageExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APImageExtractor.h; path = Pod/Core/Private/Extractors/APImageExtractor.h; sourceTree = ""; }; - 74CAC726BD1E9DCE7DC9F0359F836A32 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - 75AE13BB1300AE1EF183AD9519819DCC /* JDStatusBarStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarStyle.h; path = JDStatusBarNotification/JDStatusBarStyle.h; sourceTree = ""; }; - 75C43D77B139BD0A1476E783B083241E /* REMenu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenu.h; path = REMenu/REMenu.h; sourceTree = ""; }; - 75DBC61504BC8F9F90CF9FAE107FAA1E /* UICKeyChainStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICKeyChainStore-dummy.m"; sourceTree = ""; }; - 7716FA16F65B0ECD19827BAEEA61EA40 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; - 774D0A881EB1E923C6FD797A75258541 /* FLEXBundleExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBundleExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXBundleExplorerViewController.m; sourceTree = ""; }; - 774DB96CCD1DAF3FD2D4F2E86E5AB5AB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; - 7752026FB3648064F723FE5B910A5B18 /* APAddressBook.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = APAddressBook.xcconfig; sourceTree = ""; }; - 77725B87B010942D033614C46B9BED1B /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; - 77F5D2C3B8753C48E21E9C0DD2BCD1CA /* INTULocationRequestDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationRequestDefines.h; path = LocationManager/INTULocationManager/INTULocationRequestDefines.h; sourceTree = ""; }; - 78356459AFC2AEFA74B9215AA8C91E73 /* RMActionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMActionController.m; path = RMActionController/RMActionController.m; sourceTree = ""; }; - 78B10E4030E682FDF3DAFEB7FB10FA0E /* BBBadgeBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BBBadgeBarButtonItem.m; path = BBBadgeBarButtonItem/BBBadgeBarButtonItem.m; sourceTree = ""; }; - 790A917F383C910A85C38C8361628DB9 /* FLEXColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXColor.h; path = Classes/Utility/FLEXColor.h; sourceTree = ""; }; - 79B8D27082D7F68890ACE43D1EDC2D7A /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; - 7A358CB924AE8A9F95E784F38641C5C2 /* JSCoreBom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSCoreBom.m; path = JSCoreBom/JSCoreBom.m; sourceTree = ""; }; - 7AB5425190F5A1242504B37C019F33E0 /* SRHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHash.m; path = SocketRocket/Internal/Utilities/SRHash.m; sourceTree = ""; }; - 7ADABF833A68E5778035698D382409C9 /* mztools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mztools.h; path = Core/Source/Externals/minizip/mztools.h; sourceTree = ""; }; - 7B367001955C3BB3FEA8D874787101EB /* TTTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TTTAttributedLabel.h; path = TTTAttributedLabel/TTTAttributedLabel.h; sourceTree = ""; }; - 7B57484917DC351F6D92A971C8BA5D24 /* file_output.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = file_output.cpp; path = FreeStreamer/FreeStreamer/file_output.cpp; sourceTree = ""; }; - 7BC3E0E0FB72DAF87AB1DF473867D669 /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; - 7BCE1086466D7E0BC13AB582F3FA06F9 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - 7C193AD8254DBDD606B671F9653F63B6 /* SBJson5StreamWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamWriter.h; path = Classes/SBJson5StreamWriter.h; sourceTree = ""; }; - 7C49EF3607155225F4243CE25D561D11 /* UIView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DHSmartScreenshot.m"; path = "Classes/UIView+DHSmartScreenshot.m"; sourceTree = ""; }; - 7C9F85C9340B76690952E7EF4F878566 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 7CA804AC6FA20B2600B010E320A4EF24 /* DTBlockFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBlockFunctions.h; path = Core/Source/DTBlockFunctions.h; sourceTree = ""; }; - 7CB92A1E91F7E4C328D1D52EE11F416C /* SRPinningSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRPinningSecurityPolicy.h; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.h; sourceTree = ""; }; - 7CE07936584EC20AC2455BE58C0A4969 /* NSGIF.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NSGIF.modulemap; sourceTree = ""; }; - 7CE96321B96B44AD12295012ED450F21 /* NSGIF.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NSGIF.framework; path = NSGIF.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7D1C8E3D8BBD988B5E69A4F8AA69ED1B /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 7D33FB6B69DB55E1222425ECD97B4EE4 /* TWMessageBarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TWMessageBarManager-prefix.pch"; sourceTree = ""; }; - 7DA7D0E84BED7368467B8EF74E137B52 /* FLEXKeychainTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychainTableViewController.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainTableViewController.m; sourceTree = ""; }; - 7DC52B059F9812EA3FD2263CB01F42EF /* FLEXTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewCell.m; path = Classes/ObjectExplorers/Views/FLEXTableViewCell.m; sourceTree = ""; }; - 7DF076D45312FBACC1E33C74E1CAF3D8 /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; - 7DF96C8E503FC9006FA9DA9BDAA176C2 /* UIApplication+DTNetworkActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DTNetworkActivity.m"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.m"; sourceTree = ""; }; - 7DFC81923B5D3FE7D11094382EBDAE13 /* IQCropSelectionBeginView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionBeginView.h; path = IQAudioRecorderController/IQCropSelectionBeginView.h; sourceTree = ""; }; - 7E30154FFC152F27B5F212062A7D551C /* mztools.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mztools.c; path = Core/Source/Externals/minizip/mztools.c; sourceTree = ""; }; - 7E8DBAFB518B96F0C3B608E8EF560BAF /* FLEXColorExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXColorExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.h; sourceTree = ""; }; - 7E9E46D4CAD54597D6F9FF1103050A45 /* PHFDelegateChain.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFDelegateChain.xcconfig; sourceTree = ""; }; - 7F1BACD8F9697F29E0E3A1A7C2F32284 /* ModuleXMLHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleXMLHttpRequest.h; path = JSCoreBom/Modules/ModuleXMLHttpRequest.h; sourceTree = ""; }; - 7F3A3D6BADE58B71622C50DFF1A6FF39 /* DTAsyncFileDeleter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAsyncFileDeleter.m; path = Core/Source/DTAsyncFileDeleter/DTAsyncFileDeleter.m; sourceTree = ""; }; - 7F4D86A246FC2AD543ACF2F29BE006D1 /* SRRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRandom.m; path = SocketRocket/Internal/Utilities/SRRandom.m; sourceTree = ""; }; - 7F7DB9966F56D9B5CECCDBD53DB6419B /* NSURL+DTAWS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAWS.h"; path = "Core/Source/DTAWS/NSURL+DTAWS.h"; sourceTree = ""; }; - 7FD3F16C6A04121C6BAE8993EF484FDF /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; - 806DAFD8F46AF91F1E33FD068B56EBAD /* APPhone.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APPhone.h; path = Pod/Core/Public/Models/APPhone.h; sourceTree = ""; }; - 807CA6CEB5AFD3D42CC45F2A18637905 /* APEmail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APEmail.h; path = Pod/Core/Public/Models/APEmail.h; sourceTree = ""; }; - 80B64901FADBEFE1C3D1F2D29F663EEB /* UIImage+AHKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AHKAdditions.h"; path = "Classes/UIImage+AHKAdditions.h"; sourceTree = ""; }; - 80E1E5263559998446D4A2752E9D2CE3 /* Reachability.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Reachability.modulemap; sourceTree = ""; }; - 8151B931EE4CB02873E6BA5B9AF564FD /* INTULocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationManager.h; path = LocationManager/INTULocationManager/INTULocationManager.h; sourceTree = ""; }; - 81A9C82D345662D1D35B4EF3472FDF76 /* NSGIF.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSGIF.xcconfig; sourceTree = ""; }; - 81E9DDB36A88501A0C99AFC827BD4ACC /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 8208E65A4B9EA574E2D254E9286BCD22 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - 8211D6AF671ECB6C1A438701B45C9E49 /* FLEXFieldEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorViewController.m; path = Classes/Editing/FLEXFieldEditorViewController.m; sourceTree = ""; }; - 82A04B3E2501CF6823953B111AE3E139 /* DTObjectBlockExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectBlockExecutor.h; path = Core/Source/Runtime/DTObjectBlockExecutor.h; sourceTree = ""; }; - 82F6E87C8FE732C726E4D90309959332 /* file_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = file_stream.h; path = FreeStreamer/FreeStreamer/file_stream.h; sourceTree = ""; }; - 8303466B3D1668DDE02BA95031381AF6 /* SWTableViewCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SWTableViewCell.framework; path = SWTableViewCell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8344E6EA329083A7430F58B1D03F33F3 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; - 835863DBC2516B295BB91F8A991563BD /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; - 83AA95BC2941502FFC0A2EAE00CC4FC6 /* APAddressBookRefWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookRefWrapper.m; path = Pod/Core/Private/Wrapper/APAddressBookRefWrapper.m; sourceTree = ""; }; - 83C37D5FB73A690EBB95ADEB9E81253A /* TWMessageBarManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWMessageBarManager.h; path = Classes/TWMessageBarManager.h; sourceTree = ""; }; - 83D4761478E69E114DF523BFEEFEF308 /* OMGHTTPURLRQ.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGHTTPURLRQ.m; path = Sources/OMGHTTPURLRQ.m; sourceTree = ""; }; - 83F568B41BA7D531C4735401CD7BBFF1 /* FLEXLayerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLayerExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.h; sourceTree = ""; }; - 847A32348362EEDEEBF7F367F83317BB /* APSocialServiceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSocialServiceHelper.m; path = Pod/Core/Private/Helpers/APSocialServiceHelper.m; sourceTree = ""; }; - 84993C5A44DC766A0F76381F9DBB86EC /* FLEXFileBrowserSearchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserSearchOperation.m; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m; sourceTree = ""; }; - 84AAFEFBC287F7BE0D872EB49165072F /* FSXMLHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSXMLHttpRequest.h; path = FreeStreamer/FreeStreamer/FSXMLHttpRequest.h; sourceTree = ""; }; - 8545CB14E24FF526CB5152E9086FA913 /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; - 856A4FFECB004580D45FE0791BEA5CF5 /* APAddressBookFramework.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookFramework.h; path = Pod/Core/Public/APAddressBookFramework.h; sourceTree = ""; }; - 85968DF52D21A49F021C6E1561AD3244 /* AHKActionSheet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AHKActionSheet-prefix.pch"; sourceTree = ""; }; - 85A3E45D8E389F60BBDA4D1062821ADA /* SRSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSecurityPolicy.h; path = SocketRocket/SRSecurityPolicy.h; sourceTree = ""; }; - 866401195074BC0973A7586449FBA254 /* SWUtilityButtonView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWUtilityButtonView.h; path = SWTableViewCell/PodFiles/SWUtilityButtonView.h; sourceTree = ""; }; - 868DE1EFD114A8FF2689DCF2E356B8FF /* PHFComposeBarView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PHFComposeBarView-dummy.m"; sourceTree = ""; }; - 868E9476F93AC954706428A1D56EDF01 /* FLEXTableColumnHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableColumnHeader.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m; sourceTree = ""; }; - 86AF84C761574816B6A142134ACDFC60 /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; - 86C5591AEFDB82CAE5C7AEA872C0C22A /* JDStatusBarNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JDStatusBarNotification-umbrella.h"; sourceTree = ""; }; - 872E53CFD1085E0B05DA19A23A9688DC /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; - 875B943FAF593187E812BC0513709071 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 8779C6F78EE439D7D87FBE9495CFAF03 /* Reachability-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Reachability-dummy.m"; sourceTree = ""; }; - 87830096B0D5331ABCD532C4E3BE2B42 /* NBPhoneNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumber.h; path = libPhoneNumber/NBPhoneNumber.h; sourceTree = ""; }; - 87C731CD7F8E46304CBE735FED9BE8BC /* FLEXObjcInternal.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FLEXObjcInternal.mm; path = Classes/Utility/FLEXObjcInternal.mm; sourceTree = ""; }; - 88312E821A23572FF1D63EDD210D6842 /* FLEXScopeCarousel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXScopeCarousel.h; path = Classes/Core/FLEXScopeCarousel.h; sourceTree = ""; }; - 8857D719CFEBAFA819DB09494272FE44 /* FSAudioStream.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FSAudioStream.mm; path = FreeStreamer/FreeStreamer/FSAudioStream.mm; sourceTree = ""; }; - 88D49248C0ABD703E32F29DD6E0A2FCA /* REMenuItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuItem.m; path = REMenu/REMenuItem.m; sourceTree = ""; }; - 8905056BE752C30914FE90B590213460 /* SWFrameButton.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SWFrameButton.framework; path = SWFrameButton.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 895C94A91F6D96F19BCA2000206DAEC9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 89E8CD7F829FE03513ABF59FCA0D7C58 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - 89EE1F8881CEF6C851DDDCBDDBBA9A81 /* FLEXNetworkTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransaction.m; path = Classes/Network/FLEXNetworkTransaction.m; sourceTree = ""; }; - 8A7BB6F13BE76C48FA8D859CB3C97139 /* NBPhoneNumberDesc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberDesc.m; path = libPhoneNumber/NBPhoneNumberDesc.m; sourceTree = ""; }; - 8A806196B79C540BFA1D38692C3F546E /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; - 8A83B62D116416D79AA16FE0D44BFE05 /* TDOAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TDOAuth.framework; path = TDOAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8A98FD238964ED238860683EFC130891 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; - 8ACFAA84211391385F02B0694F51D0D1 /* icon-info@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-info@2x.png"; path = "Classes/Icons/icon-info@2x.png"; sourceTree = ""; }; - 8AD9214E149B8EBE282BFD18616DEEB4 /* SWTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWTableViewCell.h; path = SWTableViewCell/PodFiles/SWTableViewCell.h; sourceTree = ""; }; - 8B897D0F92ABC751DE71092874D10D4F /* SBJson5StreamTokeniser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamTokeniser.m; path = Classes/SBJson5StreamTokeniser.m; sourceTree = ""; }; - 8BCA12CDD4904935E530EEB1F243C1DC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8C1FDAE878767B1460CDF63F0DB3745D /* JDStatusBarNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JDStatusBarNotification-prefix.pch"; sourceTree = ""; }; - 8C38E31BA803BD80E911AAA776FEF715 /* FLEXNetworkHistoryTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkHistoryTableViewController.h; path = Classes/Network/FLEXNetworkHistoryTableViewController.h; sourceTree = ""; }; - 8CBCF64ADE3735E2F76A3707959BC527 /* SRRunLoopThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRunLoopThread.m; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.m; sourceTree = ""; }; - 8CC1117AB70CB9DC444E22977D7B77C0 /* SBJson5Parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5Parser.h; path = Classes/SBJson5Parser.h; sourceTree = ""; }; - 8D28F9CFCBC11366632BD5D5E9F7219C /* IQMessageDisplayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQMessageDisplayView.m; path = IQAudioRecorderController/IQMessageDisplayView.m; sourceTree = ""; }; - 8D4431198860DAA616545F1721451E35 /* DAKeyboardControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DAKeyboardControl.framework; path = DAKeyboardControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8E637F32F2A1B780B2A34ACC85B93A45 /* FLEXWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWindow.m; path = Classes/ExplorerInterface/FLEXWindow.m; sourceTree = ""; }; - 8E6E39260F78D7879EC76E1A11A89244 /* TWMessageBarManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TWMessageBarManager.framework; path = TWMessageBarManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8E826E7E01C85E9618806299C72D0597 /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; - 8E91ABB00B9A0DA79E3E4073C6214CB7 /* IQAudioCropperViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioCropperViewController.m; path = IQAudioRecorderController/IQAudioCropperViewController.m; sourceTree = ""; }; - 8E96ED42EC96E21B49EA20E645DD263E /* FLEXKeyboardShortcutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardShortcutManager.h; path = Classes/Utility/FLEXKeyboardShortcutManager.h; sourceTree = ""; }; - 8ED1F59482E3033D963D4720DFEAE7B6 /* UIWindow+AHKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow+AHKAdditions.m"; path = "Classes/UIWindow+AHKAdditions.m"; sourceTree = ""; }; - 8F56FA8A346DA9844A0003F8699216F9 /* JSCoreBom-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSCoreBom-umbrella.h"; sourceTree = ""; }; - 8F84C9020D06D4E481E6DD8ABBA264B2 /* DTASN1BitString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1BitString.m; path = Core/Source/DTASN1/DTASN1BitString.m; sourceTree = ""; }; - 8FC088BB61511A69AC38C5F4C794429C /* AFHTTPRequestSerializer+OAuth2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "AFHTTPRequestSerializer+OAuth2.h"; path = "AFOAuth2Manager/AFHTTPRequestSerializer+OAuth2.h"; sourceTree = ""; }; - 8FFC6D4F2D2CBAC16BE71E3E10C1DC00 /* NSObject+DTRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+DTRuntime.h"; path = "Core/Source/Runtime/NSObject+DTRuntime.h"; sourceTree = ""; }; - 9065637C66199F7153EBA5D69775A9BA /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; - 910637EF215102EED2433557C2CE2099 /* Pods-Jasonette-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Jasonette-resources.sh"; sourceTree = ""; }; - 910891C40CD69EBC29501EE867E34AA4 /* FLEXViewExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.h; sourceTree = ""; }; - 913281EDD50CB49F2817676ED453F6F3 /* NSRunLoop+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRunLoop+SRWebSocket.m"; path = "SocketRocket/NSRunLoop+SRWebSocket.m"; sourceTree = ""; }; - 913EAA1C6C283D66AD341139FBABD766 /* APAddressBookExternalChangeRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookExternalChangeRoutine.h; path = Pod/Core/Private/Routine/APAddressBookExternalChangeRoutine.h; sourceTree = ""; }; - 915524ED8AE27AD507033F12D49D9A1A /* APAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddress.h; path = Pod/Core/Public/Models/APAddress.h; sourceTree = ""; }; - 916AB2E8FCA938D8D3FF12D30010F83F /* FLEXArgumentInputNotSupportedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNotSupportedView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m; sourceTree = ""; }; - 91EE515F5C9B4150675C282875C197CE /* UITableView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+DHSmartScreenshot.m"; path = "Classes/UITableView+DHSmartScreenshot.m"; sourceTree = ""; }; - 91F17964D0D5F42EFCA6948E125C1190 /* SCSiriWaveformView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SCSiriWaveformView.framework; path = SCSiriWaveformView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 927AD90E9D986182DEB3AAE58E97A6AF /* AFOAuth2Manager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFOAuth2Manager-dummy.m"; sourceTree = ""; }; - 92C7086E1753B9AB218FAE82A7A169F4 /* ResourceBundle-Resources-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-Info.plist"; sourceTree = ""; }; - 92CB793E212B3A489491E79934C42022 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - 92D54C5C5AF24C4CAAE93D0E499A28D4 /* NBPhoneNumberDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberDefines.h; path = libPhoneNumber/NBPhoneNumberDefines.h; sourceTree = ""; }; - 92D73F779C606BAEDFB61C034775444C /* REMenu.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = REMenu.modulemap; sourceTree = ""; }; - 92DED794ADD640C5865DD93BF67C5658 /* SRSIMDHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSIMDHelpers.h; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.h; sourceTree = ""; }; - 92FFA160C70004374764FB7DE5BAF832 /* IQAudioRecorderConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioRecorderConstants.m; path = IQAudioRecorderController/IQAudioRecorderConstants.m; sourceTree = ""; }; - 936B922ED0C8C673CF16C437EA897BAD /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; - 9376D088AC4FC38B79DFB05A9FD6AB9E /* audio_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = audio_queue.cpp; path = FreeStreamer/FreeStreamer/audio_queue.cpp; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 93FD69EB7789944AC6E4C2465C8E9955 /* FLEXGlobalsTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsTableViewController.h; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsTableViewController.h; sourceTree = ""; }; - 9444A5663D3B019C905A02CBAC0CF468 /* UIViewController+DTSidePanelController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+DTSidePanelController.h"; path = "Core/Source/iOS/DTSidePanel/UIViewController+DTSidePanelController.h"; sourceTree = ""; }; - 9446F744FAD2CA25EB08CA2B4F38CFDD /* FLEXTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableView.h; path = Classes/ObjectExplorers/Views/FLEXTableView.h; sourceTree = ""; }; - 94B2922AE61453475C06D165B1F3DBCB /* DTAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAlertView.m; path = Core/Source/iOS/BlocksAdditions/DTAlertView.m; sourceTree = ""; }; - 94B59AF90520B0CA79126C5F75700183 /* JSCoreBom.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JSCoreBom.modulemap; sourceTree = ""; }; - 94C6F70EE02FEDB6E7DE16E00CB3F203 /* APSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSource.m; path = Pod/Core/Public/Models/APSource.m; sourceTree = ""; }; - 94E3BD6BE8AAE3B81EB69BC4507AE6C9 /* SRIOConsumerPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumerPool.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h; sourceTree = ""; }; - 9572B0A3869FCD4CB12FFB0F061843EF /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; - 959110195713050A7EAF6EEF34381C17 /* UICKeyChainStore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICKeyChainStore-umbrella.h"; sourceTree = ""; }; - 95DAE815F898E1A93B8B11A759986E39 /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; - 97A300E60E1BE23FA53A0B333E910E60 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 97AE06B5F0F7193311C48374ADAA2139 /* APRecordDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APRecordDate.h; path = Pod/Core/Public/Models/APRecordDate.h; sourceTree = ""; }; - 97BE351AFF77697E1B8B1B27757E4C35 /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; - 97F417414DF505A13065444BDC4975F5 /* libPhoneNumber_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = libPhoneNumber_iOS.framework; path = "libPhoneNumber-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9812A3AC4953CA14754BC8C890EF20B6 /* FLEXTableContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentCell.h; sourceTree = ""; }; - 983EC837A4A6FDDCF7C5D53B459483C1 /* FLEXArgumentInputFontView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m; sourceTree = ""; }; - 98809F376210D31C93325CE0EF236090 /* APAddressBook-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "APAddressBook-dummy.m"; sourceTree = ""; }; - 98E1F94832D82026755AAD32CF83D035 /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; - 98E825D8D936DC3FF8DBB9C0DDF9BFB4 /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; - 9902D2961B12FFD2966CCF9D8A05664D /* OMGUserAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGUserAgent.m; path = Sources/OMGUserAgent.m; sourceTree = ""; }; - 9941B261CD1796A6A5FBA5F1DF31B058 /* FLEXMultiColumnTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultiColumnTableView.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m; sourceTree = ""; }; - 9943E991838A224E4A5AB069B2472B0F /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; - 994C8A60C837DA901374D33B409AD377 /* input_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = input_stream.cpp; path = FreeStreamer/FreeStreamer/input_stream.cpp; sourceTree = ""; }; - 994FFEE2F4F3DE962EB7EAAEAC7A621F /* RMActionController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMActionController-umbrella.h"; sourceTree = ""; }; - 99AA0520F9EEF32C7D7824EA794F0E74 /* REMenuContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuContainerView.m; path = REMenu/REMenuContainerView.m; sourceTree = ""; }; - 99B575702A8DAA58811C56EEEF6B57E2 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - 99EE8C44A675D9AFCDC06502C17B85AD /* FLEXFieldEditorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorView.h; path = Classes/Editing/FLEXFieldEditorView.h; sourceTree = ""; }; - 9A5AC6A57F8729EDD1979A8D6C7495DC /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; - 9A61CB8497F2C73DAAD95F71286C02E7 /* INTULocationManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "INTULocationManager-dummy.m"; sourceTree = ""; }; - 9A6F1F1B6FDD023CDEDBFC80C07D099E /* IQCropSelectionEndView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionEndView.m; path = IQAudioRecorderController/IQCropSelectionEndView.m; sourceTree = ""; }; - 9A7C98F8C42B072499FA0916E4B38D4A /* FLEXArgumentInputNumberView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNumberView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h; sourceTree = ""; }; - 9ACB73DC6EDDD066E9FFA6C87526D6AD /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; - 9AD841A1D476AA46A923F5A5E79D95A5 /* OMGUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGUserAgent.h; path = Sources/OMGUserAgent.h; sourceTree = ""; }; - 9ADB9C01FF19F76FF89B0D043156F5C1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9B3335CFEE48C371478F551CD1E6DA6C /* SCSiriWaveformView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SCSiriWaveformView.h; path = SCSiriWaveformView/SCSiriWaveformView.h; sourceTree = ""; }; - 9C42347FE54DCF9F6A8A0EE402BA0BD8 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 9C53160F17BA7CA192D32A381D3582E1 /* FLEXClassesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXClassesTableViewController.m; sourceTree = ""; }; - 9C73F73A2D9F3F92D1B48C272D3077EA /* AHKActionSheet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AHKActionSheet-umbrella.h"; sourceTree = ""; }; - 9C93FDF659C9A5714CC06960DBFC73D8 /* NBMetadataHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBMetadataHelper.m; path = libPhoneNumber/NBMetadataHelper.m; sourceTree = ""; }; - 9CA306996EF026EE76590528A37CF0DB /* NBGeneratedPhoneNumberMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBGeneratedPhoneNumberMetaData.h; path = libPhoneNumber/NBGeneratedPhoneNumberMetaData.h; sourceTree = ""; }; - 9D462966FAADC9C7425DC90CF7BFF525 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = ""; }; - 9D6EF124F78785238597EBB9B69AFFF8 /* FLEXNetworkRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkRecorder.h; path = Classes/Network/FLEXNetworkRecorder.h; sourceTree = ""; }; - 9D8603FB811E53B89A4E4403B5DE40A0 /* SWTableViewCell.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWTableViewCell.xcconfig; sourceTree = ""; }; - 9D968F0520B582EC5D1C813033847E0A /* REMenuItemView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuItemView.m; path = REMenu/REMenuItemView.m; sourceTree = ""; }; - 9E242014E2E6D63EF5D624576E5EE98F /* Pods-Jasonette-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Jasonette-umbrella.h"; sourceTree = ""; }; - 9E27A77FC3620B35F4EAD9A29F231376 /* FLEXGlobalsEntry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsEntry.h; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h; sourceTree = ""; }; - 9E30BB96F7BD1B45C557F38922526C05 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 9E49EBB17A0C3A237CECA6560DA151AB /* APAddressBookBaseRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookBaseRoutine.h; path = Pod/Core/Private/Routine/Base/APAddressBookBaseRoutine.h; sourceTree = ""; }; - 9E6C375AFDF60B24529C666180296602 /* DTCoreText.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = DTCoreText.framework; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9EF0482D2F33D9DA29476F19D15DB6F8 /* FLEXTableColumnHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableColumnHeader.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h; sourceTree = ""; }; - 9F2088C89A3375EBA8785ECC12A537EF /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 9F238D69636ABBA89999B530F57D6474 /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; - 9F5F6321F39C7C6EF68D88B6E3734EE0 /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; - 9F717E709933E16DD86AD13DF92F5866 /* DTSidePanelControllerSegue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelControllerSegue.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelControllerSegue.m; sourceTree = ""; }; - 9FBD6C699C76EA33C662933E093779F1 /* SRMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRMutex.h; path = SocketRocket/Internal/Utilities/SRMutex.h; sourceTree = ""; }; - 9FD1C50E557D551E4FEC2FB690C25C07 /* FreeStreamer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FreeStreamer-dummy.m"; sourceTree = ""; }; - 9FE2A02F9ACC19295F4A642D2250293B /* FLEXArgumentInputFontsPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontsPickerView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.h; sourceTree = ""; }; - A01B59AE2032467F4694A4FBD505AEDC /* DTSQLiteFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSQLiteFunctions.h; path = Core/Source/DTSQLite/DTSQLiteFunctions.h; sourceTree = ""; }; - A0FB758ABF2DC3D078F17A501528E52B /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; - A1018895EDC769D307880CECA5D4B151 /* PHFDelegateChain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PHFDelegateChain.framework; path = PHFDelegateChain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A123F795F4B2DE04BC403A06A754ED0D /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - A140E670322308772DDF6839B9D6DFCA /* UIView+Layout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+Layout.m"; path = "Classes/Utility/Categories/UIView+Layout.m"; sourceTree = ""; }; - A199D8AB78103B3CB3276666172764A8 /* FLEXArgumentInputDateView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputDateView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h; sourceTree = ""; }; - A1A43899541A7EFC4F3AEF35FCEECBB1 /* PHFDelegateChain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PHFDelegateChain.h; sourceTree = ""; }; - A28C42592BC037244A15C49B3A165D06 /* IQAudioRecorderViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioRecorderViewController.m; path = IQAudioRecorderController/IQAudioRecorderViewController.m; sourceTree = ""; }; - A28E2665C8BD0009EAAFC255332B3265 /* SWUtilityButtonView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonView.m; path = SWTableViewCell/PodFiles/SWUtilityButtonView.m; sourceTree = ""; }; - A2E5DFB779C359D18E3A847E4B22AEA8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A3621A64D6B9D9730D71815E64FEE2D6 /* APContactDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactDate.h; path = Pod/Core/Public/Models/APContactDate.h; sourceTree = ""; }; - A36DE7D2F2BAA963BBC6D01224231B28 /* SZTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SZTextView-umbrella.h"; sourceTree = ""; }; - A389805038693667C489FE8659582AA5 /* DTASN1BitString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1BitString.h; path = Core/Source/DTASN1/DTASN1BitString.h; sourceTree = ""; }; - A3E6B3C19515267AD2EAD5266FCD5381 /* SRURLUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRURLUtilities.h; path = SocketRocket/Internal/Utilities/SRURLUtilities.h; sourceTree = ""; }; - A3F2E017D30638279291DD0B2F8FDD4D /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; - A406BBAB4C433CEF07A0FA8D61ADB625 /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; - A421F64D175E41780EB54DE0E9DE0F58 /* FLEXAddressExplorerCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXAddressExplorerCoordinator.h; path = Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.h; sourceTree = ""; }; - A43658F5311EF31402DCDEAD5F3162E4 /* Pods-Jasonette.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Jasonette.debug.xcconfig"; sourceTree = ""; }; - A4582C94F3CEE550E18F6449FE1290A9 /* FSAudioController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSAudioController.h; path = FreeStreamer/FreeStreamer/FSAudioController.h; sourceTree = ""; }; - A467D721F083F40D991420C33447A263 /* DTAsyncFileDeleter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAsyncFileDeleter.h; path = Core/Source/DTAsyncFileDeleter/DTAsyncFileDeleter.h; sourceTree = ""; }; - A46E68A170A64550A927EB29F9B71A67 /* FLEX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLEX-dummy.m"; sourceTree = ""; }; - A4DA8C2BB56782B5F1FAE39DDDF08336 /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; - A540F70C5F6B4C4FEEC45256AB28D5B5 /* UICKeyChainStore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = UICKeyChainStore.modulemap; sourceTree = ""; }; - A58FBB96B1DBA61D45ED7AD8732F6955 /* Reachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; - A591F14FE933AB20562D4374A15E0A8F /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; - A5F39E9594A7CE99A33CA30BD4FEBE62 /* SRIOConsumer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumer.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.m; sourceTree = ""; }; - A6586AE5B519A64D4E39083D2BD42C83 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; - A67CEFBB38E1976557F31F6DEB7AB1AA /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - A6B493DA9AC060E8403BA3226C0A75CE /* SBJson5StreamParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamParser.h; path = Classes/SBJson5StreamParser.h; sourceTree = ""; }; - A6B5D12E3BD5498CDA6893E335683E76 /* IQMessageDisplayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQMessageDisplayView.h; path = IQAudioRecorderController/IQMessageDisplayView.h; sourceTree = ""; }; - A6C13E522484A74BCD47471DD57638E4 /* FLEXMultiColumnTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultiColumnTableView.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h; sourceTree = ""; }; - A6DB893E3A241188C685C0562286077B /* NSScanner+DTScripting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+DTScripting.m"; path = "Core/Source/DTScripting/NSScanner+DTScripting.m"; sourceTree = ""; }; - A725E6C1E1BDCD0A049FACA2AE27B00F /* FLEXKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychain.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychain.h; sourceTree = ""; }; - A735C5F2060CAA9FDC8FCB0686671FF3 /* FLEXLayerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLayerExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXLayerExplorerViewController.m; sourceTree = ""; }; - A7B5F1AE4A6476C604E4CF5478526240 /* SWTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWTableViewCell.m; path = SWTableViewCell/PodFiles/SWTableViewCell.m; sourceTree = ""; }; - A7ECD035BC6281569481F5976881F20D /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; - A7FBA76C2BBAEEFB570911D376AD5685 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - A8121ECAC3B05CB6A59E85B52DF9DCC8 /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; - A817494A6C555A5A22FE57E6B941C846 /* IQAudioRecorderConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioRecorderConstants.h; path = IQAudioRecorderController/IQAudioRecorderConstants.h; sourceTree = ""; }; - A8202BF60BC84205E0DC991E0E152FB7 /* FLEXToolbarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXToolbarItem.m; path = Classes/Toolbar/FLEXToolbarItem.m; sourceTree = ""; }; - A85B8B7A9E7F9C89955ED9C4015977BB /* FLEXUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXUtility.h; path = Classes/Utility/FLEXUtility.h; sourceTree = ""; }; - A9206F7ADB4184B73FC9E6328ADC5C45 /* UICKeyChainStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UICKeyChainStore.framework; path = UICKeyChainStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A93344EFEF95FE44A4B7AED1B2CA9C3F /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; - A93B34936361FC43B900CD1EF0B6BB7F /* icon-success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-success.png"; path = "Classes/Icons/icon-success.png"; sourceTree = ""; }; - A9F03B1B6069CA3AF7AE9CD3E0020983 /* FLEXColorExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXColorExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXColorExplorerViewController.m; sourceTree = ""; }; - A9F6B3FB296B2F8F7287718E03AF17B4 /* REMenuItemView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuItemView.h; path = REMenu/REMenuItemView.h; sourceTree = ""; }; - AA5478CCE3398B2987EF9B66231687BD /* APImageExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APImageExtractor.m; path = Pod/Core/Private/Extractors/APImageExtractor.m; sourceTree = ""; }; - AA694895E397E22D6B25D9D29A713390 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Core/Source/Externals/minizip/crypt.h; sourceTree = ""; }; - AA95FAD78D3BCB1E4C8CF525ED730775 /* FLEXDefaultsExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultsExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXDefaultsExplorerViewController.m; sourceTree = ""; }; - AA9F116CA7A0B02610378D93294EB475 /* libPhoneNumber-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libPhoneNumber-iOS-dummy.m"; sourceTree = ""; }; - AAA643667535646FB16197E8F747A4FB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AB60B629F159129D64DDD58FDB30192A /* FreeStreamer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FreeStreamer.framework; path = FreeStreamer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AB70943FA59BD85DBC6833220500C1EB /* UICKeyChainStore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICKeyChainStore.xcconfig; sourceTree = ""; }; - AB82C2192A668AA0E5FE00F189F4301F /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; - ABC1E75A887A0778BF374BB158AAF91D /* FLEXObjectExplorerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerFactory.h; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.h; sourceTree = ""; }; - ABE7BCE107726EB1846BA00474EFE33F /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; - ABF80218A116CEEB75C7386974BFFEFF /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; - AC307B9265144F18C25D2A4DBC8B4D17 /* APJob.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APJob.h; path = Pod/Core/Public/Models/APJob.h; sourceTree = ""; }; - AC7B01A99CF5E015C7480DC4611ADA6E /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; - AC9E330C2FBE027ECEA17332476F5F3A /* IQAudioRecorderController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQAudioRecorderController-prefix.pch"; sourceTree = ""; }; - AD45BAEAB19C20423AE9A6C9EF2D2013 /* FLEXHierarchyTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewCell.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewCell.h; sourceTree = ""; }; - AD4F0A423486056FF2FABD51CA69570E /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; - ADA1C058D8E035FEB8E02193A33A4276 /* FLEXTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewController.h; path = Classes/Core/FLEXTableViewController.h; sourceTree = ""; }; - ADA8E9751F52E1FD0A77E8151A8CDC6B /* FLEXWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWebViewController.h; path = Classes/GlobalStateExplorers/FLEXWebViewController.h; sourceTree = ""; }; - ADED79C3EEDC870C51BF0A6622401B76 /* FLEXKeyboardShortcutManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardShortcutManager.m; path = Classes/Utility/FLEXKeyboardShortcutManager.m; sourceTree = ""; }; - AEA3E0B7B1A77F7BE8853DF0ADF088F7 /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; - AECF2CD225A702A9361C286B4BFFA285 /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; - AF4C2FF36D22BEAA4F3EF463D4D453C5 /* FLEXResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXResources.m; path = Classes/Utility/FLEXResources.m; sourceTree = ""; }; - AF7C4392F45D371CE68E4509C821E314 /* FLEXMultilineTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultilineTableViewCell.m; path = Classes/ObjectExplorers/Views/FLEXMultilineTableViewCell.m; sourceTree = ""; }; - B0DD9B9ADB7D415193E6C82631C599A2 /* libPhoneNumber-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libPhoneNumber-iOS-umbrella.h"; sourceTree = ""; }; - B0E64FD081EF766EF788A8716C88F369 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; - B0E7616E72496C96278627DFB1BA5116 /* SBJson.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SBJson.framework; path = SBJson.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B0F4FEF710BAB5AF5A0A32C4833AA1DF /* FLEXArgumentInputViewFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputViewFactory.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.m; sourceTree = ""; }; - B1173CC3EF8E25018ED6D1E3725D921C /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - B1297B1065FC0C4576BAC66E1638E927 /* DTReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTReachability.m; path = Core/Source/DTReachability/DTReachability.m; sourceTree = ""; }; - B14ACACDD5831667F5FE54F58567C23E /* TDOAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TDOAuth.modulemap; sourceTree = ""; }; - B151D6061C84B274211F3DEDDB388FC2 /* AHKActionSheet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AHKActionSheet-dummy.m"; sourceTree = ""; }; - B1882C79563B76FD422B12681A60AC1A /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - B1991F495A9CE99062F7474E67378944 /* FLEXTableViewSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewSection.m; path = Classes/Core/FLEXTableViewSection.m; sourceTree = ""; }; - B1F8DA5502AF0C76569E90285941F642 /* REMenu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = REMenu.framework; path = REMenu.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B2125C5707243F2E119ACCC995E7EEF0 /* FreeStreamer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FreeStreamer-prefix.pch"; sourceTree = ""; }; - B22938F25586C91428023A4779680D68 /* DTZipArchivePKZip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchivePKZip.h; path = Core/Source/DTZipArchive/DTZipArchivePKZip.h; sourceTree = ""; }; - B23A5FE28CAC621E864F69F54271C7F1 /* INTULocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationManager.m; path = LocationManager/INTULocationManager/INTULocationManager.m; sourceTree = ""; }; - B2544802C99D11AD537FED028E6985A5 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; - B27FA7DB450F43966F922E39C435E10A /* FLEXLibrariesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLibrariesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLibrariesTableViewController.m; sourceTree = ""; }; - B2D3D459AB835A3340765AC3004A9360 /* NBRegExMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBRegExMatcher.h; path = libPhoneNumber/Internal/NBRegExMatcher.h; sourceTree = ""; }; - B2EEF4B05CFCB0EE80B44CF42AB623BD /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; - B2F57F099ACEB47B890FFD2649591FF0 /* NSHash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NSHash.modulemap; sourceTree = ""; }; - B32C525D04AF40ED9014B31FD1FE6396 /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; - B377881DD507A2498C225FC5DDE5AB7A /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; - B37D3C412865D5F09F92E2CF1A08F153 /* FLEXDefaultEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultEditorViewController.m; path = Classes/Editing/FLEXDefaultEditorViewController.m; sourceTree = ""; }; - B3CFF822E6338B291FE5F5E1EB515303 /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; - B4324C8C0DA84D67C4D72505872B34E9 /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; - B4AF02FC03754A90C84B3556DFD1DD4B /* HMSegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HMSegmentedControl.h; path = HMSegmentedControl/HMSegmentedControl.h; sourceTree = ""; }; - B4F61D15E542ED555238C2C4A80D81DA /* NSObject+DTRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+DTRuntime.m"; path = "Core/Source/Runtime/NSObject+DTRuntime.m"; sourceTree = ""; }; - B5824980F5CC878E4E7184537E9AB473 /* FLEXNetworkSettingsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkSettingsTableViewController.m; path = Classes/Network/FLEXNetworkSettingsTableViewController.m; sourceTree = ""; }; - B5A12DD603E07134BD0335A8F16F7798 /* FLEXNetworkHistoryTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkHistoryTableViewController.m; path = Classes/Network/FLEXNetworkHistoryTableViewController.m; sourceTree = ""; }; - B5D0CF97791FB584863F27AE9047E8BF /* file_output.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = file_output.h; path = FreeStreamer/FreeStreamer/file_output.h; sourceTree = ""; }; - B62913AEDB9499BBC4BA801307C8AF53 /* DTASN1Parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1Parser.m; path = Core/Source/DTASN1/DTASN1Parser.m; sourceTree = ""; }; - B636776F10AD73061D50C4C7EDFCA498 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - B647778B466E42ADD3E0CB5757C0EB06 /* ModuleConsole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleConsole.m; path = JSCoreBom/Modules/ModuleConsole.m; sourceTree = ""; }; - B6684B772F4B7045B83B5DB0B2995988 /* DTActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActionSheet.h; path = Core/Source/iOS/BlocksAdditions/DTActionSheet.h; sourceTree = ""; }; - B672922EA339FFDCDA96653C17FF5688 /* IQCropSelectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionView.m; path = IQAudioRecorderController/IQCropSelectionView.m; sourceTree = ""; }; - B6C7BAABB57F9EC074F1A7BD908E7CF5 /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; - B73A0713068F14420E09F72AC747985E /* DTLinkButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLinkButton.h; path = Core/Source/DTLinkButton.h; sourceTree = ""; }; - B77AF1015A6D0BBBF82A106B4031D83F /* NSGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSGIF.m; path = NSGIF/NSGIF.m; sourceTree = ""; }; - B813639F40C040CCD6EF6026596A3DF0 /* FLEXDefaultEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultEditorViewController.h; path = Classes/Editing/FLEXDefaultEditorViewController.h; sourceTree = ""; }; - B83027FEFB5F038387A9B68240D2B902 /* FLEXNetworkTransactionDetailTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionDetailTableViewController.h; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.h; sourceTree = ""; }; - B88731302D376500C9DB3BBA1493483D /* DAKeyboardControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DAKeyboardControl.modulemap; sourceTree = ""; }; - B94F3B0F7BE2309EA0DAB31C051A6431 /* FLEXArgumentInputFontsPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontsPickerView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m; sourceTree = ""; }; - B96129A769033F366369E4A79BF2B048 /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; - B971A6E642880750BFE4C9A29E21B99D /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; - B99677CCC701E728609FE3973C228589 /* PHFComposeBarView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFComposeBarView-umbrella.h"; sourceTree = ""; }; - B9A77C530F6812A777BE422D7C9BDF4E /* TWMessageBarManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TWMessageBarManager.m; path = Classes/TWMessageBarManager.m; sourceTree = ""; }; - B9EEE580CE57330166F110ED1C9258E1 /* FLEXArgumentInputFontView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h; sourceTree = ""; }; - BA099A0CF331154C36E45C1A4BE7A5F2 /* UITableView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+DHSmartScreenshot.h"; path = "Classes/UITableView+DHSmartScreenshot.h"; sourceTree = ""; }; - BAADAA5F0611A0C9DB80A44F12D97041 /* FLEXArgumentInputStructView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStructView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m; sourceTree = ""; }; - BB07B3E81AB9C5FE3AB2298DF55BC0CF /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; - BB41E1FC01246398E6649D720591B511 /* AHKActionSheet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AHKActionSheet.framework; path = AHKActionSheet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BB78597868604A7B6C94D13DB969AB35 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - BC417A25049936E773F493D75C0C70E2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BC5D3931E613A56BD5134D921477AB0C /* PHFComposeBarView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PHFComposeBarView.modulemap; sourceTree = ""; }; - BC6C3F47889FA9115242746386A1091A /* APContactDataExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactDataExtractor.m; path = Pod/Core/Private/Extractors/APContactDataExtractor.m; sourceTree = ""; }; - BC7BC327E7098818B43214B6D253A3DD /* SWFrameButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWFrameButton-prefix.pch"; sourceTree = ""; }; - BCB937E2D6DDE33EB2588B0944FB5F13 /* SRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRConstants.h; path = SocketRocket/Internal/SRConstants.h; sourceTree = ""; }; - BCCDB2CF47516B00AE16A679A3C7D5E3 /* REMenu.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenu.m; path = REMenu/REMenu.m; sourceTree = ""; }; - BD188DCDA18CCDF1F7CDC866470603D6 /* Pods_Jasonette.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Jasonette.framework; path = "Pods-Jasonette.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - BD35C76D54BF9BF6B0F081BAE9B52A7E /* DTFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.xcconfig; sourceTree = ""; }; - BD6FABD7748FD1F9F4E06FF17CC1FC20 /* AFOAuth2Manager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFOAuth2Manager-umbrella.h"; sourceTree = ""; }; - BE35672DD104DBE042C0A2A3CA7A44FD /* RMDateSelectionViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMDateSelectionViewController.xcconfig; sourceTree = ""; }; - BE4FCF0D16106DE0D7AD062163E55EA6 /* NSData+NSHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+NSHash.m"; path = "NSHash/NSData+NSHash.m"; sourceTree = ""; }; - BE5635C488956923FF2E7E8062CECB9D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BE8F1B61F67EC6D75C0EE3A24D43F127 /* SZTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SZTextView-dummy.m"; sourceTree = ""; }; - BEA38BF669A3312F411F2C3BE8B754F0 /* FLEXClassExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXClassExplorerViewController.m; sourceTree = ""; }; - BEA818228A07B6E9234E0974097646BD /* AHKActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AHKActionSheet.h; path = Classes/AHKActionSheet.h; sourceTree = ""; }; - BF482B671BFBC6856CF3DE82684187F5 /* NBPhoneMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneMetaData.h; path = libPhoneNumber/NBPhoneMetaData.h; sourceTree = ""; }; - BFA1A20A187639823BDAF418AC86EB7E /* FLEXFieldEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorViewController.h; path = Classes/Editing/FLEXFieldEditorViewController.h; sourceTree = ""; }; - BFB63C800897AC8E13F95F70B98A2CDE /* TTTAttributedLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTTAttributedLabel.xcconfig; sourceTree = ""; }; - BFE5F142C120EBD15C067114E05CEF91 /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; - C017588546EA73F9019E57E2884C07CC /* UIView+Layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+Layout.h"; path = "Classes/Utility/Categories/UIView+Layout.h"; sourceTree = ""; }; - C03B2674190F3629601BE4E1DF146E24 /* DTASN1Serialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1Serialization.h; path = Core/Source/DTASN1/DTASN1Serialization.h; sourceTree = ""; }; - C08AB5BE81F1DE7D3353E16FE8A691D8 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - C126F8AAA2F5F9E8039BAF206267C605 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - C1278C21AC80BA4F46754E26B5FF55FE /* AFOAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFOAuthCredential.h; path = AFOAuth2Manager/AFOAuthCredential.h; sourceTree = ""; }; - C12B3753C7E951589DCCA8859177A52F /* DHSmartScreenshot-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DHSmartScreenshot-prefix.pch"; sourceTree = ""; }; - C182D71D9E76FB07C026EA0D34A76AE9 /* SBJson5Writer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5Writer.m; path = Classes/SBJson5Writer.m; sourceTree = ""; }; - C1A63964D70C64A567DB17E1D9AF8950 /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; - C1BD446DFB68818EEF4BE9EE73DBE74D /* FLEXTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewController.m; path = Classes/Core/FLEXTableViewController.m; sourceTree = ""; }; - C2190544F7C9236FCBB69C5692D10D7B /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; - C21C08AB7E2D824604DC9B9C42DE1B9C /* DHSmartScreenshot.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DHSmartScreenshot.modulemap; sourceTree = ""; }; - C2465B85CDF5BB4B2A8743FBBE4D6609 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C24DE4DB70374783F27CBFEF6487C0D5 /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; - C2792F786D4BD47D7270DF1FF91DD8E4 /* IQAudioRecorderController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQAudioRecorderController-dummy.m"; sourceTree = ""; }; - C280293D7C60C67B9DA1D34B74033CCC /* PHFDelegateChain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PHFDelegateChain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C2A6C2AF833D382AA66EC848C27FC441 /* FLEXArgumentInputObjectView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputObjectView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h; sourceTree = ""; }; - C2AD55A41D8E4AEB700B037DBEAA6F3D /* FLEXArgumentInputTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputTextView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m; sourceTree = ""; }; - C2D480344A702B9C58DF34924CCD1FA4 /* IQAudioRecorderViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioRecorderViewController.h; path = IQAudioRecorderController/IQAudioRecorderViewController.h; sourceTree = ""; }; - C3099C4600D945C7966AACF51ABF032F /* UICKeyChainStore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICKeyChainStore-prefix.pch"; sourceTree = ""; }; - C309B1502E1762DBA62209DF0F664667 /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = ""; }; - C337B467340FD74E2B44880187A1154C /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkCurlLogger.h; path = Classes/Network/FLEXNetworkCurlLogger.h; sourceTree = ""; }; - C384E0FE74E694B5D2906781823BC3F3 /* UIView+DTActionHandlers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTActionHandlers.m"; path = "Core/Source/iOS/BlocksAdditions/UIView+DTActionHandlers.m"; sourceTree = ""; }; - C3C4BF6F85C93DA52DB28E687DC918D3 /* SCSiriWaveformView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCSiriWaveformView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C43450F3574E9E6E7EF6E7FE2FB668BC /* PHFDelegateChain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFDelegateChain-prefix.pch"; sourceTree = ""; }; - C438390B8302EA1B6F42234C7243A1F6 /* HMSegmentedControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HMSegmentedControl.modulemap; sourceTree = ""; }; - C45D75BF5700BF9176D1A909E359257F /* DAKeyboardControl.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DAKeyboardControl.xcconfig; sourceTree = ""; }; - C4EDE9972B07A8EB715F3417EEDCBB54 /* APAddressBook-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-prefix.pch"; sourceTree = ""; }; - C570B0F32DFF4DCAB72035DBA65EA483 /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; - C57BA731F7440DA61F7F642ACA24E9D6 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - C592F3A36C5B4C057998B7EDB1BACA0B /* FLEXImagePreviewViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImagePreviewViewController.h; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.h; sourceTree = ""; }; - C59F952A2706D3B661F03F3D6ADDCAF8 /* FLEXRuntimeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeUtility.h; path = Classes/Utility/FLEXRuntimeUtility.h; sourceTree = ""; }; - C5C556F4E9E389C777D6DBA4D6B4749E /* NBPhoneNumberDefines.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberDefines.m; path = libPhoneNumber/NBPhoneNumberDefines.m; sourceTree = ""; }; - C5FA4E9215B860BBF43E6AF7A96D1D1B /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; - C62FDD6C6B1A12B9FE31B4E2AE0BFC3E /* NSURL+DTAWS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAWS.m"; path = "Core/Source/DTAWS/NSURL+DTAWS.m"; sourceTree = ""; }; - C6305F0379CC6534649C01327C6B9ECD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C6741FD2987718F27900A23DFE303F23 /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; - C6ADB996FEC5B74B4261B8585942AF90 /* TWMessageBarManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TWMessageBarManager.xcconfig; sourceTree = ""; }; - C7862FBC21A6D5FFF54C93FE8C6AE6AB /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; - C7B4684400DED67C5E1E6B259BBFF1A7 /* TTTAttributedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TTTAttributedLabel.framework; path = TTTAttributedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C7D0C6F9775D9D88BE695A5F091B7828 /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; - C867847D1262446F0B7495E31D5EDEEB /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - C874CA412C0178379DC6D35724928F86 /* JDStatusBarStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarStyle.m; path = JDStatusBarNotification/JDStatusBarStyle.m; sourceTree = ""; }; - C8EA2118B0F8D8D4E4B1DA34956E1370 /* JDStatusBarNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JDStatusBarNotification-dummy.m"; sourceTree = ""; }; - C8F6CE6BCF5347E17ED1622E9395C4FA /* FLEXObjectRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectRef.h; path = Classes/GlobalStateExplorers/FLEXObjectRef.h; sourceTree = ""; }; - C92C24CB353C6E55C8F2A7A38A33B463 /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; - C93BEEF07CFDC274D1A483BD2D7323FE /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; - C956CBD2DCECA9BAF3B4DDE20A63E5EF /* JDStatusBarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarView.m; path = JDStatusBarNotification/JDStatusBarView.m; sourceTree = ""; }; - C962B2DD307CE886902841C5D85E307B /* UIView+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTDebug.m"; path = "Core/Source/iOS/Debug/UIView+DTDebug.m"; sourceTree = ""; }; - C9E3F7FEE62CFB351A3E52E56C9DA25E /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; - CA22015DFE6F402AB7E1D32EDB92CA59 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - CA54D7B30D2DF761EF2AB60B9BF5A5CF /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; - CA60BA9F24B7A8BBB19CDFC81CC012D8 /* RMDateSelectionViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMDateSelectionViewController-umbrella.h"; sourceTree = ""; }; - CB0B65BB0E2DFDF7C2F95DB06BF1A7BC /* DTASN1Parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1Parser.h; path = Core/Source/DTASN1/DTASN1Parser.h; sourceTree = ""; }; - CB4576BC69FCCC0EFDF2AA3D0A07A1ED /* TWMessageBarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TWMessageBarManager-dummy.m"; sourceTree = ""; }; - CB7C3E02C6F7C62EDC0A3DD80B764733 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - CB94D58B94EE0A760934C1D54572CD4C /* BBBadgeBarButtonItem-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BBBadgeBarButtonItem-dummy.m"; sourceTree = ""; }; - CBC833F4E3202763CE29CD12BF69B2C8 /* BBBadgeBarButtonItem-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BBBadgeBarButtonItem-prefix.pch"; sourceTree = ""; }; - CBDB66B85D05E6287EA5408930F3C506 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; - CBF60C56D3579DA28ADCB337C9DAE7E7 /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; - CC06838690303F4DA7AF40958BF45B8B /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; - CC2344A4259EE99B3A6655A078CA6F56 /* SWUtilityButtonTapGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonTapGestureRecognizer.m; path = SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.m; sourceTree = ""; }; - CC46E7B3ABF92C240934CF883379646B /* NSMutableArray+SWUtilityButtons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+SWUtilityButtons.m"; path = "SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.m"; sourceTree = ""; }; - CC4B107A6A4ADB9AF36368A173A781F9 /* audio_queue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = audio_queue.h; path = FreeStreamer/FreeStreamer/audio_queue.h; sourceTree = ""; }; - CC9D747BE5011E367F7B37BAD28706B2 /* SWTableViewCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWTableViewCell-prefix.pch"; sourceTree = ""; }; - CCC3956AF9191A743E690910F6A05D63 /* NSURLRequest+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+SRWebSocket.m"; path = "SocketRocket/NSURLRequest+SRWebSocket.m"; sourceTree = ""; }; - CCDE845AC1984184025BC117B0AC5846 /* REMenu.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = REMenu.xcconfig; sourceTree = ""; }; - CD263D52C7716C7F8E2ADE1C3E182FF4 /* PHFComposeBarView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PHFComposeBarView.framework; path = PHFComposeBarView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD5C75FBF56AD0F3BA1F45150B87B455 /* DTProgressHUDWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTProgressHUDWindow.m; path = Core/Source/iOS/DTProgressHUD/DTProgressHUDWindow.m; sourceTree = ""; }; - CD651360C574B05050A6FC64F920C3F3 /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; - CD970419C7F8D1C4E7D266794B13F9EE /* ModuleConsole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleConsole.h; path = JSCoreBom/Modules/ModuleConsole.h; sourceTree = ""; }; - CE25BF35910B09D540C1AF77B82E826E /* SBJson5StreamWriterState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamWriterState.m; path = Classes/SBJson5StreamWriterState.m; sourceTree = ""; }; - CE392B2BE47C37A60E096276739C263E /* RMActionController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RMActionController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CE6D22D3943CF06F9A01FF516F51E4D6 /* FLEXRealmDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.h; sourceTree = ""; }; - CE70F7109B640EEF2B57621E2A4EB0A4 /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; - CEEC502F80BE7F31F27B4EAFE2CE7134 /* DTSidePanelController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelController.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelController.h; sourceTree = ""; }; - CF485FB9C7CA3225D92D784955B5EDB9 /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; - D043F708CDDB1F90F9A06B67C468DA7D /* FLEXHeapEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHeapEnumerator.h; path = Classes/Utility/FLEXHeapEnumerator.h; sourceTree = ""; }; - D083FA51AFFF0E444422CC3F8F3B9BE4 /* OMGHTTPURLRQ.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OMGHTTPURLRQ.modulemap; sourceTree = ""; }; - D117BEB0DF65A0BCA1C68C5C64DF7034 /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; - D15DB7874274DCC4D4361DD884584AE2 /* UIWindow+AHKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWindow+AHKAdditions.h"; path = "Classes/UIWindow+AHKAdditions.h"; sourceTree = ""; }; - D18F4CF56B0CA93F21BA7320A3B64BF7 /* INTULocationManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-prefix.pch"; sourceTree = ""; }; - D1EC8F7C78226EAE6FC7AF0CC929A41D /* IQ_FDWaveformView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQ_FDWaveformView.h; path = IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.h; sourceTree = ""; }; - D20901577A61B36C526D5427EB900F52 /* NBPhoneNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumber.m; path = libPhoneNumber/NBPhoneNumber.m; sourceTree = ""; }; - D2C615195137BE4B956ED2F8DF020F11 /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; - D3189FECB805ABD15E5FD40E1326EA36 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; - D321F3E6B6ACCBA9ED85086495A79CCC /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; - D335766C3DFCF0A52F532C8CFE25A928 /* NSString+DTUTI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUTI.h"; path = "Core/Source/DTUTI/NSString+DTUTI.h"; sourceTree = ""; }; - D36E53247A6ED9033E9DF56266B271BD /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - D37991693FC097B678DA9B2650A543A9 /* FSAudioStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSAudioStream.h; path = FreeStreamer/FreeStreamer/FSAudioStream.h; sourceTree = ""; }; - D37F9BAD36742F897F8BF28710DBF8C5 /* SZTextView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SZTextView.xcconfig; sourceTree = ""; }; - D3A092D6ADC0D9417FC39C22C18EF91C /* APAddressBookAccessRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookAccessRoutine.m; path = Pod/Core/Private/Routine/APAddressBookAccessRoutine.m; sourceTree = ""; }; - D3C9B8E1440661332D3E0B2A6784DB4C /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - D3FB70E3022F0A09AF1D7215EF602A0D /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; - D40613B771393A55680D88EEEC61DB34 /* FLEXLiveObjectsTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLiveObjectsTableViewController.m; path = Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m; sourceTree = ""; }; - D4394DE0095782C44804B01651894BC7 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; - D4BE391535025401C4C1502442DA2CD2 /* TDOAuth.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TDOAuth.xcconfig; sourceTree = ""; }; - D4BFC87F87268A3124AEC51125D3075D /* FLEXPropertyEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXPropertyEditorViewController.m; path = Classes/Editing/FLEXPropertyEditorViewController.m; sourceTree = ""; }; - D504E1969CFBC80B19AD64502EB7B5F6 /* FLEXKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychain.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m; sourceTree = ""; }; - D510E69277CA8AF86E282C760846F6B1 /* APRelatedPerson.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APRelatedPerson.m; path = Pod/Core/Public/Models/APRelatedPerson.m; sourceTree = ""; }; - D51A3820C2A1A2C986D74E3D75B7BF32 /* SRSIMDHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSIMDHelpers.m; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.m; sourceTree = ""; }; - D521A4BF65F0A591B484F7A2B420CACD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D523A05600B2E6ED537D193C72A804EF /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - D52B64AA446A5532214698228CC45E14 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; - D58675212DCD5E0FFCB2C40E77CCAD75 /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D5F648FA42D711CB2E1ADF70F4D14AEF /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; - D603E5E3A2D558177E6AD8BC29FDC577 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - D62E520F4E4C9E1FA31CE34E289793CB /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - D68CA08C7384C24511E96D86A1F3A767 /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; - D6C4B0C188C5C060F82390EC545FCF5C /* DTActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActionSheet.m; path = Core/Source/iOS/BlocksAdditions/DTActionSheet.m; sourceTree = ""; }; - D72BC3D851691E7C33EBA96ADDBAF5F2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D730013F30728CD690ECE2DE331CB5E7 /* OMGFormURLEncode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGFormURLEncode.m; path = Sources/OMGFormURLEncode.m; sourceTree = ""; }; - D75AE52B4D61737ED50714017A28DEBC /* NSHash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSHash-dummy.m"; sourceTree = ""; }; - D78E8B1819CB78AF3FF3887FADEAF543 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D801509F1F53CC0A1524357198DDF89C /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; - D82E38BB47B35F22A453C96C9B210B6E /* DTAttributedTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextView.m; path = Core/Source/DTAttributedTextView.m; sourceTree = ""; }; - D8F4D980D7D3B48CBFFB50BCFFAB3D6B /* UIScrollView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+DHSmartScreenshot.h"; path = "Classes/UIScrollView+DHSmartScreenshot.h"; sourceTree = ""; }; - D8F5B03B264DEC05B6610285D6972AEB /* TDOAuth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TDOAuth.m; sourceTree = ""; }; - D93F478AB7211353944BC6C7763BDD2D /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; - D943A1E941659E7AC12C391374B15A28 /* FLEXNetworkTransactionDetailTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionDetailTableViewController.m; path = Classes/Network/FLEXNetworkTransactionDetailTableViewController.m; sourceTree = ""; }; - D9B46F5886A9A12063A78D288879D580 /* NBPhoneNumberUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberUtil.m; path = libPhoneNumber/NBPhoneNumberUtil.m; sourceTree = ""; }; - D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - D9F5B2E27548A61727498971BA5185CC /* FLEXHierarchyTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewController.m; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.m; sourceTree = ""; }; - DA177E13472E42CC97A80E9112EE74CE /* SBJson5Writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5Writer.h; path = Classes/SBJson5Writer.h; sourceTree = ""; }; - DA509959D3B19EDCE61A62FD6E7FC8F4 /* FLEXDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h; sourceTree = ""; }; - DAC9CAF7C386DAB2380321508A4D3EFD /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Core/Source/Externals/minizip/unzip.h; sourceTree = ""; }; - DAD13C48C2C07729AE5EB6955045AE71 /* FSParsePlaylistRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSParsePlaylistRequest.h; path = FreeStreamer/FreeStreamer/FSParsePlaylistRequest.h; sourceTree = ""; }; - DB4B8D1C28283CBA952082A78CBB267C /* FSParseRssPodcastFeedRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSParseRssPodcastFeedRequest.h; path = FreeStreamer/FreeStreamer/FSParseRssPodcastFeedRequest.h; sourceTree = ""; }; - DB58FAD47423BFD1EF0D50F4D558528C /* SBJson.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SBJson.xcconfig; sourceTree = ""; }; - DB5CECAF441F681DF0AB7694FB26A957 /* NSArray+NBAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+NBAdditions.h"; path = "libPhoneNumber/NSArray+NBAdditions.h"; sourceTree = ""; }; - DBAAE5F749264DB714EC79237A0A21D6 /* FLEXCookiesTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCookiesTableViewController.m; path = Classes/GlobalStateExplorers/FLEXCookiesTableViewController.m; sourceTree = ""; }; - DBE1AEF458ED14B6703508C195E79E73 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DC06C3F57AE44459CA8A0DB10A910DFA /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; - DC28CC3C0E86B22A5ABEB180363617CA /* DTProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTProgressHUD.h; path = Core/Source/iOS/DTProgressHUD/DTProgressHUD.h; sourceTree = ""; }; - DC2FA85ED1D9F53938C3BBB7F76C4B6E /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; - DC38B92CE294F45F072E491B67BC63A8 /* FSParseRssPodcastFeedRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSParseRssPodcastFeedRequest.m; path = FreeStreamer/FreeStreamer/FSParseRssPodcastFeedRequest.m; sourceTree = ""; }; - DC47169B8E30C3FBA11E32D72E524B91 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; - DC620C69852C55DAE45621AF7FE2ECE9 /* UIView+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTDebug.h"; path = "Core/Source/iOS/Debug/UIView+DTDebug.h"; sourceTree = ""; }; - DC6DC33235B9304584B0E13B483B59F3 /* APAddressBook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBook.h; path = Pod/Core/Public/APAddressBook.h; sourceTree = ""; }; - DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.xcconfig; sourceTree = ""; }; - DC93312F0743FE28DCA28EF085249457 /* FLEXArgumentInputColorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputColorView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m; sourceTree = ""; }; - DCBEEF4F0418D7F42999BBB22466AF56 /* NSURLRequest+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocket.h"; path = "SocketRocket/NSURLRequest+SRWebSocket.h"; sourceTree = ""; }; - DCDDFB4ACF8FAC5F6735FA031F843482 /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; - DD2BC37781F3E1D980D95FC5C3019F53 /* FLEXTableContentViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h; sourceTree = ""; }; - DD6F27F6C42EC3D294F34FF4C240B145 /* DTSidePanelPanGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelPanGestureRecognizer.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelPanGestureRecognizer.h; sourceTree = ""; }; - DDA6D9827B5722AC04019CE1602935BB /* RMActionController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RMActionController-dummy.m"; sourceTree = ""; }; - DDDB37925257A30BA84D5807DC028A67 /* SZTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SZTextView.h; path = Classes/SZTextView.h; sourceTree = ""; }; - DE29B35333F3047245AE4F61620D7770 /* FLEXInstancesTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXInstancesTableViewController.h; path = Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h; sourceTree = ""; }; - DE5E76E7D4BA486824D56D2CB14CBD16 /* NBRegularExpressionCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBRegularExpressionCache.m; path = libPhoneNumber/Internal/NBRegularExpressionCache.m; sourceTree = ""; }; - DE787FC6586C02E0E90491D286AADC3E /* SWUtilityButtonTapGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWUtilityButtonTapGestureRecognizer.h; path = SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.h; sourceTree = ""; }; - E03D0EC1EDE75CC9F7782E4E1BFAA3AD /* id3_parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = id3_parser.h; path = FreeStreamer/FreeStreamer/id3_parser.h; sourceTree = ""; }; - E055C45F8C526C958ACBD2E97FC84F42 /* FLEXSystemLogMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogMessage.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m; sourceTree = ""; }; - E07977DD90B34512DBB4313B5034DA70 /* DAKeyboardControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DAKeyboardControl.h; path = DAKeyboardControl/DAKeyboardControl.h; sourceTree = ""; }; - E089AB7E4CC01A8FB4E0268BCBD532E3 /* APThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APThread.h; path = Pod/Core/Private/Thread/APThread.h; sourceTree = ""; }; - E0BC909404473077084D2034AB2564B6 /* NSGIF-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSGIF-prefix.pch"; sourceTree = ""; }; - E0E64B63B2AB3E900216F0102B840BCB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E0ED8D906670F3B8C886F35E0E5DB867 /* FLEXViewControllerExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewControllerExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.h; sourceTree = ""; }; - E1227E688607DC11BCF0DD5D31A25831 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - E12B9F5E8FFC3DF06266D92FA3A53DF1 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; - E13A0BC3AE248ABC44838018DF30D0DB /* SRRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRandom.h; path = SocketRocket/Internal/Utilities/SRRandom.h; sourceTree = ""; }; - E16353BFBA0FC1281FE7B2F4ABB12F5C /* SBJson5StreamParserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamParserState.m; path = Classes/SBJson5StreamParserState.m; sourceTree = ""; }; - E18A3A5C59950FEDE6D0C97AB90322A8 /* DTSidePanelControllerSegue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelControllerSegue.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelControllerSegue.h; sourceTree = ""; }; - E1A445037469CA9F90942E0ABB163550 /* stream_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = stream_configuration.cpp; path = FreeStreamer/FreeStreamer/stream_configuration.cpp; sourceTree = ""; }; - E1AD17E690A6F10B7B4AC19522E11D38 /* DTSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSQLiteDatabase.h; path = Core/Source/DTSQLite/DTSQLiteDatabase.h; sourceTree = ""; }; - E1CAA81CDE1525BDE3A7761A2F9C9491 /* JSCoreBom.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JSCoreBom.xcconfig; sourceTree = ""; }; - E2394A689CC2089DE72D70FCC0B265A5 /* PHFDelegateChain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PHFDelegateChain.modulemap; sourceTree = ""; }; - E23C960E86B16879515621F8D57DC04C /* TDOAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TDOAuth-umbrella.h"; sourceTree = ""; }; - E2CA2E005E8E4467FB091B0DEBD88982 /* INTULocationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "INTULocationManager+Internal.h"; path = "LocationManager/INTULocationManager/INTULocationManager+Internal.h"; sourceTree = ""; }; - E3694FDD47C09047E4232AFF3B1A1A62 /* FLEXViewControllerExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewControllerExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXViewControllerExplorerViewController.m; sourceTree = ""; }; - E39BE1623F1B11A76FC22EC7A06B675F /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; - E3A79FF8B6719D1609C9E9C181D8E5BB /* APAddressBook-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-umbrella.h"; sourceTree = ""; }; - E40BA757FB4E61D119A2C90C754F1A6A /* AFOAuth2Manager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFOAuth2Manager.framework; path = AFOAuth2Manager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E43ED2958FE68EAA12E678A0348B93CC /* FLEXHierarchyTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewController.h; path = Classes/ViewHierarchy/FLEXHierarchyTableViewController.h; sourceTree = ""; }; - E440A4F9D99B6F6D56395090983B1D9C /* SZTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SZTextView.modulemap; sourceTree = ""; }; - E4787984D9E1197C013D216A8B1A1515 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - E4AD31FDA26518FB0AB42EEC37E54A14 /* http_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = http_stream.h; path = FreeStreamer/FreeStreamer/http_stream.h; sourceTree = ""; }; - E4E573255CAAAC665C2710B287B2F9FA /* IQPlaybackDurationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPlaybackDurationView.h; path = IQAudioRecorderController/IQPlaybackDurationView.h; sourceTree = ""; }; - E4F2F525BCB4F1F967AADB485A0F227E /* FLEXArgumentInputStringView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStringView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m; sourceTree = ""; }; - E588F9E12D8303F9679AE6BAE1658AF2 /* APContactDate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactDate.m; path = Pod/Core/Public/Models/APContactDate.m; sourceTree = ""; }; - E5BD0B6D7CB5473A90730412F9D010D8 /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; - E5DE166CAF593FFB241DBC86A21BB7D1 /* DTZipArchiveGZip.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchiveGZip.m; path = Core/Source/DTZipArchive/DTZipArchiveGZip.m; sourceTree = ""; }; - E5DEBC8830EEBED16CF1CE9D7543D0D3 /* JDStatusBarNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarNotification.h; path = JDStatusBarNotification/JDStatusBarNotification.h; sourceTree = ""; }; - E5F4DBEF4E966F988F41F694AA15F3EA /* HMSegmentedControl.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HMSegmentedControl.xcconfig; sourceTree = ""; }; - E72F247C3C2C163098895EF41AAFE6DC /* APEmail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APEmail.m; path = Pod/Core/Public/Models/APEmail.m; sourceTree = ""; }; - E79880929D7436C74A23FD40BF734654 /* FLEXArgumentInputViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputViewFactory.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputViewFactory.h; sourceTree = ""; }; - E86C6C93C07EC1A9274540DE53A4D928 /* PHFComposeBarView_Button.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView_Button.m; path = Classes/PHFComposeBarView_Button.m; sourceTree = ""; }; - E89430E70392471774784DECEFF8D08F /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - E8B07B6CAAF9F691BD583A19F414F133 /* RMDateSelectionViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMDateSelectionViewController-prefix.pch"; sourceTree = ""; }; - E944E2995B037E934DDEEF9D9CD20314 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E981EE64A22FB330C910C33449356B5D /* UIColor+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+DTDebug.m"; path = "Core/Source/iOS/Debug/UIColor+DTDebug.m"; sourceTree = ""; }; - E9A2478F054933BF30848A0F88F2D30A /* FLEXMutableFieldEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMutableFieldEditorViewController.m; path = Classes/Editing/FLEXMutableFieldEditorViewController.m; sourceTree = ""; }; - E9B62597F8B26E074D36DFF0E90B8475 /* SRIOConsumerPool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumerPool.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m; sourceTree = ""; }; - E9DA8B689510914319087A6ED82C7C33 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; - EA44B48484471C13393633699894D5C6 /* INTULocationManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-umbrella.h"; sourceTree = ""; }; - EAA29009F2FA539CB030429045E8DD0A /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; - EAF00C6720746B362298EA7317F206D0 /* SBJson5StreamTokeniser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamTokeniser.h; path = Classes/SBJson5StreamTokeniser.h; sourceTree = ""; }; - EB0023D889D6EC6D48B64A2691AFBE06 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EB0A04CF0D25317BA4C94F919532290B /* FLEXGlobalsEntry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsEntry.m; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m; sourceTree = ""; }; - EB7A9F7A6DF170596E1C229718A311C9 /* IQAudioRecorderController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQAudioRecorderController-umbrella.h"; sourceTree = ""; }; - EB88FCF456B6DE80C77E749339836BDB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; - EBE24BC698D7A24DD0413B6E2FBE4C3B /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; - EC51C1A717CEE5CC3ABE3A19A1CFE737 /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; - EC5AB1B4F3D160CD6BA55EC953920D35 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; - ECBC3E7F1D873855BCEC1AA3E16960B5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ED33EB7B068A7ABAC8C09729EA573354 /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; - EDC064B30D2CF10587598BA2BEF814BF /* SRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRError.m; path = SocketRocket/Internal/Utilities/SRError.m; sourceTree = ""; }; - EDD6D0E720DB22A7E9F65206D29E85B3 /* HMSegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HMSegmentedControl.m; path = HMSegmentedControl/HMSegmentedControl.m; sourceTree = ""; }; - EDFA08E40D1AA8FA0F6C92D88FB0E478 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - EE29D6648B21891CAF58BAC5F393A468 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; - EE308FCB25E21E0C2C97092FD21D65EE /* RMDateSelectionViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RMDateSelectionViewController-dummy.m"; sourceTree = ""; }; - EE467DA1ED49C047423A0FA088406B33 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EE779B9E19D7398131E0532E65FC8C1B /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - EE780AFF48E515DB01ADDB601D347128 /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; - EE9A52AE7397F9D8E595DE0C438CBC86 /* FLEXViewExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewExplorerViewController.m; path = Classes/ObjectExplorers/Controllers/FLEXViewExplorerViewController.m; sourceTree = ""; }; - EF121C43BB84F9E9A72FD528BA342865 /* SWCellScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWCellScrollView.h; path = SWTableViewCell/PodFiles/SWCellScrollView.h; sourceTree = ""; }; - EF42C1A2CD48DFBD62238FCBD8DE5292 /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; - EF494CAFCCC298A3D9BFC74B0691660C /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; - EF51B149022DEB36D940DB02AC616110 /* SCSiriWaveformView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCSiriWaveformView-umbrella.h"; sourceTree = ""; }; - EF68547A8B6CC8A017075A3792973982 /* SBJson5StreamParserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamParserState.h; path = Classes/SBJson5StreamParserState.h; sourceTree = ""; }; - EFAC25459C887A2D79F51AC555586421 /* ModuleXMLHttpRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleXMLHttpRequest.m; path = JSCoreBom/Modules/ModuleXMLHttpRequest.m; sourceTree = ""; }; - EFBBE285493DA67511C89DA71B82B91F /* FLEXColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXColor.m; path = Classes/Utility/FLEXColor.m; sourceTree = ""; }; - EFD7166B5A4B9900712141DD1627CFB4 /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; - F0107051102ADEDA9638D91B6EB1B3BF /* FLEXFileBrowserSearchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserSearchOperation.h; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.h; sourceTree = ""; }; - F013081C847B0ABCA0339699BEC85D5D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F09B44C368B9C839E0FAEBF068BAAE76 /* AHKActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AHKActionSheet.m; path = Classes/AHKActionSheet.m; sourceTree = ""; }; - F0A982518E1FF4F06C41C058EB3224B7 /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; - F0E44E299A92954410D73292FC23429D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F0EBFB9C5F0764C3B08C111F746613A6 /* DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DHSmartScreenshot.h; path = Classes/DHSmartScreenshot.h; sourceTree = ""; }; - F12AD97F9854664C0DBCE5AFAE5DE31F /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; - F12DCBF02BDFFF51F240551B656BC7DD /* TTTAttributedLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-umbrella.h"; sourceTree = ""; }; - F15ECB817876211A709077D6F1EB4742 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; - F16DF22B6F07635B7C6F8EC8D01138A9 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = ""; }; - F1903F7445643C237BACA0221759716F /* SRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRConstants.m; path = SocketRocket/Internal/SRConstants.m; sourceTree = ""; }; - F1A135D98CB0B5CF3C9545922C727767 /* IQCropSelectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionView.h; path = IQAudioRecorderController/IQCropSelectionView.h; sourceTree = ""; }; - F20A2C088B1D60B7690542A9EF4B7EB3 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - F23A3026D1C0C6F67510ABBC342F565B /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; - F253BFC581EE0DBE973673B0025CB6EB /* SWLongPressGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWLongPressGestureRecognizer.h; path = SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.h; sourceTree = ""; }; - F265EF81910948BE39F9824B4DE94C44 /* SWFrameButton-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWFrameButton-umbrella.h"; sourceTree = ""; }; - F2AD54F8CF82B02A3BB64862EFAA961E /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; - F2C176FF06E151F6A46C79A5AD13BE16 /* FLEXKeyboardHelpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardHelpViewController.h; path = Classes/Utility/FLEXKeyboardHelpViewController.h; sourceTree = ""; }; - F33D67EF6B170BDA53B25422F50C09D7 /* APAddress.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddress.m; path = Pod/Core/Public/Models/APAddress.m; sourceTree = ""; }; - F34976739B9D9D9A295A1E9C8C5C5BC0 /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; - F380C5942196896912954385985C3F77 /* UIImage+DHImageAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DHImageAdditions.m"; path = "Classes/UIImage+DHImageAdditions.m"; sourceTree = ""; }; - F3995BBA3B466CA625783658DC311818 /* FLEXExplorerToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbar.m; path = Classes/Toolbar/FLEXExplorerToolbar.m; sourceTree = ""; }; - F3A3C3B22DC08A6B98DE32B4979B8CAB /* SRLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRLog.h; path = SocketRocket/Internal/Utilities/SRLog.h; sourceTree = ""; }; - F3C4B84A466B89B7FB040A19CE82EE83 /* OMGHTTPURLRQ-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-umbrella.h"; sourceTree = ""; }; - F3E8EC0F38D75F402DB3E7246D6601DB /* ActivityStreamAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActivityStreamAPI.h; path = Classes/GlobalStateExplorers/SystemLog/ActivityStreamAPI.h; sourceTree = ""; }; - F4391BA7A1CCD3B29EC5D094090870AE /* RMActionController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RMActionController.framework; path = RMActionController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F48398714A91C3ED9CA556E2343E5233 /* APName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APName.h; path = Pod/Core/Public/Models/APName.h; sourceTree = ""; }; - F4904927B465EB4557166C0A0084F47A /* AFOAuth2Manager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFOAuth2Manager-prefix.pch"; sourceTree = ""; }; - F4E6EA3DC93C08180AEB5F94812C4C25 /* FLEXTableLeftCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableLeftCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m; sourceTree = ""; }; - F4F94D4C37646D01BCCFCDEDF7802E32 /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = OMGHTTPURLRQ.framework; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F55C2F4987EC3AE1515D9C78E39E7326 /* BBBadgeBarButtonItem.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BBBadgeBarButtonItem.modulemap; sourceTree = ""; }; - F5C89349E30A08E8E4B87C99333DB34C /* PHFComposeBarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView.m; path = Classes/PHFComposeBarView.m; sourceTree = ""; }; - F5EC73C7565197C98B05711E7F3D873D /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; - F618D7B6C183E833D598499ED5D30192 /* FLEXImageExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImageExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXImageExplorerViewController.h; sourceTree = ""; }; - F624CD6C4AEF6593D05D36F7CEB69C60 /* DTScriptExpression.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTScriptExpression.m; path = Core/Source/DTScripting/DTScriptExpression.m; sourceTree = ""; }; - F647B07C141083DB0492B8821328085B /* FLEXDictionaryExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDictionaryExplorerViewController.h; path = Classes/ObjectExplorers/Controllers/FLEXDictionaryExplorerViewController.h; sourceTree = ""; }; - F64CDCCCBB1571D0F7EDE014F4D8CA7D /* caching_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = caching_stream.h; path = FreeStreamer/FreeStreamer/caching_stream.h; sourceTree = ""; }; - F655A7570E8EB63AD833CA79CA1BF6C4 /* TTTAttributedLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTTAttributedLabel-dummy.m"; sourceTree = ""; }; - F70987C276F55A5B14F7A17FDEEC89B0 /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; - F75DFC87970D878D4AE8C369690D1D24 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - F79AEEE2731EFD7A09E2067504C88006 /* FLEXArgumentInputSwitchView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputSwitchView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h; sourceTree = ""; }; - F79BC32CCDE6363A10436C925BDFB082 /* FLEXHeapEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHeapEnumerator.m; path = Classes/Utility/FLEXHeapEnumerator.m; sourceTree = ""; }; - F79E0DEB7BAB2C55298B868FDB629CF9 /* DTSidePanelPanGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelPanGestureRecognizer.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelPanGestureRecognizer.m; sourceTree = ""; }; - F7A473FAECD8A144EF9AEF19D10E7108 /* FSAudioController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSAudioController.m; path = FreeStreamer/FreeStreamer/FSAudioController.m; sourceTree = ""; }; - F7BA1809C64C1DAA6018E3140A8DD563 /* PHFDelegateChain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFDelegateChain-umbrella.h"; sourceTree = ""; }; - F7F25A416DBE7844438558D1E187DAA7 /* FSCheckContentTypeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCheckContentTypeRequest.h; path = FreeStreamer/FreeStreamer/FSCheckContentTypeRequest.h; sourceTree = ""; }; - F81E7AE5103159F5A78C1AE609EE75A4 /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; - F848E9F99780B37F0335D5A7DB01C1C7 /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; - F877D7315232F06CC3AB685E68CB877B /* FLEXMutableFieldEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMutableFieldEditorViewController.h; path = Classes/Editing/FLEXMutableFieldEditorViewController.h; sourceTree = ""; }; - F94ABD383E84FCC39829A73AF91CC707 /* RMActionController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMActionController.xcconfig; sourceTree = ""; }; - FA5379F429CC269E964A272D7314B421 /* SocketRocket.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SocketRocket.framework; path = SocketRocket.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FA98FC625ED09545FBD9124CA090E34B /* NBPhoneNumberUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberUtil.h; path = libPhoneNumber/NBPhoneNumberUtil.h; sourceTree = ""; }; - FB0B2CE6BC0875E2F837679A27A93D0D /* FLEXRealmDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDefines.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDefines.h; sourceTree = ""; }; - FB2C9841274A02C950772F1BB8352C6E /* DAKeyboardControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DAKeyboardControl.m; path = DAKeyboardControl/DAKeyboardControl.m; sourceTree = ""; }; - FB7CEF4B9C191B400A5CED0F57AAE1D8 /* PHFComposeBarView_Button.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView_Button.h; path = Classes/PHFComposeBarView_Button.h; sourceTree = ""; }; - FBB4AA8E1B48FD91CAFEFDB3AE824764 /* SRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRError.h; path = SocketRocket/Internal/Utilities/SRError.h; sourceTree = ""; }; - FBDA8A4ECE71823E7D2A99D1D029B9E0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FC246A36504CEB5786B98D2CE93B7901 /* FSPlaylistItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSPlaylistItem.h; path = FreeStreamer/FreeStreamer/FSPlaylistItem.h; sourceTree = ""; }; - FC38C7C8C704E4F6ED37BD52F1CFA3BC /* FLEXArgumentInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h; sourceTree = ""; }; - FC894093315C40650983CBD34D67C46A /* FLEXExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerViewController.h; path = Classes/ExplorerInterface/FLEXExplorerViewController.h; sourceTree = ""; }; - FC8FE1E9825D62DF57C47ADF583FB5D4 /* DAKeyboardControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DAKeyboardControl-dummy.m"; sourceTree = ""; }; - FCB90BF6B02308EB6694C86BEEEB89EE /* NBNumberFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBNumberFormat.m; path = libPhoneNumber/NBNumberFormat.m; sourceTree = ""; }; - FD3B1A88AFE5380A5CAE91A27E294607 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; - FD529D8B37A0A73498672CF42DAEC5DF /* FLEXArgumentInputSwitchView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputSwitchView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m; sourceTree = ""; }; - FE15C0CDACDE466F86E50E27E3E4E08E /* RMDateSelectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMDateSelectionViewController.m; path = RMDateSelectionViewController/RMDateSelectionViewController.m; sourceTree = ""; }; - FE7672B07412B8D9F12BACB60E4BD56D /* REMenu-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REMenu-umbrella.h"; sourceTree = ""; }; - FF0A5007253B5FE2982C91527BFDAC1F /* NSHash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NSHash.framework; path = NSHash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF4B6A447DA65C56AE07B0D13F8DEF29 /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; - FF961EC4715670E65BF472BB0F51EC55 /* FLEXResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXResources.h; path = Classes/Utility/FLEXResources.h; sourceTree = ""; }; + 000D731D5B3B011041F2455F9FCB2D3A /* DTFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.release.xcconfig; sourceTree = ""; }; + 001A5E6A81242FCA8F0C516B96E7A1DE /* NSDictionary+ObjcRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+ObjcRuntime.m"; path = "Classes/Utility/Categories/NSDictionary+ObjcRuntime.m"; sourceTree = ""; }; + 00253C10B4397FC1265133084A756946 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + 00257A05AD475DC2C395C80D60B0E0E8 /* JSCoreBom-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSCoreBom-prefix.pch"; sourceTree = ""; }; + 002D08B8686CAD5A63BC441CA91293E3 /* NSHash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSHash-dummy.m"; sourceTree = ""; }; + 002D4B1B0B9B23D82E0CA10CD96B05D4 /* NSFileWrapper+DTCopying.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileWrapper+DTCopying.m"; path = "Core/Source/NSFileWrapper+DTCopying.m"; sourceTree = ""; }; + 0046FAC0553ECDCB0E0EB842ECA2F442 /* SWUtilityButtonTapGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonTapGestureRecognizer.m; path = SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.m; sourceTree = ""; }; + 0148F90B56DA0DB2CBC09353932D79BE /* DTImageTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTImageTextAttachment.h; path = Core/Source/DTImageTextAttachment.h; sourceTree = ""; }; + 01593660F2D9248A7F4058E72E35265E /* HMSegmentedControl.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HMSegmentedControl.release.xcconfig; sourceTree = ""; }; + 018CA73C0BD72EE136ED86AA36BAD82A /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + 018DA84275AC6E25C9571F2B6E74C5AC /* TWMessageBarManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TWMessageBarManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0224A571EA0096DD07F25ECA9B561560 /* FSPlaylistItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSPlaylistItem.h; path = FreeStreamer/FreeStreamer/FSPlaylistItem.h; sourceTree = ""; }; + 0240995CE469F1D2AAEBB3344CD1A50F /* FLEXManager+Extensibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FLEXManager+Extensibility.m"; path = "Classes/Manager/FLEXManager+Extensibility.m"; sourceTree = ""; }; + 024315D666286AD7E2D70D73B99A2C19 /* UIView+RMActionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+RMActionController.h"; path = "RMActionController/Categories/UIView+RMActionController.h"; sourceTree = ""; }; + 026ADBD17EB07FAD15D15CEFC1573A79 /* FLEXSubtitleTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSubtitleTableViewCell.h; path = Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.h; sourceTree = ""; }; + 02A17429BC33D0D4B7A683E5343482EE /* AFOAuthCredential.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFOAuthCredential.h; path = AFOAuth2Manager/AFOAuthCredential.h; sourceTree = ""; }; + 02B226C8F836857901CE6C52DA10C8C8 /* DTASN1Parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1Parser.h; path = Core/Source/DTASN1/DTASN1Parser.h; sourceTree = ""; }; + 02F6059AE10EC5577C99A4867C058877 /* DTFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 02F99ABE0542ADF79F50D1FBB385A76D /* FSParseRssPodcastFeedRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSParseRssPodcastFeedRequest.m; path = FreeStreamer/FreeStreamer/FSParseRssPodcastFeedRequest.m; sourceTree = ""; }; + 0318179DD31021BCC4BA68397344457A /* FLEXMethod.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethod.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.m; sourceTree = ""; }; + 0329C2AA21E13E797AB18273E651C987 /* FLEXSystemLogCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogCell.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m; sourceTree = ""; }; + 0352367A2BB30CB850FBAD59C940AAFD /* SRHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHash.m; path = SocketRocket/Internal/Utilities/SRHash.m; sourceTree = ""; }; + 0383919C55FC68160DA3769922869ED2 /* OMGHTTPURLRQ.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGHTTPURLRQ.m; path = Sources/OMGHTTPURLRQ.m; sourceTree = ""; }; + 03CEFEB1F2BC649BE5ECCDAE08DB998C /* FLEXLayerShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLayerShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.h; sourceTree = ""; }; + 03DBA6BF4A17FF4DCF818A82D62C7AE9 /* FLEXSearchToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSearchToken.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.m; sourceTree = ""; }; + 03F7031AFAC7E614F30512B73052B49B /* DTProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTProgressHUD.m; path = Core/Source/iOS/DTProgressHUD/DTProgressHUD.m; sourceTree = ""; }; + 0492E93A4721430B8E6F88AB47DE2621 /* FSAudioController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSAudioController.h; path = FreeStreamer/FreeStreamer/FSAudioController.h; sourceTree = ""; }; + 04B4BEEE207D8BB614B0745D2817986C /* NSAttributedString+SmallCaps.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+SmallCaps.h"; path = "Core/Source/NSAttributedString+SmallCaps.h"; sourceTree = ""; }; + 051F04604B2BE2E3472BFBEB231578ED /* AHKActionSheet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AHKActionSheet-dummy.m"; sourceTree = ""; }; + 05671AC6A1E52D9EF055B08B252FEF77 /* JDStatusBarLayoutMarginHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarLayoutMarginHelper.h; path = JDStatusBarNotification/JDStatusBarLayoutMarginHelper.h; sourceTree = ""; }; + 0577E2A78AC72CE3D3523C6FDF4FF36F /* PHFComposeBarView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PHFComposeBarView.modulemap; sourceTree = ""; }; + 05D1D3F53D8D05EEB400DBDA2EF3ECE3 /* FLEXObjcInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjcInternal.h; path = Classes/Utility/Runtime/Objc/FLEXObjcInternal.h; sourceTree = ""; }; + 05E468F10B92B1B63F52DF06751B98B6 /* NSString+ObjcRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+ObjcRuntime.h"; path = "Classes/Utility/Categories/NSString+ObjcRuntime.h"; sourceTree = ""; }; + 065266EB5491D5CCDCBCE01599C21D5F /* NSMutableArray+DTMoving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+DTMoving.m"; path = "Core/Source/NSMutableArray+DTMoving.m"; sourceTree = ""; }; + 06C294331D65E40A01B93E0469C0B0DA /* FLEX.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLEX.release.xcconfig; sourceTree = ""; }; + 06E6C89D9847E242CF8F81378A0302AC /* DAKeyboardControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DAKeyboardControl.m; path = DAKeyboardControl/DAKeyboardControl.m; sourceTree = ""; }; + 06ED8759E8B2DC57E43C77F2D6337A48 /* FLEXArgumentInputTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputTextView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.m; sourceTree = ""; }; + 08369255761B9EEB1B9F32C5453773CE /* SBJson5Writer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5Writer.m; path = Classes/SBJson5Writer.m; sourceTree = ""; }; + 08397B06C54ACD60EC0DE50BB57220EA /* DTLazyImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLazyImageView.h; path = Core/Source/DTLazyImageView.h; sourceTree = ""; }; + 08799A6F2B9348BA32AD2A6D6B26A349 /* Pods-Jasonette-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Jasonette-umbrella.h"; sourceTree = ""; }; + 08A443FCBEBF624C30A486DC6F810F72 /* SBJson5.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5.h; path = Classes/SBJson5.h; sourceTree = ""; }; + 08D06FA8C50D3BD53AC9438DFC90546E /* DTVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVersion.m; path = Core/Source/DTVersion.m; sourceTree = ""; }; + 08ED423900B819A51250183F372AB807 /* DTAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAlertView.m; path = Core/Source/iOS/BlocksAdditions/DTAlertView.m; sourceTree = ""; }; + 08F3110F185D731EDD06853426F50C8F /* FLEXFieldEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorViewController.m; path = Classes/Editing/FLEXFieldEditorViewController.m; sourceTree = ""; }; + 0909843821FF578B1F7CC95931079917 /* OMGHTTPURLRQ-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-umbrella.h"; sourceTree = ""; }; + 090A3D626951CA260033F4E8BABEEC6F /* ModuleConsole.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleConsole.h; path = JSCoreBom/Modules/ModuleConsole.h; sourceTree = ""; }; + 09383ED027CD6B941FA42B1D2E006CCE /* FLEXKeyboardShortcutManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardShortcutManager.m; path = Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.m; sourceTree = ""; }; + 09ACC823B9BE596D7C115A38C1B5A02C /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 09BA36812A094CE9193A9C550471C031 /* NSString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Core/Source/NSString+HTML.m"; sourceTree = ""; }; + 09EC0E5F3E0A33A8A24B97CBD48170E3 /* AFOAuth2Manager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFOAuth2Manager-dummy.m"; sourceTree = ""; }; + 0A0B2D28679E26682B7606F5558DDBC7 /* UICKeyChainStore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICKeyChainStore.debug.xcconfig; sourceTree = ""; }; + 0A246CDA888B712D9A6298A0BA3B3ED0 /* TDOAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TDOAuth-dummy.m"; sourceTree = ""; }; + 0A653929D34325CB24AE563E03B62EE0 /* SceneKit+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SceneKit+Snapshot.m"; path = "Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.m"; sourceTree = ""; }; + 0A69D1E74E779B6F54ADEA2FB8933CEE /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; + 0A79AF20529841238546B3B66106EC9B /* NSString+DTUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUtilities.m"; path = "Core/Source/NSString+DTUtilities.m"; sourceTree = ""; }; + 0A7D97922B7D3A8807593D8887A15FFD /* INTULocationManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = INTULocationManager.modulemap; sourceTree = ""; }; + 0AB577AC68AA917CA638EFEF2FCD780B /* SRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRError.h; path = SocketRocket/Internal/Utilities/SRError.h; sourceTree = ""; }; + 0AEEFC69439630896D56057325D90E21 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 0AF0DBFDACA70BA9F4DCC08E290A5970 /* NSMutableString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableString+HTML.m"; path = "Core/Source/NSMutableString+HTML.m"; sourceTree = ""; }; + 0B35A8547F10A8D2E1E934CE4FD6EAC7 /* SRPinningSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRPinningSecurityPolicy.m; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.m; sourceTree = ""; }; + 0B46C87B131801463C6049D2AE104A4B /* FLEX-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FLEX-Info.plist"; sourceTree = ""; }; + 0B58BBD84F4CB8F084B8898CB33F92AC /* APAddressBookExternalChangeRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookExternalChangeRoutine.h; path = Pod/Core/Private/Routine/APAddressBookExternalChangeRoutine.h; sourceTree = ""; }; + 0B60570A686BF21B1E20C890436385AB /* http_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = http_stream.cpp; path = FreeStreamer/FreeStreamer/http_stream.cpp; sourceTree = ""; }; + 0B7546516607DE0B06E079B3952BD544 /* DTAccessibilityViewProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityViewProxy.m; path = Core/Source/DTAccessibilityViewProxy.m; sourceTree = ""; }; + 0B9857927370D40CE850DC11C41A740F /* FLEXManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXManager.m; path = Classes/Manager/FLEXManager.m; sourceTree = ""; }; + 0BB6A097885ED18A60407D9B12325857 /* NSString+Paragraphs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Paragraphs.h"; path = "Core/Source/NSString+Paragraphs.h"; sourceTree = ""; }; + 0BBAA64D7B5805BEF78757C9A52D7E04 /* libPhoneNumber-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libPhoneNumber-iOS-umbrella.h"; sourceTree = ""; }; + 0BE5BA9388B38DD51E7054400100E375 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkCurlLogger.m; path = Classes/Network/FLEXNetworkCurlLogger.m; sourceTree = ""; }; + 0C45CB6619CD2CF488C85F4DA14FD7D3 /* NSGIF-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "NSGIF-Info.plist"; sourceTree = ""; }; + 0C47600F56FD9EE7F286AA1D84C882A6 /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; + 0C694BF4FBB915ACA9C3C696DAD8AA04 /* AHKActionSheet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AHKActionSheet-prefix.pch"; sourceTree = ""; }; + 0C9F695850B16F9058BAB79CD54F5030 /* SBJson5StreamWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamWriter.m; path = Classes/SBJson5StreamWriter.m; sourceTree = ""; }; + 0CB816B2445DA8C1A10BDC50D57908CA /* NSArray+NBAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+NBAdditions.h"; path = "libPhoneNumber/NSArray+NBAdditions.h"; sourceTree = ""; }; + 0CEB32BA8E881BBC2CE76E7632502268 /* DTLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLog.m; path = Core/Source/DTLog.m; sourceTree = ""; }; + 0CEFCAD991BDA5EED078A40B6E24B50F /* UIFont+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+DTCoreText.m"; path = "Core/Source/UIFont+DTCoreText.m"; sourceTree = ""; }; + 0CF7459A23E478724B0574C05CF4C1F8 /* UICKeyChainStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UICKeyChainStore-dummy.m"; sourceTree = ""; }; + 0D0E7B0D4C56E5ED645573FC6EEC8963 /* UIBarButtonItem+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIBarButtonItem+FLEX.h"; path = "Classes/Utility/Categories/UIBarButtonItem+FLEX.h"; sourceTree = ""; }; + 0D12D27AEBCF16393291E64A7247D9A1 /* FLEXHierarchyTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewCell.m; path = Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.m; sourceTree = ""; }; + 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 0D87D4ED3E4C4A21A83644AAF0B76E6F /* FLEXFieldEditorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorView.h; path = Classes/Editing/FLEXFieldEditorView.h; sourceTree = ""; }; + 0D8BD246223C519F3CE5CDF34D560543 /* FLEXArgumentInputTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputTextView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputTextView.h; sourceTree = ""; }; + 0D921514C29D18E23B256FFDAB80C42E /* IQAudioRecorderController.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQAudioRecorderController.bundle; path = IQAudioRecorderController/Resources/IQAudioRecorderController.bundle; sourceTree = ""; }; + 0D9B0171EB9CBBE2B4E4D74555D457A2 /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = ""; }; + 0DC98519A5B6DBFB330DC7072FAF842E /* DTZipArchiveGZip.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchiveGZip.m; path = Core/Source/DTZipArchive/DTZipArchiveGZip.m; sourceTree = ""; }; + 0E5EBA8130FE36306BFB3D4DE72A8907 /* APSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSource.h; path = Pod/Core/Public/Models/APSource.h; sourceTree = ""; }; + 0E697017F3876F9B2D44CD83BABB0DED /* REMenu.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = REMenu.modulemap; sourceTree = ""; }; + 0E9CF7D9F1AFCD8EA30AC8D9CAF48EA1 /* FLEXVariableEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXVariableEditorViewController.h; path = Classes/Editing/FLEXVariableEditorViewController.h; sourceTree = ""; }; + 0EABC993900DCD6B869B47E27BB6B1FC /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 0F3DE30FB49335567254765F924999CD /* PHFComposeBarView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFComposeBarView-umbrella.h"; sourceTree = ""; }; + 0F585109AA06E33BA58D4E8364A3C50C /* NSGIF.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSGIF.debug.xcconfig; sourceTree = ""; }; + 0F8D7B92A78B76A38CA494289CCA877E /* RMScrollableGroupedAction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMScrollableGroupedAction.m; path = "RMActionController/Grouping Actions/RMScrollableGroupedAction.m"; sourceTree = ""; }; + 0FDA725011F6F3BDC2916D99A2CB4887 /* DTSidePanelControllerSegue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelControllerSegue.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelControllerSegue.h; sourceTree = ""; }; + 10185372742030059278DBCDC9172623 /* BBBadgeBarButtonItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BBBadgeBarButtonItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1018A74779596E7AC8AE548066209342 /* PHFComposeBarView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFComposeBarView.release.xcconfig; sourceTree = ""; }; + 10418C9DCB9E75D7ABB45308D1276E57 /* PHFComposeBarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView.h; path = Classes/PHFComposeBarView.h; sourceTree = ""; }; + 10701C818F4A4D82137E305CB033D913 /* FLEXKeychainViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychainViewController.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.h; sourceTree = ""; }; + 108890F41913AE7F172A7391EFE43474 /* IQAudioRecorderViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioRecorderViewController.h; path = IQAudioRecorderController/IQAudioRecorderViewController.h; sourceTree = ""; }; + 10D0B32C2D423CFF0E15B149A4BBF70C /* FLEXArgumentInputFontsPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontsPickerView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.h; sourceTree = ""; }; + 10E756A006978B5B6B43F5B4F8FCC56F /* PHFComposeBarView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PHFComposeBarView-dummy.m"; sourceTree = ""; }; + 1107E32DE500DA81378FCA612EC6F45C /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + 113E112F35E33A0009F406087FCF3EC0 /* NSString+IQTimeIntervalFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+IQTimeIntervalFormatter.m"; path = "IQAudioRecorderController/NSString+IQTimeIntervalFormatter.m"; sourceTree = ""; }; + 115385682966AD7F6D538B473C910B42 /* SCSiriWaveformView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCSiriWaveformView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 117310F0305BDA98F0A4B2CD661A2671 /* NSMutableString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableString+HTML.h"; path = "Core/Source/NSMutableString+HTML.h"; sourceTree = ""; }; + 11E6B44B57E7B4471ACDC1839B4FF3F7 /* IQCropSelectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionView.m; path = IQAudioRecorderController/IQCropSelectionView.m; sourceTree = ""; }; + 11FE939F5CFD35243D341936CA26740B /* DTZipArchiveGZip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchiveGZip.h; path = Core/Source/DTZipArchive/DTZipArchiveGZip.h; sourceTree = ""; }; + 12D37DD1E83EB721796E1F7234FCDD85 /* FLEXKeychainViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychainViewController.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainViewController.m; sourceTree = ""; }; + 130E2B4A35E4AC526552481F9214F1EC /* DTProgressHUDWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTProgressHUDWindow.m; path = Core/Source/iOS/DTProgressHUD/DTProgressHUDWindow.m; sourceTree = ""; }; + 135F220EB523843A62795583A2F2A12F /* FLEXObjectExplorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorer.h; path = Classes/ObjectExplorers/FLEXObjectExplorer.h; sourceTree = ""; }; + 1367A74BECED308C0D09869FD5F17298 /* PHFDelegateChain.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PHFDelegateChain.modulemap; sourceTree = ""; }; + 13B87DDA74AB10C9F77FEAF04D84F511 /* FLEXRuntime+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXRuntime+Compare.h"; path = "Classes/Utility/Categories/FLEXRuntime+Compare.h"; sourceTree = ""; }; + 13CDB1BC4F2C90A655D240F6E4ADFF42 /* DTSQLiteDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSQLiteDatabase.m; path = Core/Source/DTSQLite/DTSQLiteDatabase.m; sourceTree = ""; }; + 14379351A21B3D58F067588050C0426D /* NSAttributedString+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTDebug.h"; path = "Core/Source/NSAttributedString+DTDebug.h"; sourceTree = ""; }; + 1470F7210D81DEB1DE9135C22A15108F /* SBJson5StreamParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamParser.m; path = Classes/SBJson5StreamParser.m; sourceTree = ""; }; + 14902A5745D0E8A5D310591783999468 /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = ""; }; + 14963FE1DC595E61E18507240C0FBFAC /* FLEXUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXUtility.m; path = Classes/Utility/FLEXUtility.m; sourceTree = ""; }; + 14B202968DD88C3F9409897DDB2285C1 /* SWFrameButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWFrameButton-prefix.pch"; sourceTree = ""; }; + 1510CC098816658931E1F449C860276D /* DTCoreTextLayoutLine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutLine.h; path = Core/Source/DTCoreTextLayoutLine.h; sourceTree = ""; }; + 1544B54196F3ED808D4C0A9FA781A255 /* SWFrameButton.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SWFrameButton.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 158816052E45B203BA41B81EB8DD72EB /* NSHash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSHash-umbrella.h"; sourceTree = ""; }; + 15E68503618D4422AAC905A5A8A2EC73 /* BBBadgeBarButtonItem.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BBBadgeBarButtonItem.debug.xcconfig; sourceTree = ""; }; + 1632A73459E0D3A1897AA039EF45207B /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 166AE55C4378FB5225F33BCF665A5EB6 /* Reachability.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reachability.debug.xcconfig; sourceTree = ""; }; + 168B9D87CB46219393A8BFA526F5D74D /* FLEXTabsViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTabsViewController.h; path = Classes/ExplorerInterface/Tabs/FLEXTabsViewController.h; sourceTree = ""; }; + 16E470D6A79510B4F1FEC3FB6092D63B /* SRLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRLog.m; path = SocketRocket/Internal/Utilities/SRLog.m; sourceTree = ""; }; + 16FCA05FD03C8E19CD7C7ABBAA8FAA39 /* IQCropSelectionBeginView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionBeginView.m; path = IQAudioRecorderController/IQCropSelectionBeginView.m; sourceTree = ""; }; + 170CD3CA5772B1EF7F1E937AB798CA48 /* AFOAuth2Manager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFOAuth2Manager.debug.xcconfig; sourceTree = ""; }; + 17477E98AAE6A5351DDAE10029541B76 /* TWMessageBarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TWMessageBarManager-prefix.pch"; sourceTree = ""; }; + 174B0ED22B870AE674C4476564D33805 /* SWTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWTableViewCell.h; path = SWTableViewCell/PodFiles/SWTableViewCell.h; sourceTree = ""; }; + 1756B08EF6F92497C85E8E7EC68CE200 /* DTImageTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTImageTextAttachment.m; path = Core/Source/DTImageTextAttachment.m; sourceTree = ""; }; + 17D968CAE39FAB5B30D533DC9903A656 /* FLEXSystemLogViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogViewController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.m; sourceTree = ""; }; + 17F2AE761B72DEA4DCF7EC4429055A2C /* FLEXNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNavigationController.h; path = Classes/Core/Controllers/FLEXNavigationController.h; sourceTree = ""; }; + 18450FBA6C9B83829987B5A47BF7F95E /* DTCoreGraphicsUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreGraphicsUtils.m; path = Core/Source/DTCoreGraphicsUtils.m; sourceTree = ""; }; + 184582CBB8B7034924660C449B7245CE /* FLEXMethodBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethodBase.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.h; sourceTree = ""; }; + 188EC7CC92ADAF3D81AFC9788A2A2D5C /* APSocialProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSocialProfile.h; path = Pod/Core/Public/Models/APSocialProfile.h; sourceTree = ""; }; + 18A6AAF81DF5F8D8AC27EA7D4730EF00 /* SZTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SZTextView-Info.plist"; sourceTree = ""; }; + 18AF7EDC7B63B9E0589C06718B2ACDE0 /* FLEXKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardToolbar.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.h; sourceTree = ""; }; + 18EBDC30BCDEF9E130E24154F2E6BBE2 /* NSScanner+DTScripting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+DTScripting.m"; path = "Core/Source/DTScripting/NSScanner+DTScripting.m"; sourceTree = ""; }; + 191C7E73A5D8E99E678A67F6D43C0EFC /* FLEXBlockShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBlockShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.h; sourceTree = ""; }; + 1928EA02DD98BD7285643703CC2EEAE8 /* FLEXRealmDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRealmDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.m; sourceTree = ""; }; + 19368D61F22E634FDC3BFFBDAB3A8F58 /* FLEXRuntimeExporter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeExporter.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.m; sourceTree = ""; }; + 1945BF85D3AF7C9FC7FADD9741FF1AC2 /* FLEXResources.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXResources.m; path = Classes/Utility/FLEXResources.m; sourceTree = ""; }; + 1993EA6497488CE23ECB674A7401838A /* RMActionController.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMActionController.release.xcconfig; sourceTree = ""; }; + 1A0306FEA4D752C843625EAEEF26E214 /* APAddressBookExternalChangeRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookExternalChangeRoutine.m; path = Pod/Core/Private/Routine/APAddressBookExternalChangeRoutine.m; sourceTree = ""; }; + 1A3191B8E24F37985E0D123CD1692ACF /* FLEXNetworkTransaction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransaction.h; path = Classes/Network/FLEXNetworkTransaction.h; sourceTree = ""; }; + 1A83E960361FE36341DE7B3438851568 /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1AD4AB1F7F8E6E7262462223A5F74FE4 /* DTListItemHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTListItemHTMLElement.h; path = Core/Source/DTListItemHTMLElement.h; sourceTree = ""; }; + 1ADAF6487E5A6C91D631E1F2EC64BB7C /* DTTextAttachmentHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachmentHTMLElement.m; path = Core/Source/DTTextAttachmentHTMLElement.m; sourceTree = ""; }; + 1AF2E48D7B824BA5D9B81E118198FE20 /* DTASN1BitString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1BitString.h; path = Core/Source/DTASN1/DTASN1BitString.h; sourceTree = ""; }; + 1B03E0BB54E18400FD822EDF7183A51E /* REMenuItemView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuItemView.h; path = REMenu/REMenuItemView.h; sourceTree = ""; }; + 1B183788C8B482A27BF8A124544A3F30 /* FLEXSystemLogMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSystemLogMessage.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.m; sourceTree = ""; }; + 1B294AD709ADB1020073FB1365211838 /* DTAttributedTextCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextCell.m; path = Core/Source/DTAttributedTextCell.m; sourceTree = ""; }; + 1B4E9D08BE4D42A9E1CA7FD450B1873B /* DTExtendedFileAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTExtendedFileAttributes.m; path = Core/Source/DTExtendedFileAttributes.m; sourceTree = ""; }; + 1B702BC013138673D514290FCC4CD98C /* NSString+NSHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+NSHash.m"; path = "NSHash/NSString+NSHash.m"; sourceTree = ""; }; + 1B74A83A2D5A43D327635F41194A1CCA /* Pods-Jasonette-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Jasonette-acknowledgements.markdown"; sourceTree = ""; }; + 1B78E0D7252C4E48AE420CCC060B9275 /* NSString+CSS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSS.m"; path = "Core/Source/NSString+CSS.m"; sourceTree = ""; }; + 1BAE50CEB46B9992E15C43727F081F48 /* DTFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTFoundation.debug.xcconfig; sourceTree = ""; }; + 1BD2E75E98A6CD714792745E86B24640 /* UIScrollView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+DHSmartScreenshot.h"; path = "Classes/UIScrollView+DHSmartScreenshot.h"; sourceTree = ""; }; + 1C28351AA855B90AE231082B3F029C44 /* NSObject+DTRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+DTRuntime.h"; path = "Core/Source/Runtime/NSObject+DTRuntime.h"; sourceTree = ""; }; + 1C600D8DC01B455BC6296D31E2773D91 /* FLEXRuntime+UIKitHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXRuntime+UIKitHelpers.h"; path = "Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.h"; sourceTree = ""; }; + 1C6D26021850C7AD8E85D4AD873AC93D /* DTTextHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextHTMLElement.h; path = Core/Source/DTTextHTMLElement.h; sourceTree = ""; }; + 1C712DC3206415AD7C7818179B9683C6 /* DTVideoTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTVideoTextAttachment.m; path = Core/Source/DTVideoTextAttachment.m; sourceTree = ""; }; + 1C99166F47F2585ADEAA26C9D6EB90D6 /* DTObjectTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectTextAttachment.m; path = Core/Source/DTObjectTextAttachment.m; sourceTree = ""; }; + 1CC4A62FCB2CD24B8B791968781100F1 /* NSRunLoop+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSRunLoop+SRWebSocketPrivate.h"; sourceTree = ""; }; + 1CC661EC3AF8AF59D60A6EBDEE8BE0F0 /* FLEXAlert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXAlert.h; path = Classes/Utility/FLEXAlert.h; sourceTree = ""; }; + 1CD9EE59CF23355D81AF93511B24EB81 /* DTFoundationConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFoundationConstants.h; path = Core/Source/DTFoundationConstants.h; sourceTree = ""; }; + 1D5FD622370665EB88A5F9CBCB671799 /* UIView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DHSmartScreenshot.m"; path = "Classes/UIView+DHSmartScreenshot.m"; sourceTree = ""; }; + 1D6821D3ACDB5CA1B63C1D7589FED4C7 /* FLEXNetworkObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkObserver.h; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.h; sourceTree = ""; }; + 1D6B1993EA94F17D568EE5372A29F22F /* INTULocationManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "INTULocationManager-Info.plist"; sourceTree = ""; }; + 1D71056B575F514F2956546FCE0DA8D0 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 1D890D567ABB81EE8F739BC7DF2C3BB5 /* SWUtilityButtonView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonView.m; path = SWTableViewCell/PodFiles/SWUtilityButtonView.m; sourceTree = ""; }; + 1DBF40FD1EB3A6CBBE68E2211FD2F2C9 /* FLEXOSLogController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXOSLogController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.m; sourceTree = ""; }; + 1DEE9FE133D0F515CD9FDDB8BA90FEA5 /* DTZipArchiveNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchiveNode.h; path = Core/Source/DTZipArchive/DTZipArchiveNode.h; sourceTree = ""; }; + 1E0E1DA564C507FACCBB24AA3A5FC48D /* FLEXViewControllerShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewControllerShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.h; sourceTree = ""; }; + 1E2084AC78997B7471738D82C394EA43 /* AFHTTPRequestSerializer+OAuth2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "AFHTTPRequestSerializer+OAuth2.m"; path = "AFOAuth2Manager/AFHTTPRequestSerializer+OAuth2.m"; sourceTree = ""; }; + 1E2C33131956AE30202E677FCE6AE814 /* DTAccessibilityElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityElement.h; path = Core/Source/DTAccessibilityElement.h; sourceTree = ""; }; + 1E3E8B85E9546BC1C9D790F0EB545320 /* NBPhoneNumberUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberUtil.h; path = libPhoneNumber/NBPhoneNumberUtil.h; sourceTree = ""; }; + 1E46171C70400FE32626522272478FAF /* SRURLUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRURLUtilities.h; path = SocketRocket/Internal/Utilities/SRURLUtilities.h; sourceTree = ""; }; + 1E4A6FE49B0330D9EADE8B1D46DF3FE3 /* FLEXMirror.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMirror.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.m; sourceTree = ""; }; + 1E53C4A5496F171A411217F14548DAF7 /* FSXMLHttpRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSXMLHttpRequest.m; path = FreeStreamer/FreeStreamer/FSXMLHttpRequest.m; sourceTree = ""; }; + 1EA61E9DB068B8699938637791065836 /* SRRandom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRandom.m; path = SocketRocket/Internal/Utilities/SRRandom.m; sourceTree = ""; }; + 1EE250527407DF775C7ACEDE95D27015 /* NSProcessInfo+RMActionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSProcessInfo+RMActionController.h"; path = "RMActionController/Categories/NSProcessInfo+RMActionController.h"; sourceTree = ""; }; + 1EE7B53BA9C50E7AAD1F2F946E1A4149 /* CYRTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CYRTextView.debug.xcconfig; sourceTree = ""; }; + 20783966C716EE77AF50F2B32A2BCA63 /* UIViewController+DTSidePanelController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+DTSidePanelController.h"; path = "Core/Source/iOS/DTSidePanel/UIViewController+DTSidePanelController.h"; sourceTree = ""; }; + 20FE7C8A8082AE53A3A24F93A27AE858 /* FHSSnapshotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSSnapshotView.h; path = Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.h; sourceTree = ""; }; + 2100BF68E14CAFACD1792382D2522818 /* DTImage+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTImage+HTML.h"; path = "Core/Source/DTImage+HTML.h"; sourceTree = ""; }; + 21099CAB11D4385B610CC9CE0369AE32 /* OMGHTTPURLRQ.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OMGHTTPURLRQ.release.xcconfig; sourceTree = ""; }; + 211119BA1CFADDE3524824CC3E4B6E66 /* REMenuContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuContainerView.m; path = REMenu/REMenuContainerView.m; sourceTree = ""; }; + 2130C0C12629465B1685F45A2B096DAE /* DTTiledLayerWithoutFade.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTiledLayerWithoutFade.m; path = Core/Source/iOS/DTTiledLayerWithoutFade.m; sourceTree = ""; }; + 214879172CC4A58D33319E97A23A6358 /* FLEXRuntimeKeyPathTokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeKeyPathTokenizer.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.h; sourceTree = ""; }; + 218B2240812412AF0461C77BF25CA6E6 /* APPhone.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APPhone.h; path = Pod/Core/Public/Models/APPhone.h; sourceTree = ""; }; + 21DC699BCE63ED17BCA5BBBA209CD75E /* FLEXRuntimeClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeClient.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.h; sourceTree = ""; }; + 21F521728D6F6154A7364E6C3891A7BB /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; + 22A3CEC7CEE3185EC0C5605E9A1DCA30 /* IQCropSelectionEndView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionEndView.h; path = IQAudioRecorderController/IQCropSelectionEndView.h; sourceTree = ""; }; + 22A7AA9B1907005D4116977FB45DB867 /* APAddressBook-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "APAddressBook-Info.plist"; sourceTree = ""; }; + 22EB57184BC8FFFAF46FACA5444B3C03 /* DTLazyImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLazyImageView.m; path = Core/Source/DTLazyImageView.m; sourceTree = ""; }; + 2313292EBBDAF0A5A569EF43BEF08AF1 /* NBRegExMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBRegExMatcher.m; path = libPhoneNumber/Internal/NBRegExMatcher.m; sourceTree = ""; }; + 2353D243AFD2D8C3866EEDD3961D0ED0 /* JDStatusBarNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "JDStatusBarNotification-Info.plist"; sourceTree = ""; }; + 235E6E491AB1D5FEE8A3A3D65051C746 /* FSXMLHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSXMLHttpRequest.h; path = FreeStreamer/FreeStreamer/FSXMLHttpRequest.h; sourceTree = ""; }; + 239AEF27589B9DF6A872418C38F31AC7 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; + 23A9E8DAD356225BC100B04F2B3BDAA1 /* DTCoreTextLayoutLine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutLine.m; path = Core/Source/DTCoreTextLayoutLine.m; sourceTree = ""; }; + 23C1D4A06CA9AF8A4AEB61BC99745AF5 /* DTDictationPlaceholderTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderTextAttachment.m; path = Core/Source/DTDictationPlaceholderTextAttachment.m; sourceTree = ""; }; + 23EA484AF45F531310DC3603084BCF4D /* AFOAuth2Manager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFOAuth2Manager.m; path = AFOAuth2Manager/AFOAuth2Manager.m; sourceTree = ""; }; + 23F37F6D4ECBB8EA0F45FA9A02D84C8F /* SZTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SZTextView-prefix.pch"; sourceTree = ""; }; + 240C377A5EBED75631FBA182CCCFF349 /* FLEXExplorerToolbarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbarItem.m; path = Classes/Toolbar/FLEXExplorerToolbarItem.m; sourceTree = ""; }; + 24336780B2CEA5B6AEB4010DBCDA1059 /* UICKeyChainStore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICKeyChainStore-prefix.pch"; sourceTree = ""; }; + 243BD68643D5810814604C2CD7B8CAB8 /* AFOAuthCredential.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFOAuthCredential.m; path = AFOAuth2Manager/AFOAuthCredential.m; sourceTree = ""; }; + 24906358D4472592AAB45254D975D5E2 /* TTTAttributedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TTTAttributedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 24B50CC6DD2061343CC89D802D317DE1 /* RMDateSelectionViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RMDateSelectionViewController.modulemap; sourceTree = ""; }; + 24D5F5D11DAEBDACB55A77005631642B /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + 25209E0C10DCC70A6E14B4B10EB338B0 /* NSData+DTCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+DTCrypto.m"; path = "Core/Source/NSData+DTCrypto.m"; sourceTree = ""; }; + 256FCAB914929D9C917ECBFDEB9103A5 /* APSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSource.m; path = Pod/Core/Public/Models/APSource.m; sourceTree = ""; }; + 2632A8986040CCE8FABD1C03052E55AC /* FLEXViewShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.h; sourceTree = ""; }; + 267AEE253C482CAFCDF60DD2C6CD1D17 /* DTSmartPagingScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSmartPagingScrollView.h; path = Core/Source/iOS/DTSmartPagingScrollView.h; sourceTree = ""; }; + 2685E2593B2C0C31B26BBEB11BFFA80E /* RECommonFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RECommonFunctions.h; path = REMenu/RECommonFunctions.h; sourceTree = ""; }; + 26C548294066CD56BCB0F6310BF70B2C /* FLEXTableColumnHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableColumnHeader.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.h; sourceTree = ""; }; + 26FBE509209B95C705B008B5E10EEDBC /* SRLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRLog.h; path = SocketRocket/Internal/Utilities/SRLog.h; sourceTree = ""; }; + 2700093A8130D356B9BB2BE7F29AC424 /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; + 271B4588307B82C38C920695EE4DCE3B /* NBPhoneNumberDefines.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberDefines.m; path = libPhoneNumber/NBPhoneNumberDefines.m; sourceTree = ""; }; + 27C9D4AD22F960E08C7DE3A2DF406291 /* FLEXFieldEditorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFieldEditorView.m; path = Classes/Editing/FLEXFieldEditorView.m; sourceTree = ""; }; + 2865C3BA2BC138BF3AE3EBAFF87C1466 /* NBPhoneNumberUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberUtil.m; path = libPhoneNumber/NBPhoneNumberUtil.m; sourceTree = ""; }; + 289A7B06D81476B28215D9864C8EC746 /* DTIframeTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTIframeTextAttachment.m; path = Core/Source/DTIframeTextAttachment.m; sourceTree = ""; }; + 2914B996BCD1154FE8177BE348CE4AEE /* FLEXClassShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.h; sourceTree = ""; }; + 2942E45921548E93C640E1508BEF54ED /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Core/Source/Externals/minizip/crypt.h; sourceTree = ""; }; + 296BA21F300212CFEC30F69AABFA46CE /* FHSView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSView.m; path = Classes/ViewHierarchy/SnapshotExplorer/FHSView.m; sourceTree = ""; }; + 29F70D8F7CB82446F899CCD7C14D3A2C /* FLEXCollectionContentSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCollectionContentSection.h; path = Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.h; sourceTree = ""; }; + 2A0702D1FE5B5852843B50DBF7788377 /* Reachability-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Reachability-dummy.m"; sourceTree = ""; }; + 2A26EEBAF27F375595C7F99B3A83E82A /* SocketRocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-umbrella.h"; sourceTree = ""; }; + 2A58ED9CAFDE5C9695331803858439D1 /* FLEXFileBrowserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserController.h; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.h; sourceTree = ""; }; + 2AFAB0F31F5518CB1C36BDEF161ADBEE /* RMActionControllerTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMActionControllerTransition.h; path = RMActionController/Animations/RMActionControllerTransition.h; sourceTree = ""; }; + 2AFEEDFF9641FBA2DBAD75D4C68B70EF /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 2B14B69FD2E917361C48A995A3D34B8F /* DTFoundation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTFoundation-Info.plist"; sourceTree = ""; }; + 2B39A6F2A3777667BF3FFD3CDE9140C8 /* SWCellScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWCellScrollView.h; path = SWTableViewCell/PodFiles/SWCellScrollView.h; sourceTree = ""; }; + 2B447A8DF8D38848DCB11692D3FCFAFE /* JSCoreBom.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JSCoreBom.debug.xcconfig; sourceTree = ""; }; + 2B4CADBE8331440C80CBA47FA8AFC0D9 /* NSMutableArray+SWUtilityButtons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+SWUtilityButtons.m"; path = "SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.m"; sourceTree = ""; }; + 2B9E4072D6F936B2049599EADB78817E /* APContactListBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactListBuilder.h; path = Pod/Core/Private/Builders/APContactListBuilder.h; sourceTree = ""; }; + 2BA0C66247E1E8E9EBC3727199EE7E21 /* DTObjectBlockExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectBlockExecutor.h; path = Core/Source/Runtime/DTObjectBlockExecutor.h; sourceTree = ""; }; + 2BADEB3D1B61747AF8F217494859A5E1 /* DTTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachment.h; path = Core/Source/DTTextAttachment.h; sourceTree = ""; }; + 2BE9745DA7E1479B05F6C32B2AFF0BEB /* FLEXArgumentInputObjectView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputObjectView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.m; sourceTree = ""; }; + 2C5FBE58282DC7F28DF8918034FB3A97 /* APContactDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactDate.h; path = Pod/Core/Public/Models/APContactDate.h; sourceTree = ""; }; + 2C736EDD966B965B1F81E1E98017A08B /* PHFDelegateChain.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFDelegateChain.debug.xcconfig; sourceTree = ""; }; + 2CBC3CB79DBEF4C0F80D49B0952D71A6 /* BBBadgeBarButtonItem-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BBBadgeBarButtonItem-prefix.pch"; sourceTree = ""; }; + 2D16AC0C01090118BCC6FE5ECE4374E2 /* FSAudioController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSAudioController.m; path = FreeStreamer/FreeStreamer/FSAudioController.m; sourceTree = ""; }; + 2D26CCA0A92C81CCD5E0EDBE0B2816E4 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 2D82B3C54D33038DB64437395FA6FBD7 /* SBJson5StreamParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamParser.h; path = Classes/SBJson5StreamParser.h; sourceTree = ""; }; + 2D90AFBA122000653B40677DC2E95011 /* INTULocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationManager.h; path = LocationManager/INTULocationManager/INTULocationManager.h; sourceTree = ""; }; + 2D91614841CFE21B4EF2E073644E5D5E /* input_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = input_stream.h; path = FreeStreamer/FreeStreamer/input_stream.h; sourceTree = ""; }; + 2DFC49659DBDCE6B928E224FB51E677A /* FLEXExplorerToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbar.h; path = Classes/Toolbar/FLEXExplorerToolbar.h; sourceTree = ""; }; + 2E004463D2348E81CA8412ED155CD1C0 /* DTCoreTextLayoutFrame+Cursor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTCoreTextLayoutFrame+Cursor.m"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.m"; sourceTree = ""; }; + 2E099C7C317100D0B86114045D88A208 /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = Core/Source/Externals/minizip/ioapi.c; sourceTree = ""; }; + 2E1C4688E3E3502DB9DD7AA6ACB09D6B /* NSDictionary+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTError.m"; path = "Core/Source/NSDictionary+DTError.m"; sourceTree = ""; }; + 2E2A60DA45DC775E9EA644E9993FC987 /* HMSegmentedControl-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HMSegmentedControl-Info.plist"; sourceTree = ""; }; + 2E3961604D8A73D2C9686320D6FA1241 /* HMSegmentedControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HMSegmentedControl.modulemap; sourceTree = ""; }; + 2E9AE625DA3AA3059422F6B96F028C60 /* FLEXKeychainQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychainQuery.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.h; sourceTree = ""; }; + 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 2EEEC5B3FC38BD7675066354CBF01E3D /* Reachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; + 2F076555AA2AAC4B97E9EB08D0BC5A1D /* FHSViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSViewController.m; path = Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.m; sourceTree = ""; }; + 2F70C7785AEFA173A9E161450B55463C /* BBBadgeBarButtonItem-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "BBBadgeBarButtonItem-Info.plist"; sourceTree = ""; }; + 2F7C04120E6DE171012711B6A156E4DC /* DTAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAlertView.h; path = Core/Source/iOS/BlocksAdditions/DTAlertView.h; sourceTree = ""; }; + 308F5682DAB39122E39079481A677424 /* IQCropSelectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionView.h; path = IQAudioRecorderController/IQCropSelectionView.h; sourceTree = ""; }; + 309F48006B772851697FB1ED9089BFDB /* FLEXMethodCallingViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethodCallingViewController.h; path = Classes/Editing/FLEXMethodCallingViewController.h; sourceTree = ""; }; + 30AD638588599A5D5E0151BC5D2192F8 /* RMGroupedAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMGroupedAction.h; path = "RMActionController/Grouping Actions/RMGroupedAction.h"; sourceTree = ""; }; + 30FB0362F010A58FE71E2B72B940F2A9 /* FLEXBlockDescription.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBlockDescription.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.h; sourceTree = ""; }; + 323EC0E948ECDB984E2A5163F0FB2320 /* DTSQLiteFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSQLiteFunctions.m; path = Core/Source/DTSQLite/DTSQLiteFunctions.m; sourceTree = ""; }; + 328A09608D3392602CA37431D74092B6 /* SBJson5StreamWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamWriter.h; path = Classes/SBJson5StreamWriter.h; sourceTree = ""; }; + 3291B1CAA3402E950716B88AD541AB45 /* APContact.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContact.m; path = Pod/Core/Public/Models/APContact.m; sourceTree = ""; }; + 334D0989C3924B7E62ECB88C053A3EC2 /* APAddressBookBaseRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookBaseRoutine.h; path = Pod/Core/Private/Routine/Base/APAddressBookBaseRoutine.h; sourceTree = ""; }; + 3383F943413D5F41DC7A4408DDC3D552 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; + 3396DE7605695340A78B53D1D927516E /* SRIOConsumer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumer.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.m; sourceTree = ""; }; + 33D4D74BDC98E0F4E5A713F45A309A97 /* TDOAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TDOAuth.release.xcconfig; sourceTree = ""; }; + 3403BD6F593C47D4C33BC4380F6CA87E /* FHSSnapshotNodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSSnapshotNodes.h; path = Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.h; sourceTree = ""; }; + 341FAA4F453D917F3C5526D7FE54E4E9 /* SCSiriWaveformView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SCSiriWaveformView-dummy.m"; sourceTree = ""; }; + 3443AB58C66B6E70BB26822FB7CE4FAF /* FLEXVariableEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXVariableEditorViewController.m; path = Classes/Editing/FLEXVariableEditorViewController.m; sourceTree = ""; }; + 3453F86AFDC53E9D31CAF1080998A32F /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 34D0CFE322D568260C686E56B68371A3 /* FLEXObjectInfoSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectInfoSection.h; path = Classes/ObjectExplorers/Sections/FLEXObjectInfoSection.h; sourceTree = ""; }; + 34D41A18021E1B24C77897C98E105BBC /* IQAudioCropperViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioCropperViewController.m; path = IQAudioRecorderController/IQAudioCropperViewController.m; sourceTree = ""; }; + 3555CCD7C6588FFFBE590CBBF3D45E82 /* audio_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = audio_stream.cpp; path = FreeStreamer/FreeStreamer/audio_stream.cpp; sourceTree = ""; }; + 35759C9D92E84C363B403586FC9704EA /* DTHTMLWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLWriter.m; path = Core/Source/DTHTMLWriter.m; sourceTree = ""; }; + 358CFF6FEF8258C233AA11303552BF8A /* AFOAuth2Manager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFOAuth2Manager.h; path = AFOAuth2Manager/AFOAuth2Manager.h; sourceTree = ""; }; + 359E2B7FBF0B952B5A60662B019D24AF /* NSURL+DTUnshorten.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTUnshorten.m"; path = "Core/Source/NSURL+DTUnshorten.m"; sourceTree = ""; }; + 359F20447DD6B2DABE3B77D75DA92F82 /* FreeStreamer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FreeStreamer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 361A051717FBEA3827F6A2133C47D079 /* SZTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SZTextView.h; path = Classes/SZTextView.h; sourceTree = ""; }; + 3626A99BA881B21FF7E0124FC7576124 /* FreeStreamer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FreeStreamer.release.xcconfig; sourceTree = ""; }; + 36655ADCE875159F7223C994C1DCB650 /* FLEXArgumentInputStructView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStructView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.h; sourceTree = ""; }; + 36F031EE19B50E0421C93518C038AD0E /* NSString+ObjcRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+ObjcRuntime.m"; path = "Classes/Utility/Categories/NSString+ObjcRuntime.m"; sourceTree = ""; }; + 3703A27A6B61DB855E8911B1FD67C36E /* NSString+DTFormatNumbers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTFormatNumbers.m"; path = "Core/Source/NSString+DTFormatNumbers.m"; sourceTree = ""; }; + 372687B5AFED2D8966BE95645FFA0E25 /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + 373372F987E2C6871A5D575C949A36AC /* AHKActionSheet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AHKActionSheet.modulemap; sourceTree = ""; }; + 3747C11CF96542568B3CF09FCE223547 /* APTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APTypes.h; path = Pod/Core/Public/Models/APTypes.h; sourceTree = ""; }; + 3773C38D37202FA786CDBE18FAAB4A43 /* RMActionController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RMActionController.modulemap; sourceTree = ""; }; + 37D17EC1FF1595229645ECB7E53AEBE5 /* DHSmartScreenshot.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DHSmartScreenshot.modulemap; sourceTree = ""; }; + 3817A3BA79FECFB77F52162917901057 /* REMenuItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuItem.m; path = REMenu/REMenuItem.m; sourceTree = ""; }; + 381B1646C523369A20914ED412CBDD5B /* PHFDelegateChain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PHFDelegateChain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 38551FEAC72CA33C4619149E8F003EC0 /* FLEXRuntimeConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeConstants.h; path = Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.h; sourceTree = ""; }; + 388F08709F81732E785503E1227F8165 /* NBRegularExpressionCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBRegularExpressionCache.m; path = libPhoneNumber/Internal/NBRegularExpressionCache.m; sourceTree = ""; }; + 38EC0D9ECEF1B8CEDE9C34FBAF43D5EB /* JDStatusBarNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JDStatusBarNotification-dummy.m"; sourceTree = ""; }; + 3907E6A8C3EA21F3F650146CA0682A1B /* FLEX.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FLEX.debug.xcconfig; sourceTree = ""; }; + 3938F1160B8DE6C9314C3C1B685893F3 /* FLEXTableListViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableListViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.h; sourceTree = ""; }; + 39A3DCB8CC27EAEB5BF6BE58447D4F53 /* SRHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHash.h; path = SocketRocket/Internal/Utilities/SRHash.h; sourceTree = ""; }; + 39B77750ED39532835B012601CF3FC85 /* INTULocationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationRequest.h; path = LocationManager/INTULocationManager/INTULocationRequest.h; sourceTree = ""; }; + 39B96E27F320C9D7DA84AFCF14D802AF /* NSURL+DTComparing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTComparing.h"; path = "Core/Source/NSURL+DTComparing.h"; sourceTree = ""; }; + 39BA6AC1B9F5C778058A0E5ACE45B296 /* FLEXTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableView.m; path = Classes/Core/Views/FLEXTableView.m; sourceTree = ""; }; + 39D141B9292A8EA3015D515AB0973F6F /* JSCoreBom.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JSCoreBom.release.xcconfig; sourceTree = ""; }; + 3A0F9B6A0ED29DC9C88FD3D6B9670F42 /* DTIframeTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTIframeTextAttachment.h; path = Core/Source/DTIframeTextAttachment.h; sourceTree = ""; }; + 3A0FA2AB44CE0E3CD7EF458739BF37F9 /* SBJson5StreamWriterState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamWriterState.h; path = Classes/SBJson5StreamWriterState.h; sourceTree = ""; }; + 3A39B3C1D89D279139A7D0D2D2BB5739 /* SCSiriWaveformView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SCSiriWaveformView.release.xcconfig; sourceTree = ""; }; + 3A6759A1EF50B0B74CE30CCB0A6E1F16 /* APAddress.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddress.m; path = Pod/Core/Public/Models/APAddress.m; sourceTree = ""; }; + 3A72438B90A91A20FEB2A8DA248197C4 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 3A8DCAA6AFAB820AB4AC78632C2B34EC /* DTFolderMonitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTFolderMonitor.h; path = Core/Source/DTFolderMonitor.h; sourceTree = ""; }; + 3AABD45CF4696DEB15D7F64EE7E45CB4 /* FLEXObjectExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerViewController.h; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.h; sourceTree = ""; }; + 3AD8EB50B82BB8B4F397149BC5B68226 /* FLEXKeyValueTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyValueTableViewCell.h; path = Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.h; sourceTree = ""; }; + 3B0731C2ED879E40EC20EE83DD01B6ED /* DTStylesheetHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTStylesheetHTMLElement.m; path = Core/Source/DTStylesheetHTMLElement.m; sourceTree = ""; }; + 3B2A0507D6601EF2D53E1D698C3DD3C7 /* NSCharacterSet+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTML.h"; path = "Core/Source/NSCharacterSet+HTML.h"; sourceTree = ""; }; + 3B447D48947836B83C98269D35855236 /* NSGIF.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSGIF.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4E19D5B1F25035473C24110157B852 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B5E4C91D6A289128C5FB4385DEC3E17 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + 3BFEFC4EA245589BECF3A1686E783C67 /* INTULocationManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = INTULocationManager.release.xcconfig; sourceTree = ""; }; + 3C0CEE47C188E2411B60D3E581F7C54E /* Reachability-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reachability-umbrella.h"; sourceTree = ""; }; + 3C4D5A507AC60F40F9831EC9BCFEF251 /* FLEXKeyboardHelpViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardHelpViewController.m; path = Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.m; sourceTree = ""; }; + 3C994B08375B24253CAF2AE370ECA1B1 /* DTCoreTextLayoutFrame+Cursor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTCoreTextLayoutFrame+Cursor.h"; path = "Core/Source/DTCoreTextLayoutFrame+Cursor.h"; sourceTree = ""; }; + 3C9FABD5BFAA79030821C5DE06A21C33 /* Pods-Jasonette-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Jasonette-acknowledgements.plist"; sourceTree = ""; }; + 3D48AA2A96348CB7D832FF9A73B9AAD4 /* INTULocationManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-umbrella.h"; sourceTree = ""; }; + 3D660401E38170752115DFE8617DF310 /* OMGFormURLEncode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGFormURLEncode.h; path = Sources/OMGFormURLEncode.h; sourceTree = ""; }; + 3DF68492FF9B3E597DE270004E41B2F5 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 3E0F2A45E805D5224959B87DA63BC807 /* SWTableViewCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SWTableViewCell-dummy.m"; sourceTree = ""; }; + 3E37738A82029A1572EB8FA0839F256A /* libPhoneNumber-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libPhoneNumber-iOS-prefix.pch"; sourceTree = ""; }; + 3E5D6C4ABDD321558A67839B08BC51B8 /* OMGFormURLEncode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGFormURLEncode.m; path = Sources/OMGFormURLEncode.m; sourceTree = ""; }; + 3EB1E869E3715F6BD0194CAA68523DDE /* BBBadgeBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BBBadgeBarButtonItem.h; path = BBBadgeBarButtonItem/BBBadgeBarButtonItem.h; sourceTree = ""; }; + 3EC21C248F12785197C09A17EE49F156 /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + 3ED0DC2A0DB6340F588C5CE20DB6F216 /* OMGHTTPURLRQ.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OMGHTTPURLRQ.modulemap; sourceTree = ""; }; + 3ED898203A56B317EFCE6F9C7C28F6B7 /* FLEXObjectExplorer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorer.m; path = Classes/ObjectExplorers/FLEXObjectExplorer.m; sourceTree = ""; }; + 3EDE185B81D85D1B845C5E17995A2816 /* FLEXDefaultEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultEditorViewController.m; path = Classes/Editing/FLEXDefaultEditorViewController.m; sourceTree = ""; }; + 3F1B841187477268F44E19E89CB9D03F /* FLEXKeyPathSearchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyPathSearchController.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.m; sourceTree = ""; }; + 3F2482213A1E276EF7B5388B8FA6E6A0 /* UIScrollView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+DHSmartScreenshot.m"; path = "Classes/UIScrollView+DHSmartScreenshot.m"; sourceTree = ""; }; + 3F8635373AC7F80231B23E0CF3A35012 /* SocketRocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.debug.xcconfig; sourceTree = ""; }; + 3F8D17A350594A79BE30A681A0CDF916 /* DAKeyboardControl-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DAKeyboardControl-Info.plist"; sourceTree = ""; }; + 3FA3A1F37B7AB5E2B4094CDD72D0B166 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 3FA4ED1572B99C493A1F0BFD3C2B43B6 /* FLEXTypeEncodingParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTypeEncodingParser.m; path = Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.m; sourceTree = ""; }; + 3FD24C6B406C455D1A72D03B730C3A52 /* DAKeyboardControl.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DAKeyboardControl.release.xcconfig; sourceTree = ""; }; + 400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 403163F1F38F2846264AAD66E660C9C9 /* DTAttributedTextContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextContentView.m; path = Core/Source/DTAttributedTextContentView.m; sourceTree = ""; }; + 408B9C0B70B38D8EF2661D7380C72F11 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 409CFAA7242E7D7EF4E88FDDC016DF2D /* DTCoreTextLayoutFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrame.m; path = Core/Source/DTCoreTextLayoutFrame.m; sourceTree = ""; }; + 40A4CCD030CB39845F7149D68845F25A /* DTAsyncFileDeleter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAsyncFileDeleter.h; path = Core/Source/DTAsyncFileDeleter/DTAsyncFileDeleter.h; sourceTree = ""; }; + 40AFE6C47E923263464A9453BEF30317 /* FLEX-Core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEX-Core.h"; path = "Classes/FLEX-Core.h"; sourceTree = ""; }; + 40DFD05C01872AA39C1458362A89D3FD /* FLEXProtocol.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXProtocol.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.m; sourceTree = ""; }; + 413DE188CD2A8443F227B5E05CFAF747 /* FLEXHierarchyTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewController.h; path = Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.h; sourceTree = ""; }; + 41CC9540F9736915DB7E28481A5BBBC1 /* FLEXShortcut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXShortcut.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.h; sourceTree = ""; }; + 42009AADFEF5D8F1FDAA86737A9D5B5D /* IQAudioRecorderController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQAudioRecorderController.modulemap; sourceTree = ""; }; + 421ABAD2F376C4185F388A387E2E4655 /* libPhoneNumber_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libPhoneNumber_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4230648155956E5BA98C94F3F73B15AF /* NSMutableAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+HTML.m"; path = "Core/Source/NSMutableAttributedString+HTML.m"; sourceTree = ""; }; + 4247DFE516BDBE711FDE1C44CE82E7C9 /* IQAudioRecorderController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQAudioRecorderController.debug.xcconfig; sourceTree = ""; }; + 424CE5AE0FDC906234D47B797E2569E9 /* DTVideoTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVideoTextAttachment.h; path = Core/Source/DTVideoTextAttachment.h; sourceTree = ""; }; + 425926A47F77FC987863810EB86C7A80 /* NSArray+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+DTError.h"; path = "Core/Source/NSArray+DTError.h"; sourceTree = ""; }; + 4276CC02142BF4887AB3E21B19A90FD3 /* UIMenu+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIMenu+FLEX.h"; path = "Classes/Utility/Categories/UIMenu+FLEX.h"; sourceTree = ""; }; + 429B5E520B3095C41B3E06090291047F /* CTLineUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CTLineUtils.m; path = Core/Source/CTLineUtils.m; sourceTree = ""; }; + 431E63EC52335559B3454DC9CA71C36C /* APAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddress.h; path = Pod/Core/Public/Models/APAddress.h; sourceTree = ""; }; + 43236CA31C87082971B11360C8BEB1A0 /* SWCellScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWCellScrollView.m; path = SWTableViewCell/PodFiles/SWCellScrollView.m; sourceTree = ""; }; + 433FF0BF784294CC74EE50DECDAFA730 /* mztools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mztools.h; path = Core/Source/Externals/minizip/mztools.h; sourceTree = ""; }; + 43894FA81F52E6BE73B0580231F45026 /* FLEXRuntime+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FLEXRuntime+Compare.m"; path = "Classes/Utility/Categories/FLEXRuntime+Compare.m"; sourceTree = ""; }; + 43BCA909FE08A54BE2EBF674B8FEC0F6 /* FLEXAddressExplorerCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXAddressExplorerCoordinator.m; path = Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.m; sourceTree = ""; }; + 43F07958A8CCCC50589FB6EBFEB0BF6F /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 4430BC6D16ED138C6F0431EA7954FB59 /* FLEXMirror.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMirror.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMirror.h; sourceTree = ""; }; + 444C9351AC90D63C67A50BE5308DF463 /* FLEXLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXLogController.h; sourceTree = ""; }; + 4474CD27C3955CDAB3CBB876702ABC3C /* SRPinningSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRPinningSecurityPolicy.h; path = SocketRocket/Internal/Security/SRPinningSecurityPolicy.h; sourceTree = ""; }; + 449615D5013EAB65B4992331CF3E32B6 /* NSArray+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+FLEX.m"; path = "Classes/Utility/Categories/NSArray+FLEX.m"; sourceTree = ""; }; + 44AD7A8592FCFBFF645E45AEE925B10F /* TWMessageBarManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TWMessageBarManager.release.xcconfig; sourceTree = ""; }; + 45C80D89FA10C77CA3331FDC9B0A4945 /* INTULocationRequestDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationRequestDefines.h; path = LocationManager/INTULocationManager/INTULocationRequestDefines.h; sourceTree = ""; }; + 45F348595522719BD1E383E47A0C5604 /* DTBreakHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBreakHTMLElement.m; path = Core/Source/DTBreakHTMLElement.m; sourceTree = ""; }; + 4660E0042C93AD93C8008AC4539E1643 /* input_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = input_stream.cpp; path = FreeStreamer/FreeStreamer/input_stream.cpp; sourceTree = ""; }; + 4665F85EBD58D6715F7372387D93EA4A /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 46B6297851A5C084387DD79CC6F0700E /* DTASN1Parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1Parser.m; path = Core/Source/DTASN1/DTASN1Parser.m; sourceTree = ""; }; + 46C260D1772565B128D6A570E93129B6 /* stream_configuration.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = stream_configuration.cpp; path = FreeStreamer/FreeStreamer/stream_configuration.cpp; sourceTree = ""; }; + 46E255A29709D4721FA0C72B33227F00 /* FLEXObjectRef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectRef.h; path = Classes/GlobalStateExplorers/FLEXObjectRef.h; sourceTree = ""; }; + 46F2EBA324145D420BBA3DFB1718800E /* FLEXCodeFontCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCodeFontCell.m; path = Classes/Core/Views/Cells/FLEXCodeFontCell.m; sourceTree = ""; }; + 46FF193138C49D5DB0E076CE1505F804 /* FLEXViewControllerShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewControllerShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewControllerShortcuts.m; sourceTree = ""; }; + 473F8389B0AB3EE9DD514534867E4D1F /* SWFrameButton.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWFrameButton.release.xcconfig; sourceTree = ""; }; + 475824F43B073C628A95E8A5BB6233A3 /* FLEXRuntimeBrowserToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeBrowserToolbar.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.m; sourceTree = ""; }; + 479E70D9ECB7889979F693F664970367 /* FLEXNetworkMITMViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkMITMViewController.m; path = Classes/Network/FLEXNetworkMITMViewController.m; sourceTree = ""; }; + 479EC7C429B6206E6A162652BEFAC404 /* JDStatusBarNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JDStatusBarNotification-umbrella.h"; sourceTree = ""; }; + 47A90A704E0987134E04BF2D617C14B4 /* NBPhoneNumber.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumber.m; path = libPhoneNumber/NBPhoneNumber.m; sourceTree = ""; }; + 47AF04B9B3129AE8926E2F7EC89983E6 /* FLEXProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXProperty.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.h; sourceTree = ""; }; + 48095194E2942D6DB2712647A93EF567 /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; + 4826742AAF47B0EA39E83D26A3AAA83E /* FLEXMetadataSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMetadataSection.h; path = Classes/ObjectExplorers/Sections/FLEXMetadataSection.h; sourceTree = ""; }; + 48282D192DA2C3430DC645A53C8F3EC7 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; + 4846A1F007F56809E02F5D5A8C934C64 /* FLEXMutableListSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMutableListSection.m; path = Classes/ObjectExplorers/Sections/FLEXMutableListSection.m; sourceTree = ""; }; + 4891EEE1E8889A884B5A72C5B4A5F33F /* UIPasteboard+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIPasteboard+FLEX.h"; path = "Classes/Utility/Categories/UIPasteboard+FLEX.h"; sourceTree = ""; }; + 489CB2881C04E492524E39EB183AA852 /* FLEXBundleShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBundleShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.h; sourceTree = ""; }; + 48E107416181C2A8AFD964D1748F6E4F /* FLEXArgumentInputViewFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputViewFactory.h; path = Classes/Editing/FLEXArgumentInputViewFactory.h; sourceTree = ""; }; + 48F98EB9ECDC3AE9C12B55B83C9B8C89 /* TDOAuth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TDOAuth-prefix.pch"; sourceTree = ""; }; + 4910C94819CB7633B726E63EEEDB6BE6 /* IQPlaybackDurationView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPlaybackDurationView.m; path = IQAudioRecorderController/IQPlaybackDurationView.m; sourceTree = ""; }; + 494B3E923318B12C9D1DA41B8B737864 /* APThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APThread.m; path = Pod/Core/Private/Thread/APThread.m; sourceTree = ""; }; + 496390F89555A04A7FEE90035A2DB2A9 /* FLEXNetworkSettingsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkSettingsController.m; path = Classes/Network/FLEXNetworkSettingsController.m; sourceTree = ""; }; + 49C4A8039800F1DBE22653AD92A5E385 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 4A10EDFAA7E661E4AD438A6F04D5BE30 /* AFNetworking.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.debug.xcconfig; sourceTree = ""; }; + 4A1590134F61F8B8C824B0A99B8BDE18 /* APAddressBook-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-umbrella.h"; sourceTree = ""; }; + 4A29C60680D34702057E4D22C403C630 /* DAKeyboardControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DAKeyboardControl.modulemap; sourceTree = ""; }; + 4A45A2C9B03F1110645B05CC1FC41B3B /* APAddressBookRefWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookRefWrapper.m; path = Pod/Core/Private/Wrapper/APAddressBookRefWrapper.m; sourceTree = ""; }; + 4A7227536777BADB58E76439A738B327 /* FLEXKeyboardHelpViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardHelpViewController.h; path = Classes/Utility/Keyboard/FLEXKeyboardHelpViewController.h; sourceTree = ""; }; + 4A7CCF20E0E659C52C94FD33A3B54E2A /* PHFDelegateChain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PHFDelegateChain.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AB8B49FDBF934EC716B198E6AAA6BB9 /* DTAttributedTextCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextCell.h; path = Core/Source/DTAttributedTextCell.h; sourceTree = ""; }; + 4ABC2CCC9EAFD34DBFEF44B46FC9D68F /* FLEXSingleRowSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSingleRowSection.m; path = Classes/Core/FLEXSingleRowSection.m; sourceTree = ""; }; + 4AC7180564FE35A293CD0DD977EE56A8 /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AC71F5D986E829C21477710E0D7D5E5 /* FLEXObjcInternal.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = FLEXObjcInternal.mm; path = Classes/Utility/Runtime/Objc/FLEXObjcInternal.mm; sourceTree = ""; }; + 4AD50BE5ADA00A53553039E1614751A6 /* Pods-Jasonette.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Jasonette.debug.xcconfig"; sourceTree = ""; }; + 4AD830984D53FC4CD38E8B1CA5E68779 /* UICKeyChainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UICKeyChainStore.m; path = Lib/UICKeyChainStore/UICKeyChainStore.m; sourceTree = ""; }; + 4B052C0CB2F075654DDAB1A157D07D16 /* FLEXArgumentInputSwitchView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputSwitchView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.h; sourceTree = ""; }; + 4B9442323A5730012E8EF8380E36E53D /* DTActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActionSheet.m; path = Core/Source/iOS/BlocksAdditions/DTActionSheet.m; sourceTree = ""; }; + 4BAB966413ACAB6C18666063705D404F /* TDOAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TDOAuth.debug.xcconfig; sourceTree = ""; }; + 4BB202111958BB14E75302263E34A61E /* APAddressBookAccessRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookAccessRoutine.h; path = Pod/Core/Private/Routine/APAddressBookAccessRoutine.h; sourceTree = ""; }; + 4BDE1F8F1C024BAC5FDA9084581B9EE0 /* FHSViewSnapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSViewSnapshot.m; path = Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.m; sourceTree = ""; }; + 4C478AD3554A06D046E04A46CEDEC8A5 /* SceneKit+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SceneKit+Snapshot.h"; path = "Classes/ViewHierarchy/SnapshotExplorer/Scene/SceneKit+Snapshot.h"; sourceTree = ""; }; + 4C57AD11264BFF53C20E6BFFCC382270 /* OMGUserAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OMGUserAgent.m; path = Sources/OMGUserAgent.m; sourceTree = ""; }; + 4C7D3D9E1865D30147BD2FE248E6D08B /* UICKeyChainStore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "UICKeyChainStore-Info.plist"; sourceTree = ""; }; + 4D26B064F0BBCA21CFC2E900A20672B7 /* FLEXColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXColor.m; path = Classes/Utility/FLEXColor.m; sourceTree = ""; }; + 4D796E758F74E0D9138D8F5E2B97DB7C /* TWMessageBarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TWMessageBarManager-dummy.m"; sourceTree = ""; }; + 4DB3A78D9B733E30324D2BE3B30BDB7C /* TTTAttributedLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TTTAttributedLabel-Info.plist"; sourceTree = ""; }; + 4E4EB0829964D6584B95FAB116C3DEFD /* DTTextAttachmentHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextAttachmentHTMLElement.h; path = Core/Source/DTTextAttachmentHTMLElement.h; sourceTree = ""; }; + 4E5185FC017521D8355C6F7A6AAACD32 /* FLEXKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychain.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychain.m; sourceTree = ""; }; + 4E5A4B3F13E4FBE0F6A8902B4E4E733D /* DAKeyboardControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DAKeyboardControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4E702550999A13D60DFF27AA2FE09791 /* NSAttributedString+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTDebug.m"; path = "Core/Source/NSAttributedString+DTDebug.m"; sourceTree = ""; }; + 4EB16C3F1AE65645C3CEB9AEA94C4B32 /* DTCoreTextConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextConstants.m; path = Core/Source/DTCoreTextConstants.m; sourceTree = ""; }; + 4ECE815A8473E061D11E417343DABCE7 /* DTStylesheetHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTStylesheetHTMLElement.h; path = Core/Source/DTStylesheetHTMLElement.h; sourceTree = ""; }; + 4F007FAF52F42B43DAC69B0D5CAF2FA0 /* TDOAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TDOAuth.modulemap; sourceTree = ""; }; + 4F52F2AB1E2C35C1041E2577176330DA /* NSScanner+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSScanner+HTML.m"; path = "Core/Source/NSScanner+HTML.m"; sourceTree = ""; }; + 4F5DA8AFBD3C01732E1860E82AA061EA /* icon-info.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-info.png"; path = "Classes/Icons/icon-info.png"; sourceTree = ""; }; + 4FAA8A225379CF79D994C4C188493C25 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.m; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.m; sourceTree = ""; }; + 4FCC205FD687D9A3245BAE433FCC4EFE /* IQAudioCropperViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioCropperViewController.h; path = IQAudioRecorderController/IQAudioCropperViewController.h; sourceTree = ""; }; + 4FD8D2160ADAE6BAA12585ED5EDB6A2D /* FLEXUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXUtility.h; path = Classes/Utility/FLEXUtility.h; sourceTree = ""; }; + 4FDB7C07BD35492C61668457E957D178 /* NBRegularExpressionCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBRegularExpressionCache.h; path = libPhoneNumber/Internal/NBRegularExpressionCache.h; sourceTree = ""; }; + 508E8DC778DF854B9F71AFC308142699 /* SWFrameButton.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWFrameButton.debug.xcconfig; sourceTree = ""; }; + 50955A021D54E5D707A9B1A930CBA42E /* INTULocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationManager.m; path = LocationManager/INTULocationManager/INTULocationManager.m; sourceTree = ""; }; + 50A2E832D49AC6ABC48779A948E03981 /* DTCoreTextParagraphStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextParagraphStyle.m; path = Core/Source/DTCoreTextParagraphStyle.m; sourceTree = ""; }; + 50FBD0D7D7763CF0720C02FF25DB9A94 /* SRURLUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRURLUtilities.m; path = SocketRocket/Internal/Utilities/SRURLUtilities.m; sourceTree = ""; }; + 510E4796E68862D66F160B52C29B91FB /* FLEXNetworkSettingsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkSettingsController.h; path = Classes/Network/FLEXNetworkSettingsController.h; sourceTree = ""; }; + 516758C8621AFBD1F9B4B6C878880C4B /* FLEXRuntimeController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeController.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.m; sourceTree = ""; }; + 5184A2C9984FC8F57FC15881A39DE76A /* REMenu.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = REMenu.debug.xcconfig; sourceTree = ""; }; + 51C3F483B630FFE171126FCA8F0CFD3A /* FLEXMutableListSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMutableListSection.h; path = Classes/ObjectExplorers/Sections/FLEXMutableListSection.h; sourceTree = ""; }; + 52559B6C4B3032756996053F0E26238B /* DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCompatibility.h; path = Core/Source/DTCompatibility.h; sourceTree = ""; }; + 52674D49D87A4A486099B8778969C693 /* FSParsePlaylistRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSParsePlaylistRequest.m; path = FreeStreamer/FreeStreamer/FSParsePlaylistRequest.m; sourceTree = ""; }; + 5299FDB840E147597FD36F5BB23A0189 /* FLEXMultiColumnTableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultiColumnTableView.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.m; sourceTree = ""; }; + 5304F25A0C3075A3CA726786108BA5AB /* FLEXObjectListViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectListViewController.h; path = Classes/GlobalStateExplorers/FLEXObjectListViewController.h; sourceTree = ""; }; + 53212642DF8826F802F2497D6E4DC6E7 /* libPhoneNumber-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "libPhoneNumber-iOS.debug.xcconfig"; sourceTree = ""; }; + 532A2AAA75A75AC841BD24A90086CF0F /* FLEXRealmDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDatabaseManager.h; sourceTree = ""; }; + 53390D2EF21DC5D86510CED1CDC93011 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + 53750375135C9570C37D33F517B55AB1 /* NBNumberFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBNumberFormat.m; path = libPhoneNumber/NBNumberFormat.m; sourceTree = ""; }; + 53C1FF0E60E9420CE14B2669BE77E0D7 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; }; + 53E2D986BF8E441ABB1BAF261526B321 /* file_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = file_stream.cpp; path = FreeStreamer/FreeStreamer/file_stream.cpp; sourceTree = ""; }; + 53E55F3C08B06720B0C4A04BD61E2367 /* APAddressBook.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBook.m; path = Pod/Core/Public/APAddressBook.m; sourceTree = ""; }; + 54041772509480637AF21C271544F66F /* FLEXViewShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXViewShortcuts.m; sourceTree = ""; }; + 549C39D2968D75FD476F7A9DF183459D /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 54A642ABA6713FE13CEA750A4D3AD565 /* APAddressBook-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "APAddressBook-dummy.m"; sourceTree = ""; }; + 54D0553EBF50B7A545FAC19DCA665E07 /* APEmail.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APEmail.h; path = Pod/Core/Public/Models/APEmail.h; sourceTree = ""; }; + 54D2251600FFB01B04A8481C0A259D9B /* APAddressBook-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-prefix.pch"; sourceTree = ""; }; + 54E1EB2C391923D837464ABF04988EE9 /* UIScreen+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScreen+DTFoundation.h"; path = "Core/Source/iOS/UIScreen+DTFoundation.h"; sourceTree = ""; }; + 54EFA6D02D1F6F603EFD9F528375BB8B /* DTVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTVersion.h; path = Core/Source/DTVersion.h; sourceTree = ""; }; + 551E4A32C6A8C0D9327CDA64A848D7C4 /* PHFComposeBarView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFComposeBarView-prefix.pch"; sourceTree = ""; }; + 55234810A6BCCBC73C83F45CBDCE1EDB /* NSString+DTUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUtilities.h"; path = "Core/Source/NSString+DTUtilities.h"; sourceTree = ""; }; + 552AEC4A0E655977AF81FBBC87E22706 /* DHSmartScreenshot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DHSmartScreenshot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 55459FCDDE2EA7126FE79CDD30DEB5DC /* FLEXArgumentInputSwitchView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputSwitchView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputSwitchView.m; sourceTree = ""; }; + 559A06E925FD477E0E70603BB825EA7B /* DTTextBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTextBlock.h; path = Core/Source/DTTextBlock.h; sourceTree = ""; }; + 55CCB6B07F9F41496526502B02439089 /* FLEXScopeCarousel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXScopeCarousel.m; path = Classes/Core/Views/Carousel/FLEXScopeCarousel.m; sourceTree = ""; }; + 55FC1EEDF9515465A2425A06FB502B92 /* IQAudioRecorderController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQAudioRecorderController-Info.plist"; sourceTree = ""; }; + 56169B1C69A812F25BC91F5ACDD35700 /* NSMutableArray+SWUtilityButtons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+SWUtilityButtons.h"; path = "SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.h"; sourceTree = ""; }; + 56453161405ACACAFF278743DCAB2213 /* NSHash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NSHash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 564BEC7E78AC07EEB1F7F02D04B93555 /* FLEXArgumentInputNotSupportedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNotSupportedView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.m; sourceTree = ""; }; + 569C4CCB9097492210FE9199C7EF6C93 /* UIPasteboard+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIPasteboard+FLEX.m"; path = "Classes/Utility/Categories/UIPasteboard+FLEX.m"; sourceTree = ""; }; + 5707B92A88AB1C2D74D2DD862197DB23 /* NSCoder+DTCompatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCoder+DTCompatibility.m"; path = "Core/Source/NSCoder+DTCompatibility.m"; sourceTree = ""; }; + 571F10CC7B7D0B873D8E53F6F75515D8 /* FLEXWindowManagerController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWindowManagerController.h; path = Classes/ExplorerInterface/FLEXWindowManagerController.h; sourceTree = ""; }; + 572C8C5F1218AF4DE4A49729577A33B0 /* RMActionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMActionController.m; path = RMActionController/RMActionController.m; sourceTree = ""; }; + 57398F3C8EBC7F798A81FE77DFD79228 /* FLEXCarouselCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCarouselCell.m; path = Classes/Core/Views/Carousel/FLEXCarouselCell.m; sourceTree = ""; }; + 5741E9663570DDA603CD64C5EBFFA2A9 /* TWMessageBarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TWMessageBarManager.modulemap; sourceTree = ""; }; + 575B4523E5FB00B499335E8A25BC72FC /* DTCoreTextConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextConstants.h; path = Core/Source/DTCoreTextConstants.h; sourceTree = ""; }; + 579E31721A8511E7C31D9042C90024C7 /* UIView+FLEX_Layout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+FLEX_Layout.m"; path = "Classes/Utility/Categories/UIView+FLEX_Layout.m"; sourceTree = ""; }; + 57BEBD7065A708D9D818865C5D4314B9 /* FLEXRuntimeBrowserToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeBrowserToolbar.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeBrowserToolbar.h; sourceTree = ""; }; + 5808BBE73D0D5D40AC148ED20055F6AB /* Pods-Jasonette-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Jasonette-dummy.m"; sourceTree = ""; }; + 580D06719889EDE978961CB1F251642F /* NSData+NSHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+NSHash.h"; path = "NSHash/NSData+NSHash.h"; sourceTree = ""; }; + 585C378D2A61140846420F9C3BEBB159 /* NSFileWrapper+DTCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileWrapper+DTCopying.h"; path = "Core/Source/NSFileWrapper+DTCopying.h"; sourceTree = ""; }; + 589F4250F896280E34AD0C32D0131FEF /* FLEXArgumentInputDateView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputDateView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.m; sourceTree = ""; }; + 58AF0171A7CB93B1CC449880EB7ED4B1 /* APPhone.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APPhone.m; path = Pod/Core/Public/Models/APPhone.m; sourceTree = ""; }; + 58B23B017DE1F1499363F0664A0E7F72 /* TTTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TTTAttributedLabel.h; path = TTTAttributedLabel/TTTAttributedLabel.h; sourceTree = ""; }; + 58F85549C896D52F6685E60F5EF376D2 /* SRIOConsumerPool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumerPool.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.h; sourceTree = ""; }; + 59229BA9B048B7CBF7916E4D08EB9CFD /* FSCheckContentTypeRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCheckContentTypeRequest.h; path = FreeStreamer/FreeStreamer/FSCheckContentTypeRequest.h; sourceTree = ""; }; + 5942E01A5C46245BA706B98DFAF08959 /* SRMutex.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRMutex.m; path = SocketRocket/Internal/Utilities/SRMutex.m; sourceTree = ""; }; + 595F9CF1F98BF8B4838887E2188C5FCA /* FLEXBookmarkManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBookmarkManager.h; path = Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.h; sourceTree = ""; }; + 599036A694797D985CFFDE1C27E02943 /* FLEXTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewController.h; path = Classes/Core/Controllers/FLEXTableViewController.h; sourceTree = ""; }; + 59B26A39B3370072CEB866A76B8E2708 /* AHKActionSheet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AHKActionSheet.debug.xcconfig; sourceTree = ""; }; + 59D5BD0A7C41D6AA5513B7F5BBC80DC9 /* APEmail.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APEmail.m; path = Pod/Core/Public/Models/APEmail.m; sourceTree = ""; }; + 5A4A0ECCB02AB8D65E58ECE92D586AB3 /* RMDateSelectionViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMDateSelectionViewController.h; path = RMDateSelectionViewController/RMDateSelectionViewController.h; sourceTree = ""; }; + 5A4EE79FDCDA47638884504C34FEE96E /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 5A8034FF44633272658CFE570D2D0DA0 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 5AE24E87AC659C7A0B5E83D6C79A0DF5 /* FLEX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-prefix.pch"; sourceTree = ""; }; + 5AECFFF1B13025BFFC08A1EACA020F00 /* NBMetadataHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBMetadataHelper.h; path = libPhoneNumber/NBMetadataHelper.h; sourceTree = ""; }; + 5B8F86CD2D207B1D81E22D8E4611C467 /* NSGIF.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NSGIF.modulemap; sourceTree = ""; }; + 5BB633B4F3BF2B4AF9BC51FCBE3A6957 /* FLEX-Runtime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEX-Runtime.h"; path = "Classes/FLEX-Runtime.h"; sourceTree = ""; }; + 5BBAA2821B57C5E2F03130C6DB662630 /* TWMessageBarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TWMessageBarManager-umbrella.h"; sourceTree = ""; }; + 5BD13FACB149C283B1DBAD25FEA77BE6 /* TDOAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TDOAuth-umbrella.h"; sourceTree = ""; }; + 5C4D99F7884E9B9040D0EF9DD5ECFED9 /* NBPhoneNumberDesc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneNumberDesc.m; path = libPhoneNumber/NBPhoneNumberDesc.m; sourceTree = ""; }; + 5C6CE05686ABDFA639897913F3FEDED2 /* FLEXFilteringTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFilteringTableViewController.m; path = Classes/Core/Controllers/FLEXFilteringTableViewController.m; sourceTree = ""; }; + 5C86479B7995221EF00C2562480A6F17 /* RMActionController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RMActionController-Info.plist"; sourceTree = ""; }; + 5CD4A3112C3F1CB1EE252D4F46F1144F /* DTCoreTextLayoutFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrame.h; path = Core/Source/DTCoreTextLayoutFrame.h; sourceTree = ""; }; + 5CDF0D8C84ED40198A9CE92C15C07543 /* DTBase64Coding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBase64Coding.m; path = Core/Source/DTBase64Coding.m; sourceTree = ""; }; + 5CE82FB8CA7EFB6D80FCE59220FC483E /* DTZipArchive.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchive.m; path = Core/Source/DTZipArchive/DTZipArchive.m; sourceTree = ""; }; + 5D1789C2DE4DEC1D0D9622401DF31CCB /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 5D9B917723F9181146753A6C996B5EFF /* UIView+DTActionHandlers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTActionHandlers.h"; path = "Core/Source/iOS/BlocksAdditions/UIView+DTActionHandlers.h"; sourceTree = ""; }; + 5DB4748045B8DCFC52AFB37C600FA4F2 /* Reachability.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Reachability.release.xcconfig; sourceTree = ""; }; + 5DF0EFE351D02F3F797FE8ECC021DAC5 /* RMDateSelectionViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMDateSelectionViewController.m; path = RMDateSelectionViewController/RMDateSelectionViewController.m; sourceTree = ""; }; + 5DF686C359BA3C6503ECFAC6FC14E915 /* FLEXMultiColumnTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultiColumnTableView.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXMultiColumnTableView.h; sourceTree = ""; }; + 5E148CDB2F4B9E9F8AFA888829CC037C /* SCSiriWaveformView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCSiriWaveformView-prefix.pch"; sourceTree = ""; }; + 5E1DB158FEC739E7BB402075C2840620 /* FLEXHierarchyTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyTableViewController.m; path = Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewController.m; sourceTree = ""; }; + 5E4FF1C1B72F8CE962AEFD84BE7D5394 /* FLEXSQLResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSQLResult.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.h; sourceTree = ""; }; + 5E731E790506B8ADF4035DA353D90385 /* FLEXFilteringTableViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFilteringTableViewController.h; path = Classes/Core/Controllers/FLEXFilteringTableViewController.h; sourceTree = ""; }; + 5E999199EEF40927279B02060E3D4002 /* IQAudioRecorderViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioRecorderViewController.m; path = IQAudioRecorderController/IQAudioRecorderViewController.m; sourceTree = ""; }; + 5EA6F593F70E1692B6A218C159D7197D /* JDStatusBarNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JDStatusBarNotification.modulemap; sourceTree = ""; }; + 5EB546B81FBC4E0AD9FA5902ED682A8A /* INTURequestIDGenerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTURequestIDGenerator.m; path = LocationManager/INTULocationManager/INTURequestIDGenerator.m; sourceTree = ""; }; + 5EB93C19B9FAE20233842A6EA10B6109 /* UITableView+DHSmartScreenshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+DHSmartScreenshot.m"; path = "Classes/UITableView+DHSmartScreenshot.m"; sourceTree = ""; }; + 5ED53C4D92516B575684D9F8E2CDB4C2 /* PHFDelegateChain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PHFDelegateChain.h; sourceTree = ""; }; + 5EE8FEE1D1B9596407A5ADA81D6CF94F /* FLEXDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDatabaseManager.h; sourceTree = ""; }; + 5F0030B7858D35171945AF51297547B1 /* IQ_FDWaveformView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQ_FDWaveformView.h; path = IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.h; sourceTree = ""; }; + 5F21CBBDCB4A3B6CBE0F090847240E7C /* FHSSnapshotNodes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSSnapshotNodes.m; path = Classes/ViewHierarchy/SnapshotExplorer/Scene/FHSSnapshotNodes.m; sourceTree = ""; }; + 5F966BD2F09611F8CDFD4A4D1DF03827 /* FLEXHierarchyViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyViewController.h; path = Classes/ViewHierarchy/FLEXHierarchyViewController.h; sourceTree = ""; }; + 5F99F4BB02ADA6B4E6320038E3FE503E /* DTZipArchive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchive.h; path = Core/Source/DTZipArchive/DTZipArchive.h; sourceTree = ""; }; + 5FC825233CCC0375D28979D7E85E2D00 /* TWMessageBarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TWMessageBarManager-Info.plist"; sourceTree = ""; }; + 600453E78395C6EBE032211F7B5EA25E /* libPhoneNumber-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libPhoneNumber-iOS-dummy.m"; sourceTree = ""; }; + 60276CB631A2C9D6AAD516BF4FF93B77 /* DTWeakSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTWeakSupport.h; path = Core/Source/DTWeakSupport.h; sourceTree = ""; }; + 6029D4A09BE1D74F5F581B0C349A3832 /* FLEXAddressExplorerCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXAddressExplorerCoordinator.h; path = Classes/GlobalStateExplorers/FLEXAddressExplorerCoordinator.h; sourceTree = ""; }; + 60494E31D214884BE2E25A36B5DBFA57 /* DTPieProgressIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTPieProgressIndicator.m; path = Core/Source/iOS/DTPieProgressIndicator.m; sourceTree = ""; }; + 60777474E2B24B5C45701AA544A3BCE2 /* SCSiriWaveformView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SCSiriWaveformView.m; path = SCSiriWaveformView/SCSiriWaveformView.m; sourceTree = ""; }; + 609CE51C6268A8D2179AF6C292B4EFDC /* FLEXTableListViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableListViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableListViewController.m; sourceTree = ""; }; + 60BD091CEE741B68BA4E6C9315949912 /* SBJson5StreamWriterState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamWriterState.m; path = Classes/SBJson5StreamWriterState.m; sourceTree = ""; }; + 61174303DD602CFBFB1302309BA33BFD /* CALayer+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+FLEX.m"; path = "Classes/Utility/Categories/CALayer+FLEX.m"; sourceTree = ""; }; + 61535A975981FD7519299E7635FB7511 /* DTFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTFoundation-dummy.m"; sourceTree = ""; }; + 61E28EC6990C67076138744F68D21C38 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + 62077C0B6278112FD17AC8B73692997A /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + 6223D78759BC4CC8E5B9C194E3F6C07A /* FreeStreamer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FreeStreamer.debug.xcconfig; sourceTree = ""; }; + 62430FEF119CB4084273453913BB4A18 /* PHFDelegateChain.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFDelegateChain.release.xcconfig; sourceTree = ""; }; + 6252CD13C255CF4C03F4C884227EDAB6 /* SCSiriWaveformView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SCSiriWaveformView.h; path = SCSiriWaveformView/SCSiriWaveformView.h; sourceTree = ""; }; + 627522CE23791DEED45E06EBA9C38BF0 /* FLEX-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FLEX-umbrella.h"; sourceTree = ""; }; + 6309F514AA8FF539D1A9F3E32B7A06BE /* FLEXNetworkTransaction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransaction.m; path = Classes/Network/FLEXNetworkTransaction.m; sourceTree = ""; }; + 632837FE04D04CFD98958CE96EF079C8 /* UIGestureRecognizer+Blocks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIGestureRecognizer+Blocks.m"; path = "Classes/Utility/Categories/UIGestureRecognizer+Blocks.m"; sourceTree = ""; }; + 63884B03AFE122D8018DA0B316DDCB31 /* icon-error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-error.png"; path = "Classes/Icons/icon-error.png"; sourceTree = ""; }; + 63A03EFFA2289B965ECFB5C028A90427 /* SBJson5Parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5Parser.h; path = Classes/SBJson5Parser.h; sourceTree = ""; }; + 64192CF1E2B7E9FADE995B54FDBE9E68 /* FLEXRuntimeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeUtility.m; path = Classes/Utility/Runtime/FLEXRuntimeUtility.m; sourceTree = ""; }; + 642BEB8C9D0C4E49E885E45FA13FEFD9 /* WKWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "WKWebView+AFNetworking.h"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.h"; sourceTree = ""; }; + 64687ED38628C58AF10C4315ADA5CC11 /* OMGHTTPURLRQ.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGHTTPURLRQ.h; path = Sources/OMGHTTPURLRQ.h; sourceTree = ""; }; + 6499664C3D3D12E33AC4BED1910844E6 /* DTAccessibilityElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAccessibilityElement.m; path = Core/Source/DTAccessibilityElement.m; sourceTree = ""; }; + 65458DA86960B5A9D2B2C703A58CBD07 /* DTHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLElement.h; path = Core/Source/DTHTMLElement.h; sourceTree = ""; }; + 6555F4AD293E8A62B79666191AD44B7D /* FLEXGlobalsEntry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsEntry.m; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.m; sourceTree = ""; }; + 6582C61795E7288CDEB7AB1A58B99B00 /* UIWindow+AHKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow+AHKAdditions.m"; path = "Classes/UIWindow+AHKAdditions.m"; sourceTree = ""; }; + 659DF961A68FE14667C76BA277324AEB /* AFOAuth2Manager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFOAuth2Manager-Info.plist"; sourceTree = ""; }; + 65A3BDACE7385DEEFECFC0DD2B9E2546 /* APRecordDate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APRecordDate.m; path = Pod/Core/Public/Models/APRecordDate.m; sourceTree = ""; }; + 65D1C02901F75FA1FBF61E14E1EBDCA6 /* DTTextHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextHTMLElement.m; path = Core/Source/DTTextHTMLElement.m; sourceTree = ""; }; + 661A32505DCD2DCC9473FCACCD79967E /* HMSegmentedControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HMSegmentedControl-prefix.pch"; sourceTree = ""; }; + 664646B5CA3289A278530402814D64E8 /* FLEXColorPreviewSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXColorPreviewSection.h; path = Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.h; sourceTree = ""; }; + 673F3001FFFABA94578E7CB63D374837 /* DTProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTProgressHUD.h; path = Core/Source/iOS/DTProgressHUD/DTProgressHUD.h; sourceTree = ""; }; + 674F6F2FB688D5001F638DCF45A3CEAE /* TDOAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDOAuth.h; sourceTree = ""; }; + 6759A2D87C558B8636881538962363AE /* SocketRocket-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SocketRocket-Info.plist"; sourceTree = ""; }; + 675E990C62093C7FE8268A02C3E1C25B /* AFOAuth2Manager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFOAuth2Manager.modulemap; sourceTree = ""; }; + 679A02B83DC946E8A8FA306C34384CB5 /* JSCoreBom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSCoreBom.h; path = JSCoreBom/JSCoreBom.h; sourceTree = ""; }; + 68B34196F69477C7A65593424FFF4D1B /* FLEXArgumentInputViewFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputViewFactory.m; path = Classes/Editing/FLEXArgumentInputViewFactory.m; sourceTree = ""; }; + 68D7125CE841BB9E525142DA57009D4E /* SRHTTPConnectMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRHTTPConnectMessage.m; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.m; sourceTree = ""; }; + 68F20399CE871252621CE4A2CCE51C03 /* DTBreakHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBreakHTMLElement.h; path = Core/Source/DTBreakHTMLElement.h; sourceTree = ""; }; + 69CA72F2C220E8C1E9D7D12606923A0E /* APAddressBook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBook.h; path = Pod/Core/Public/APAddressBook.h; sourceTree = ""; }; + 69CAD424ABC114922A053950FF25B216 /* FLEXNetworkRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkRecorder.m; path = Classes/Network/FLEXNetworkRecorder.m; sourceTree = ""; }; + 69CF90DBA41FBFE737A339677869C95B /* SBJson.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SBJson.modulemap; sourceTree = ""; }; + 69E9B6A6D26B0C6C9C0361B41571832A /* NBRegExMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBRegExMatcher.h; path = libPhoneNumber/Internal/NBRegExMatcher.h; sourceTree = ""; }; + 69F7E31479D510B2F062D4F1539337F9 /* ModuleXMLHttpRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ModuleXMLHttpRequest.h; path = JSCoreBom/Modules/ModuleXMLHttpRequest.h; sourceTree = ""; }; + 6A3C02F7987A57370C1BBB832F3E5353 /* NSHash.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSHash.debug.xcconfig; sourceTree = ""; }; + 6AB2FCE2F293A7B9D0BAC1972EC2E76B /* APAddressBook.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = APAddressBook.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6AB4C806742477A12D5E26D4D9E3ED8B /* NSString+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+FLEX.m"; path = "Classes/Utility/Categories/NSString+FLEX.m"; sourceTree = ""; }; + 6B11D5806DE4E6AF6FFC13B4ECE3103E /* DTCoreTextFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFunctions.h; path = Core/Source/DTCoreTextFunctions.h; sourceTree = ""; }; + 6B26405962A86C62E5C6575FFA1ABECB /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Core/Source/Externals/minizip/unzip.h; sourceTree = ""; }; + 6B3AA4F6764D605B35C53E75E78A33DC /* AHKActionSheet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AHKActionSheet.release.xcconfig; sourceTree = ""; }; + 6BA8A9FD82840CCD5528231B06B4E8EA /* TTTAttributedLabel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTTAttributedLabel.debug.xcconfig; sourceTree = ""; }; + 6C00447E9FDF6FF7D506EDB386D38039 /* FLEXViewControllersViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXViewControllersViewController.h; path = Classes/ExplorerInterface/FLEXViewControllersViewController.h; sourceTree = ""; }; + 6C43819912DC4120FC64EA4C0395A444 /* NSGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSGIF.m; path = NSGIF/NSGIF.m; sourceTree = ""; }; + 6C66921953D1E4B9C08E137EFCF0C835 /* flex_fishhook.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = flex_fishhook.c; path = Classes/Utility/Runtime/flex_fishhook.c; sourceTree = ""; }; + 6C773D766BFE42C2165618EA8CFC3321 /* FLEXImagePreviewViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImagePreviewViewController.h; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.h; sourceTree = ""; }; + 6C7E01AA17B875EE3E0A0430F4E0799A /* SZTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SZTextView.release.xcconfig; sourceTree = ""; }; + 6C9C7DC2EDB1C67ED772453F41DE4430 /* FLEXPropertyAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXPropertyAttributes.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.h; sourceTree = ""; }; + 6CB32DD4D074BCF496D34972EA157DFC /* SZTextView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SZTextView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6CC367002CB509DF436D2DE42E47C41F /* FLEXLayerShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLayerShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXLayerShortcuts.m; sourceTree = ""; }; + 6CC9F05666D550048A2E089A1431310C /* REMenu-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REMenu-prefix.pch"; sourceTree = ""; }; + 6CCEB84969B7C0842A475239438693CF /* NSString+IQTimeIntervalFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+IQTimeIntervalFormatter.h"; path = "IQAudioRecorderController/NSString+IQTimeIntervalFormatter.h"; sourceTree = ""; }; + 6CE8A4C815EF8523D4982C53E0230B21 /* NSGIF-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSGIF-umbrella.h"; sourceTree = ""; }; + 6D0DBB0C3943D8196C0E8B1476948EC3 /* DTCoreText.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTCoreText.modulemap; sourceTree = ""; }; + 6D0E24401E43F61FDE0CF85BEF23CDE2 /* DTFoundationConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFoundationConstants.m; path = Core/Source/DTFoundationConstants.m; sourceTree = ""; }; + 6D1D32997DE2B0BE499D2F9BD4D35892 /* audio_queue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = audio_queue.h; path = FreeStreamer/FreeStreamer/audio_queue.h; sourceTree = ""; }; + 6D5134647D2AF1E64F7BB4ADDA97E67B /* DTSQLiteDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSQLiteDatabase.h; path = Core/Source/DTSQLite/DTSQLiteDatabase.h; sourceTree = ""; }; + 6D60A28DEC26AFB133D68AE311068F69 /* DTHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLElement.m; path = Core/Source/DTHTMLElement.m; sourceTree = ""; }; + 6D67C9FF86FF56F6FFF39BFC74B28711 /* NSAttributedString+SmallCaps.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+SmallCaps.m"; path = "Core/Source/NSAttributedString+SmallCaps.m"; sourceTree = ""; }; + 6D741473B5276E2C5199F3F8A281FB98 /* audio_queue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = audio_queue.cpp; path = FreeStreamer/FreeStreamer/audio_queue.cpp; sourceTree = ""; }; + 6D962564751BFA369B17397883A390F3 /* NSHash.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSHash.release.xcconfig; sourceTree = ""; }; + 6D97600B41F0B757F2F442D21A2AC95E /* FLEXImageShortcuts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXImageShortcuts.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.h; sourceTree = ""; }; + 6E3FB8CAB53F4B7E0C9BFFD43CD61981 /* NSString+DTURLEncoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTURLEncoding.h"; path = "Core/Source/NSString+DTURLEncoding.h"; sourceTree = ""; }; + 6EC5CA141313C8513E97A4AB5FA0B7E8 /* FSParsePlaylistRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSParsePlaylistRequest.h; path = FreeStreamer/FreeStreamer/FSParsePlaylistRequest.h; sourceTree = ""; }; + 6EE3D76A659940DE1CB391258989C5F1 /* NBNumberFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBNumberFormat.h; path = libPhoneNumber/NBNumberFormat.h; sourceTree = ""; }; + 6F18AC4BAFCF8AE523B7E2ED4042529D /* SRSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSecurityPolicy.m; path = SocketRocket/SRSecurityPolicy.m; sourceTree = ""; }; + 6F2F36E99E2947A6A3AE2BCCB62622CA /* RMDateSelectionViewController.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMDateSelectionViewController.release.xcconfig; sourceTree = ""; }; + 6F5F19320A6A35E163C501276DCC4CB3 /* NSArray+NBAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+NBAdditions.m"; path = "libPhoneNumber/NSArray+NBAdditions.m"; sourceTree = ""; }; + 6F64DD1EB9821F0A966C498485F3B52D /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 6FE84B862425109C7B5469D0770BE688 /* DTCSSListStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSListStyle.h; path = Core/Source/DTCSSListStyle.h; sourceTree = ""; }; + 7059BA504D31FC403CD6A19402F3A0B2 /* DTCoreTextMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextMacros.h; path = Core/Source/DTCoreTextMacros.h; sourceTree = ""; }; + 7084941C36A5660CB27F779246996DB3 /* FLEXRealmDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRealmDefines.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXRealmDefines.h; sourceTree = ""; }; + 70A494B258CDBA67EB93A96ED97E0785 /* FLEXIvar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXIvar.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.m; sourceTree = ""; }; + 714429E4383D1AC166B7A11A2A9C5D7E /* NSCoder+DTCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCoder+DTCompatibility.h"; path = "Core/Source/NSCoder+DTCompatibility.h"; sourceTree = ""; }; + 719FEBB159E9B60C99911EE3534C10E2 /* SBJson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SBJson-dummy.m"; sourceTree = ""; }; + 72059824EF1E7A34996FA9DCBA99737A /* FLEXSubtitleTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSubtitleTableViewCell.m; path = Classes/Core/Views/Cells/FLEXSubtitleTableViewCell.m; sourceTree = ""; }; + 721A9259F0791F855D4D0AF8929D380C /* FLEXRuntimeKeyPathTokenizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeKeyPathTokenizer.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPathTokenizer.m; sourceTree = ""; }; + 7223E290E19E3E8D9A8AAE27C061868D /* DTScriptVariable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTScriptVariable.h; path = Core/Source/DTScripting/DTScriptVariable.h; sourceTree = ""; }; + 7249D22A4A0C2FDE2A710CC73D771627 /* SRSIMDHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSIMDHelpers.h; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.h; sourceTree = ""; }; + 726231912AF8FA00D1E9A5274C0B7599 /* DTLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLog.h; path = Core/Source/DTLog.h; sourceTree = ""; }; + 72761E2BA114AE211CC815206B4F71F6 /* NSString+DTPaths.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTPaths.m"; path = "Core/Source/NSString+DTPaths.m"; sourceTree = ""; }; + 7277DD452D54D6C9A55A26DD5DBBBB60 /* SCSiriWaveformView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SCSiriWaveformView.modulemap; sourceTree = ""; }; + 7279D7887CE25544AC486836129DED02 /* SocketRocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.release.xcconfig; sourceTree = ""; }; + 72AA7139B921F7E8D9FD9579A3361983 /* DTHTMLParserNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserNode.m; path = Core/Source/DTHTMLParserNode.m; sourceTree = ""; }; + 72D1E5DCAFC03F0117516EBEE7B70026 /* FLEXShortcut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXShortcut.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcut.m; sourceTree = ""; }; + 73387FD2691E0D818E25DA021EE7C316 /* ActivityStreamAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ActivityStreamAPI.h; path = Classes/GlobalStateExplorers/SystemLog/ActivityStreamAPI.h; sourceTree = ""; }; + 73520FDC76719B7E997AD1DE09B84EAB /* NSMutableArray+DTMoving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+DTMoving.h"; path = "Core/Source/NSMutableArray+DTMoving.h"; sourceTree = ""; }; + 736D3E88E13D309111421B524690241E /* BBBadgeBarButtonItem-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BBBadgeBarButtonItem-umbrella.h"; sourceTree = ""; }; + 73F8C4CAF28816F1CF6585F8D7ED716E /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 745916A36BE5BFCEDB74DF2DCC66A2CF /* NSRunLoop+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRunLoop+SRWebSocket.h"; path = "SocketRocket/NSRunLoop+SRWebSocket.h"; sourceTree = ""; }; + 745C8BD6593568161EE55E7160814243 /* INTURequestIDGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTURequestIDGenerator.h; path = LocationManager/INTULocationManager/INTURequestIDGenerator.h; sourceTree = ""; }; + 7482601748B68C5E11494A337FFFB339 /* NSURL+DTAWS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAWS.m"; path = "Core/Source/DTAWS/NSURL+DTAWS.m"; sourceTree = ""; }; + 749763E5BA7C51DEE56D6A51C7AC8328 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + 74C1C8F95759EAD616E0451E5B75A6C4 /* FLEXSystemLogMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogMessage.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogMessage.h; sourceTree = ""; }; + 7527570298EBB22C02AA1D5778A7D1E1 /* RMImageAction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMImageAction.m; path = RMActionController/Actions/RMImageAction.m; sourceTree = ""; }; + 757222D86BAF229194032925BC0104B2 /* SBJson.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SBJson.debug.xcconfig; sourceTree = ""; }; + 75768D4780F31C45D87F16EDF232F529 /* DTImage+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTImage+HTML.m"; path = "Core/Source/DTImage+HTML.m"; sourceTree = ""; }; + 765B0D9FA3D85E15DA37ACE4706D184D /* UIApplication+DTNetworkActivity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+DTNetworkActivity.h"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.h"; sourceTree = ""; }; + 76703B1EFF3179F2DA85BB449FB87606 /* FLEXColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXColor.h; path = Classes/Utility/FLEXColor.h; sourceTree = ""; }; + 769DD709B4E94F46451FDBD4B0E80A6F /* FSCheckContentTypeRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCheckContentTypeRequest.m; path = FreeStreamer/FreeStreamer/FSCheckContentTypeRequest.m; sourceTree = ""; }; + 76C3F02E84C166B698AF212F73CA9108 /* UICKeyChainStore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UICKeyChainStore-umbrella.h"; sourceTree = ""; }; + 76C6B96BF3DC75254D086D966CB4C22E /* FLEXMetadataSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMetadataSection.m; path = Classes/ObjectExplorers/Sections/FLEXMetadataSection.m; sourceTree = ""; }; + 76CD28F54BC5446ACC9E710F0D729D3D /* FLEXTableViewSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewSection.m; path = Classes/Core/FLEXTableViewSection.m; sourceTree = ""; }; + 76D8FC0EAB9CB3D5CE848326DDC7B3D6 /* FLEXManager+Networking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Networking.h"; path = "Classes/Manager/FLEXManager+Networking.h"; sourceTree = ""; }; + 76F6CB672AF5B3F27EEC26BBECA74463 /* RMAction+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RMAction+Private.h"; path = "RMActionController/Private/RMAction+Private.h"; sourceTree = ""; }; + 771CE2A4297D94DEC70D38882596FF19 /* RMImageAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMImageAction.h; path = RMActionController/Actions/RMImageAction.h; sourceTree = ""; }; + 7732CD186F68C45FA3623CDB22165EEF /* APThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APThread.h; path = Pod/Core/Private/Thread/APThread.h; sourceTree = ""; }; + 7734B3597F1CD577A3754C4ECDB3238C /* FLEX-ObjectExploring.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEX-ObjectExploring.h"; path = "Classes/FLEX-ObjectExploring.h"; sourceTree = ""; }; + 77490B74EE23BE98EC12F73193974B10 /* caching_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = caching_stream.h; path = FreeStreamer/FreeStreamer/caching_stream.h; sourceTree = ""; }; + 77B0DC6E71DCE4BD962131E7862F6990 /* Pods-Jasonette.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Jasonette.release.xcconfig"; sourceTree = ""; }; + 78353BC86AC56DB01C67C4BD7928FA4F /* SWFrameButton-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SWFrameButton-dummy.m"; sourceTree = ""; }; + 785402C0F2D579F83ABD828E3E6BB4A8 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + 78860BC0476204CDC8446FA3D0B34DA2 /* DTCoreTextFontDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontDescriptor.m; path = Core/Source/DTCoreTextFontDescriptor.m; sourceTree = ""; }; + 78DFB91E30B1640D9167171136BC2C35 /* DTCSSListStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSListStyle.m; path = Core/Source/DTCSSListStyle.m; sourceTree = ""; }; + 78F07E289EDDC4F61B45F5F83F93E8A1 /* NSGIF-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSGIF-prefix.pch"; sourceTree = ""; }; + 795F106D507EB0A74E221D794F58D76A /* REMenu-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REMenu-umbrella.h"; sourceTree = ""; }; + 79A8499704F446C0F3B8D4B4BA47D3B1 /* NSObject+FLEX_Reflection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+FLEX_Reflection.h"; path = "Classes/Utility/Categories/NSObject+FLEX_Reflection.h"; sourceTree = ""; }; + 79AC63EA19E09B66AD0AED0BB1F98A7F /* FLEXShortcutsSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXShortcutsSection.h; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.h; sourceTree = ""; }; + 79BCF4FFB7930EA5D93951681411C6C5 /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; + 79DDD5E8C1DD09D82A9DF75DDFF54A5B /* DTTiledLayerWithoutFade.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTTiledLayerWithoutFade.h; path = Core/Source/iOS/DTTiledLayerWithoutFade.h; sourceTree = ""; }; + 7A383FADAEC2590A8F049A92CBD51A40 /* SZTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SZTextView.modulemap; sourceTree = ""; }; + 7A9AFF87FA166A02F8140D890A833286 /* UIMenu+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIMenu+FLEX.m"; path = "Classes/Utility/Categories/UIMenu+FLEX.m"; sourceTree = ""; }; + 7AB4B09921E7B0A5D62720A0BDC49C81 /* FreeStreamer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FreeStreamer-Info.plist"; sourceTree = ""; }; + 7ABA3A41260E5D825CA19AE49B4ECD72 /* FLEXClassBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassBuilder.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.m; sourceTree = ""; }; + 7B3D5A058DACD2B482111D932318D8A7 /* NSGIF-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSGIF-dummy.m"; sourceTree = ""; }; + 7B7EEFA24AB3BD964AE31750FA202895 /* NSAttributedStringRunDelegates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSAttributedStringRunDelegates.h; path = Core/Source/NSAttributedStringRunDelegates.h; sourceTree = ""; }; + 7BABF22CCB96C51A10E73CB6BDA64696 /* PHFComposeBarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView.m; path = Classes/PHFComposeBarView.m; sourceTree = ""; }; + 7C323032424364FE6261FB47CFB82923 /* FLEXTabList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTabList.h; path = Classes/ExplorerInterface/Tabs/FLEXTabList.h; sourceTree = ""; }; + 7C4CAFC02DC5972F020879551CC85AEB /* INTULocationManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-prefix.pch"; sourceTree = ""; }; + 7C952E3C913E187A4DDF1E6555742CDE /* FLEXExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerViewController.m; path = Classes/ExplorerInterface/FLEXExplorerViewController.m; sourceTree = ""; }; + 7CB597FE284D0FCD3C49DDE5D734537E /* FLEXImagePreviewViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImagePreviewViewController.m; path = Classes/ViewHierarchy/FLEXImagePreviewViewController.m; sourceTree = ""; }; + 7D0DA4068AB54241190934833176A702 /* SWTableViewCell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWTableViewCell-umbrella.h"; sourceTree = ""; }; + 7DD65F487E4BA0E9643D8AA4814D8B07 /* DTColor+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DTColor+Compatibility.m"; path = "Core/Source/DTColor+Compatibility.m"; sourceTree = ""; }; + 7DDC476C5D417A6722752F490742558B /* FLEXArgumentInputDateView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputDateView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputDateView.h; sourceTree = ""; }; + 7DFD305CB21F713A4250781B772AEF06 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 7E288E222276F39A24902C7C59C07F60 /* FLEXViewControllersViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXViewControllersViewController.m; path = Classes/ExplorerInterface/FLEXViewControllersViewController.m; sourceTree = ""; }; + 7E4940731BF9FB14C8753FCA75096C96 /* JDStatusBarNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JDStatusBarNotification.debug.xcconfig; sourceTree = ""; }; + 7E499BD426DA5BBC8A851F129D0DD335 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; + 7E6A6FB8913E323B7AF9D8AE78CF88B6 /* FLEXSQLiteDatabaseManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSQLiteDatabaseManager.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.m; sourceTree = ""; }; + 7E72124CA95803E95A02031BFFF781DE /* DTAttributedTextContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextContentView.h; path = Core/Source/DTAttributedTextContentView.h; sourceTree = ""; }; + 7E7A902F020DC6E3EAADBB19511D5D4A /* DTAccessibilityViewProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAccessibilityViewProxy.h; path = Core/Source/DTAccessibilityViewProxy.h; sourceTree = ""; }; + 7EC052ACACA9630000CEAEC1796E2D1C /* APAddressBookAccessRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookAccessRoutine.m; path = Pod/Core/Private/Routine/APAddressBookAccessRoutine.m; sourceTree = ""; }; + 7EC9C900C220E1589B65AC8C98CEB851 /* TTTAttributedLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-prefix.pch"; sourceTree = ""; }; + 7ED063C1BFBE1EF7A4B81F9DAF73DF52 /* DTDictationPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTDictationPlaceholderView.m; path = Core/Source/DTDictationPlaceholderView.m; sourceTree = ""; }; + 7EE01EA5ADFAA689C52870D92389CEC7 /* RMActionController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RMActionController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7F210A9426AAFB0F6227FC96D2FCDD12 /* FSAudioStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSAudioStream.h; path = FreeStreamer/FreeStreamer/FSAudioStream.h; sourceTree = ""; }; + 7FA982DB54DE9210736AD89C89A016B2 /* FHSSnapshotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSSnapshotView.m; path = Classes/ViewHierarchy/SnapshotExplorer/FHSSnapshotView.m; sourceTree = ""; }; + 7FAF448666E518954719067B4B598A6A /* UIImage+AHKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AHKAdditions.h"; path = "Classes/UIImage+AHKAdditions.h"; sourceTree = ""; }; + 7FBD0F3973FE263354220AC751BB35B5 /* DTObjectBlockExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTObjectBlockExecutor.m; path = Core/Source/Runtime/DTObjectBlockExecutor.m; sourceTree = ""; }; + 7FD7C50C5B92A61CF6BD72E899F2C857 /* file_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = file_stream.h; path = FreeStreamer/FreeStreamer/file_stream.h; sourceTree = ""; }; + 7FFDC04C7DC935150B0990D2C3636084 /* DTHorizontalRuleHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHorizontalRuleHTMLElement.m; path = Core/Source/DTHorizontalRuleHTMLElement.m; sourceTree = ""; }; + 80052E3998270C3A96C7E325E07B357D /* SWLongPressGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWLongPressGestureRecognizer.m; path = SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.m; sourceTree = ""; }; + 800F759376848B2DD2673742844A46B2 /* UICKeyChainStore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = UICKeyChainStore.modulemap; sourceTree = ""; }; + 8011C2E41CD34FBBC24AF4DDDAEC52CB /* REMenuItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuItem.h; path = REMenu/REMenuItem.h; sourceTree = ""; }; + 80135B3DAF2C67767F4D9CAF3DAEE5F8 /* FLEXHeapEnumerator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHeapEnumerator.m; path = Classes/Utility/FLEXHeapEnumerator.m; sourceTree = ""; }; + 807216B8F8DC6959E4E4C4E4CAE94408 /* NSTimer+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSTimer+FLEX.m"; path = "Classes/Utility/Categories/NSTimer+FLEX.m"; sourceTree = ""; }; + 8092F8DEDE8D7259F3E227EFF1AF1D52 /* NSURL+DTAppLinks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTAppLinks.m"; path = "Core/Source/iOS/NSURL+DTAppLinks.m"; sourceTree = ""; }; + 8093992CD3EC3F8E026BF018FE0094E3 /* APJob.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APJob.m; path = Pod/Core/Public/Models/APJob.m; sourceTree = ""; }; + 81066231C6C2A0ED96B411AEDED60CE2 /* DTCoreTextParagraphStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextParagraphStyle.h; path = Core/Source/DTCoreTextParagraphStyle.h; sourceTree = ""; }; + 812DF966F90296419775F6ABA5298A33 /* BBBadgeBarButtonItem.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BBBadgeBarButtonItem.release.xcconfig; sourceTree = ""; }; + 8204B88C912A506B4538EFF9F394C2B9 /* FLEXNetworkTransactionDetailController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionDetailController.h; path = Classes/Network/FLEXNetworkTransactionDetailController.h; sourceTree = ""; }; + 820E9103F76FEAB783DAEC8E54A889BD /* FLEXRuntimeSafety.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeSafety.m; path = Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.m; sourceTree = ""; }; + 821274D80BC83D71C7FD8FC9144F0E5E /* DTHTMLWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLWriter.h; path = Core/Source/DTHTMLWriter.h; sourceTree = ""; }; + 82132962F09EE13080BDA3F8C1B2EF07 /* SRProxyConnect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRProxyConnect.m; path = SocketRocket/Internal/Proxy/SRProxyConnect.m; sourceTree = ""; }; + 824311AA91F3CAB809D3E6FD3DD5A007 /* APAddressBook.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = APAddressBook.debug.xcconfig; sourceTree = ""; }; + 824B075084DD7B2086975E01C99A8E71 /* FLEXBundleShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBundleShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXBundleShortcuts.m; sourceTree = ""; }; + 825D49BC6B240F50F43E67FF152B389B /* FLEXKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeychain.h; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychain.h; sourceTree = ""; }; + 826C240F89F12A388895B0D117C16D17 /* JSCoreBom-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSCoreBom-umbrella.h"; sourceTree = ""; }; + 829EDCCB45CFE70D7982D882F3A3A270 /* FLEXExplorerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerViewController.h; path = Classes/ExplorerInterface/FLEXExplorerViewController.h; sourceTree = ""; }; + 829F18162BCBA0901A795006B5416C9F /* FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEX.h; path = Classes/FLEX.h; sourceTree = ""; }; + 830DC758CE89836B130B50F4DA7A0267 /* SCSiriWaveformView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCSiriWaveformView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8318C2B38798E8FE215D9A993123D5EB /* SWTableViewCell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SWTableViewCell.modulemap; sourceTree = ""; }; + 83AB997E8C7917EB2614452DF78C0CC5 /* DTSmartPagingScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSmartPagingScrollView.m; path = Core/Source/iOS/DTSmartPagingScrollView.m; sourceTree = ""; }; + 83AFD62602F74E1FD45D51BD91029581 /* FLEXTableLeftCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableLeftCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.h; sourceTree = ""; }; + 83B87A4EBBC71500DE2B17E3D980453D /* DTCoreTextFontCollection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFontCollection.m; path = Core/Source/DTCoreTextFontCollection.m; sourceTree = ""; }; + 83CB868F330B37B14B96745E2C471A8C /* NSHash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSHash-prefix.pch"; sourceTree = ""; }; + 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 83FEC47A8ED2EC9FCD00CA34985DF78E /* mztools.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mztools.c; path = Core/Source/Externals/minizip/mztools.c; sourceTree = ""; }; + 840AE85581A20188CA6E4094FFECE5F6 /* APAddressBook.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = APAddressBook.release.xcconfig; sourceTree = ""; }; + 8439AA86A9A9FFD86A905F99CBECA74E /* UIView+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTDebug.h"; path = "Core/Source/iOS/Debug/UIView+DTDebug.h"; sourceTree = ""; }; + 843ACAC657A1FB2457DE27692F7CA24E /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 8457027CAC5116155A2A074C731F1BF7 /* SBJson5Parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5Parser.m; path = Classes/SBJson5Parser.m; sourceTree = ""; }; + 847446884A02779B989DE12B1FC3231B /* FLEXExplorerToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXExplorerToolbar.m; path = Classes/Toolbar/FLEXExplorerToolbar.m; sourceTree = ""; }; + 8481B68C584827D9D31F0F29F25DC55D /* FLEXRuntimeKeyPath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeKeyPath.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.m; sourceTree = ""; }; + 84B902977DB9E3B7A7B8EF56A81395B0 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 84BF3403C55F449DA06123619999D56F /* icon-success@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-success@2x.png"; path = "Classes/Icons/icon-success@2x.png"; sourceTree = ""; }; + 84C3CFD8576EEEBA478FB51F6E98ED02 /* NSUserDefaults+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+FLEX.m"; path = "Classes/Utility/Categories/NSUserDefaults+FLEX.m"; sourceTree = ""; }; + 85263567B681E054FAD92A895D8F0D38 /* FLEXObjcRuntimeViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjcRuntimeViewController.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.h; sourceTree = ""; }; + 853B03AEC9C0186AB46D5DD7E0B979B5 /* NSURLRequest+SRWebSocketPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocketPrivate.h"; path = "SocketRocket/Internal/NSURLRequest+SRWebSocketPrivate.h"; sourceTree = ""; }; + 855E7F6EB9BB43EB04EF1FC9BE3022AA /* RMDateSelectionViewController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMDateSelectionViewController.debug.xcconfig; sourceTree = ""; }; + 85834310D6000948519601B683380C8F /* SRMutex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRMutex.h; path = SocketRocket/Internal/Utilities/SRMutex.h; sourceTree = ""; }; + 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SocketRocket.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 85A6DFB00BD20CF301588FB7BB392B00 /* JSCoreBom-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JSCoreBom-dummy.m"; sourceTree = ""; }; + 85ADC9628588250129D3A1C4C3D8D86F /* stream_configuration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stream_configuration.h; path = FreeStreamer/FreeStreamer/stream_configuration.h; sourceTree = ""; }; + 85CE0124C69F7A107EB352782D960FE3 /* FLEXWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWindow.h; path = Classes/ExplorerInterface/FLEXWindow.h; sourceTree = ""; }; + 85FCBB40F9F0845DCFBA2BEB0EB3ABCD /* APAddressBookContactsRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookContactsRoutine.m; path = Pod/Core/Private/Routine/APAddressBookContactsRoutine.m; sourceTree = ""; }; + 86240753E7962E9F10465FD25F3E6CDB /* Reachability.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Reachability.modulemap; sourceTree = ""; }; + 864E668F951E85DA3738F4050EDD229C /* DTDictationPlaceholderTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderTextAttachment.h; path = Core/Source/DTDictationPlaceholderTextAttachment.h; sourceTree = ""; }; + 8668AA3F5FA5E2A3AF98C2FD5393628A /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + 8692149DF8625E0159B298B0B6B79756 /* RMActionController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RMActionController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 86D8DDF2B354917508BD6EDDF22FA74C /* HMSegmentedControl.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HMSegmentedControl.debug.xcconfig; sourceTree = ""; }; + 86E0104D58C77AF87D1C6E2DA46B7AB7 /* FLEXCookiesViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCookiesViewController.m; path = Classes/GlobalStateExplorers/FLEXCookiesViewController.m; sourceTree = ""; }; + 86F5A67368B52F3CCE5514EC959939C8 /* SWLongPressGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWLongPressGestureRecognizer.h; path = SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.h; sourceTree = ""; }; + 86F7FD7AE851E367A3E14DBE048DF3C2 /* FLEXTableLeftCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableLeftCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableLeftCell.m; sourceTree = ""; }; + 8705F4256376C637C0F1C08CD4FE8543 /* FLEXCollectionContentSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXCollectionContentSection.m; path = Classes/ObjectExplorers/Sections/FLEXCollectionContentSection.m; sourceTree = ""; }; + 872E3E96E0A7CFF7AA820FEE38235A20 /* JSCoreBom.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JSCoreBom.modulemap; sourceTree = ""; }; + 8758E98311C100D695E9DD39354A339A /* APAddressBookFramework.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookFramework.h; path = Pod/Core/Public/APAddressBookFramework.h; sourceTree = ""; }; + 876D124428E5FC268ADB04B9E6452F80 /* OMGUserAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OMGUserAgent.h; path = Sources/OMGUserAgent.h; sourceTree = ""; }; + 87BB95649FFB1ED39E250EE83E6B906B /* FLEXNetworkObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkObserver.m; path = Classes/Network/PonyDebugger/FLEXNetworkObserver.m; sourceTree = ""; }; + 87C221D04B4FDF17CC3BAEFEB981EDCF /* SRRunLoopThread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRunLoopThread.h; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.h; sourceTree = ""; }; + 87D0D334915059C36ACCD818B3338593 /* SBJson5StreamTokeniser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamTokeniser.m; path = Classes/SBJson5StreamTokeniser.m; sourceTree = ""; }; + 87D5BA284A05EAAD16F15F4353EBEDDA /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + 87ED9DB52EE84B95117513538CA696DD /* DTProgressHUDWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTProgressHUDWindow.h; path = Core/Source/iOS/DTProgressHUD/DTProgressHUDWindow.h; sourceTree = ""; }; + 882EDA9A5A8843C5BE04FACEE1A3DCB8 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 885698E49A160D407D648C56B8846ECC /* FLEXMethodBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethodBase.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMethodBase.m; sourceTree = ""; }; + 88670882396D767655829854EBCAD183 /* JSCoreBom-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "JSCoreBom-Info.plist"; sourceTree = ""; }; + 8868D46A08F0580224637B452CA4C046 /* TWMessageBarManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TWMessageBarManager.h; path = Classes/TWMessageBarManager.h; sourceTree = ""; }; + 88CA8FCA2D23F7E49E7079AEAFFC3E97 /* NBPhoneNumber.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumber.h; path = libPhoneNumber/NBPhoneNumber.h; sourceTree = ""; }; + 8955D8E969B5B5B7F8641FBF17659951 /* FLEXTableContentViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableContentViewController.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.h; sourceTree = ""; }; + 8963C03F781CD740226B4C0D62CE9EC9 /* FLEXKeyValueTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyValueTableViewCell.m; path = Classes/Core/Views/Cells/FLEXKeyValueTableViewCell.m; sourceTree = ""; }; + 8974F428B5D3819A4909FFB30E8F05F9 /* INTULocationManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = INTULocationManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8A0763B9C564B7F5E6C2100F38944A1B /* DTASN1Serialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1Serialization.m; path = Core/Source/DTASN1/DTASN1Serialization.m; sourceTree = ""; }; + 8A3CF3E548B970691396E862DAA29435 /* DTASN1Serialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTASN1Serialization.h; path = Core/Source/DTASN1/DTASN1Serialization.h; sourceTree = ""; }; + 8A6E081BAB5799AC5C3DD61163309408 /* DTCoreText-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-umbrella.h"; sourceTree = ""; }; + 8A958617A8CD3606C2FF74CF5E029950 /* PHFComposeBarView_TextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView_TextView.m; path = Classes/PHFComposeBarView_TextView.m; sourceTree = ""; }; + 8AA1303674161F051805E5C9C852B9B6 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 8AE65349500846C2B404B374C73660CC /* id3_parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = id3_parser.h; path = FreeStreamer/FreeStreamer/id3_parser.h; sourceTree = ""; }; + 8B2D0A0353C2CCE7CD1DC9411443DE25 /* FLEXArgumentInputNotSupportedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNotSupportedView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNotSupportedView.h; sourceTree = ""; }; + 8B755B1E0B50296AB797F23D1AF8ED39 /* DHSmartScreenshot-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DHSmartScreenshot-prefix.pch"; sourceTree = ""; }; + 8B81179C7A3AA4EF4E976F4A58592B29 /* SRDelegateController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRDelegateController.h; path = SocketRocket/Internal/Delegate/SRDelegateController.h; sourceTree = ""; }; + 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B9E2AEC04E10AA97FF997ECFF5CD6D4 /* NSDictionary+ObjcRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+ObjcRuntime.h"; path = "Classes/Utility/Categories/NSDictionary+ObjcRuntime.h"; sourceTree = ""; }; + 8BA108B6718BC9F3FB1D42EE809DDCFA /* SRProxyConnect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRProxyConnect.h; path = SocketRocket/Internal/Proxy/SRProxyConnect.h; sourceTree = ""; }; + 8BD14B2748FE1EB3579FC5C8E93651C1 /* NSAttributedString+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+DTCoreText.h"; path = "Core/Source/NSAttributedString+DTCoreText.h"; sourceTree = ""; }; + 8BFFDC4CFEA9857C5258E6C04420C824 /* APImageExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APImageExtractor.m; path = Pod/Core/Private/Extractors/APImageExtractor.m; sourceTree = ""; }; + 8C0B9A1D654315BF8D8A4295890C6BFF /* IQAudioRecorderController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQAudioRecorderController-umbrella.h"; sourceTree = ""; }; + 8C0D98546863EF620AA6CEED451401EB /* FSAudioStream.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = FSAudioStream.mm; path = FreeStreamer/FreeStreamer/FSAudioStream.mm; sourceTree = ""; }; + 8C2550A829B2B0943787B2F4AE302D93 /* SRSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRSecurityPolicy.h; path = SocketRocket/SRSecurityPolicy.h; sourceTree = ""; }; + 8C8E86F472A46C731FBBFBED592677E2 /* DTAttributedTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedTextView.m; path = Core/Source/DTAttributedTextView.m; sourceTree = ""; }; + 8CE10D2E1AE3DFCA0B8911D9915BB2DE /* DTSQLiteFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSQLiteFunctions.h; path = Core/Source/DTSQLite/DTSQLiteFunctions.h; sourceTree = ""; }; + 8CE7F6CF30BC2F07DDDA58AECA7AEDC6 /* DTHorizontalRuleHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHorizontalRuleHTMLElement.h; path = Core/Source/DTHorizontalRuleHTMLElement.h; sourceTree = ""; }; + 8D21A7AC9BE7102C6328E403FA3D4C33 /* FLEXArgumentInputObjectView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputObjectView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputObjectView.h; sourceTree = ""; }; + 8D2E65BB3F37F69ACA895F3D383F0E5E /* APName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APName.h; path = Pod/Core/Public/Models/APName.h; sourceTree = ""; }; + 8D545569043D5C95CCAB3B6D62A307AA /* DTReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTReachability.m; path = Core/Source/DTReachability/DTReachability.m; sourceTree = ""; }; + 8DD2E0E45A9B885BC30408B0E15C68A3 /* flex_fishhook.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = flex_fishhook.h; path = Classes/Utility/Runtime/flex_fishhook.h; sourceTree = ""; }; + 8DE5E176A639CC2AF48F24483A63970C /* IQMessageDisplayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQMessageDisplayView.m; path = IQAudioRecorderController/IQMessageDisplayView.m; sourceTree = ""; }; + 8E1E9497569A271023757472504DCD0D /* DTHTMLParserNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserNode.h; path = Core/Source/DTHTMLParserNode.h; sourceTree = ""; }; + 8EA198FBC1F8F6AAD8E45550A0932E51 /* FLEXBlockShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBlockShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXBlockShortcuts.m; sourceTree = ""; }; + 8EC405483E81B71EB1FA313B49358438 /* OMGHTTPURLRQ-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OMGHTTPURLRQ-prefix.pch"; sourceTree = ""; }; + 8EEA43450F919333F6D075D8969E89F7 /* APSocialProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSocialProfile.m; path = Pod/Core/Public/Models/APSocialProfile.m; sourceTree = ""; }; + 8EED9ECD939DA773D74243745941896D /* AHKActionSheet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AHKActionSheet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8F3994C220306F4E686E4584E6FB5D24 /* NSUserDefaults+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+FLEX.h"; path = "Classes/Utility/Categories/NSUserDefaults+FLEX.h"; sourceTree = ""; }; + 8FA9775229EE18D4C9F94E9AC2438DC4 /* icon-success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-success.png"; path = "Classes/Icons/icon-success.png"; sourceTree = ""; }; + 8FBF1A4B7F35056901EA0A55239BEDCB /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkCurlLogger.h; path = Classes/Network/FLEXNetworkCurlLogger.h; sourceTree = ""; }; + 8FC960457455EE88A8BC3710E2722930 /* REMenuItemView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenuItemView.m; path = REMenu/REMenuItemView.m; sourceTree = ""; }; + 9009D85242271158797C8F97F7DDA1F7 /* FLEXKeychainQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeychainQuery.m; path = Classes/GlobalStateExplorers/Keychain/FLEXKeychainQuery.m; sourceTree = ""; }; + 90A961FFAB3DFCD4B09D4D9EFBD6B133 /* FLEXIvar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXIvar.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXIvar.h; sourceTree = ""; }; + 90F737AB4F7D4A361B0367283E41B608 /* JDStatusBarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarView.m; path = JDStatusBarNotification/JDStatusBarView.m; sourceTree = ""; }; + 913877BE66FEDFDFD3D033E497B3D274 /* OMGHTTPURLRQ-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OMGHTTPURLRQ-dummy.m"; sourceTree = ""; }; + 913ADC71F2C84BBA74807421AC657A44 /* AFHTTPRequestSerializer+OAuth2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "AFHTTPRequestSerializer+OAuth2.h"; path = "AFOAuth2Manager/AFHTTPRequestSerializer+OAuth2.h"; sourceTree = ""; }; + 916CBF3DB084F2C596AC9FFD287E71B1 /* DTLinkButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTLinkButton.h; path = Core/Source/DTLinkButton.h; sourceTree = ""; }; + 9198785C02A82C194B44D8BDC557B562 /* APAddressBookBaseRoutine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APAddressBookBaseRoutine.m; path = Pod/Core/Private/Routine/Base/APAddressBookBaseRoutine.m; sourceTree = ""; }; + 920DF64FD43BFD575866505677D0B0E1 /* DTCoreTextFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextFunctions.m; path = Core/Source/DTCoreTextFunctions.m; sourceTree = ""; }; + 922610CF77AAAECB147BBBAF4BE7F291 /* FLEXKBToolbarButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKBToolbarButton.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.m; sourceTree = ""; }; + 92ADE9BFB002C499E180ED865BCAE216 /* FLEXASLLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXASLLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.h; sourceTree = ""; }; + 92B7DC3E0A0E5FB544014D30086C4D06 /* UIView+DTActionHandlers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTActionHandlers.m"; path = "Core/Source/iOS/BlocksAdditions/UIView+DTActionHandlers.m"; sourceTree = ""; }; + 92E2C996320335786A3C04277835EDF6 /* REMenu-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "REMenu-dummy.m"; sourceTree = ""; }; + 92F00B26565FCEF251890B333F11F31B /* SBJson.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SBJson.release.xcconfig; sourceTree = ""; }; + 932AD74859FB72D6891FAD278005A963 /* REMenu.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = REMenu.m; path = REMenu/REMenu.m; sourceTree = ""; }; + 932B7410227349419CAD850A5D89A241 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayoutFrameAccessibilityElementGenerator.h; path = Core/Source/DTCoreTextLayoutFrameAccessibilityElementGenerator.h; sourceTree = ""; }; + 93622956403B6189AD7668DE1022747A /* FLEXArgumentInputNumberView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputNumberView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.m; sourceTree = ""; }; + 9375871C2646D8463E40AEACD7E5E7D5 /* FLEXArgumentInputStringView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStringView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.m; sourceTree = ""; }; + 9376ED9284688522C73AECD05997D4CA /* AFOAuth2Manager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFOAuth2Manager-prefix.pch"; sourceTree = ""; }; + 93ABA451D1E6B9B79212546A180AC502 /* NSMutableAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+HTML.h"; path = "Core/Source/NSMutableAttributedString+HTML.h"; sourceTree = ""; }; + 93D2F8E4657423219C9FC2C3E58E82D6 /* libPhoneNumber-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "libPhoneNumber-iOS-Info.plist"; sourceTree = ""; }; + 93DCFBEC541EF30BD69D340D771FB8A4 /* SRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRConstants.m; path = SocketRocket/Internal/SRConstants.m; sourceTree = ""; }; + 941451FA71507516A655684957AD2FAA /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 9459A1A91C896AC1A13FB9858F251D13 /* IQAudioRecorderController.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQAudioRecorderController.release.xcconfig; sourceTree = ""; }; + 948D5A76E28A213A30AEE1BAB05B3972 /* FLEXBlockDescription.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBlockDescription.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXBlockDescription.m; sourceTree = ""; }; + 94987AE4422A8989D9A9AFAC87347879 /* FLEXDBQueryRowCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDBQueryRowCell.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.h; sourceTree = ""; }; + 94FB05E3554341D9BDBF80BFFB64CC4C /* DTCoreTextGlyphRun.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextGlyphRun.m; path = Core/Source/DTCoreTextGlyphRun.m; sourceTree = ""; }; + 9500F15401782F0AD7E9D90B1BC3A6A4 /* NSScanner+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+HTML.h"; path = "Core/Source/NSScanner+HTML.h"; sourceTree = ""; }; + 9569B08F876C96D4902A0A2D291F6913 /* FLEXTabsViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTabsViewController.m; path = Classes/ExplorerInterface/Tabs/FLEXTabsViewController.m; sourceTree = ""; }; + 95DFFBEAB03A034C2D588E072509BD73 /* SRIOConsumerPool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRIOConsumerPool.m; path = SocketRocket/Internal/IOConsumer/SRIOConsumerPool.m; sourceTree = ""; }; + 961252D99237F9F7FC4BA72D1D71298D /* NSMapTable+FLEX_Subscripting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMapTable+FLEX_Subscripting.h"; path = "Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.h"; sourceTree = ""; }; + 9616EF631EAC59CC373E6CB2D8118245 /* TWMessageBarManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TWMessageBarManager.debug.xcconfig; sourceTree = ""; }; + 9655F5F788A842D7761AB1E851E9DA6E /* DTHTMLParserTextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParserTextNode.m; path = Core/Source/DTHTMLParserTextNode.m; sourceTree = ""; }; + 9699B6532774A4B9CB1275AF5E34692E /* DTCoreTextLayouter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextLayouter.h; path = Core/Source/DTCoreTextLayouter.h; sourceTree = ""; }; + 96A818790875679DED3E5455903D40B1 /* FLEXTableViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewController.m; path = Classes/Core/Controllers/FLEXTableViewController.m; sourceTree = ""; }; + 97B0B7CB4BA0450A2746A9484E98E199 /* APImageExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APImageExtractor.h; path = Pod/Core/Private/Extractors/APImageExtractor.h; sourceTree = ""; }; + 97BF1A0A417BDF39D7113368038DAD05 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 97CCB6F87734E95770695DB3A7CDEBAE /* OMGHTTPURLRQ-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "OMGHTTPURLRQ-Info.plist"; sourceTree = ""; }; + 98369B4EBE5A95AC2AC3E08F3422D808 /* NSScanner+DTScripting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSScanner+DTScripting.h"; path = "Core/Source/DTScripting/NSScanner+DTScripting.h"; sourceTree = ""; }; + 984AABA0F872FE91511EBC38C59858AD /* DAKeyboardControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DAKeyboardControl-umbrella.h"; sourceTree = ""; }; + 985E9BC261260914DAD0B8F80BE33208 /* FLEXManager+Networking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FLEXManager+Networking.m"; path = "Classes/Manager/FLEXManager+Networking.m"; sourceTree = ""; }; + 985FC9CAF96CDAE1F9C23CF1AD174998 /* DTHTMLAttributedStringBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLAttributedStringBuilder.h; path = Core/Source/DTHTMLAttributedStringBuilder.h; sourceTree = ""; }; + 9882C5446AB74F168A6D5C511D0A879D /* DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreText.h; path = Core/Source/DTCoreText.h; sourceTree = ""; }; + 98D5B3AAD59B94623B75CD2D169007B1 /* DTSidePanelController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelController.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelController.h; sourceTree = ""; }; + 98EBB14538DD0FE85D130344B8100035 /* FLEXNetworkRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkRecorder.h; path = Classes/Network/FLEXNetworkRecorder.h; sourceTree = ""; }; + 98F8D926C64EEF2675AEDE78D60284D4 /* FLEXObjcRuntimeViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjcRuntimeViewController.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXObjcRuntimeViewController.m; sourceTree = ""; }; + 9907F73C39F11E1AB908FC536359BEFD /* FLEXWindowManagerController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWindowManagerController.m; path = Classes/ExplorerInterface/FLEXWindowManagerController.m; sourceTree = ""; }; + 991D4CAD438FA9CF3AF46F90FA08C746 /* ResourceBundle-Resources-DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Resources-DTCoreText-Info.plist"; sourceTree = ""; }; + 992CDED25EE8F8CBC99D6F13DF495BDF /* APContact.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContact.h; path = Pod/Core/Public/Models/APContact.h; sourceTree = ""; }; + 9967C31E78896FBD9FA253FC36F29AB6 /* BBBadgeBarButtonItem-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BBBadgeBarButtonItem-dummy.m"; sourceTree = ""; }; + 999BC28F519908F3FA30DAC5E56AF9C6 /* UIImage+AHKAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+AHKAdditions.m"; path = "Classes/UIImage+AHKAdditions.m"; sourceTree = ""; }; + 99DBF2D6F202193E7472466E4FEA03A5 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 9A1194094130801E5FEB41991F8508B3 /* APAddressBook.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = APAddressBook.modulemap; sourceTree = ""; }; + 9A4544755D721FEC38459A9350F61BCC /* http_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = http_stream.h; path = FreeStreamer/FreeStreamer/http_stream.h; sourceTree = ""; }; + 9A618F7B1D93BB77C54A0E77C64F1380 /* TDOAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TDOAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A6236D80A8E5D4E0A2589E88509AF05 /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = zip.c; path = Core/Source/Externals/minizip/zip.c; sourceTree = ""; }; + 9A89ACA15A9583032D2D1CC9A768F04C /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 9A9A8DC2641992629867857CCBE7C8FD /* DTScriptVariable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTScriptVariable.m; path = Core/Source/DTScripting/DTScriptVariable.m; sourceTree = ""; }; + 9AAE8ABF7AFC8CF7FB8E8488ACAF19B7 /* NSString+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+FLEX.h"; path = "Classes/Utility/Categories/NSString+FLEX.h"; sourceTree = ""; }; + 9B0E71CCE2474FF2419CB9D5937AFBD4 /* RMDateSelectionViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMDateSelectionViewController-umbrella.h"; sourceTree = ""; }; + 9B193D05DEB4F68CE3CC5B5B9759994E /* INTUHeadingRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTUHeadingRequest.h; path = LocationManager/INTULocationManager/INTUHeadingRequest.h; sourceTree = ""; }; + 9B8B7B01871F482BA3E1BB0FEDE6B946 /* FLEXBookmarksViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXBookmarksViewController.h; path = Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.h; sourceTree = ""; }; + 9BE9CE29299A9C50CDA5B73F5EAE93BA /* APContactListBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactListBuilder.m; path = Pod/Core/Private/Builders/APContactListBuilder.m; sourceTree = ""; }; + 9BFEDF5F9DEF6A42DC44D995AFB20FDF /* FLEXHeapEnumerator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHeapEnumerator.h; path = Classes/Utility/FLEXHeapEnumerator.h; sourceTree = ""; }; + 9C62173126A39440F0EA6B28FD800FA4 /* NSString+DTURLEncoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTURLEncoding.m"; path = "Core/Source/NSString+DTURLEncoding.m"; sourceTree = ""; }; + 9C7A34502C89044200242B46513117F6 /* FLEXFileBrowserSearchOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserSearchOperation.m; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.m; sourceTree = ""; }; + 9C84C33E88A62F1645DD947A4DEC89D2 /* NBPhoneMetaData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBPhoneMetaData.m; path = libPhoneNumber/NBPhoneMetaData.m; sourceTree = ""; }; + 9CAD70ECA2E5BF6B2AE975E7A2D762F2 /* FLEXWebViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWebViewController.m; path = Classes/GlobalStateExplorers/FLEXWebViewController.m; sourceTree = ""; }; + 9CD6C14B9B046084DB69276AEE209010 /* FLEXRuntimeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeUtility.h; path = Classes/Utility/Runtime/FLEXRuntimeUtility.h; sourceTree = ""; }; + 9CD74A1DAD5101C3586A75FE90A65492 /* FreeStreamer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FreeStreamer-prefix.pch"; sourceTree = ""; }; + 9D280C2C35A22ABEBE9233E09B11774A /* DTReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTReachability.h; path = Core/Source/DTReachability/DTReachability.h; sourceTree = ""; }; + 9D651008D3EBD141D430610EFD5F3D93 /* FLEXColorPreviewSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXColorPreviewSection.m; path = Classes/ObjectExplorers/Sections/FLEXColorPreviewSection.m; sourceTree = ""; }; + 9D792A72AA43D32D354C2882BF4B3991 /* AFNetworking.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.release.xcconfig; sourceTree = ""; }; + 9D8EE72500054594724432F2603D11FE /* NSString+DTFormatNumbers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTFormatNumbers.h"; path = "Core/Source/NSString+DTFormatNumbers.h"; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E1E382507D3CCCB95D54E5DF8D42EB5 /* FLEX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FLEX-dummy.m"; sourceTree = ""; }; + 9E5D1CC0C6E3FEB893DAD59C4DFF94AE /* NSDictionary+DTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTError.h"; path = "Core/Source/NSDictionary+DTError.h"; sourceTree = ""; }; + 9E8ED0434B3B4BB6A5173C0C0DFB7BC6 /* INTUHeadingRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTUHeadingRequest.m; path = LocationManager/INTULocationManager/INTUHeadingRequest.m; sourceTree = ""; }; + 9F4D08CC88206F890D7ADD1414649143 /* NBPhoneMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneMetaData.h; path = libPhoneNumber/NBPhoneMetaData.h; sourceTree = ""; }; + 9F78D7F5E7E4B2149E95620BD8BA5BD0 /* IQCropSelectionBeginView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQCropSelectionBeginView.h; path = IQAudioRecorderController/IQCropSelectionBeginView.h; sourceTree = ""; }; + 9F977E418BBF3AB76482E21783B63480 /* APAddressBookContactsRoutine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookContactsRoutine.h; path = Pod/Core/Private/Routine/APAddressBookContactsRoutine.h; sourceTree = ""; }; + 9FAFD4B0E30270AD8F5EE83A90542651 /* FreeStreamer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FreeStreamer-umbrella.h"; sourceTree = ""; }; + 9FD45416F8E03498ADBA0589F9C1BB1A /* DTBase64Coding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBase64Coding.h; path = Core/Source/DTBase64Coding.h; sourceTree = ""; }; + 9FDCB0BA5C19425ABD16ADB58A7684F2 /* NSAttributedString+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+DTCoreText.m"; path = "Core/Source/NSAttributedString+DTCoreText.m"; sourceTree = ""; }; + 9FEE46C2089701F367345357C7926850 /* FLEXObjectExplorerFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXObjectExplorerFactory.h; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.h; sourceTree = ""; }; + A029E76D3E057B5238FC7B44E6655652 /* NSData+NSHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+NSHash.m"; path = "NSHash/NSData+NSHash.m"; sourceTree = ""; }; + A078AEB56CE337D16DC5D83A8F102AAF /* FLEXNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNavigationController.m; path = Classes/Core/Controllers/FLEXNavigationController.m; sourceTree = ""; }; + A0A4D131DB063279AE8AF52001C682FE /* UICKeyChainStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UICKeyChainStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0A73871AF8714EE242BF51E9139A290 /* FLEXAlert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXAlert.m; path = Classes/Utility/FLEXAlert.m; sourceTree = ""; }; + A0C5F0CB096C4113C5D9DF5C97D8AF1B /* DTCoreText-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DTCoreText-dummy.m"; sourceTree = ""; }; + A0D8BBFEF4650EE41D10DD5621D609E3 /* id3_parser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = id3_parser.cpp; path = FreeStreamer/FreeStreamer/id3_parser.cpp; sourceTree = ""; }; + A0F0549583368445B907B0AE11E4D869 /* WKWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "WKWebView+AFNetworking.m"; path = "UIKit+AFNetworking/WKWebView+AFNetworking.m"; sourceTree = ""; }; + A126CC73EE40996C66668D1B5E62E4AC /* FLEXKeyPathSearchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyPathSearchController.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyPathSearchController.h; sourceTree = ""; }; + A1301B2D249315F65E0F4C7E564CA701 /* SRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRError.m; path = SocketRocket/Internal/Utilities/SRError.m; sourceTree = ""; }; + A151B710913BAE9DA712D5A6DDE49B2B /* TWMessageBarManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TWMessageBarManager.m; path = Classes/TWMessageBarManager.m; sourceTree = ""; }; + A16DCFC8ED94D684AB7E0E7F99D39AA3 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Core/Source/Externals/minizip/ioapi.h; sourceTree = ""; }; + A200393A74D460711A5D1F8FB5AF3F46 /* DTAnchorHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnchorHTMLElement.m; path = Core/Source/DTAnchorHTMLElement.m; sourceTree = ""; }; + A23ABDEED49B2A76722858E7681731A3 /* NSString+NSHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+NSHash.h"; path = "NSHash/NSString+NSHash.h"; sourceTree = ""; }; + A275B3FF46072F2429F3833EE622944B /* FLEXTableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableView.h; path = Classes/Core/Views/FLEXTableView.h; sourceTree = ""; }; + A28E3C6B4333168A89C996E19EDD66E9 /* FLEXMultilineTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMultilineTableViewCell.h; path = Classes/Core/Views/Cells/FLEXMultilineTableViewCell.h; sourceTree = ""; }; + A2C4AF6FFD3F2F0BA3C60854C39B3083 /* DHSmartScreenshot-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DHSmartScreenshot-umbrella.h"; sourceTree = ""; }; + A30A07AFB6ADD8288720404260C1F9C9 /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + A335E35D10A8FD56B41025780EC383BF /* SRIOConsumer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRIOConsumer.h; path = SocketRocket/Internal/IOConsumer/SRIOConsumer.h; sourceTree = ""; }; + A3789D8821F34BD0F90A144EACBE80AD /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + A3BEC1CE1E102251B1C5E01712281D37 /* DTCoreGraphicsUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreGraphicsUtils.h; path = Core/Source/DTCoreGraphicsUtils.h; sourceTree = ""; }; + A3FA2EFE1F19A8A872F416F45C5094D2 /* CTLineUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CTLineUtils.h; path = Core/Source/CTLineUtils.h; sourceTree = ""; }; + A405C31027BE5E6C0D4F5B59EB003E1F /* FLEXGlobalsEntry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsEntry.h; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsEntry.h; sourceTree = ""; }; + A481273DB2AD555C6F3582186B412F00 /* ModuleConsole.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleConsole.m; path = JSCoreBom/Modules/ModuleConsole.m; sourceTree = ""; }; + A4932A83E75DC9B20FAC866F2F54CF75 /* FLEXScopeCarousel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXScopeCarousel.h; path = Classes/Core/Views/Carousel/FLEXScopeCarousel.h; sourceTree = ""; }; + A4DDBFBD5F4A8E6CAF9C584A49F90C99 /* SZTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SZTextView.m; path = Classes/SZTextView.m; sourceTree = ""; }; + A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4FD80B7B91FE718E3B53328FE2A307B /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + A54F7BC2E35257E3F8BE6421D84A6F1D /* DTActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActionSheet.h; path = Core/Source/iOS/BlocksAdditions/DTActionSheet.h; sourceTree = ""; }; + A55C3E4AC2C9B1B22E44DCBBA3057D94 /* DTScriptExpression.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTScriptExpression.m; path = Core/Source/DTScripting/DTScriptExpression.m; sourceTree = ""; }; + A5C21A56FC972264CC5BEA5D456C6A1F /* NSURLRequest+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURLRequest+SRWebSocket.m"; path = "SocketRocket/NSURLRequest+SRWebSocket.m"; sourceTree = ""; }; + A5D5F07971654DADC7EF3BD193544E28 /* SZTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SZTextView.debug.xcconfig; sourceTree = ""; }; + A5FCB3C8DDD57B43867FF3DF2FBE2EAE /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + A6413DDA236139B26117C3464491EA58 /* PHFComposeBarView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PHFComposeBarView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A6F6EE6682BBFEC5FC96F35E654180D4 /* CYRTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CYRTextView.release.xcconfig; sourceTree = ""; }; + A81D6CA3C0DFC4808A4C3E8E640E7289 /* NSHash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NSHash.modulemap; sourceTree = ""; }; + A86819D678568015DBBC8176970DB65E /* TTTAttributedLabel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTTAttributedLabel.release.xcconfig; sourceTree = ""; }; + A8765576F90E80003B46CEA76F7D213D /* DTFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-umbrella.h"; sourceTree = ""; }; + A88D87E7A9C2F3302A6AD3ECA8208B57 /* FLEXTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableViewCell.m; path = Classes/Core/Views/Cells/FLEXTableViewCell.m; sourceTree = ""; }; + A8BCFD5E47377B388608B928AAA6851E /* Pods-Jasonette-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Jasonette-Info.plist"; sourceTree = ""; }; + A9A2D17796D4B51F4288C78E33B8A279 /* DTCoreTextLayouter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCoreTextLayouter.m; path = Core/Source/DTCoreTextLayouter.m; sourceTree = ""; }; + A9FE92512FD716AA5A0C3A0FE9409758 /* FLEXGlobalsViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsViewController.h; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.h; sourceTree = ""; }; + AA2ECB971DE846CCF991C7EDBA7129A2 /* DTFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTFoundation-prefix.pch"; sourceTree = ""; }; + AA7336D004B72377475BE5BC6AD5D01D /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + AAA0ACA8346C2F70C6FE24388596295A /* SCSiriWaveformView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCSiriWaveformView-umbrella.h"; sourceTree = ""; }; + AAA63BE11F4DF10A6770E07D718EC12B /* IQ_FDWaveformView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQ_FDWaveformView.m; path = IQAudioRecorderController/FDWaveformView/IQ_FDWaveformView.m; sourceTree = ""; }; + AAD4BAC7D10DD584A62D1D9AAB216927 /* UIFont+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+DTCoreText.h"; path = "Core/Source/UIFont+DTCoreText.h"; sourceTree = ""; }; + AB59E684C614382EB2B58E04DBF59EC2 /* DTDictationPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTDictationPlaceholderView.h; path = Core/Source/DTDictationPlaceholderView.h; sourceTree = ""; }; + AB7ACC9C3E0F08D8AEDEBF846C9CF648 /* FLEXKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXKeyboardToolbar.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKeyboardToolbar.m; sourceTree = ""; }; + AB9AAA64DED9BF255A3C21489C4276C3 /* DHSmartScreenshot-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DHSmartScreenshot-Info.plist"; sourceTree = ""; }; + AB9CA071FECECAFFFC7EF580EA7621A4 /* DHSmartScreenshot-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DHSmartScreenshot-dummy.m"; sourceTree = ""; }; + AC149368963C9111C85B31A8BFA0D0F1 /* SCSiriWaveformView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SCSiriWaveformView-Info.plist"; sourceTree = ""; }; + AC3D4E3BBD78BD79F8E4F2D43C33CA84 /* DTCoreTextFontDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontDescriptor.h; path = Core/Source/DTCoreTextFontDescriptor.h; sourceTree = ""; }; + ACD6E43FFFA43D8CF3B335DCFFA4A647 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; }; + AD03D57815980BAA42895E9397CBE574 /* RMActionControllerTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMActionControllerTransition.m; path = RMActionController/Animations/RMActionControllerTransition.m; sourceTree = ""; }; + AD410AB9E074E04C7B35B20E15894787 /* NSString+Paragraphs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Paragraphs.m"; path = "Core/Source/NSString+Paragraphs.m"; sourceTree = ""; }; + AD6D6B6EDA06F1BC13B05982902F629F /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + ADA430B91ECE5215E7893505F1DF4A27 /* Reachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; + AE20E63F604D9EA99DE94ECB1524E27E /* FLEXPropertyAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXPropertyAttributes.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXPropertyAttributes.m; sourceTree = ""; }; + AE2B9BD95C6C32DC4037CFE587889BCE /* FHSViewSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSViewSnapshot.h; path = Classes/ViewHierarchy/SnapshotExplorer/FHSViewSnapshot.h; sourceTree = ""; }; + AE37BCB539361B2DD2FE1DE5F2D0A24D /* APRecordDate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APRecordDate.h; path = Pod/Core/Public/Models/APRecordDate.h; sourceTree = ""; }; + AE84BC9ECA8D2E112875A0111F42A574 /* FLEXManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Private.h"; path = "Classes/Manager/Private/FLEXManager+Private.h"; sourceTree = ""; }; + AF24C9E960A5906FC875C70A50DAA2F3 /* AHKActionSheetViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AHKActionSheetViewController.h; path = Classes/AHKActionSheetViewController.h; sourceTree = ""; }; + AFDF61A12DBBBCA507B66D64FDE70203 /* DTHTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLParser.m; path = Core/Source/DTHTMLParser/DTHTMLParser.m; sourceTree = ""; }; + AFE307446BA40FAA8D232062503641EE /* RMActionController.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RMActionController.debug.xcconfig; sourceTree = ""; }; + B0082E4A62AAB78F53B1F3B080BFA1A5 /* FLEXOSLogController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXOSLogController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXOSLogController.h; sourceTree = ""; }; + B01A39D50F8495D24464543E9D8DA8DA /* NSObject+DTRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+DTRuntime.m"; path = "Core/Source/Runtime/NSObject+DTRuntime.m"; sourceTree = ""; }; + B057F4C41EBAFA9B42881A17F2DD3774 /* libPhoneNumber-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "libPhoneNumber-iOS.release.xcconfig"; sourceTree = ""; }; + B0972BB3F03F7C0DE47D23CE8CCAEA9F /* IQAudioRecorderConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQAudioRecorderConstants.m; path = IQAudioRecorderController/IQAudioRecorderConstants.m; sourceTree = ""; }; + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B11128B58D190F573444835435BDC894 /* caching_stream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = caching_stream.cpp; path = FreeStreamer/FreeStreamer/caching_stream.cpp; sourceTree = ""; }; + B19630EE02699F33A1C33F4DAABD93AC /* FLEXGlobalsSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsSection.m; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.m; sourceTree = ""; }; + B243229E4D418674E2B6B5CB39265D98 /* AHKActionSheet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AHKActionSheet-umbrella.h"; sourceTree = ""; }; + B282B2E9D99E31B009D5406C2C77EBA5 /* FLEX-Categories.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEX-Categories.h"; path = "Classes/FLEX-Categories.h"; sourceTree = ""; }; + B2EF20CCFADBD27C45419CC4F251B4F5 /* SBJson5StreamParserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamParserState.h; path = Classes/SBJson5StreamParserState.h; sourceTree = ""; }; + B3B98D573855382F3E67C551A677E2F9 /* JSCoreBom.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSCoreBom.m; path = JSCoreBom/JSCoreBom.m; sourceTree = ""; }; + B3D29644270870E690E2D1B8A91AE5C6 /* file_output.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = file_output.h; path = FreeStreamer/FreeStreamer/file_output.h; sourceTree = ""; }; + B3E094966B96D7682983E52FF1D9FC12 /* FLEXHierarchyViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXHierarchyViewController.m; path = Classes/ViewHierarchy/FLEXHierarchyViewController.m; sourceTree = ""; }; + B3E4481204BF758ABB6E82F31A7D031F /* PHFComposeBarView_TextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView_TextView.h; path = Classes/PHFComposeBarView_TextView.h; sourceTree = ""; }; + B43499ECCE09C248382F2F4B182595DB /* FLEXTableContentViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableContentViewController.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableContentViewController.m; sourceTree = ""; }; + B4A2C00FB728B7163D08A2DC4AB69499 /* FLEXLiveObjectsController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXLiveObjectsController.h; path = Classes/GlobalStateExplorers/FLEXLiveObjectsController.h; sourceTree = ""; }; + B4C4227F50344FD84A072C1E9E5C8143 /* RMDateSelectionViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RMDateSelectionViewController-dummy.m"; sourceTree = ""; }; + B4E63B4CC0385E52B3CAFFFD31045632 /* UIImage+DHImageAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DHImageAdditions.h"; path = "Classes/UIImage+DHImageAdditions.h"; sourceTree = ""; }; + B51276CC3BCDADEFC6E5122339E99A9B /* FLEXManager+Extensibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXManager+Extensibility.h"; path = "Classes/Manager/FLEXManager+Extensibility.h"; sourceTree = ""; }; + B5806D2004242B9EC2411B0A46C3E3F6 /* DTColorFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTColorFunctions.h; path = Core/Source/DTColorFunctions.h; sourceTree = ""; }; + B5F402A3EC0E08E72B97A1F54135B14E /* NSString+DTUTI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTUTI.h"; path = "Core/Source/DTUTI/NSString+DTUTI.h"; sourceTree = ""; }; + B61EB1BF1F93AEC05E56E361D592FDEA /* FLEXBookmarkManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBookmarkManager.m; path = Classes/ExplorerInterface/Bookmarks/FLEXBookmarkManager.m; sourceTree = ""; }; + B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + B63B33A36D085205B2D8FC2C9A2361F5 /* SZTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SZTextView-umbrella.h"; sourceTree = ""; }; + B63BB6CF7E8F7A2D8AEB933715E23007 /* FLEXTableColumnHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTableColumnHeader.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXTableColumnHeader.m; sourceTree = ""; }; + B66AD122EF9D9E2682C8A06E891C4435 /* TDOAuth.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TDOAuth.m; sourceTree = ""; }; + B6AE0FFDA61D56E9E1C086AA3F791020 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + B6AF341D38A8229D9B10A055EBB3423F /* DTCSSStylesheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCSSStylesheet.m; path = Core/Source/DTCSSStylesheet.m; sourceTree = ""; }; + B6D6C475117C400880DD881902A8523D /* DAKeyboardControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DAKeyboardControl.h; path = DAKeyboardControl/DAKeyboardControl.h; sourceTree = ""; }; + B6F16B82469320F5EBBCE7628D936C72 /* JDStatusBarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarView.h; path = JDStatusBarNotification/JDStatusBarView.h; sourceTree = ""; }; + B76B864CE2E4DDF78240DC4395022547 /* icon-info@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-info@2x.png"; path = "Classes/Icons/icon-info@2x.png"; sourceTree = ""; }; + B78ACB34B187632A9B327A7B5E3E8684 /* FLEXWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXWindow.m; path = Classes/ExplorerInterface/FLEXWindow.m; sourceTree = ""; }; + B7C64F98D10BC3B37ADE22C38C156BCC /* FLEXSystemLogViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogViewController.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogViewController.h; sourceTree = ""; }; + B8A3ACBB108276AE48D8FAC4E5FB7DEC /* SWTableViewCell.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWTableViewCell.release.xcconfig; sourceTree = ""; }; + B8A8F895EC547141C86D53709922B878 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Core/Source/Externals/minizip/zip.h; sourceTree = ""; }; + B8CED6E31EC14BA48D8AF4C7BB45C765 /* DTObjectTextAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTObjectTextAttachment.h; path = Core/Source/DTObjectTextAttachment.h; sourceTree = ""; }; + B8D000E2A956739B492114C3A77D8AB2 /* PHFDelegateChain-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PHFDelegateChain-dummy.m"; sourceTree = ""; }; + B93418D2EB8FBC25843178CDD2EA4071 /* DTExtendedFileAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTExtendedFileAttributes.h; path = Core/Source/DTExtendedFileAttributes.h; sourceTree = ""; }; + B9377FE85D82A8D83AFD602D8D028308 /* DTCoreTextFontCollection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextFontCollection.h; path = Core/Source/DTCoreTextFontCollection.h; sourceTree = ""; }; + B9487941140447262E6C10853693763C /* NSURL+DTAWS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAWS.h"; path = "Core/Source/DTAWS/NSURL+DTAWS.h"; sourceTree = ""; }; + B9573285DD1A79DB35C70648E4CE5605 /* JDStatusBarStyle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarStyle.h; path = JDStatusBarNotification/JDStatusBarStyle.h; sourceTree = ""; }; + B9CF95B2F91AF0B258930EFE55FC81CF /* DTHTMLAttributedStringBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTHTMLAttributedStringBuilder.m; path = Core/Source/DTHTMLAttributedStringBuilder.m; sourceTree = ""; }; + BA2DBF0D876E9A031845C2D180EEF762 /* NSGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NSGIF.h; path = NSGIF/NSGIF.h; sourceTree = ""; }; + BA4E1B1555ADEC788BABEE8D174CA5BC /* NSGIF.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NSGIF.release.xcconfig; sourceTree = ""; }; + BAED4BDAC4035A44527D8D78FF1EFC17 /* APName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APName.m; path = Pod/Core/Public/Models/APName.m; sourceTree = ""; }; + BBBDF2B5A3F8830A7188D58FB5A3AC71 /* DHSmartScreenshot.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DHSmartScreenshot.release.xcconfig; sourceTree = ""; }; + BBC1C069FD824BE54D5199C3AC55CBDB /* FLEXArgumentInputView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.m; sourceTree = ""; }; + BBCE61B8CC60A2E0071F587F49418E75 /* UIView+RMActionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+RMActionController.m"; path = "RMActionController/Categories/UIView+RMActionController.m"; sourceTree = ""; }; + BBDA18E29EF0A3F30B570BCA5262D724 /* APContactDataExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactDataExtractor.h; path = Pod/Core/Private/Extractors/APContactDataExtractor.h; sourceTree = ""; }; + BC0635F3CD4A800D9D2A528F54F29B24 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + BC1A55EBA3950DD1A9A807599D4DA6A0 /* SWFrameButton-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWFrameButton-umbrella.h"; sourceTree = ""; }; + BC29A563B34AC2D874014EB53196569C /* ModuleXMLHttpRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ModuleXMLHttpRequest.m; path = JSCoreBom/Modules/ModuleXMLHttpRequest.m; sourceTree = ""; }; + BC6D752C122D7E3060C2040C7F0297D7 /* DAKeyboardControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DAKeyboardControl-prefix.pch"; sourceTree = ""; }; + BC9494E3163598C985E96DBA0BE99C84 /* FreeStreamer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FreeStreamer-dummy.m"; sourceTree = ""; }; + BC98EF5CF6C6B01E111ECA3D3987F0B3 /* TDOAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TDOAuth-Info.plist"; sourceTree = ""; }; + BCC3E2FE64EB5E2A99B3E34B49AF8854 /* DTListItemHTMLElement.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTListItemHTMLElement.m; path = Core/Source/DTListItemHTMLElement.m; sourceTree = ""; }; + BCDA2D026233177144F2A60861DDAC57 /* REMenu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenu.h; path = REMenu/REMenu.h; sourceTree = ""; }; + BCE21FAA362DAF601E7F4A5C42321FD2 /* NSNumber+RomanNumerals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+RomanNumerals.h"; path = "Core/Source/NSNumber+RomanNumerals.h"; sourceTree = ""; }; + BCFE68EDD4C560B9F975D526785A13B5 /* DTBlockFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTBlockFunctions.m; path = Core/Source/DTBlockFunctions.m; sourceTree = ""; }; + BD589F34C17E1DD9DC3928C2541C0015 /* RMScrollableGroupedAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMScrollableGroupedAction.h; path = "RMActionController/Grouping Actions/RMScrollableGroupedAction.h"; sourceTree = ""; }; + BD7CB7A6540150E722BC2B318E0DE6B1 /* SBJson5StreamParserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson5StreamParserState.m; path = Classes/SBJson5StreamParserState.m; sourceTree = ""; }; + BD9F61655FA4F4176034E767F96CADF4 /* DTHTMLParserTextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParserTextNode.h; path = Core/Source/DTHTMLParserTextNode.h; sourceTree = ""; }; + BDFB9FCEDBD59EC2964ED0F1122BC2E9 /* NSString+DTUTI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+DTUTI.m"; path = "Core/Source/DTUTI/NSString+DTUTI.m"; sourceTree = ""; }; + BE15839BC2D5EAD9116C869010B668CB /* PHFComposeBarView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PHFComposeBarView.debug.xcconfig; sourceTree = ""; }; + BE167669194E9CBE6BFEC4FA2B5BEAEE /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + BE2B695FC8C2AAF893FAB20C0E7DC37E /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + BE460AC55A863064991F4E3D27F57847 /* FLEXSingleRowSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSingleRowSection.h; path = Classes/Core/FLEXSingleRowSection.h; sourceTree = ""; }; + BE6892859C1B618A038EAB1DCA6A9A05 /* UICKeyChainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UICKeyChainStore.h; path = Lib/UICKeyChainStore/UICKeyChainStore.h; sourceTree = ""; }; + BE6998E73DE6CCC443E50B0E6B87858F /* FHSViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSViewController.h; path = Classes/ViewHierarchy/SnapshotExplorer/FHSViewController.h; sourceTree = ""; }; + BE9017373D22329B32E123C58BD7B3D3 /* FLEXASLLogController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXASLLogController.m; path = Classes/GlobalStateExplorers/SystemLog/FLEXASLLogController.m; sourceTree = ""; }; + BEB53BE2CC04102C40C7CF499E58E623 /* SBJson5StreamTokeniser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5StreamTokeniser.h; path = Classes/SBJson5StreamTokeniser.h; sourceTree = ""; }; + BF271A833D9154250C25455F300192A0 /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + BF5B4B34263B35EECDD188E323B121C5 /* JSCoreBom.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JSCoreBom.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFE65360E5B94EECA2D65E630CC70699 /* Pods-Jasonette.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Jasonette.modulemap"; sourceTree = ""; }; + C00B5AAA16652AD7934BF5C6B45F2734 /* Reachability-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Reachability-Info.plist"; sourceTree = ""; }; + C014D4FB933AD1BA473FFA4FF3659328 /* AHKActionSheet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AHKActionSheet-Info.plist"; sourceTree = ""; }; + C078944FA0AE9242629691469C03152A /* libPhoneNumber-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "libPhoneNumber-iOS.modulemap"; sourceTree = ""; }; + C09C1482BDB18FDC9DAFE74B051DF049 /* default.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = default.css; path = Core/Source/default.css; sourceTree = ""; }; + C0AEA2B795CFEC399872E3506E759F80 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + C0CE365568F87FA6800F1B01C4FD68B9 /* FLEXDefaultsContentSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultsContentSection.h; path = Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.h; sourceTree = ""; }; + C1008A5A0662C4D06CA70EBA68AE2514 /* FLEXNetworkTransactionCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkTransactionCell.h; path = Classes/Network/FLEXNetworkTransactionCell.h; sourceTree = ""; }; + C16BA25512537A84BDDA5915842FF8B1 /* APRelatedPerson.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APRelatedPerson.h; path = Pod/Core/Public/Models/APRelatedPerson.h; sourceTree = ""; }; + C197CBE834200C6AD94C29475727C929 /* FLEXArgumentInputStructView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputStructView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStructView.m; sourceTree = ""; }; + C1ED6745CD7AE2716ECE8078AF203451 /* APRelatedPerson.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APRelatedPerson.m; path = Pod/Core/Public/Models/APRelatedPerson.m; sourceTree = ""; }; + C1F55DFC6740059BD39992FD3D909909 /* DTCSSStylesheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCSSStylesheet.h; path = Core/Source/DTCSSStylesheet.h; sourceTree = ""; }; + C276B87C7A6E53EA55D219B5B00A6CD8 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; + C277CFF17E7E1A99F3AE60B375CDFD34 /* NSDictionary+DTCoreText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+DTCoreText.h"; path = "Core/Source/NSDictionary+DTCoreText.h"; sourceTree = ""; }; + C27F8AB956CBFB659BA8FD6B5AD93FF5 /* SBJson-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SBJson-Info.plist"; sourceTree = ""; }; + C2904B61517BCA03652297C352FB6190 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + C2B98ACCC34D45042EB62E4CA407F81C /* JDStatusBarNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JDStatusBarNotification.h; path = JDStatusBarNotification/JDStatusBarNotification.h; sourceTree = ""; }; + C2FCBC6964CFE0FF0AFC851FE7D04C9E /* SZTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SZTextView-dummy.m"; sourceTree = ""; }; + C3D4EC58F1A9FE8E9785D29CCAA3A53B /* DTSidePanelPanGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelPanGestureRecognizer.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelPanGestureRecognizer.m; sourceTree = ""; }; + C44EEB71815D0C8504E6FB5207215EEF /* NSData+DTCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+DTCrypto.h"; path = "Core/Source/NSData+DTCrypto.h"; sourceTree = ""; }; + C47DA3C4AA565ACDBCEF15825F9D863F /* RMDateSelectionViewController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RMDateSelectionViewController-Info.plist"; sourceTree = ""; }; + C4C1D06BCBA925A5DA67CD403C0082C1 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C511F737CFD57D70D08A651CA53C6810 /* FLEXSQLiteDatabaseManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSQLiteDatabaseManager.h; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLiteDatabaseManager.h; sourceTree = ""; }; + C51567D6FEE88FFF0AFC4A967243CDAB /* JDStatusBarNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JDStatusBarNotification.release.xcconfig; sourceTree = ""; }; + C51C9CB8B11EC2D118F38F90A8D4EAA6 /* FLEXMethodCallingViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMethodCallingViewController.m; path = Classes/Editing/FLEXMethodCallingViewController.m; sourceTree = ""; }; + C651F2C8E9C9E7074009CA2F8FC52108 /* DTBlockFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTBlockFunctions.h; path = Core/Source/DTBlockFunctions.h; sourceTree = ""; }; + C6520E57CB1C03329BCEA4E564BDE618 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = ""; }; + C668F4E70971F1C1AA1A7CA5EF4194AF /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + C6D1BCF118EFD3A3EB9B12148F1D57D2 /* Pods-Jasonette-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Jasonette-frameworks.sh"; sourceTree = ""; }; + C712905EB1D700C6499464A95FB4B407 /* NSArray+DTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+DTError.m"; path = "Core/Source/NSArray+DTError.m"; sourceTree = ""; }; + C760F67E19D81F6F08F7B9491AB15736 /* IQCropSelectionEndView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQCropSelectionEndView.m; path = IQAudioRecorderController/IQCropSelectionEndView.m; sourceTree = ""; }; + C7703B254C1B1B74DF8050DEAEF8520C /* REMenu.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = REMenu.release.xcconfig; sourceTree = ""; }; + C770563EB2DC08C78FCB30DDA92152F3 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + C786728F5D47D4544B6904BD8452A997 /* FLEXArgumentInputColorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputColorView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.h; sourceTree = ""; }; + C8770241032825499CED42AC6C83136F /* Pods_Jasonette.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Jasonette.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C8BC444F95706BE203EE30A7A7773DA3 /* FLEXLiveObjectsController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXLiveObjectsController.m; path = Classes/GlobalStateExplorers/FLEXLiveObjectsController.m; sourceTree = ""; }; + C8C6176141594729919C7035BAED9E55 /* DTPieProgressIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTPieProgressIndicator.h; path = Core/Source/iOS/DTPieProgressIndicator.h; sourceTree = ""; }; + C8F42069BC534A3B5355828D37EC3E05 /* UIApplication+DTNetworkActivity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+DTNetworkActivity.m"; path = "Core/Source/iOS/UIApplication+DTNetworkActivity.m"; sourceTree = ""; }; + C908103F4D9BB7065F7F03A5D4AA71A3 /* NSDictionary+DTCoreText.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+DTCoreText.m"; path = "Core/Source/NSDictionary+DTCoreText.m"; sourceTree = ""; }; + C9397011602308627820692C2118D220 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AddressBook.framework; sourceTree = DEVELOPER_DIR; }; + C99F47677CB345749D8DCB7348783A28 /* DTZipArchivePKZip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTZipArchivePKZip.h; path = Core/Source/DTZipArchive/DTZipArchivePKZip.h; sourceTree = ""; }; + C9D62E0140E803C34055680C2A10DF4C /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; + C9FE2109ADEEC05B64D5153967C7C234 /* AHKActionSheet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AHKActionSheet.m; path = Classes/AHKActionSheet.m; sourceTree = ""; }; + CA50D68D819C329FA24F1E4355DB6F4F /* RMDateSelectionViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMDateSelectionViewController-prefix.pch"; sourceTree = ""; }; + CA5B31A5D30958729E4D920CE3896A9C /* SRHTTPConnectMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRHTTPConnectMessage.h; path = SocketRocket/Internal/Utilities/SRHTTPConnectMessage.h; sourceTree = ""; }; + CA8DD0CDB832F6F7776379B505DBB905 /* DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DHSmartScreenshot.h; path = Classes/DHSmartScreenshot.h; sourceTree = ""; }; + CABBD5035ACE5C4F86E9656A8E6491AA /* APContactDate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactDate.m; path = Pod/Core/Public/Models/APContactDate.m; sourceTree = ""; }; + CBC6484CC053F725BD5FDE40FF3A429A /* PHFDelegateChain-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PHFDelegateChain-Info.plist"; sourceTree = ""; }; + CBDDAB73759118F9499130F54C284DD7 /* DTAttributedTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedTextView.h; path = Core/Source/DTAttributedTextView.h; sourceTree = ""; }; + CBEAC381DFAA52662B80C32DA6CDA520 /* OMGHTTPURLRQ.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OMGHTTPURLRQ.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC357CD91F53DD2907DA100FDDE5732F /* FLEXClassBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXClassBuilder.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXClassBuilder.h; sourceTree = ""; }; + CCD27C18259F8C10EB0C2AB92C9F51B1 /* JDStatusBarNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarNotification.m; path = JDStatusBarNotification/JDStatusBarNotification.m; sourceTree = ""; }; + CCE12A42CA42017C26E5D0A1A1712853 /* PHFDelegateChain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = PHFDelegateChain.m; sourceTree = ""; }; + CD0DCDDA8AA6EFC94A6C2D48CA0108F1 /* NBAsYouTypeFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBAsYouTypeFormatter.h; path = libPhoneNumber/NBAsYouTypeFormatter.h; sourceTree = ""; }; + CD37D9C9CF892992D2AB49344EFD4EFB /* NSString+CSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSS.h"; path = "Core/Source/NSString+CSS.h"; sourceTree = ""; }; + CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + CD6187BBCBB963C457A727F887E0BBDF /* FLEXGlobalsSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXGlobalsSection.h; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsSection.h; sourceTree = ""; }; + CD7CEBE51E4FDFC4085E4A53DAD0D78D /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + CD92D7BCB8CB60723E64EF8F4E5B0C3D /* UIGestureRecognizer+Blocks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIGestureRecognizer+Blocks.h"; path = "Classes/Utility/Categories/UIGestureRecognizer+Blocks.h"; sourceTree = ""; }; + CD9B700570B77718178E6266E1334F5A /* NSMapTable+FLEX_Subscripting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMapTable+FLEX_Subscripting.m"; path = "Classes/Utility/Categories/NSMapTable+FLEX_Subscripting.m"; sourceTree = ""; }; + CDF7C72EA9CB531D5A030BA35C4BD4BE /* FLEXCookiesViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCookiesViewController.h; path = Classes/GlobalStateExplorers/FLEXCookiesViewController.h; sourceTree = ""; }; + CE2CB95301FF9C80DCE9CF12348C0370 /* FLEXNetworkTransactionCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionCell.m; path = Classes/Network/FLEXNetworkTransactionCell.m; sourceTree = ""; }; + CE3405355F40ABFFBE76ED58DA6C203A /* SWTableViewCell.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SWTableViewCell.debug.xcconfig; sourceTree = ""; }; + CE7C303C6A6A464A66E5A2BECBBD92C7 /* PHFDelegateChain-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFDelegateChain-prefix.pch"; sourceTree = ""; }; + CE8B11965B7DA7048A0C7D79B2D06D85 /* APAddressBookExternalChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookExternalChangeDelegate.h; path = Pod/Core/Private/Routine/APAddressBookExternalChangeDelegate.h; sourceTree = ""; }; + CEC83ED826113467293C5BD5A18645E5 /* UIColor+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+DTDebug.m"; path = "Core/Source/iOS/Debug/UIColor+DTDebug.m"; sourceTree = ""; }; + CECA98FD1C747556A222AAC291B1C192 /* DTCoreText-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DTCoreText-prefix.pch"; sourceTree = ""; }; + CF3266BD9F18685BD95A1A2233346E35 /* SRRunLoopThread.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRRunLoopThread.m; path = SocketRocket/Internal/RunLoop/SRRunLoopThread.m; sourceTree = ""; }; + CF4D8039A32331A7BD1B556333E3A32F /* NSTimer+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSTimer+FLEX.h"; path = "Classes/Utility/Categories/NSTimer+FLEX.h"; sourceTree = ""; }; + CFBC9747BE835EBC03AC0A2CE5C8B54D /* JDStatusBarStyle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarStyle.m; path = JDStatusBarNotification/JDStatusBarStyle.m; sourceTree = ""; }; + CFE40888131E8FB124445AA8F8D3143E /* FLEXProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXProperty.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProperty.m; sourceTree = ""; }; + CFECFCD26DAD6FEABAD9C3672DD31B67 /* TTTAttributedLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTTAttributedLabel-dummy.m"; sourceTree = ""; }; + CFF5F39168B54BE289D5AD6BD4728D7F /* DTAnimatedGIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAnimatedGIF.m; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.m; sourceTree = ""; }; + D00D7402CD29F413E5E9966BA33201A9 /* APContactBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactBuilder.m; path = Pod/Core/Private/Builders/APContactBuilder.m; sourceTree = ""; }; + D04CCE7F728734F5A61362C7B854D40B /* FLEXArgumentInputStringView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputStringView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputStringView.h; sourceTree = ""; }; + D06F6DB304441E650D6327A91D07F337 /* UIFont+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIFont+FLEX.m"; path = "Classes/Utility/Categories/UIFont+FLEX.m"; sourceTree = ""; }; + D0759318A70841227FF8E517A7B7E6A4 /* FLEXShortcutsFactory+Defaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FLEXShortcutsFactory+Defaults.m"; path = "Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.m"; sourceTree = ""; }; + D0CBD9DCBC0D191EA10430FF06E3ABEB /* RMActionController+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "RMActionController+Private.h"; path = "RMActionController/Private/RMActionController+Private.h"; sourceTree = ""; }; + D11780699A57C0A4CDBA8AC4E889CACE /* INTULocationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "INTULocationManager+Internal.h"; path = "LocationManager/INTULocationManager/INTULocationManager+Internal.h"; sourceTree = ""; }; + D126097C2C01A62945DAB5FD692100F0 /* AFOAuth2Manager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFOAuth2Manager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D13952404623207BEB9BA74A1056BBBE /* AFOAuth2Manager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFOAuth2Manager-umbrella.h"; sourceTree = ""; }; + D15DFDC5386D98654AE7BB758DA9B45C /* IQAudioRecorderController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQAudioRecorderController-dummy.m"; sourceTree = ""; }; + D1B7FC692D99B52D25304729695630E6 /* FLEXFieldEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFieldEditorViewController.h; path = Classes/Editing/FLEXFieldEditorViewController.h; sourceTree = ""; }; + D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DTFoundation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D24FA8ABF2E44647DBD458FA263C1144 /* JDStatusBarLayoutMarginHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JDStatusBarLayoutMarginHelper.m; path = JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m; sourceTree = ""; }; + D25A2ED5FA01EC26D4D1F79220A38E5E /* DTColor+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DTColor+Compatibility.h"; path = "Core/Source/DTColor+Compatibility.h"; sourceTree = ""; }; + D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + D2701F1479D89B35D4EF27F1D5F17957 /* NBAsYouTypeFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBAsYouTypeFormatter.m; path = libPhoneNumber/NBAsYouTypeFormatter.m; sourceTree = ""; }; + D277A218EA6BE3EB94A0A6EE19695567 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + D284697EB6E1A932E9BD70ED3DD99B2C /* APAddressBookRefWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APAddressBookRefWrapper.h; path = Pod/Core/Private/Wrapper/APAddressBookRefWrapper.h; sourceTree = ""; }; + D2A1CAFBC36BF8FD0F2BD7DE2B585555 /* DTCoreTextGlyphRun.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCoreTextGlyphRun.h; path = Core/Source/DTCoreTextGlyphRun.h; sourceTree = ""; }; + D2AB27CB0359A5D3920790067959B8DC /* UIImage+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DTFoundation.m"; path = "Core/Source/iOS/UIImage+DTFoundation.m"; sourceTree = ""; }; + D2C1F4554D039B132F8A326693D9B776 /* DHSmartScreenshot.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DHSmartScreenshot.debug.xcconfig; sourceTree = ""; }; + D2C237BE97A334906FEBAA99D5E2EA88 /* SRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRConstants.h; path = SocketRocket/Internal/SRConstants.h; sourceTree = ""; }; + D2FE70430FEF475FEB2DCA64570429FD /* FLEXRuntimeKeyPath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeKeyPath.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.h; sourceTree = ""; }; + D39ECF712982709EA77A053E682DDB14 /* UIViewController+DTSidePanelController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+DTSidePanelController.m"; path = "Core/Source/iOS/DTSidePanel/UIViewController+DTSidePanelController.m"; sourceTree = ""; }; + D3C978A87B64833A5E675182FE6BEE8A /* APSocialServiceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APSocialServiceHelper.h; path = Pod/Core/Private/Helpers/APSocialServiceHelper.h; sourceTree = ""; }; + D3EE90CC5E943A0359E15E2EDDE3B192 /* UIView+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DTFoundation.h"; path = "Core/Source/iOS/UIView+DTFoundation.h"; sourceTree = ""; }; + D434FF7175C54B54FF15E273354A77D8 /* TTTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TTTAttributedLabel.m; path = TTTAttributedLabel/TTTAttributedLabel.m; sourceTree = ""; }; + D4402A0B9DCAC4BCFFE87683D1E19BA2 /* TTTAttributedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TTTAttributedLabel.modulemap; sourceTree = ""; }; + D480A2B043DA39A184507E18ABEF3FCC /* REMenu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = REMenu.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4E093FB08B0AC7CD5926C8926D1B226 /* HMSegmentedControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HMSegmentedControl-dummy.m"; sourceTree = ""; }; + D4FD35F4EB0C679F851EFA1D6DE349D6 /* RECommonFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RECommonFunctions.m; path = REMenu/RECommonFunctions.m; sourceTree = ""; }; + D5106286979560A74BE343A60D63E7B6 /* FLEXNetworkTransactionDetailController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXNetworkTransactionDetailController.m; path = Classes/Network/FLEXNetworkTransactionDetailController.m; sourceTree = ""; }; + D523AB3DCA3AE00AD356B5E0C1F765E6 /* SBJson-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SBJson-umbrella.h"; sourceTree = ""; }; + D5C15A832FF7CB115CDB69CBE663F3F4 /* HMSegmentedControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HMSegmentedControl.m; path = HMSegmentedControl/HMSegmentedControl.m; sourceTree = ""; }; + D5D0BB9A8025619E8CA73FAA1FB512A2 /* FLEXSystemLogCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSystemLogCell.h; path = Classes/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.h; sourceTree = ""; }; + D600794335416E75E059ACC663C167F4 /* DTCoreText.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.release.xcconfig; sourceTree = ""; }; + D63E6DFF04A9AE0573843399421C8AF7 /* AFOAuth2Manager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFOAuth2Manager.release.xcconfig; sourceTree = ""; }; + D65AA14353D4FE1763A91C03AD639988 /* PHFComposeBarView_Button.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PHFComposeBarView_Button.m; path = Classes/PHFComposeBarView_Button.m; sourceTree = ""; }; + D6ADD5E8CD8512DE3C13DD2C20BAB8F1 /* DTSidePanelController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelController.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelController.m; sourceTree = ""; }; + D6B3E4098DC1CC326D6F976E2045C94A /* Reachability-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Reachability-prefix.pch"; sourceTree = ""; }; + D6C57D13EC200064BE93BD0067A3CA7E /* AHKActionSheetViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AHKActionSheetViewController.m; path = Classes/AHKActionSheetViewController.m; sourceTree = ""; }; + D705B22257B9E05D00A4C9D1490E2C10 /* PHFComposeBarView_Button.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PHFComposeBarView_Button.h; path = Classes/PHFComposeBarView_Button.h; sourceTree = ""; }; + D70C6653EF654D0152245BA342543B14 /* DTLinkButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTLinkButton.m; path = Core/Source/DTLinkButton.m; sourceTree = ""; }; + D74D727ACC34D033964C90A4D2DE754B /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + D757ECF8B81D69D734326F5BEC005AA1 /* FLEXClassShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXClassShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.m; sourceTree = ""; }; + D7A30B7BAFABF8F34D6B7FB90BF3F834 /* RMAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMAction.h; path = RMActionController/Actions/RMAction.h; sourceTree = ""; }; + D8325B8F92F190DC3D058746E45C00C3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + D877C91D516279D1AD44282E048FCF92 /* NSAttributedString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributedString+HTML.h"; path = "Core/Source/NSAttributedString+HTML.h"; sourceTree = ""; }; + D88295CE802CA9E503C93F8E9B579F47 /* NSArray+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+FLEX.h"; path = "Classes/Utility/Categories/NSArray+FLEX.h"; sourceTree = ""; }; + D8937CB963F5AF6E07D137DC9829F020 /* DTFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DTFoundation.modulemap; sourceTree = ""; }; + D8C5DE28D2CA96BCB734FEFD89300D55 /* FLEXTabList.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXTabList.m; path = Classes/ExplorerInterface/Tabs/FLEXTabList.m; sourceTree = ""; }; + D8D474932649083EBFE62B5F2322A027 /* UIView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+DHSmartScreenshot.h"; path = "Classes/UIView+DHSmartScreenshot.h"; sourceTree = ""; }; + D8FDBEAB1307ECE58442B9B9409673C1 /* SWFrameButton.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SWFrameButton.modulemap; sourceTree = ""; }; + D90E91CA5C76CC036250865835E038D5 /* SWTableViewCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SWTableViewCell-prefix.pch"; sourceTree = ""; }; + D92A2FA11A35065F67EE518464B2FD7E /* SWFrameButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWFrameButton.m; path = SWFrameButton/SWFrameButton.m; sourceTree = ""; }; + D939623AA0B0D656C9C6349FC2810136 /* REMenu-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "REMenu-Info.plist"; sourceTree = ""; }; + D975B9F852E7E80A293632787518BB84 /* DTActivityTitleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTActivityTitleView.m; path = Core/Source/iOS/DTActivityTitleView.m; sourceTree = ""; }; + D9AA427BD24C4E18FF7DD21291DFC9FD /* RMGroupedAction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMGroupedAction.m; path = "RMActionController/Grouping Actions/RMGroupedAction.m"; sourceTree = ""; }; + DA281EB991EF37495C077D0E3B005483 /* FLEXManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXManager.h; path = Classes/Manager/FLEXManager.h; sourceTree = ""; }; + DA984E08FC9C91074BCF3441CED410C0 /* FLEXObjectExplorerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerViewController.m; path = Classes/ObjectExplorers/FLEXObjectExplorerViewController.m; sourceTree = ""; }; + DAD31DE454D4089BD767D4B462458EDD /* OMGHTTPURLRQ.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OMGHTTPURLRQ.debug.xcconfig; sourceTree = ""; }; + DADC78E9A981E2057A10118C12245F48 /* FLEXRuntimeSafety.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeSafety.h; path = Classes/Utility/Runtime/Objc/FLEXRuntimeSafety.h; sourceTree = ""; }; + DB113A5E89138A209DC07CB2CDEAAFAC /* REMenuContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = REMenuContainerView.h; path = REMenu/REMenuContainerView.h; sourceTree = ""; }; + DB199EE7946058F4943C2053B0B2C68B /* NSString+DTPaths.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+DTPaths.h"; path = "Core/Source/NSString+DTPaths.h"; sourceTree = ""; }; + DB853DAD4E01CA82D250A1D63734E833 /* FLEXKBToolbarButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKBToolbarButton.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXKBToolbarButton.h; sourceTree = ""; }; + DBC163C08CC27AECF1902A9F73E77CB1 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + DBF67CDFD49039113FDCF9B15032497C /* FSParseRssPodcastFeedRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSParseRssPodcastFeedRequest.h; path = FreeStreamer/FreeStreamer/FSParseRssPodcastFeedRequest.h; sourceTree = ""; }; + DC08D581D5E39C60AABC4A5E9FBB7181 /* FreeStreamer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FreeStreamer.modulemap; sourceTree = ""; }; + DC5D273680A973B9DF2A1BAC5AC4D8DF /* FLEXMethod.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMethod.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXMethod.h; sourceTree = ""; }; + DC716084BB995B80B607B16BD725DDFA /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + DC723AB3B15462F4EE3855AAB24DF3E2 /* UIView+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTFoundation.m"; path = "Core/Source/iOS/UIView+DTFoundation.m"; sourceTree = ""; }; + DC82941001664190D534F2647CAA826F /* UIWindow+AHKAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWindow+AHKAdditions.h"; path = "Classes/UIWindow+AHKAdditions.h"; sourceTree = ""; }; + DCE140B7332F3FDA1466ADBBB7D68A65 /* DTTextBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextBlock.m; path = Core/Source/DTTextBlock.m; sourceTree = ""; }; + DD10C33DE6EC1D700F803E794DF11D88 /* SRSIMDHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRSIMDHelpers.m; path = SocketRocket/Internal/Utilities/SRSIMDHelpers.m; sourceTree = ""; }; + DD2DB063F6B94FD197B0E421C03C502C /* NSAttributedString+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributedString+HTML.m"; path = "Core/Source/NSAttributedString+HTML.m"; sourceTree = ""; }; + DD31E2EE1DEA6D5756FF05E94FF67843 /* SWUtilityButtonView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWUtilityButtonView.h; path = SWTableViewCell/PodFiles/SWUtilityButtonView.h; sourceTree = ""; }; + DD4385531B6D2667A2491B22562A9784 /* FLEXTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewCell.h; path = Classes/Core/Views/Cells/FLEXTableViewCell.h; sourceTree = ""; }; + DDDF2383AEAB26437399F1F2C5019255 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + DDF6A31DFFDAE17F80A34E666AA79832 /* SBJson.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SBJson.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DE131F87221F3043B3705D09E14BBAF5 /* AHKActionSheet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AHKActionSheet.h; path = Classes/AHKActionSheet.h; sourceTree = ""; }; + DE56F746CA8ED814C10CE427E96AFC73 /* RMActionController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RMActionController.h; path = RMActionController/RMActionController.h; sourceTree = ""; }; + DE659F3346E23838366637EEEC8FB8AB /* FLEXRuntimeClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeClient.m; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeClient.m; sourceTree = ""; }; + DE6D87C80ED3FFB25169A25DDA07C9D3 /* IQPlaybackDurationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPlaybackDurationView.h; path = IQAudioRecorderController/IQPlaybackDurationView.h; sourceTree = ""; }; + DE8AB1FB68775A9A23C95D0C118E855B /* SWFrameButton-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SWFrameButton-Info.plist"; sourceTree = ""; }; + DEB2FBAE58D1C59A91EC9CB07BFF64E6 /* HMSegmentedControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HMSegmentedControl.h; path = HMSegmentedControl/HMSegmentedControl.h; sourceTree = ""; }; + DED2DF51360A8C1FD4E1D2CA071F5E0B /* FLEXDefaultEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXDefaultEditorViewController.h; path = Classes/Editing/FLEXDefaultEditorViewController.h; sourceTree = ""; }; + DEDC4B4F4CA7DA15E840B68FDD568950 /* NSObject+FLEX_Reflection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+FLEX_Reflection.m"; path = "Classes/Utility/Categories/NSObject+FLEX_Reflection.m"; sourceTree = ""; }; + DEE989214F2CDAE82BF7D864D9108FF9 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + DF44A2E0670B3B05037082EA12D2D1B8 /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = ""; }; + DF5358A505EA091CA18BE6C7921239EE /* IQAudioRecorderConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQAudioRecorderConstants.h; path = IQAudioRecorderController/IQAudioRecorderConstants.h; sourceTree = ""; }; + DF6F90773BC794F9FB6EC9E75A1D3AEF /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + DFA96C5BE21F66333FB92E0B7FA55A92 /* RMDateSelectionViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RMDateSelectionViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E01A22F240F2104F986828C36985F6A7 /* SWTableViewCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SWTableViewCell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E08E980D6E07A6C1813621F515B86703 /* UIImage+DHImageAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+DHImageAdditions.m"; path = "Classes/UIImage+DHImageAdditions.m"; sourceTree = ""; }; + E0B3469A888470DECA1230A2D8BF8D8F /* FLEXRuntimeConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXRuntimeConstants.m; path = Classes/Utility/Runtime/Objc/FLEXRuntimeConstants.m; sourceTree = ""; }; + E0EE46CEF6B2E44223490B468B714896 /* FLEXProtocolBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXProtocolBuilder.m; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.m; sourceTree = ""; }; + E0EEFF8DAFB86B146B67FF3352F004F9 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; + E1535989317B7636E47FBE8A66C6CF33 /* FLEXArgumentInputView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputView.h; sourceTree = ""; }; + E1C3C614C23CB499362D5867A152D600 /* FLEXObjectRef.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectRef.m; path = Classes/GlobalStateExplorers/FLEXObjectRef.m; sourceTree = ""; }; + E1D4A20DF072E367910A7536CB17BDC0 /* DAKeyboardControl.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DAKeyboardControl.debug.xcconfig; sourceTree = ""; }; + E24B6B60D3CF124862AF1BACAE0F4F1A /* JDStatusBarNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JDStatusBarNotification-prefix.pch"; sourceTree = ""; }; + E264EAC9DCABD244F56AF168664C1527 /* file_output.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = file_output.cpp; path = FreeStreamer/FreeStreamer/file_output.cpp; sourceTree = ""; }; + E28D798F8390DB5D32114D498C4481DA /* DTAsyncFileDeleter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAsyncFileDeleter.m; path = Core/Source/DTAsyncFileDeleter/DTAsyncFileDeleter.m; sourceTree = ""; }; + E290D4767429B0FE33C80A84BD7B178B /* DTCoreText.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DTCoreText.debug.xcconfig; sourceTree = ""; }; + E307B2DC551D0125A97E8B49223258EF /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + E31B6731F57E7DB3B8715CE39994F082 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; }; + E49899625E3D827D6440CBE6CB4377DA /* NSRunLoop+SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRunLoop+SRWebSocket.m"; path = "SocketRocket/NSRunLoop+SRWebSocket.m"; sourceTree = ""; }; + E4A1C49B0D5F7B9383BA478821467562 /* SWFrameButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWFrameButton.h; path = SWFrameButton/SWFrameButton.h; sourceTree = ""; }; + E4E1B2446AC425C1506C4FB0DC074567 /* FLEXObjectListViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectListViewController.m; path = Classes/GlobalStateExplorers/FLEXObjectListViewController.m; sourceTree = ""; }; + E52898B7F103F91D92D703DD03DA6805 /* FLEXSQLResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXSQLResult.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXSQLResult.m; sourceTree = ""; }; + E5E1091ADDF9A15EB7552F7FBE976547 /* FLEXResources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXResources.h; path = Classes/Utility/FLEXResources.h; sourceTree = ""; }; + E5E981F9CA66315B3EE0B4B5197881AE /* DTFolderMonitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTFolderMonitor.m; path = Core/Source/DTFolderMonitor.m; sourceTree = ""; }; + E609ED80B30B126C38FC9B7284F3021C /* SocketRocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SocketRocket.modulemap; sourceTree = ""; }; + E652554A1BCD3A171C6F83E4377351D5 /* NSURL+DTAppLinks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTAppLinks.h"; path = "Core/Source/iOS/NSURL+DTAppLinks.h"; sourceTree = ""; }; + E6971E6FD90EA031A02813C2F3320A3A /* DTHTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTHTMLParser.h; path = Core/Source/DTHTMLParser/DTHTMLParser.h; sourceTree = ""; }; + E6AFCB09635F358A9BE1A485AC5052BA /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + E754605D188120811807F2891CFE1591 /* HMSegmentedControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HMSegmentedControl-umbrella.h"; sourceTree = ""; }; + E76D4007EA543F40DC30137DD966AA07 /* DTSidePanelPanGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTSidePanelPanGestureRecognizer.h; path = Core/Source/iOS/DTSidePanel/DTSidePanelPanGestureRecognizer.h; sourceTree = ""; }; + E78CC223EA0DFDAEB2DD2C53EB574EFC /* FLEXMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXMacros.h; path = Classes/Utility/FLEXMacros.h; sourceTree = ""; }; + E7ADF6F6F9BD889C27EE61BB769A35CB /* UICKeyChainStore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UICKeyChainStore.release.xcconfig; sourceTree = ""; }; + E7FBF97F131404C703F7E98B12F848F8 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = ""; }; + E806D22BAD3192C71B3C4629905EF193 /* NBPhoneNumberDesc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberDesc.h; path = libPhoneNumber/NBPhoneNumberDesc.h; sourceTree = ""; }; + E80EE06E76744A71EC0142C5791ACFDB /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; }; + E8B607EE07CBDF8190A16B4C08FD6507 /* UITableView+DHSmartScreenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+DHSmartScreenshot.h"; path = "Classes/UITableView+DHSmartScreenshot.h"; sourceTree = ""; }; + E987D1C71C185A8A4BCC1D580991B8CF /* IQMessageDisplayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQMessageDisplayView.h; path = IQAudioRecorderController/IQMessageDisplayView.h; sourceTree = ""; }; + E9A73B8BB098AFB3464177001B2C2B15 /* BBBadgeBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BBBadgeBarButtonItem.m; path = BBBadgeBarButtonItem/BBBadgeBarButtonItem.m; sourceTree = ""; }; + E9DFBBBDCAED23575EDADF065D0C0202 /* FLEXWebViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXWebViewController.h; path = Classes/GlobalStateExplorers/FLEXWebViewController.h; sourceTree = ""; }; + E9F1B955D0975D295065201644EB1BFE /* FLEXCodeFontCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCodeFontCell.h; path = Classes/Core/Views/Cells/FLEXCodeFontCell.h; sourceTree = ""; }; + EA479FA6DAA018589FF85EEB338234EA /* FHSView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSView.h; path = Classes/ViewHierarchy/SnapshotExplorer/FHSView.h; sourceTree = ""; }; + EA557DA1A326B7B7DCFEC095847B8874 /* FLEXRuntime+UIKitHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FLEXRuntime+UIKitHelpers.m"; path = "Classes/Utility/Categories/FLEXRuntime+UIKitHelpers.m"; sourceTree = ""; }; + EAAF533C772D580CD14FDF4B8691D122 /* FLEXArgumentInputFontView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.m; sourceTree = ""; }; + EAB647DBFDCEC0728B523A4275E45A6F /* DTColorFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTColorFunctions.m; path = Core/Source/DTColorFunctions.m; sourceTree = ""; }; + EAB779695A13D1DECD43ABFE358EBBBF /* FLEXShortcutsFactory+Defaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FLEXShortcutsFactory+Defaults.h"; path = "Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsFactory+Defaults.h"; sourceTree = ""; }; + EAF47B8D3BA5B9248FB8BA7EFB248038 /* HMSegmentedControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HMSegmentedControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EBDCAAD121C64711C2206118E9E92CCE /* DTAnchorHTMLElement.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnchorHTMLElement.h; path = Core/Source/DTAnchorHTMLElement.h; sourceTree = ""; }; + EC2CCFE865B27C4091BF1BB63F9413CB /* SWUtilityButtonTapGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SWUtilityButtonTapGestureRecognizer.h; path = SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.h; sourceTree = ""; }; + EC48DB885F5F05F87CD900A5CCDF2BBD /* TTTAttributedLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-umbrella.h"; sourceTree = ""; }; + EC847778D2A24C2AEED78123127FFC15 /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; + ECA576B6E438931913D215D503BAC37D /* DTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAttributedLabel.h; path = Core/Source/DTAttributedLabel.h; sourceTree = ""; }; + ECACC82F235633EFB673D0E7B532A117 /* NBGeneratedPhoneNumberMetaData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBGeneratedPhoneNumberMetaData.h; path = libPhoneNumber/NBGeneratedPhoneNumberMetaData.h; sourceTree = ""; }; + ED122249A49DF8819428A2525E549429 /* PHFDelegateChain-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PHFDelegateChain-umbrella.h"; sourceTree = ""; }; + ED9A28E67C107796EA05E33C04B4B096 /* FLEXObjectExplorerFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXObjectExplorerFactory.m; path = Classes/ObjectExplorers/FLEXObjectExplorerFactory.m; sourceTree = ""; }; + ED9CE8B30CA8E19717B011E36E9AFC7B /* DTScriptExpression.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTScriptExpression.h; path = Core/Source/DTScripting/DTScriptExpression.h; sourceTree = ""; }; + EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DTCoreText.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EDA79E6BA489D7D612D652B7F30441D3 /* DTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTAttributedLabel.m; path = Core/Source/DTAttributedLabel.m; sourceTree = ""; }; + EDB83083A31D85CA445F0685ED09F293 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + EDF30867D9A8F401029C49F7BF7AB1EB /* RMActionController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMActionController-prefix.pch"; sourceTree = ""; }; + EE109C9057441A4FA69D541D844E7F2E /* SBJson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SBJson-prefix.pch"; sourceTree = ""; }; + EE12C638CC195E9FAFBF7319D5530D03 /* UIImage+DTFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+DTFoundation.h"; path = "Core/Source/iOS/UIImage+DTFoundation.h"; sourceTree = ""; }; + EE3F010EB34A84AEE01741089B525A48 /* FLEXFileBrowserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXFileBrowserController.m; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserController.m; sourceTree = ""; }; + EE619684931D8892641F3BC9DB5B2AAA /* NSNumber+RomanNumerals.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+RomanNumerals.m"; path = "Core/Source/NSNumber+RomanNumerals.m"; sourceTree = ""; }; + EEF12618689A9210DB2A06CB3AC3595B /* FLEXArgumentInputFontsPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputFontsPickerView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontsPickerView.m; sourceTree = ""; }; + EF174797873BD09C911A8433D64D447E /* FLEXKeyboardShortcutManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXKeyboardShortcutManager.h; path = Classes/Utility/Keyboard/FLEXKeyboardShortcutManager.h; sourceTree = ""; }; + EF2DC5E8C13279A82A2211D167744F6D /* FLEXRuntimeExporter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeExporter.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeExporter.h; sourceTree = ""; }; + EF7CE0E1DCC5D22BC0297735B2169E0E /* BBBadgeBarButtonItem.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = BBBadgeBarButtonItem.modulemap; sourceTree = ""; }; + EF97F18A71813674F4F15B825CF6D829 /* FLEXDefaultsContentSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDefaultsContentSection.m; path = Classes/ObjectExplorers/Sections/FLEXDefaultsContentSection.m; sourceTree = ""; }; + EFEFFF466D348628C227F68055285728 /* SWTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SWTableViewCell.m; path = SWTableViewCell/PodFiles/SWTableViewCell.m; sourceTree = ""; }; + EFFACD7D66FD7CACA3101E7E6298A0C3 /* UIView+FLEX_Layout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+FLEX_Layout.h"; path = "Classes/Utility/Categories/UIView+FLEX_Layout.h"; sourceTree = ""; }; + F03DA9FE31B3890BED978D5E155364C0 /* FLEXBookmarksViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXBookmarksViewController.m; path = Classes/ExplorerInterface/Bookmarks/FLEXBookmarksViewController.m; sourceTree = ""; }; + F12955C51FA76A9CA1B8878B9620EA16 /* FLEXRuntimeController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXRuntimeController.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/DataSources/FLEXRuntimeController.h; sourceTree = ""; }; + F1784266A681BF6528925A9DCBDF3C49 /* NBPhoneNumberDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NBPhoneNumberDefines.h; path = libPhoneNumber/NBPhoneNumberDefines.h; sourceTree = ""; }; + F1949B44672BB047CC6396CC98EFD402 /* FSPlaylistItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSPlaylistItem.m; path = FreeStreamer/FreeStreamer/FSPlaylistItem.m; sourceTree = ""; }; + F1D01516661723A1D365FDB4BA6E97B8 /* FLEXSearchToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXSearchToken.h; path = Classes/GlobalStateExplorers/RuntimeBrowser/FLEXSearchToken.h; sourceTree = ""; }; + F1F3CED6540D9077B5763C7A39F07C72 /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = Core/Source/Externals/minizip/unzip.c; sourceTree = ""; }; + F2418F9D42782196418C0D344ED3DA1D /* RMAction.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RMAction.m; path = RMActionController/Actions/RMAction.m; sourceTree = ""; }; + F277048A6CDC33521D08BB0CFFB02B9A /* NSString+HTML.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Core/Source/NSString+HTML.h"; sourceTree = ""; }; + F29BF246846901AD3E77532463BCE8B5 /* NSURLRequest+SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURLRequest+SRWebSocket.h"; path = "SocketRocket/NSURLRequest+SRWebSocket.h"; sourceTree = ""; }; + F2C631F551A937137BB5F58CFCE37471 /* AFNetworking-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AFNetworking-Info.plist"; sourceTree = ""; }; + F2CCF24CFB7E83004AD75541CD624C39 /* UIColor+DTDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+DTDebug.h"; path = "Core/Source/iOS/Debug/UIColor+DTDebug.h"; sourceTree = ""; }; + F2DBCCF3460EAF77EA7B8B75C75B942B /* FLEXCarouselCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXCarouselCell.h; path = Classes/Core/Views/Carousel/FLEXCarouselCell.h; sourceTree = ""; }; + F2F51A76CEBA43C420F8F841CF2645DE /* JDStatusBarNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JDStatusBarNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F33155D38AB1DA2F593F95E346B66AE3 /* APJob.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APJob.h; path = Pod/Core/Public/Models/APJob.h; sourceTree = ""; }; + F34A18BE39E3FEC8BCB4F50D80FFC20D /* NSURL+DTComparing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+DTComparing.m"; path = "Core/Source/NSURL+DTComparing.m"; sourceTree = ""; }; + F38FE4D3CD3B0DA24EB4D5806CA75772 /* INTULocationManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = INTULocationManager.debug.xcconfig; sourceTree = ""; }; + F45287FDEE47273C1750295561F377F9 /* FLEXNetworkMITMViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXNetworkMITMViewController.h; path = Classes/Network/FLEXNetworkMITMViewController.h; sourceTree = ""; }; + F465B3BF49EB382226B679320E176B20 /* DTTextAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTTextAttachment.m; path = Core/Source/DTTextAttachment.m; sourceTree = ""; }; + F489D98DE728D56A037C179AC635711E /* NBMetadataHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NBMetadataHelper.m; path = libPhoneNumber/NBMetadataHelper.m; sourceTree = ""; }; + F49A654448F9F73780F2B5451C89E1B7 /* DAKeyboardControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DAKeyboardControl-dummy.m"; sourceTree = ""; }; + F4E2B1AC73977F10254628C0B7EBE38F /* Resources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Resources.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + F5DAE44BE68914D25BD324B9360680EA /* NSCharacterSet+HTML.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTML.m"; path = "Core/Source/NSCharacterSet+HTML.m"; sourceTree = ""; }; + F5DC87446019AA3252019721A0901DE1 /* FLEXArgumentInputNumberView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputNumberView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputNumberView.h; sourceTree = ""; }; + F60AD413A65C8827E2FE9A67C91C96C0 /* RMActionController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RMActionController-umbrella.h"; sourceTree = ""; }; + F6268C1EA07ABE582516CB63F84E4955 /* DTZipArchiveNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchiveNode.m; path = Core/Source/DTZipArchive/DTZipArchiveNode.m; sourceTree = ""; }; + F62AB3FAD072A698373BB287FD2A7CAC /* NSAttributedStringRunDelegates.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NSAttributedStringRunDelegates.m; path = Core/Source/NSAttributedStringRunDelegates.m; sourceTree = ""; }; + F63B10E0A84172108B8E76B9E7BC4DCA /* UITextField+Range.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+Range.m"; path = "Classes/Utility/Categories/UITextField+Range.m"; sourceTree = ""; }; + F68016BB420AEAF19F05567AB2752BCF /* FHSRangeSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FHSRangeSlider.m; path = Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.m; sourceTree = ""; }; + F6B7BC593E9DDE58F93086DBE561F61D /* FLEXTableViewSection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTableViewSection.h; path = Classes/Core/FLEXTableViewSection.h; sourceTree = ""; }; + F6C70948300C5297B93E758FE51EE642 /* UIView+DTDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+DTDebug.m"; path = "Core/Source/iOS/Debug/UIView+DTDebug.m"; sourceTree = ""; }; + F6E503D97498960FC036A636352054C8 /* IQAudioRecorderController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQAudioRecorderController-prefix.pch"; sourceTree = ""; }; + F6E55484A1349EFFA5A91491DD5BF15D /* APSocialServiceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APSocialServiceHelper.m; path = Pod/Core/Private/Helpers/APSocialServiceHelper.m; sourceTree = ""; }; + F70B26AA7F96647287E91A1843F45ED6 /* FLEXProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXProtocol.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProtocol.h; sourceTree = ""; }; + F70B96C094EAE303D959102B9ED795B5 /* FLEXProtocolBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXProtocolBuilder.h; path = Classes/Utility/Runtime/Objc/Reflection/FLEXProtocolBuilder.h; sourceTree = ""; }; + F71FC37EC511A0AA27833222B56BB156 /* FLEXHierarchyTableViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXHierarchyTableViewCell.h; path = Classes/ViewHierarchy/TreeExplorer/FLEXHierarchyTableViewCell.h; sourceTree = ""; }; + F787D8C79DD3AC9113D8D406AF403FA1 /* icon-error@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "icon-error@2x.png"; path = "Classes/Icons/icon-error@2x.png"; sourceTree = ""; }; + F7E24E5EDF0B14B9DE2FF399B71B0200 /* APContactDataExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = APContactDataExtractor.m; path = Pod/Core/Private/Extractors/APContactDataExtractor.m; sourceTree = ""; }; + F847149D560A471FA9F83D3FA633A1D9 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + F86C69A6FC0A793A2A330C1A322A16F8 /* DTCoreText-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "DTCoreText-Info.plist"; sourceTree = ""; }; + F870F4554813A03F90EE30481E6BFB86 /* FLEXArgumentInputColorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXArgumentInputColorView.m; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputColorView.m; sourceTree = ""; }; + F892D5CA8A20AB0F6DC922EAD389B776 /* FLEXMultilineTableViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXMultilineTableViewCell.m; path = Classes/Core/Views/Cells/FLEXMultilineTableViewCell.m; sourceTree = ""; }; + F8DAF1C61CEEF284CC1AD22391991B50 /* RMActionController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RMActionController-dummy.m"; sourceTree = ""; }; + F8DBAD310C4141515B27FC33A3D300E5 /* FLEX.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FLEX.modulemap; sourceTree = ""; }; + F8EF054CF1BC3854097F909CAED9580A /* NSURL+DTUnshorten.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+DTUnshorten.h"; path = "Core/Source/NSURL+DTUnshorten.h"; sourceTree = ""; }; + F8FE6AEADCBB9717BA5378AD08536AD3 /* NSProcessInfo+RMActionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSProcessInfo+RMActionController.m"; path = "RMActionController/Categories/NSProcessInfo+RMActionController.m"; sourceTree = ""; }; + F8FF64800D93CD9364656616D8D54D8E /* UITextField+Range.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+Range.h"; path = "Classes/Utility/Categories/UITextField+Range.h"; sourceTree = ""; }; + F91239B37A2AD2A491E0DC07032C78E7 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + F93C261B72CF415FED393D52BF9DA7A5 /* CALayer+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+FLEX.h"; path = "Classes/Utility/Categories/CALayer+FLEX.h"; sourceTree = ""; }; + F99308A4488E85C6C14B56184B7A0BBD /* FHSRangeSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FHSRangeSlider.h; path = Classes/ViewHierarchy/SnapshotExplorer/FHSRangeSlider.h; sourceTree = ""; }; + F9D975452C65D8C039F3926AB288F9AC /* DTActivityTitleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTActivityTitleView.h; path = Core/Source/iOS/DTActivityTitleView.h; sourceTree = ""; }; + F9F7F9600F36D94C0CBB424098A5E418 /* IQAudioRecorderController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQAudioRecorderController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FA1D2103BEEEB431E0BDE8047D765B9D /* INTULocationManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "INTULocationManager-dummy.m"; sourceTree = ""; }; + FA5D6ED58D7D88F738C03D8F4E364D46 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + FAC8D5E162C7833216D924C71181AA24 /* DTCustomColoredAccessory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTCustomColoredAccessory.m; path = Core/Source/iOS/DTCustomColoredAccessory.m; sourceTree = ""; }; + FAF6A7F951BC6517C1E3F088FFE9DC86 /* audio_stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = audio_stream.h; path = FreeStreamer/FreeStreamer/audio_stream.h; sourceTree = ""; }; + FB783D6312A6E5CD1671DB4E492AA275 /* APContactBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = APContactBuilder.h; path = Pod/Core/Private/Builders/APContactBuilder.h; sourceTree = ""; }; + FBCFED0871815861403858026DC54117 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + FBEBCE0CEE5A44CC047ECAC92111CDAA /* UIFont+FLEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIFont+FLEX.h"; path = "Classes/Utility/Categories/UIFont+FLEX.h"; sourceTree = ""; }; + FBF61FCB772D8FB2BA89FE53677C1B60 /* DTSidePanelControllerSegue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTSidePanelControllerSegue.m; path = Core/Source/iOS/DTSidePanel/DTSidePanelControllerSegue.m; sourceTree = ""; }; + FC1C08796E48EDF4D7CC9B7AB59F5F1C /* DTZipArchivePKZip.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTZipArchivePKZip.m; path = Core/Source/DTZipArchive/DTZipArchivePKZip.m; sourceTree = ""; }; + FC300A407F0077FAE2BB35182EB3D679 /* SWTableViewCell-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SWTableViewCell-Info.plist"; sourceTree = ""; }; + FC99CD3D2BC49F3753B5C026834F526F /* UIScreen+DTFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScreen+DTFoundation.m"; path = "Core/Source/iOS/UIScreen+DTFoundation.m"; sourceTree = ""; }; + FCBF86BD9EC3384724FA848536B06788 /* FLEXDBQueryRowCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXDBQueryRowCell.m; path = Classes/GlobalStateExplorers/DatabaseBrowser/FLEXDBQueryRowCell.m; sourceTree = ""; }; + FCC54FEEB486D2CAC85C5DCF5EF01145 /* UIBarButtonItem+FLEX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIBarButtonItem+FLEX.m"; path = "Classes/Utility/Categories/UIBarButtonItem+FLEX.m"; sourceTree = ""; }; + FCD0141340CB0EE5F568066AF4711E95 /* DTAnimatedGIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTAnimatedGIF.h; path = Core/Source/iOS/DTAnimatedGIF/DTAnimatedGIF.h; sourceTree = ""; }; + FD203B0FB8A97B55112E52572F0B6175 /* DTASN1BitString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DTASN1BitString.m; path = Core/Source/DTASN1/DTASN1BitString.m; sourceTree = ""; }; + FDF63610F82AEDF3F8F46FB3CDE3D82E /* SRRandom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRRandom.h; path = SocketRocket/Internal/Utilities/SRRandom.h; sourceTree = ""; }; + FE3FF948CFA7668F2E994A30D36F698F /* SRDelegateController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRDelegateController.m; path = SocketRocket/Internal/Delegate/SRDelegateController.m; sourceTree = ""; }; + FE597523EDEF968C77B01685BF05EFE6 /* INTULocationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationRequest.m; path = LocationManager/INTULocationManager/INTULocationRequest.m; sourceTree = ""; }; + FE617195F5A51366B13DAA0541424726 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + FE6369973241C33445A2243E36D63172 /* FLEXFileBrowserSearchOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXFileBrowserSearchOperation.h; path = Classes/GlobalStateExplorers/FileBrowser/FLEXFileBrowserSearchOperation.h; sourceTree = ""; }; + FE6E3494C939B891CC19D6CE2CA3AFD0 /* PHFComposeBarView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PHFComposeBarView-Info.plist"; sourceTree = ""; }; + FE7F232022C03A2C147835997EE41400 /* FLEXShortcutsSection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXShortcutsSection.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXShortcutsSection.m; sourceTree = ""; }; + FE9C3226E64B16B17E66417FD8B76563 /* FLEXTypeEncodingParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXTypeEncodingParser.h; path = Classes/Utility/Runtime/Objc/FLEXTypeEncodingParser.h; sourceTree = ""; }; + FED3AC56009E3AEA1E3E352D88B27964 /* FLEXImageShortcuts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXImageShortcuts.m; path = Classes/ObjectExplorers/Sections/Shortcuts/FLEXImageShortcuts.m; sourceTree = ""; }; + FED99B3B79CFB1948CE5CA881D6749DF /* FLEXGlobalsViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FLEXGlobalsViewController.m; path = Classes/GlobalStateExplorers/Globals/FLEXGlobalsViewController.m; sourceTree = ""; }; + FEDDD3B4C7C51EAE0748A37FCC89328A /* SBJson5Writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson5Writer.h; path = Classes/SBJson5Writer.h; sourceTree = ""; }; + FEF271B1F3FE5EE2C4431CF87816EC42 /* DTCustomColoredAccessory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DTCustomColoredAccessory.h; path = Core/Source/iOS/DTCustomColoredAccessory.h; sourceTree = ""; }; + FF39772C4AA081514723EF659C24573B /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + FF4866D5B426AF08723CDEB44F1B1D80 /* FLEXArgumentInputFontView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXArgumentInputFontView.h; path = Classes/Editing/ArgumentInputViews/FLEXArgumentInputFontView.h; sourceTree = ""; }; + FF5B2138EB628DC147983C0A12D19C13 /* FLEXExplorerToolbarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FLEXExplorerToolbarItem.h; path = Classes/Toolbar/FLEXExplorerToolbarItem.h; sourceTree = ""; }; + FFD82A49945F0210C13D3759E9F4E1DC /* SCSiriWaveformView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SCSiriWaveformView.debug.xcconfig; sourceTree = ""; }; + FFD9467AC2652AF7B1B4614176FC17D6 /* NSHash-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "NSHash-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 03448C12E106EA4ED2002C80E0518155 /* Frameworks */ = { + 01F4E17C1D188B195A2875CB32E30463 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A2D67F3FE1BEB597AE02A13223768D4F /* AudioToolbox.framework in Frameworks */, - F4D88482E2A1C62A05539C0FA5AF3A8A /* AVFoundation.framework in Frameworks */, - 933E3CC735233FE14CE1C6931ED796D9 /* CFNetwork.framework in Frameworks */, - B7E544748C6488DAAB0EDF5D5FE7B56B /* Foundation.framework in Frameworks */, - 2423E582FB19F42CADC745B522B8F741 /* MediaPlayer.framework in Frameworks */, - 2E02F4EE838716376F0B1A1442E2590A /* Reachability.framework in Frameworks */, + C8938DBFF283B5C9E055E326B10CD08E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0709DD6F849069DA909363DFF0DEF445 /* Frameworks */ = { + 0675A331A334821C1D22FD359FF56BA2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 24825365404F9559B4DAF035778645D4 /* AVFoundation.framework in Frameworks */, - 8A448EA32FAE92BEDDC83C5BEAAA3F87 /* CoreGraphics.framework in Frameworks */, - 2B8A25AA440435883ACA9A0F94F7E0C3 /* Foundation.framework in Frameworks */, - EF12A168733A846F4F227B7F08A269BE /* QuartzCore.framework in Frameworks */, - AE4DFFA06EE70BD83A8A1DFC37852EEF /* UIKit.framework in Frameworks */, + A2D79DB64427E12C57AF5F7A2C39A6C9 /* Foundation.framework in Frameworks */, + 82EFE412D04C3D2BC86CA34B47D8D03F /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0DD5591E3D924F881048587FD255C531 /* Frameworks */ = { + 091D663DADB77D195EC501BA9F055BBF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 23B3C7A6A6E39119D91D67D69366556C /* CoreGraphics.framework in Frameworks */, - 17DC1863869F26507DFC40678CB593C9 /* CoreText.framework in Frameworks */, - C6F41F070C9AD82AED65FF44FEB7D26E /* DTFoundation.framework in Frameworks */, - 514BFF597B7093D68B26488A767A8732 /* Foundation.framework in Frameworks */, - 4A1BA1563FA116DA9CD8E97ED6A8FD1B /* ImageIO.framework in Frameworks */, - 469A2949B79CE500F85DEA00EFE91B10 /* MediaPlayer.framework in Frameworks */, - DA8A58FBEE5E1D440244A3D1DCEBF835 /* QuartzCore.framework in Frameworks */, + 17877AB8E02007ED940814C40DC1C631 /* Foundation.framework in Frameworks */, + AC1A595672246FB743ADDD9DB0D24A6D /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 15154975EB333930F24BFF7972ED4D99 /* Frameworks */ = { + 0BD53748834DD954853FAC4847D55E6F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1342DFF767BDED1B46165326A3D324E2 /* Foundation.framework in Frameworks */, + D8A21A5BA995F219E3D71747D9DE577E /* Foundation.framework in Frameworks */, + B442F5827A2842FF79FE7D8C1D5CB0A9 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1C50B0B85EF08345B6480B31FE5B0FD1 /* Frameworks */ = { + 0C8A7758DE25477AC84FD3EBC822446E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 40064EC4EB27DCACD7C90C1C3888130F /* Foundation.framework in Frameworks */, - 358BA7800FB53BA9135E7367A00A0946 /* OMGHTTPURLRQ.framework in Frameworks */, + 8356265C3113FE76A9CA68D74E055212 /* Foundation.framework in Frameworks */, + 30F861B610E7521B1FEBF07BA8D003E7 /* RMActionController.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2167B670409FB23E8F60F44E637DCBD1 /* Frameworks */ = { + 102464C0F668304EE565714291C72893 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0CF76CF060F90276C9A50FBE65F820DC /* Foundation.framework in Frameworks */, + 75178DECBE39A69035B9711E18E9D2FD /* AddressBook.framework in Frameworks */, + 6FF92A45E1EDA501206F196D5BC79011 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 21DD45EEAAFFEC23B8E54CCE9E323D2D /* Frameworks */ = { + 1440C983D17C5C204111D0DB454F5532 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 06A9B70CAA3F4771CC1D55BDDCAB5CE2 /* Foundation.framework in Frameworks */, - 4A4FD69B2FA4DEBC3198A2BF0A7EEFF6 /* QuartzCore.framework in Frameworks */, + A80CF4030C52C09DABA206342620530E /* Foundation.framework in Frameworks */, + B53F201B44E36E87BC49A5AA951CCB98 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 27851FF8216AFA257B595CD58FBF9B66 /* Frameworks */ = { + 17227FDDE4F84D1DEFE02809EE6A553F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F14DDF2AE765122EEE6F170275DC8864 /* Foundation.framework in Frameworks */, + 116009665297AEAF2C9D10122C7CC44B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3342C6C79BF4799EB7CB5E3CED9DE1F8 /* Frameworks */ = { + 19A200470AA004C1F206A6BCA1062B11 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 461DC8403AE2C7C54EC763F678F75E47 /* Foundation.framework in Frameworks */, + 624FBCCCD5BC96D006E873CFC6F316E0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 35A398F6CC37A8D8E469498B848E286F /* Frameworks */ = { + 1AA3C16B4B3AB40CA74BDDADEF5C143A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4F9863537BC7DA16B2F5D24FB8332853 /* CoreGraphics.framework in Frameworks */, - A8906F6003D20F1B2E9C5BFEF7AE9C1F /* Foundation.framework in Frameworks */, - 2214D9EF048C093D94CEFDC849C2743E /* QuartzCore.framework in Frameworks */, + A601994621C892656F60D1A1292A9565 /* CoreGraphics.framework in Frameworks */, + FF0EE7E6F869E55DA268F25622674EB9 /* Foundation.framework in Frameworks */, + 64F46B6A8DBA885AF570A54A082D1BAA /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 41B97CA0020808F069679A12BA8457A5 /* Frameworks */ = { + 1D4662290795AF9F9373BF970827AEEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B8202E65F052456BE71A79936BDC6350 /* Foundation.framework in Frameworks */, + 37D3936C61AE79B5EB74BE55EBDC51B3 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4396282138E8915AEAEBEB19D8C0158B /* Frameworks */ = { + 267462C08BE46E2BDF10BC9D4B53CFA6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E8E8392E05EFA020BF0C378671ADDD10 /* Foundation.framework in Frameworks */, - E34053C6EC6367D266374303EB8793D8 /* QuartzCore.framework in Frameworks */, + 8CB0A498D4FD52C3AD71FB50AD7F49F7 /* CFNetwork.framework in Frameworks */, + E694E6CB0EF5DECDFA1995A756FDC9F5 /* Foundation.framework in Frameworks */, + 80D12EB7B804DC1A8D491C69E595F93C /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 597872773FB445065BA005ECF18C67BA /* Frameworks */ = { + 2D7AC8CC3FAC6D7AE679D908E5292BF0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6E0DB9EAE66E5D73C99748FF087BA536 /* Foundation.framework in Frameworks */, - A65BBBE8F98E2DE6DB259F9646D0FD16 /* JavaScriptCore.framework in Frameworks */, + 7BAE9A063916466B4B698D93EAABC1A3 /* Foundation.framework in Frameworks */, + D9DF92E6BAA360D0C6D30D40E085CE93 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5AB9509FDC2673977F73857D58EA042E /* Frameworks */ = { + 2F88584D4E2C80529D7872E7E8F117B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 62CC2409A79920519F22EDD65451079E /* Foundation.framework in Frameworks */, - 503C5D7E0E3729314F4FD333587BF764 /* Security.framework in Frameworks */, + 4AAE5E337CA4FECD84E6BD26A81EC555 /* Foundation.framework in Frameworks */, + 1AE7C8A951166F6BB643EABD436B0518 /* PHFDelegateChain.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 681A6DA4EF0B7123BA7D53B4C3C85C7D /* Frameworks */ = { + 3069FD1742B15ABD93F8186A79E1846A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDEA0BA38DBEC5BAC837675ECEA761E8 /* Foundation.framework in Frameworks */, - 87ABBE367A34D4F682B45563001FAFEB /* QuartzCore.framework in Frameworks */, + 1960911EDB625F62FB81F8C7AC8C0DB0 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 699AF05FE430837D360357F3494DE79B /* Frameworks */ = { + 32AC4FBF702DA2357C6E33678701CE7C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9D690E9802B581DD63BE64A17B58ED3A /* Foundation.framework in Frameworks */, + 8C1A1F601759B942CD9D115835CC2D49 /* CoreServices.framework in Frameworks */, + 36FD5DFA9146AFEB2587AD414BA71B21 /* Foundation.framework in Frameworks */, + E7FFA8CBD41025ADD1E25F2D2AF6504D /* ImageIO.framework in Frameworks */, + 0A66F10395092E9BDD7FBDF35F678343 /* QuartzCore.framework in Frameworks */, + 68374AFFBE589A03B53FCFDBF771B6BA /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 77929D13767AC896A6C385C62D0FD219 /* Frameworks */ = { + 3396872C7153600DEC6BAE4171997AD0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D7B80CDA97C8D3203CB980B3CE271958 /* Foundation.framework in Frameworks */, + BE2EA64598C0E813036D90ADA033E8C9 /* CoreTelephony.framework in Frameworks */, + 5836B924915C4F421A9ED28A625409D2 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7DB36F4FE78DEE88D295047F82F70342 /* Frameworks */ = { + 558788B301412ECD2E61A1BF7337302C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 12799003A3E5C96D1C25BE79B8078D1F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7EF7185704D14F71EC7B7584CE1937DE /* Frameworks */ = { + 5DCD7B0CC017B3AF6B46BD165237FAD9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8B56662C00B0E2DFA46A9EA69F266749 /* Foundation.framework in Frameworks */, - 545663E3877E3234172C9E4C5559BD5A /* QuartzCore.framework in Frameworks */, + D98645994B0BF71CD0E6654EF1753A03 /* CoreGraphics.framework in Frameworks */, + 4747D7DECF54FEB25966636524C955C1 /* CoreText.framework in Frameworks */, + EBAEDC622192E8801A1349FD397574D1 /* DTFoundation.framework in Frameworks */, + 5B8605824D1FF895B15389A9A5E26629 /* Foundation.framework in Frameworks */, + 12FE108482793205BC0EC68BA82EF63F /* ImageIO.framework in Frameworks */, + 5D686E3B6677D67015CE6B4E4242FB0D /* MediaPlayer.framework in Frameworks */, + 78AFCAFEE148906EDB79750949B10D56 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80F8B0A08CD915980443933A890813BC /* Frameworks */ = { + 7C5C6861FBE2C4DF9976AC9ACEB353C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 19BE5908B6A3D4AFAAFA3188AAD32519 /* CoreGraphics.framework in Frameworks */, - AA5DE800AE06A6A4A24795457A9175EA /* CoreText.framework in Frameworks */, - 5A3B1AA43812205BD658CFC693D3EE02 /* Foundation.framework in Frameworks */, - 6C8BCC0FB4BEA8A1E75DF8AF8626AA46 /* QuartzCore.framework in Frameworks */, - 34C2BA9DD3ABECDEF31A889E0596BB58 /* UIKit.framework in Frameworks */, + 524A63E216C35B039D986F261F31ADED /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8C85BC2B3F345384058B0D5082C69E0D /* Frameworks */ = { + 7DCDEE4CBBB30CA3598A0F17A2BA95A0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 68631B0FFCCC9ABA0DA009D51EE18D8F /* Foundation.framework in Frameworks */, - 1F89393F0861B01C43F7669637DC1DA7 /* RMActionController.framework in Frameworks */, + CF33D49D6108A10E8D731C466AEBD89C /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 936735819B880FB975F69F5EEA07E30B /* Frameworks */ = { + B24FFB6095B4A6C298073EC61547AE2C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4666491993450A3810AEF96756FAF1B0 /* Foundation.framework in Frameworks */, - 874D0694465FA174806B3A4B1D4290E6 /* SystemConfiguration.framework in Frameworks */, + C183D9B2209FCD0FE3618243A6B7C484 /* Foundation.framework in Frameworks */, + 206CD71E1788176C3B24E5ADE6962232 /* OMGHTTPURLRQ.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 94A08817C027F5D4E6E569494CC82458 /* Frameworks */ = { + B6DFF689CFC3D9D4B87CEEBB6FDBC593 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8EC8B61B622DA732E64B446BCC74C340 /* Foundation.framework in Frameworks */, + 66D71CBBA642AFBC12178D2E40CA6AA6 /* CoreGraphics.framework in Frameworks */, + 3CBA888714E04635A8ED58ED9AE96920 /* Foundation.framework in Frameworks */, + 9DB97C854A0E13818C137FA3B260EABB /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9F69452588A17809CA2BF3D037852924 /* Frameworks */ = { + B6E79DF0300800B11BD3044161146A0A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 604A877488D38367D5A8E39D41F39809 /* Foundation.framework in Frameworks */, + 998408FE5E15F82608BE3BACA2914028 /* AVFoundation.framework in Frameworks */, + 31B7CFBD5F1A3331897907EFED935977 /* CoreGraphics.framework in Frameworks */, + C72F14D7A62EE6FB00AA7B439680F362 /* Foundation.framework in Frameworks */, + 45B747F87BE4E1DE1A70BFA2B4305DF8 /* QuartzCore.framework in Frameworks */, + 7CAF47560D0A024E9E273BAF8DA968A9 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A027CC1B5C0CA8ECBD8FE4E6A402A8D3 /* Frameworks */ = { + BA342760C9D43F76B14E6609D00D621B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1AFD5390D8241C541FA8076B63633E34 /* Foundation.framework in Frameworks */, - 0CC793EE4222101365684C819CDF8CCA /* PHFDelegateChain.framework in Frameworks */, + 7EE81307AD22DFAC09403C2EBE20DC02 /* Foundation.framework in Frameworks */, + A7D772EDB18AE5B8457A686D549F3CC3 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A7E0D8820C204F92C9B03B406E610090 /* Frameworks */ = { + BE694BF4D4EF1DC23A19202351E72285 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C754B14D0555A443D0D286ACEE17A01F /* Foundation.framework in Frameworks */, + 23DBC7646BEF7EC6440345FC4FDE4026 /* AFNetworking.framework in Frameworks */, + EC7748F0E242DE788C0F64C15B1EDCFB /* Foundation.framework in Frameworks */, + 7856704F2646D82A3EE7BA2251DE3652 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AECC2AB55D3BEBE83A000F6AB5CAC62E /* Frameworks */ = { + C0314679ACF3FC997C9D6BFB76D26973 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BBAE376921C995894F80D4DD36AF957E /* Foundation.framework in Frameworks */, - B886581311531B486B616F2AF478A3F3 /* ImageIO.framework in Frameworks */, + 540A8E35B005F68AD8385F6031F77133 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B6999BA8D5675D1317952912617A8925 /* Frameworks */ = { + C1443CB51FE76F02357C66451D0EACFA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A05FC016E7EAE860B7A5A9C75E44805A /* CoreGraphics.framework in Frameworks */, - B4758ED665D888772F11207E0A5D8379 /* Foundation.framework in Frameworks */, - A870FC1E91C95EDDFB024D4E1418CD04 /* ImageIO.framework in Frameworks */, - 2498CB16E4CBCDC468216D8026EE67B6 /* QuartzCore.framework in Frameworks */, - 946A0261AA9C2BFF0F5C014485624D30 /* Security.framework in Frameworks */, - 13601872ED4415682DE1B0EC8CDCA878 /* UIKit.framework in Frameworks */, - 137F74D9C30EE7AC5B6C3F4CCFA72C6F /* WebKit.framework in Frameworks */, + 57B0335F3577FB9AD740546867F33647 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B791F38653967D252EA9590093DD668B /* Frameworks */ = { + C392029B034C6F78C993352D39DBEA1F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2308CAD493022490EB6E4C59DCC2F42A /* CoreGraphics.framework in Frameworks */, - 8ABB21D008C372A07E2DE3F64D02D842 /* Foundation.framework in Frameworks */, - F3194C001EF8DB85B463F26BFDB51101 /* MobileCoreServices.framework in Frameworks */, - 709A9F5F828D5B408833A98706057CD1 /* Security.framework in Frameworks */, - 8043BA5183D48A9FCE592F31DE3069B0 /* SystemConfiguration.framework in Frameworks */, + FBB315EBC9D0D8010CB35B6FA028C413 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BC0A07523312A0BB663CE3FAC10EF77F /* Frameworks */ = { + C6B25CA2E4DDE998BD65EE34F11CECCF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 82D29A3B32FCB2470F925F9EC21586C7 /* AddressBook.framework in Frameworks */, - 27D3E46C017D71D2EE1E5434644B228E /* Foundation.framework in Frameworks */, + BF467AE337AE3539114D8901C5A41F64 /* AudioToolbox.framework in Frameworks */, + D8B4146577B6F707BAF6D210BCC0F430 /* AVFoundation.framework in Frameworks */, + 2A6E9B437048D05FE0423672EA01D851 /* CFNetwork.framework in Frameworks */, + 970BA97A347068AC29A936C556689F8D /* Foundation.framework in Frameworks */, + 56C5BCA95F8F83D55D15BDDB5BD5E271 /* MediaPlayer.framework in Frameworks */, + 747FCCC277155F25137008714558AEFC /* Reachability.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CA8ED5A48AC155A30F894C5A99CA4F83 /* Frameworks */ = { + C969EB142F7D9D2B51D5B4A49E0712FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D9B9DD179D07DA7861C3D34ECF649DD2 /* Foundation.framework in Frameworks */, + 5F2E459576E80FB415A0653534022608 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CC34AE363BDFCC0494C248F7BCDC7401 /* Frameworks */ = { + CABD2B40EAAFF98550BC088CF5906D04 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D0F960D4AE2D3ED85DDA7C25BC3D39C4 /* Foundation.framework in Frameworks */, - 22FA17FC6F5BBEFBDCA13A33480E3F80 /* ImageIO.framework in Frameworks */, - 6FE529E00E0AA0AA2556A419C7BBF892 /* MobileCoreServices.framework in Frameworks */, - 568A75A5FD6C5A328904B8CF0F79DC4D /* QuartzCore.framework in Frameworks */, - EB7518BF021A0001CEA5DA6AE49422BB /* SystemConfiguration.framework in Frameworks */, + C680A4E170658B3C64C5864894F015B0 /* Foundation.framework in Frameworks */, + 5F9F4E1C69724C832F25EDAC8858D1CF /* JavaScriptCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D2CC1D11E4984401FC0C4185C5936C2A /* Frameworks */ = { + DD2D42FD6E3A9003801A0C01C73A7C7F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B21B54432B6C689F48B5DDA13151F05E /* Foundation.framework in Frameworks */, + F9E6AF795CDDB97044C9EB7EE2B09237 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D514AF49CAD2E1B407687D5EBD659114 /* Frameworks */ = { + EBEFD44EE1AAB3782238DC92337CB858 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6C8E25533CB4F8B6BD2AE0DE5C35A1D3 /* AVFoundation.framework in Frameworks */, - 8D0D92223384DCA4FBB7A3B7F737DE54 /* CoreAudio.framework in Frameworks */, - C6C9694679CA09B1AF94B8B1B5AB4C3C /* CoreGraphics.framework in Frameworks */, - E51FCDBB483AC4B62A0FCFBB16248DBB /* CoreMotion.framework in Frameworks */, - CBA72DC12F1CC0B5E7DB45FC82D1B22E /* Foundation.framework in Frameworks */, - 03BF757B6CCA752B982C12EB56D9D8DE /* SCSiriWaveformView.framework in Frameworks */, - 8276BE3569536AD2F0C4AD7306631A9B /* UIKit.framework in Frameworks */, + CC10130A66F8627851C8424E5E8CA34C /* Foundation.framework in Frameworks */, + A123AAA29B065AFDDBDDBC60902FD71C /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D9B0B444AC1B061111C1F2BFAFDF5041 /* Frameworks */ = { + F5F11F7984C421D78139C84E3E245887 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 11EDA23228074069AAAD1DAA3B4550EC /* CFNetwork.framework in Frameworks */, - AAD11BA24C1AA69DD6B774C87DBE6EBD /* Foundation.framework in Frameworks */, - 1AD5A47ADAF738B37116272E5463716D /* Security.framework in Frameworks */, + A8EED92B0C5E0EB17E5858DE0B979ED9 /* CoreGraphics.framework in Frameworks */, + 5EEF2154F3355D41C0D40ACE09E884EA /* Foundation.framework in Frameworks */, + 7F74D31182D00213F1BA61C9C2E403B5 /* ImageIO.framework in Frameworks */, + 84A4F44E73D43F0683A990DD9B677CAE /* QuartzCore.framework in Frameworks */, + 68049CD4B46DEEE13641F0736AC4E8A7 /* Security.framework in Frameworks */, + 13D48445A0FE9356115C56AB24851742 /* UIKit.framework in Frameworks */, + C0FDCE9EBB06710D53393E9B01D62E3B /* WebKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9457A4DA91464A76E81E8564FD21CD6 /* Frameworks */ = { + F68F5828AB991D03771F48CD95B6DF19 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 38BA0A06EEA2272EFFD01E9DE4DD7A1A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - EBDE5327B079C5540B6DBF59B8FBF928 /* Frameworks */ = { + F844269B4A9FE8E802184828C6C3B6A6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C1FD75D6C0D4C9AEA0D91AABD5DFF58A /* Foundation.framework in Frameworks */, - 2BD6DEAB8D6842121BE6E0E797B86B21 /* QuartzCore.framework in Frameworks */, + 9ED3E3CA71DDF425ACDAF4088A7684E7 /* CoreGraphics.framework in Frameworks */, + 83F6D2FD350618FE16C51C7DCF0DB2E5 /* CoreText.framework in Frameworks */, + D68F0B4A2D65D1C3FAFBBB11C3D51FE2 /* Foundation.framework in Frameworks */, + FBFF7CEFC57B9B3D76844B06FE60D063 /* QuartzCore.framework in Frameworks */, + F9D683EC3C28807A84B7D15EE705F954 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4266527F331E9C11E8EECDA58676555 /* Frameworks */ = { + F94139468DCC7BBD2A5ECB767333784F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 06AA37E080D3EF141729C17CD56B0F78 /* CoreGraphics.framework in Frameworks */, - E5C99EA93C999A34993ACA611339CF33 /* Foundation.framework in Frameworks */, - 3BF97F6BE2B829164F9CFA08E1D0E241 /* QuartzCore.framework in Frameworks */, + F373E08D2E301F604751C0E5C5996B18 /* Foundation.framework in Frameworks */, + 91FA65E0FFB4E1524E35C57A322452A1 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F644ADE2F355A5BB32D309DDA4F5B84D /* Frameworks */ = { + F9EED9FDB6BDFCD02B9D7BDAD5BF2FA8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9A99FF824B7B755192B4D218F04BCB4C /* AFNetworking.framework in Frameworks */, - D4C526F2B8C53BFF70DA8129012599DB /* Foundation.framework in Frameworks */, - D749018988F001B5766D14217991A69F /* Security.framework in Frameworks */, + EB4F7CF30396FD1F738DB8DD8EA064BA /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FBBCE1259C4AC9AB8F63FC0CB14B6953 /* Frameworks */ = { + FE7B604E5DBC84EACCF1DF18FD8F4F0E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B291E54F88265B163D4FE95181D952F7 /* CoreTelephony.framework in Frameworks */, - 8F3D10373D1EA519CABF530E5719D2EF /* Foundation.framework in Frameworks */, + 5B84F61DCBFB1567484C7AD4B4B03CCC /* AVFoundation.framework in Frameworks */, + E2DD5207EF5ABCE4033277E909BAD5C6 /* CoreAudio.framework in Frameworks */, + 2E71D658DC69C054A1F9DB242CCA63C4 /* CoreGraphics.framework in Frameworks */, + 67688E88E6FED3BD4498AB3E49E5082D /* CoreMotion.framework in Frameworks */, + E1AD114DBFA17FF19F824F3E7A7DA43F /* Foundation.framework in Frameworks */, + 3503B3FBA341E54B5C076F7B2FF27922 /* SCSiriWaveformView.framework in Frameworks */, + DBB19D73C091BE29BA85E654A64987CE /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00C18B805EB41AB59DDFAAFCEF09B91C /* DTUTI */ = { + 027C3C8366849E7FAE752AE880B2C930 /* Support Files */ = { isa = PBXGroup; children = ( - D335766C3DFCF0A52F532C8CFE25A928 /* NSString+DTUTI.h */, - 06C8CD40F7573ABB32D37D4986CF6518 /* NSString+DTUTI.m */, + 4A29C60680D34702057E4D22C403C630 /* DAKeyboardControl.modulemap */, + F49A654448F9F73780F2B5451C89E1B7 /* DAKeyboardControl-dummy.m */, + 3F8D17A350594A79BE30A681A0CDF916 /* DAKeyboardControl-Info.plist */, + BC6D752C122D7E3060C2040C7F0297D7 /* DAKeyboardControl-prefix.pch */, + 984AABA0F872FE91511EBC38C59858AD /* DAKeyboardControl-umbrella.h */, + E1D4A20DF072E367910A7536CB17BDC0 /* DAKeyboardControl.debug.xcconfig */, + 3FD24C6B406C455D1A72D03B730C3A52 /* DAKeyboardControl.release.xcconfig */, ); - name = DTUTI; + name = "Support Files"; + path = "../Target Support Files/DAKeyboardControl"; sourceTree = ""; }; - 01A35D72E83E20A05893E021D3499EAB /* DTProgressHUD */ = { + 07A1F12A9C4C97C2808A2D1FDBFF1D56 /* Targets Support Files */ = { isa = PBXGroup; children = ( - DC28CC3C0E86B22A5ABEB180363617CA /* DTProgressHUD.h */, - 1A2F77D352EBDADF569E21B7DC8787D5 /* DTProgressHUD.m */, - 10C3D11226BFC9634D7E1B4CBE3C59B6 /* DTProgressHUDWindow.h */, - CD5C75FBF56AD0F3BA1F45150B87B455 /* DTProgressHUDWindow.m */, + 47A0859B4428C4FEB94623DD76B3C8CB /* Pods-Jasonette */, ); - name = DTProgressHUD; + name = "Targets Support Files"; sourceTree = ""; }; - 03E54C919696BAFF28B5ACEF215FCE05 /* Reachability */ = { + 089C457641B8DD2DE0BF362944543632 /* SDWebImage */ = { isa = PBXGroup; children = ( - 3C989B19DD083EC583BD8346DD7B1C43 /* Reachability.h */, - A58FBB96B1DBA61D45ED7AD8732F6955 /* Reachability.m */, - C86E4DFC505C78558D19C6B8CB943EF2 /* Support Files */, + D7B57C42F6320C5B7036981728EDCC45 /* Core */, + AE100478CCCA32DB9E3EAA457997D1C4 /* Support Files */, ); - name = Reachability; - path = Reachability; + path = SDWebImage; sourceTree = ""; }; - 063A1449A83F0BAF2155DBEF6629580A /* Resources */ = { + 08C0EBA7308F2F2FD6A919C24348DE87 /* Support Files */ = { isa = PBXGroup; children = ( - F70987C276F55A5B14F7A17FDEEC89B0 /* default.css */, + 37D17EC1FF1595229645ECB7E53AEBE5 /* DHSmartScreenshot.modulemap */, + AB9CA071FECECAFFFC7EF580EA7621A4 /* DHSmartScreenshot-dummy.m */, + AB9AAA64DED9BF255A3C21489C4276C3 /* DHSmartScreenshot-Info.plist */, + 8B755B1E0B50296AB797F23D1AF8ED39 /* DHSmartScreenshot-prefix.pch */, + A2C4AF6FFD3F2F0BA3C60854C39B3083 /* DHSmartScreenshot-umbrella.h */, + D2C1F4554D039B132F8A326693D9B776 /* DHSmartScreenshot.debug.xcconfig */, + BBBDF2B5A3F8830A7188D58FB5A3AC71 /* DHSmartScreenshot.release.xcconfig */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/DHSmartScreenshot"; sourceTree = ""; }; - 0AB98B67313BF40486AE92A187DE46A9 /* DTSQLite */ = { + 09E4F19B1C95B42314E43C826B499348 /* Support Files */ = { isa = PBXGroup; children = ( - E1AD17E690A6F10B7B4AC19522E11D38 /* DTSQLiteDatabase.h */, - 551F53DF64284B76BFEF22037722A542 /* DTSQLiteDatabase.m */, - A01B59AE2032467F4694A4FBD505AEDC /* DTSQLiteFunctions.h */, - 0A45C43140819817D63D05C0DF468835 /* DTSQLiteFunctions.m */, + 0577E2A78AC72CE3D3523C6FDF4FF36F /* PHFComposeBarView.modulemap */, + 10E756A006978B5B6B43F5B4F8FCC56F /* PHFComposeBarView-dummy.m */, + FE6E3494C939B891CC19D6CE2CA3AFD0 /* PHFComposeBarView-Info.plist */, + 551E4A32C6A8C0D9327CDA64A848D7C4 /* PHFComposeBarView-prefix.pch */, + 0F3DE30FB49335567254765F924999CD /* PHFComposeBarView-umbrella.h */, + BE15839BC2D5EAD9116C869010B668CB /* PHFComposeBarView.debug.xcconfig */, + 1018A74779596E7AC8AE548066209342 /* PHFComposeBarView.release.xcconfig */, ); - name = DTSQLite; + name = "Support Files"; + path = "../Target Support Files/PHFComposeBarView"; sourceTree = ""; }; - 0C550946DEA172F5C1407EB2A2E96D8E /* UIKit */ = { + 0A4921C4AB1925913E52B2D12DB950FD /* DTAWS */ = { isa = PBXGroup; children = ( - 1E29A64C2FA8DD1449367A1F5485EE3D /* DTActivityTitleView.h */, - EBE24BC698D7A24DD0413B6E2FBE4C3B /* DTActivityTitleView.m */, - 50E932C44C351B492A1A7EF58E664B2D /* DTCustomColoredAccessory.h */, - 6DA5D976DEBEA96C79435ADA5F48BD9D /* DTCustomColoredAccessory.m */, - 025F861BD4FD7510DDBD125921F310A1 /* DTPieProgressIndicator.h */, - 0E0037625247BFC809EB3E029AD6BF27 /* DTPieProgressIndicator.m */, - 051C4C073508AD5C86D7B0744F212411 /* DTSmartPagingScrollView.h */, - 3A6755BE10B72C5426022E1A30BBD16B /* DTSmartPagingScrollView.m */, - 311050611377408363E3C20E1496BD9F /* DTTiledLayerWithoutFade.h */, - 9943E991838A224E4A5AB069B2472B0F /* DTTiledLayerWithoutFade.m */, - AEA3E0B7B1A77F7BE8853DF0ADF088F7 /* NSURL+DTAppLinks.h */, - F81E7AE5103159F5A78C1AE609EE75A4 /* NSURL+DTAppLinks.m */, - 2E4AB33537AEBBD305648ADF742E0AF0 /* UIApplication+DTNetworkActivity.h */, - 7DF96C8E503FC9006FA9DA9BDAA176C2 /* UIApplication+DTNetworkActivity.m */, - 6B71F4D52E695DA2B041D6CE0FC1F631 /* UIImage+DTFoundation.h */, - 355CC84277CD580D693E9F17F539C1F6 /* UIImage+DTFoundation.m */, - F12AD97F9854664C0DBCE5AFAE5DE31F /* UIScreen+DTFoundation.h */, - 1BF1D876A99E6F600782016BD0B25701 /* UIScreen+DTFoundation.m */, - 076BF5EE52E2B71F551B4A594D0BDD3E /* UIView+DTFoundation.h */, - C570B0F32DFF4DCAB72035DBA65EA483 /* UIView+DTFoundation.m */, + B9487941140447262E6C10853693763C /* NSURL+DTAWS.h */, + 7482601748B68C5E11494A337FFFB339 /* NSURL+DTAWS.m */, ); - name = UIKit; + name = DTAWS; sourceTree = ""; }; - 0C64B01DF7B502DF9EA83F00F8843CA3 /* Reachability */ = { + 0E28C4B7B99BD922A47AAE1653674303 /* NSHash */ = { isa = PBXGroup; children = ( - 9E30BB96F7BD1B45C557F38922526C05 /* AFNetworkReachabilityManager.h */, - 232B592350DE0C821EDC814960C1FA2F /* AFNetworkReachabilityManager.m */, + 580D06719889EDE978961CB1F251642F /* NSData+NSHash.h */, + A029E76D3E057B5238FC7B44E6655652 /* NSData+NSHash.m */, + A23ABDEED49B2A76722858E7681731A3 /* NSString+NSHash.h */, + 1B702BC013138673D514290FCC4CD98C /* NSString+NSHash.m */, + 4E36A0BC0EB5ECA26B4728750C7FF15A /* Support Files */, ); - name = Reachability; + path = NSHash; sourceTree = ""; }; - 11150B32E3697A4D52314BCC95E7DFB0 /* IQAudioRecorderController */ = { + 0FE29FC4C14F5DAF06089C19A98116B1 /* SCSiriWaveformView */ = { isa = PBXGroup; children = ( - D1EC8F7C78226EAE6FC7AF0CC929A41D /* IQ_FDWaveformView.h */, - 2DE8B3B0565AE563E408E4A9F3B67ABA /* IQ_FDWaveformView.m */, - 46281EEC6B8D6031E6BF4C7203990F52 /* IQAudioCropperViewController.h */, - 8E91ABB00B9A0DA79E3E4073C6214CB7 /* IQAudioCropperViewController.m */, - A817494A6C555A5A22FE57E6B941C846 /* IQAudioRecorderConstants.h */, - 92FFA160C70004374764FB7DE5BAF832 /* IQAudioRecorderConstants.m */, - C2D480344A702B9C58DF34924CCD1FA4 /* IQAudioRecorderViewController.h */, - A28C42592BC037244A15C49B3A165D06 /* IQAudioRecorderViewController.m */, - 7DFC81923B5D3FE7D11094382EBDAE13 /* IQCropSelectionBeginView.h */, - 4F938308C325B592FCEA711340A1FFED /* IQCropSelectionBeginView.m */, - 4F62A67C9FEDC2BD9C475F5B6355A148 /* IQCropSelectionEndView.h */, - 9A6F1F1B6FDD023CDEDBFC80C07D099E /* IQCropSelectionEndView.m */, - F1A135D98CB0B5CF3C9545922C727767 /* IQCropSelectionView.h */, - B672922EA339FFDCDA96653C17FF5688 /* IQCropSelectionView.m */, - A6B5D12E3BD5498CDA6893E335683E76 /* IQMessageDisplayView.h */, - 8D28F9CFCBC11366632BD5D5E9F7219C /* IQMessageDisplayView.m */, - E4E573255CAAAC665C2710B287B2F9FA /* IQPlaybackDurationView.h */, - 526F7CCD4DE14D9D4E9DE303D5041553 /* IQPlaybackDurationView.m */, - 34CFFA6592DD184D396F9F8FB724CE7B /* NSString+IQTimeIntervalFormatter.h */, - 0C62451E74E47FB184190A716F6C7D25 /* NSString+IQTimeIntervalFormatter.m */, - 3966228961EC7D841F17C538D60B5245 /* Resources */, - AA7F6CCE56CC9591745D26A18B8BC078 /* Support Files */, + 6252CD13C255CF4C03F4C884227EDAB6 /* SCSiriWaveformView.h */, + 60777474E2B24B5C45701AA544A3BCE2 /* SCSiriWaveformView.m */, + 47AC0BF6278FDD5780A53B8A0D856548 /* Support Files */, ); - name = IQAudioRecorderController; - path = IQAudioRecorderController; + path = SCSiriWaveformView; sourceTree = ""; }; - 1320BF5281F73BF8277CA8865248F47A /* Support Files */ = { + 156980BE6A8FE86C3B1B33CA0AFDAAEE /* Support Files */ = { isa = PBXGroup; children = ( - C2465B85CDF5BB4B2A8743FBBE4D6609 /* Info.plist */, - D083FA51AFFF0E444422CC3F8F3B9BE4 /* OMGHTTPURLRQ.modulemap */, - 497DACA09B1AF0C7C6F056D5EC4F3AEE /* OMGHTTPURLRQ.xcconfig */, - 5CA960EC62CEC903B7994A99E876C6D6 /* OMGHTTPURLRQ-dummy.m */, - 34DF29BEE47B0D35BED82334809AF629 /* OMGHTTPURLRQ-prefix.pch */, - F3C4B84A466B89B7FB040A19CE82EE83 /* OMGHTTPURLRQ-umbrella.h */, + 69CF90DBA41FBFE737A339677869C95B /* SBJson.modulemap */, + 719FEBB159E9B60C99911EE3534C10E2 /* SBJson-dummy.m */, + C27F8AB956CBFB659BA8FD6B5AD93FF5 /* SBJson-Info.plist */, + EE109C9057441A4FA69D541D844E7F2E /* SBJson-prefix.pch */, + D523AB3DCA3AE00AD356B5E0C1F765E6 /* SBJson-umbrella.h */, + 757222D86BAF229194032925BC0104B2 /* SBJson.debug.xcconfig */, + 92F00B26565FCEF251890B333F11F31B /* SBJson.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/OMGHTTPURLRQ"; + path = "../Target Support Files/SBJson"; sourceTree = ""; }; - 1691FFD437895ADFD035F828E647B087 /* UIKit */ = { + 165EEC869717378C020E0EAA70E94DAC /* AFOAuth2Manager */ = { isa = PBXGroup; children = ( - DC06C3F57AE44459CA8A0DB10A910DFA /* AFAutoPurgingImageCache.h */, - 5967A38F7AC67FACF2527F5349DC23B9 /* AFAutoPurgingImageCache.m */, - 52762B80A432C12B7EFBC87C3CA383A8 /* AFImageDownloader.h */, - F15ECB817876211A709077D6F1EB4742 /* AFImageDownloader.m */, - 99B575702A8DAA58811C56EEEF6B57E2 /* AFNetworkActivityIndicatorManager.h */, - A7FBA76C2BBAEEFB570911D376AD5685 /* AFNetworkActivityIndicatorManager.m */, - B1882C79563B76FD422B12681A60AC1A /* UIActivityIndicatorView+AFNetworking.h */, - 92CB793E212B3A489491E79934C42022 /* UIActivityIndicatorView+AFNetworking.m */, - 09D2D2CA4C80A919F4B858A1DDE986DC /* UIButton+AFNetworking.h */, - C08AB5BE81F1DE7D3353E16FE8A691D8 /* UIButton+AFNetworking.m */, - 262D62538040B2AE0E9C563C2AC1C08F /* UIImage+AFNetworking.h */, - 5326224DD6842882AD6F1087FE7890AA /* UIImageView+AFNetworking.h */, - 665227015E93D6A0D7970467CEE3E7C0 /* UIImageView+AFNetworking.m */, - 13E5C2D79494C9D9CC8C638313803C36 /* UIKit+AFNetworking.h */, - 528A7982BA9364138ED261DD9B6BA77D /* UIProgressView+AFNetworking.h */, - 742FF527263FB967CDD5BC63B72A00FB /* UIProgressView+AFNetworking.m */, - 2A921D353D780D143178E19FC5EDE583 /* UIRefreshControl+AFNetworking.h */, - E89430E70392471774784DECEFF8D08F /* UIRefreshControl+AFNetworking.m */, + 913ADC71F2C84BBA74807421AC657A44 /* AFHTTPRequestSerializer+OAuth2.h */, + 1E2084AC78997B7471738D82C394EA43 /* AFHTTPRequestSerializer+OAuth2.m */, + 358CFF6FEF8258C233AA11303552BF8A /* AFOAuth2Manager.h */, + 23EA484AF45F531310DC3603084BCF4D /* AFOAuth2Manager.m */, + 02A17429BC33D0D4B7A683E5343482EE /* AFOAuthCredential.h */, + 243BD68643D5810814604C2CD7B8CAB8 /* AFOAuthCredential.m */, + 29D9BF4B7415B9532391EAFD9D18D5B2 /* Support Files */, ); - name = UIKit; + path = AFOAuth2Manager; sourceTree = ""; }; - 17C19F019CB9E6B0AAA6397A559D83C2 /* Support Files */ = { + 18DE41B9A107D1E12F7B65C80163AA41 /* Resources */ = { isa = PBXGroup; children = ( - D78E8B1819CB78AF3FF3887FADEAF543 /* Info.plist */, - B2F57F099ACEB47B890FFD2649591FF0 /* NSHash.modulemap */, - 3CC96D99A5FF4AB5E81B37EF291511BC /* NSHash.xcconfig */, - D75AE52B4D61737ED50714017A28DEBC /* NSHash-dummy.m */, - 4F779F5FDC502CB17D38CDA4B910F177 /* NSHash-prefix.pch */, - 31685A66CB1B8D09B5DDFF7538985E54 /* NSHash-umbrella.h */, + 63884B03AFE122D8018DA0B316DDCB31 /* icon-error.png */, + F787D8C79DD3AC9113D8D406AF403FA1 /* icon-error@2x.png */, + 4F5DA8AFBD3C01732E1860E82AA061EA /* icon-info.png */, + B76B864CE2E4DDF78240DC4395022547 /* icon-info@2x.png */, + 8FA9775229EE18D4C9F94E9AC2438DC4 /* icon-success.png */, + 84BF3403C55F449DA06123619999D56F /* icon-success@2x.png */, ); - name = "Support Files"; - path = "../Target Support Files/NSHash"; + name = Resources; sourceTree = ""; }; - 1AD1985FC95E4AEE866F2DD32D40DBA5 /* RMDateSelectionViewController */ = { + 19F22A6F4183D1B38299345291862986 /* TTTAttributedLabel */ = { isa = PBXGroup; children = ( - 6E11756034350960B2A2A7A7DD9C225A /* RMDateSelectionViewController.h */, - FE15C0CDACDE466F86E50E27E3E4E08E /* RMDateSelectionViewController.m */, - 3CC5DC0FC4C5CB7D3A197AB377601116 /* Support Files */, + 58B23B017DE1F1499363F0664A0E7F72 /* TTTAttributedLabel.h */, + D434FF7175C54B54FF15E273354A77D8 /* TTTAttributedLabel.m */, + 1C31AAE5D6A8BBDDFD36D25A3897DBF6 /* Support Files */, ); - name = RMDateSelectionViewController; - path = RMDateSelectionViewController; + path = TTTAttributedLabel; sourceTree = ""; }; - 1B65BD5542778B3F1228A90E4C2C87A2 /* Support Files */ = { + 1AB3A952D9E6B26352DE94B9B1ABB31C /* Core */ = { isa = PBXGroup; children = ( - 3595306CA5F5DCA6BE99A1DC29E6C42B /* Info.plist */, - 1BCC20A028CEE99E080B21156F995286 /* SWFrameButton.modulemap */, - 3351A3AC463F5C91DB7817F666907990 /* SWFrameButton.xcconfig */, - 11D259986D6906636C6CD45C60AA0FDC /* SWFrameButton-dummy.m */, - BC7BC327E7098818B43214B6D253A3DD /* SWFrameButton-prefix.pch */, - F265EF81910948BE39F9824B4DE94C44 /* SWFrameButton-umbrella.h */, + 9FD45416F8E03498ADBA0589F9C1BB1A /* DTBase64Coding.h */, + 5CDF0D8C84ED40198A9CE92C15C07543 /* DTBase64Coding.m */, + C651F2C8E9C9E7074009CA2F8FC52108 /* DTBlockFunctions.h */, + BCFE68EDD4C560B9F975D526785A13B5 /* DTBlockFunctions.m */, + 2700093A8130D356B9BB2BE7F29AC424 /* DTCompatibility.h */, + A3BEC1CE1E102251B1C5E01712281D37 /* DTCoreGraphicsUtils.h */, + 18450FBA6C9B83829987B5A47BF7F95E /* DTCoreGraphicsUtils.m */, + B93418D2EB8FBC25843178CDD2EA4071 /* DTExtendedFileAttributes.h */, + 1B4E9D08BE4D42A9E1CA7FD450B1873B /* DTExtendedFileAttributes.m */, + 3A8DCAA6AFAB820AB4AC78632C2B34EC /* DTFolderMonitor.h */, + E5E981F9CA66315B3EE0B4B5197881AE /* DTFolderMonitor.m */, + 1CD9EE59CF23355D81AF93511B24EB81 /* DTFoundationConstants.h */, + 6D0E24401E43F61FDE0CF85BEF23CDE2 /* DTFoundationConstants.m */, + 726231912AF8FA00D1E9A5274C0B7599 /* DTLog.h */, + 0CEB32BA8E881BBC2CE76E7632502268 /* DTLog.m */, + 54EFA6D02D1F6F603EFD9F528375BB8B /* DTVersion.h */, + 08D06FA8C50D3BD53AC9438DFC90546E /* DTVersion.m */, + 48282D192DA2C3430DC645A53C8F3EC7 /* DTWeakSupport.h */, + 425926A47F77FC987863810EB86C7A80 /* NSArray+DTError.h */, + C712905EB1D700C6499464A95FB4B407 /* NSArray+DTError.m */, + C44EEB71815D0C8504E6FB5207215EEF /* NSData+DTCrypto.h */, + 25209E0C10DCC70A6E14B4B10EB338B0 /* NSData+DTCrypto.m */, + 9E5D1CC0C6E3FEB893DAD59C4DFF94AE /* NSDictionary+DTError.h */, + 2E1C4688E3E3502DB9DD7AA6ACB09D6B /* NSDictionary+DTError.m */, + 585C378D2A61140846420F9C3BEBB159 /* NSFileWrapper+DTCopying.h */, + 002D4B1B0B9B23D82E0CA10CD96B05D4 /* NSFileWrapper+DTCopying.m */, + 73520FDC76719B7E997AD1DE09B84EAB /* NSMutableArray+DTMoving.h */, + 065266EB5491D5CCDCBCE01599C21D5F /* NSMutableArray+DTMoving.m */, + 9D8EE72500054594724432F2603D11FE /* NSString+DTFormatNumbers.h */, + 3703A27A6B61DB855E8911B1FD67C36E /* NSString+DTFormatNumbers.m */, + DB199EE7946058F4943C2053B0B2C68B /* NSString+DTPaths.h */, + 72761E2BA114AE211CC815206B4F71F6 /* NSString+DTPaths.m */, + 6E3FB8CAB53F4B7E0C9BFFD43CD61981 /* NSString+DTURLEncoding.h */, + 9C62173126A39440F0EA6B28FD800FA4 /* NSString+DTURLEncoding.m */, + 55234810A6BCCBC73C83F45CBDCE1EDB /* NSString+DTUtilities.h */, + 0A79AF20529841238546B3B66106EC9B /* NSString+DTUtilities.m */, + 39B96E27F320C9D7DA84AFCF14D802AF /* NSURL+DTComparing.h */, + F34A18BE39E3FEC8BCB4F50D80FFC20D /* NSURL+DTComparing.m */, + F8EF054CF1BC3854097F909CAED9580A /* NSURL+DTUnshorten.h */, + 359E2B7FBF0B952B5A60662B019D24AF /* NSURL+DTUnshorten.m */, ); - name = "Support Files"; - path = "../Target Support Files/SWFrameButton"; + name = Core; sourceTree = ""; }; - 1CE0D1690B18F0E26181421E9437B4E9 /* OMGHTTPURLRQ */ = { + 1C050356986D5E757E52BE088D2D67B1 /* Core */ = { isa = PBXGroup; children = ( - A54C9291BEA09B1478FF8C9BBA05B42F /* FormURLEncode */, - A31F718C7888DD7B60331D46DB9F37FC /* RQ */, - 1320BF5281F73BF8277CA8865248F47A /* Support Files */, - 582E78E1C3BA8C1C86D636F4BABC77DA /* UserAgent */, ); - name = OMGHTTPURLRQ; - path = OMGHTTPURLRQ; + name = Core; sourceTree = ""; }; - 2621C89D591ED62824442FD11D61F26A /* Support Files */ = { + 1C31AAE5D6A8BBDDFD36D25A3897DBF6 /* Support Files */ = { isa = PBXGroup; children = ( - BC417A25049936E773F493D75C0C70E2 /* Info.plist */, - E2394A689CC2089DE72D70FCC0B265A5 /* PHFDelegateChain.modulemap */, - 7E9E46D4CAD54597D6F9FF1103050A45 /* PHFDelegateChain.xcconfig */, - 0BF0CA69E5EF5DEE00C115CB539C418C /* PHFDelegateChain-dummy.m */, - C43450F3574E9E6E7EF6E7FE2FB668BC /* PHFDelegateChain-prefix.pch */, - F7BA1809C64C1DAA6018E3140A8DD563 /* PHFDelegateChain-umbrella.h */, + D4402A0B9DCAC4BCFFE87683D1E19BA2 /* TTTAttributedLabel.modulemap */, + CFECFCD26DAD6FEABAD9C3672DD31B67 /* TTTAttributedLabel-dummy.m */, + 4DB3A78D9B733E30324D2BE3B30BDB7C /* TTTAttributedLabel-Info.plist */, + 7EC9C900C220E1589B65AC8C98CEB851 /* TTTAttributedLabel-prefix.pch */, + EC48DB885F5F05F87CD900A5CCDF2BBD /* TTTAttributedLabel-umbrella.h */, + 6BA8A9FD82840CCD5528231B06B4E8EA /* TTTAttributedLabel.debug.xcconfig */, + A86819D678568015DBBC8176970DB65E /* TTTAttributedLabel.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/PHFDelegateChain"; + path = "../Target Support Files/TTTAttributedLabel"; sourceTree = ""; }; - 28938CB02CAB67595052D61E0091542A /* AHKActionSheet */ = { + 1CED7A1F7EF688D254F15FDF8F111675 /* UICKeyChainStore */ = { isa = PBXGroup; children = ( - BEA818228A07B6E9234E0974097646BD /* AHKActionSheet.h */, - F09B44C368B9C839E0FAEBF068BAAE76 /* AHKActionSheet.m */, - 6648BA3C4E28CD013CA57461384415EF /* AHKActionSheetViewController.h */, - 34AE5A3F648DF2A4338161FD01E40580 /* AHKActionSheetViewController.m */, - 80B64901FADBEFE1C3D1F2D29F663EEB /* UIImage+AHKAdditions.h */, - 00493C974FE3C2FC3B0B6222BA5ED693 /* UIImage+AHKAdditions.m */, - D15DB7874274DCC4D4361DD884584AE2 /* UIWindow+AHKAdditions.h */, - 8ED1F59482E3033D963D4720DFEAE7B6 /* UIWindow+AHKAdditions.m */, - 2E6E2CEFE56D4015FFEA015570075808 /* Support Files */, + BE6892859C1B618A038EAB1DCA6A9A05 /* UICKeyChainStore.h */, + 4AD830984D53FC4CD38E8B1CA5E68779 /* UICKeyChainStore.m */, + F357D261B19D57CEB1EFB9806493787C /* Support Files */, ); - name = AHKActionSheet; - path = AHKActionSheet; + path = UICKeyChainStore; sourceTree = ""; }; - 2E6E2CEFE56D4015FFEA015570075808 /* Support Files */ = { + 2038DAF1517E03690701A319DBB28A32 /* Resources */ = { isa = PBXGroup; children = ( - 4E4FE8498C4C80FF2294EBF963B91684 /* AHKActionSheet.modulemap */, - 64AE86A4174ECE589CE404811E6BEA63 /* AHKActionSheet.xcconfig */, - B151D6061C84B274211F3DEDDB388FC2 /* AHKActionSheet-dummy.m */, - 85968DF52D21A49F021C6E1561AD3244 /* AHKActionSheet-prefix.pch */, - 9C73F73A2D9F3F92D1B48C272D3077EA /* AHKActionSheet-umbrella.h */, - C6305F0379CC6534649C01327C6B9ECD /* Info.plist */, + C09C1482BDB18FDC9DAFE74B051DF049 /* default.css */, ); - name = "Support Files"; - path = "../Target Support Files/AHKActionSheet"; + name = Resources; sourceTree = ""; }; - 317D5079A3A3459914578B8CC6F2FC6E /* Support Files */ = { + 228159B6925DB89506059251A9E3D7FB /* AHKActionSheet */ = { isa = PBXGroup; children = ( - ECBC3E7F1D873855BCEC1AA3E16960B5 /* Info.plist */, - BC5D3931E613A56BD5134D921477AB0C /* PHFComposeBarView.modulemap */, - 2A8E64B438CA0224D41F48F7243BC98E /* PHFComposeBarView.xcconfig */, - 868DE1EFD114A8FF2689DCF2E356B8FF /* PHFComposeBarView-dummy.m */, - 0F928A03C4490A820F68602A4435BFAB /* PHFComposeBarView-prefix.pch */, - B99677CCC701E728609FE3973C228589 /* PHFComposeBarView-umbrella.h */, + DE131F87221F3043B3705D09E14BBAF5 /* AHKActionSheet.h */, + C9FE2109ADEEC05B64D5153967C7C234 /* AHKActionSheet.m */, + AF24C9E960A5906FC875C70A50DAA2F3 /* AHKActionSheetViewController.h */, + D6C57D13EC200064BE93BD0067A3CA7E /* AHKActionSheetViewController.m */, + 7FAF448666E518954719067B4B598A6A /* UIImage+AHKAdditions.h */, + 999BC28F519908F3FA30DAC5E56AF9C6 /* UIImage+AHKAdditions.m */, + DC82941001664190D534F2647CAA826F /* UIWindow+AHKAdditions.h */, + 6582C61795E7288CDEB7AB1A58B99B00 /* UIWindow+AHKAdditions.m */, + 8F762976D3A967C6033C1CA0EDE45B5B /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/PHFComposeBarView"; + path = AHKActionSheet; sourceTree = ""; }; - 34F5B358BA87E553ED3EF462F40B33F8 /* MBProgressHUD */ = { + 228CBD3D4782461833AF94B470D24555 /* TWMessageBarManager */ = { isa = PBXGroup; children = ( - 3E579C05FF49D90FCA6E58B7381ADA81 /* MBProgressHUD.h */, - 728002332EAE28CB8620524F6AE370CB /* MBProgressHUD.m */, - C7AE5676C72C6F38AE273E707A3D4A31 /* Support Files */, + 8868D46A08F0580224637B452CA4C046 /* TWMessageBarManager.h */, + A151B710913BAE9DA712D5A6DDE49B2B /* TWMessageBarManager.m */, + 18DE41B9A107D1E12F7B65C80163AA41 /* Resources */, + 360E10F8E9CCEFF44D714644F2683A6D /* Support Files */, ); - name = MBProgressHUD; - path = MBProgressHUD; + path = TWMessageBarManager; sourceTree = ""; }; - 38E340F288CCF31EC9A32363E19A1FA7 /* DTZipArchive */ = { + 2478D4C87D4999A5C10F6E61B26F798C /* Minizip */ = { isa = PBXGroup; children = ( - 41F4D99F4A16AD8C9492086FF8CF6724 /* DTZipArchive.h */, - 3D8F6445C781527BB1EE74DD4F08CDEC /* DTZipArchive.m */, - 1FD3AACC5DC13CD990F1D4B152B27170 /* DTZipArchiveGZip.h */, - E5DE166CAF593FFB241DBC86A21BB7D1 /* DTZipArchiveGZip.m */, - 674555CE74CB77C84D08626D3B3065B2 /* DTZipArchiveNode.h */, - 56294C5EEAD32234DC1425768B6F0042 /* DTZipArchiveNode.m */, - B22938F25586C91428023A4779680D68 /* DTZipArchivePKZip.h */, - 6170EF8CDF07787817E954E56BB9B1A2 /* DTZipArchivePKZip.m */, - AAB5B73D8170C02932FF3D1B51A78FE6 /* Minizip */, + 2942E45921548E93C640E1508BEF54ED /* crypt.h */, + 2E099C7C317100D0B86114045D88A208 /* ioapi.c */, + A16DCFC8ED94D684AB7E0E7F99D39AA3 /* ioapi.h */, + 83FEC47A8ED2EC9FCD00CA34985DF78E /* mztools.c */, + 433FF0BF784294CC74EE50DECDAFA730 /* mztools.h */, + F1F3CED6540D9077B5763C7A39F07C72 /* unzip.c */, + 6B26405962A86C62E5C6575FFA1ABECB /* unzip.h */, + 9A6236D80A8E5D4E0A2589E88509AF05 /* zip.c */, + B8A8F895EC547141C86D53709922B878 /* zip.h */, ); - name = DTZipArchive; + name = Minizip; sourceTree = ""; }; - 3966228961EC7D841F17C538D60B5245 /* Resources */ = { + 25E22B145F2F4FF01FA63FE5F4C15459 /* Runtime */ = { isa = PBXGroup; children = ( - 67FD4687C3AFD36A832764120D72D1AB /* IQAudioRecorderController.bundle */, + 2BA0C66247E1E8E9EBC3727199EE7E21 /* DTObjectBlockExecutor.h */, + 7FBD0F3973FE263354220AC751BB35B5 /* DTObjectBlockExecutor.m */, + 1C28351AA855B90AE231082B3F029C44 /* NSObject+DTRuntime.h */, + B01A39D50F8495D24464543E9D8DA8DA /* NSObject+DTRuntime.m */, ); - name = Resources; + name = Runtime; sourceTree = ""; }; - 3B71503D479F64C42E88634325193A76 /* Support Files */ = { + 271D14A436E60C79F80A7A606FD47B9B /* IQAudioRecorderController */ = { isa = PBXGroup; children = ( - 19551E8499D9FA837439E46222E032BC /* FLEX.modulemap */, - 053CC07010598A11A9CA0312DFB643D3 /* FLEX.xcconfig */, - A46E68A170A64550A927EB29F9B71A67 /* FLEX-dummy.m */, - 4B0EF460632E099850E6FA7F7504E9D9 /* FLEX-prefix.pch */, - 2D5211156C2864D5C07EAC40790141BB /* FLEX-umbrella.h */, - 53BDFD414105F3A6420D56B4828FA029 /* Info.plist */, + 5F0030B7858D35171945AF51297547B1 /* IQ_FDWaveformView.h */, + AAA63BE11F4DF10A6770E07D718EC12B /* IQ_FDWaveformView.m */, + 4FCC205FD687D9A3245BAE433FCC4EFE /* IQAudioCropperViewController.h */, + 34D41A18021E1B24C77897C98E105BBC /* IQAudioCropperViewController.m */, + DF5358A505EA091CA18BE6C7921239EE /* IQAudioRecorderConstants.h */, + B0972BB3F03F7C0DE47D23CE8CCAEA9F /* IQAudioRecorderConstants.m */, + 108890F41913AE7F172A7391EFE43474 /* IQAudioRecorderViewController.h */, + 5E999199EEF40927279B02060E3D4002 /* IQAudioRecorderViewController.m */, + 9F78D7F5E7E4B2149E95620BD8BA5BD0 /* IQCropSelectionBeginView.h */, + 16FCA05FD03C8E19CD7C7ABBAA8FAA39 /* IQCropSelectionBeginView.m */, + 22A3CEC7CEE3185EC0C5605E9A1DCA30 /* IQCropSelectionEndView.h */, + C760F67E19D81F6F08F7B9491AB15736 /* IQCropSelectionEndView.m */, + 308F5682DAB39122E39079481A677424 /* IQCropSelectionView.h */, + 11E6B44B57E7B4471ACDC1839B4FF3F7 /* IQCropSelectionView.m */, + E987D1C71C185A8A4BCC1D580991B8CF /* IQMessageDisplayView.h */, + 8DE5E176A639CC2AF48F24483A63970C /* IQMessageDisplayView.m */, + DE6D87C80ED3FFB25169A25DDA07C9D3 /* IQPlaybackDurationView.h */, + 4910C94819CB7633B726E63EEEDB6BE6 /* IQPlaybackDurationView.m */, + 6CCEB84969B7C0842A475239438693CF /* NSString+IQTimeIntervalFormatter.h */, + 113E112F35E33A0009F406087FCF3EC0 /* NSString+IQTimeIntervalFormatter.m */, + D5B3276089738734B907CE9519618F54 /* Resources */, + 89737CB6BC963EA611B9A629BF42DA15 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FLEX"; + path = IQAudioRecorderController; sourceTree = ""; }; - 3C8FE03EA78D45AAD326DD777FA3CD2D /* NSHash */ = { + 28183B3C03A657147535DAECF8B25529 /* INTULocationManager */ = { isa = PBXGroup; children = ( - 0E835EAFA83F2A9B3A2F4732EAB46231 /* NSData+NSHash.h */, - BE4FCF0D16106DE0D7AD062163E55EA6 /* NSData+NSHash.m */, - 15E50FF221F8ABC7808A68A2A8F90823 /* NSString+NSHash.h */, - 1BB2F2BC45C191B584F3BCFF4392495C /* NSString+NSHash.m */, - 17C19F019CB9E6B0AAA6397A559D83C2 /* Support Files */, + 9B193D05DEB4F68CE3CC5B5B9759994E /* INTUHeadingRequest.h */, + 9E8ED0434B3B4BB6A5173C0C0DFB7BC6 /* INTUHeadingRequest.m */, + 2D90AFBA122000653B40677DC2E95011 /* INTULocationManager.h */, + 50955A021D54E5D707A9B1A930CBA42E /* INTULocationManager.m */, + D11780699A57C0A4CDBA8AC4E889CACE /* INTULocationManager+Internal.h */, + 39B77750ED39532835B012601CF3FC85 /* INTULocationRequest.h */, + FE597523EDEF968C77B01685BF05EFE6 /* INTULocationRequest.m */, + 45C80D89FA10C77CA3331FDC9B0A4945 /* INTULocationRequestDefines.h */, + 745C8BD6593568161EE55E7160814243 /* INTURequestIDGenerator.h */, + 5EB546B81FBC4E0AD9FA5902ED682A8A /* INTURequestIDGenerator.m */, + 8906AF470D42B9358F1B8E21EB24CD74 /* Support Files */, ); - name = NSHash; - path = NSHash; + path = INTULocationManager; sourceTree = ""; }; - 3CC5DC0FC4C5CB7D3A197AB377601116 /* Support Files */ = { + 29D9BF4B7415B9532391EAFD9D18D5B2 /* Support Files */ = { isa = PBXGroup; children = ( - 2ED5213A867F4487542B65E227D3C024 /* Info.plist */, - 22A7EA3F196AF12EE218F97A3049FA1C /* RMDateSelectionViewController.modulemap */, - BE35672DD104DBE042C0A2A3CA7A44FD /* RMDateSelectionViewController.xcconfig */, - EE308FCB25E21E0C2C97092FD21D65EE /* RMDateSelectionViewController-dummy.m */, - E8B07B6CAAF9F691BD583A19F414F133 /* RMDateSelectionViewController-prefix.pch */, - CA60BA9F24B7A8BBB19CDFC81CC012D8 /* RMDateSelectionViewController-umbrella.h */, + 675E990C62093C7FE8268A02C3E1C25B /* AFOAuth2Manager.modulemap */, + 09EC0E5F3E0A33A8A24B97CBD48170E3 /* AFOAuth2Manager-dummy.m */, + 659DF961A68FE14667C76BA277324AEB /* AFOAuth2Manager-Info.plist */, + 9376ED9284688522C73AECD05997D4CA /* AFOAuth2Manager-prefix.pch */, + D13952404623207BEB9BA74A1056BBBE /* AFOAuth2Manager-umbrella.h */, + 170CD3CA5772B1EF7F1E937AB798CA48 /* AFOAuth2Manager.debug.xcconfig */, + D63E6DFF04A9AE0573843399421C8AF7 /* AFOAuth2Manager.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/RMDateSelectionViewController"; + path = "../Target Support Files/AFOAuth2Manager"; sourceTree = ""; }; - 3DEA88AE3F6E9D2163378F5EED3CBDE3 /* Support Files */ = { + 3191E85D3D90FF8743EA6C1D4B7DB050 /* Support Files */ = { isa = PBXGroup; children = ( - B88731302D376500C9DB3BBA1493483D /* DAKeyboardControl.modulemap */, - C45D75BF5700BF9176D1A909E359257F /* DAKeyboardControl.xcconfig */, - FC8FE1E9825D62DF57C47ADF583FB5D4 /* DAKeyboardControl-dummy.m */, - 4418A7F72BC17CAC0C35D16F8C9B41B8 /* DAKeyboardControl-prefix.pch */, - 581C06D2AD6A944466CC8C93234308BB /* DAKeyboardControl-umbrella.h */, - 9ADB9C01FF19F76FF89B0D043156F5C1 /* Info.plist */, + 6D0DBB0C3943D8196C0E8B1476948EC3 /* DTCoreText.modulemap */, + A0C5F0CB096C4113C5D9DF5C97D8AF1B /* DTCoreText-dummy.m */, + F86C69A6FC0A793A2A330C1A322A16F8 /* DTCoreText-Info.plist */, + CECA98FD1C747556A222AAC291B1C192 /* DTCoreText-prefix.pch */, + 8A6E081BAB5799AC5C3DD61163309408 /* DTCoreText-umbrella.h */, + E290D4767429B0FE33C80A84BD7B178B /* DTCoreText.debug.xcconfig */, + D600794335416E75E059ACC663C167F4 /* DTCoreText.release.xcconfig */, + 991D4CAD438FA9CF3AF46F90FA08C746 /* ResourceBundle-Resources-DTCoreText-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/DAKeyboardControl"; + path = "../Target Support Files/DTCoreText"; sourceTree = ""; }; - 3F11783E4B9E266FCAB1332880E3838C /* Support Files */ = { + 3376202D2FE90FB1F2BC4DA4D58AAEF3 /* Support Files */ = { isa = PBXGroup; children = ( - C21C08AB7E2D824604DC9B9C42DE1B9C /* DHSmartScreenshot.modulemap */, - 50A78E85A5C5E9F7A794C625FF34352D /* DHSmartScreenshot.xcconfig */, - 5F243ACDBD912A9F510F7CCD99EFAE7D /* DHSmartScreenshot-dummy.m */, - C12B3753C7E951589DCCA8859177A52F /* DHSmartScreenshot-prefix.pch */, - 3F00397554FE65FCD87D48384D7542AE /* DHSmartScreenshot-umbrella.h */, - 322B13E35772F6A6E4B3344A26D76CA7 /* Info.plist */, + 1EE7B53BA9C50E7AAD1F2F946E1A4149 /* CYRTextView.debug.xcconfig */, + A6F6EE6682BBFEC5FC96F35E654180D4 /* CYRTextView.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/DHSmartScreenshot"; + path = "../Target Support Files/CYRTextView"; sourceTree = ""; }; - 3FAB1C7316011936C790CECA610D2300 /* Support Files */ = { + 355E6F49877F241217C806C13E8482E5 /* Support Files */ = { isa = PBXGroup; children = ( - 58A3272A6461BB0F6B3BE82596C39FFB /* Info.plist */, - 6C3667BE1B5CB40159570B6231660871 /* SWTableViewCell.modulemap */, - 9D8603FB811E53B89A4E4403B5DE40A0 /* SWTableViewCell.xcconfig */, - 0509A1A15F2A4B73EAEEC800F489A438 /* SWTableViewCell-dummy.m */, - CC9D747BE5011E367F7B37BAD28706B2 /* SWTableViewCell-prefix.pch */, - 2E66DAC71C04CCFEC85A40DBFE7ABC0F /* SWTableViewCell-umbrella.h */, + 4F007FAF52F42B43DAC69B0D5CAF2FA0 /* TDOAuth.modulemap */, + 0A246CDA888B712D9A6298A0BA3B3ED0 /* TDOAuth-dummy.m */, + BC98EF5CF6C6B01E111ECA3D3987F0B3 /* TDOAuth-Info.plist */, + 48F98EB9ECDC3AE9C12B55B83C9B8C89 /* TDOAuth-prefix.pch */, + 5BD13FACB149C283B1DBAD25FEA77BE6 /* TDOAuth-umbrella.h */, + 4BAB966413ACAB6C18666063705D404F /* TDOAuth.debug.xcconfig */, + 33D4D74BDC98E0F4E5A713F45A309A97 /* TDOAuth.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/SWTableViewCell"; + path = "../Target Support Files/TDOAuth"; sourceTree = ""; }; - 455C0BA98994CA53A0039E48B522ABC2 /* DTReachability */ = { + 360E10F8E9CCEFF44D714644F2683A6D /* Support Files */ = { isa = PBXGroup; children = ( - 5CF42C8B5C46AC76813916166696785A /* DTReachability.h */, - B1297B1065FC0C4576BAC66E1638E927 /* DTReachability.m */, + 5741E9663570DDA603CD64C5EBFFA2A9 /* TWMessageBarManager.modulemap */, + 4D796E758F74E0D9138D8F5E2B97DB7C /* TWMessageBarManager-dummy.m */, + 5FC825233CCC0375D28979D7E85E2D00 /* TWMessageBarManager-Info.plist */, + 17477E98AAE6A5351DDAE10029541B76 /* TWMessageBarManager-prefix.pch */, + 5BBAA2821B57C5E2F03130C6DB662630 /* TWMessageBarManager-umbrella.h */, + 9616EF631EAC59CC373E6CB2D8118245 /* TWMessageBarManager.debug.xcconfig */, + 44AD7A8592FCFBFF645E45AEE925B10F /* TWMessageBarManager.release.xcconfig */, ); - name = DTReachability; + name = "Support Files"; + path = "../Target Support Files/TWMessageBarManager"; sourceTree = ""; }; - 4579DEA58179E10F9DF75040BBFC75A9 /* SCSiriWaveformView */ = { + 385375C6F72B006F8AAFDD0B2C58523D /* Support Files */ = { isa = PBXGroup; children = ( - 9B3335CFEE48C371478F551CD1E6DA6C /* SCSiriWaveformView.h */, - 66D319C9EB45B34197023C0F7C881862 /* SCSiriWaveformView.m */, - DCDC18806663D34D4EA9114E7DF13837 /* Support Files */, + 7A383FADAEC2590A8F049A92CBD51A40 /* SZTextView.modulemap */, + C2FCBC6964CFE0FF0AFC851FE7D04C9E /* SZTextView-dummy.m */, + 18A6AAF81DF5F8D8AC27EA7D4730EF00 /* SZTextView-Info.plist */, + 23F37F6D4ECBB8EA0F45FA9A02D84C8F /* SZTextView-prefix.pch */, + B63B33A36D085205B2D8FC2C9A2361F5 /* SZTextView-umbrella.h */, + A5D5F07971654DADC7EF3BD193544E28 /* SZTextView.debug.xcconfig */, + 6C7E01AA17B875EE3E0A0430F4E0799A /* SZTextView.release.xcconfig */, ); - name = SCSiriWaveformView; - path = SCSiriWaveformView; + name = "Support Files"; + path = "../Target Support Files/SZTextView"; sourceTree = ""; }; - 47F57B06AEEEFD5FAA08A83660108A02 /* Support Files */ = { + 38F16DD7B2ADF1D9B3DA50CA7C63AE19 /* Support Files */ = { isa = PBXGroup; children = ( - F0E44E299A92954410D73292FC23429D /* Info.plist */, - A540F70C5F6B4C4FEEC45256AB28D5B5 /* UICKeyChainStore.modulemap */, - AB70943FA59BD85DBC6833220500C1EB /* UICKeyChainStore.xcconfig */, - 75DBC61504BC8F9F90CF9FAE107FAA1E /* UICKeyChainStore-dummy.m */, - C3099C4600D945C7966AACF51ABF032F /* UICKeyChainStore-prefix.pch */, - 959110195713050A7EAF6EEF34381C17 /* UICKeyChainStore-umbrella.h */, + 0E697017F3876F9B2D44CD83BABB0DED /* REMenu.modulemap */, + 92E2C996320335786A3C04277835EDF6 /* REMenu-dummy.m */, + D939623AA0B0D656C9C6349FC2810136 /* REMenu-Info.plist */, + 6CC9F05666D550048A2E089A1431310C /* REMenu-prefix.pch */, + 795F106D507EB0A74E221D794F58D76A /* REMenu-umbrella.h */, + 5184A2C9984FC8F57FC15881A39DE76A /* REMenu.debug.xcconfig */, + C7703B254C1B1B74DF8050DEAEF8520C /* REMenu.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/UICKeyChainStore"; + path = "../Target Support Files/REMenu"; sourceTree = ""; }; - 4B1533CACEE88DF39E926A6DFCE8E7FD /* SDWebImage */ = { + 3A637AAAC913D35BB125B8E65492A70C /* Support Files */ = { isa = PBXGroup; children = ( - C293C6C6DDBDDE379BEBBC9DB8647B54 /* Core */, - 66255E3B7D93E9EE1CDC98CE8E5EB71B /* Support Files */, + 872E3E96E0A7CFF7AA820FEE38235A20 /* JSCoreBom.modulemap */, + 85A6DFB00BD20CF301588FB7BB392B00 /* JSCoreBom-dummy.m */, + 88670882396D767655829854EBCAD183 /* JSCoreBom-Info.plist */, + 00257A05AD475DC2C395C80D60B0E0E8 /* JSCoreBom-prefix.pch */, + 826C240F89F12A388895B0D117C16D17 /* JSCoreBom-umbrella.h */, + 2B447A8DF8D38848DCB11692D3FCFAFE /* JSCoreBom.debug.xcconfig */, + 39D141B9292A8EA3015D515AB0973F6F /* JSCoreBom.release.xcconfig */, ); - name = SDWebImage; - path = SDWebImage; + name = "Support Files"; + path = "../Target Support Files/JSCoreBom"; sourceTree = ""; }; - 56515FC35F3D60BE7E92492FC075037D /* Support Files */ = { + 3A6E10490316373AF256890F0F5947DF /* Support Files */ = { isa = PBXGroup; children = ( - 3F954AD1BC73538C8C601868F4F4A8DD /* AFNetworking.modulemap */, - 4A25842526BC58F6FE5B9E88768A9F15 /* AFNetworking.xcconfig */, - 74CAC726BD1E9DCE7DC9F0359F836A32 /* AFNetworking-dummy.m */, - 9C42347FE54DCF9F6A8A0EE402BA0BD8 /* AFNetworking-prefix.pch */, - 00A3683435A60055E7CEDED5186ED65B /* AFNetworking-umbrella.h */, - 58208E7D03BD787D908FA8E4F6EEB8DA /* Info.plist */, + C078944FA0AE9242629691469C03152A /* libPhoneNumber-iOS.modulemap */, + 600453E78395C6EBE032211F7B5EA25E /* libPhoneNumber-iOS-dummy.m */, + 93D2F8E4657423219C9FC2C3E58E82D6 /* libPhoneNumber-iOS-Info.plist */, + 3E37738A82029A1572EB8FA0839F256A /* libPhoneNumber-iOS-prefix.pch */, + 0BBAA64D7B5805BEF78757C9A52D7E04 /* libPhoneNumber-iOS-umbrella.h */, + 53212642DF8826F802F2497D6E4DC6E7 /* libPhoneNumber-iOS.debug.xcconfig */, + B057F4C41EBAFA9B42881A17F2DD3774 /* libPhoneNumber-iOS.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/AFNetworking"; + path = "../Target Support Files/libPhoneNumber-iOS"; sourceTree = ""; }; - 5823ECBC6520EECCE2B55A12337C4FB3 /* SWFrameButton */ = { + 3BC9F2F849F0035E7DB381A6B9438D7C /* libPhoneNumber-iOS */ = { isa = PBXGroup; children = ( - 13B23E4A6B6BD97B78A8C5C4B8E84354 /* SWFrameButton.h */, - 0C72D40EC9B18C09D23DE5ADF4227527 /* SWFrameButton.m */, - 1B65BD5542778B3F1228A90E4C2C87A2 /* Support Files */, + CD0DCDDA8AA6EFC94A6C2D48CA0108F1 /* NBAsYouTypeFormatter.h */, + D2701F1479D89B35D4EF27F1D5F17957 /* NBAsYouTypeFormatter.m */, + ECACC82F235633EFB673D0E7B532A117 /* NBGeneratedPhoneNumberMetaData.h */, + 5AECFFF1B13025BFFC08A1EACA020F00 /* NBMetadataHelper.h */, + F489D98DE728D56A037C179AC635711E /* NBMetadataHelper.m */, + 6EE3D76A659940DE1CB391258989C5F1 /* NBNumberFormat.h */, + 53750375135C9570C37D33F517B55AB1 /* NBNumberFormat.m */, + 9F4D08CC88206F890D7ADD1414649143 /* NBPhoneMetaData.h */, + 9C84C33E88A62F1645DD947A4DEC89D2 /* NBPhoneMetaData.m */, + 88CA8FCA2D23F7E49E7079AEAFFC3E97 /* NBPhoneNumber.h */, + 47A90A704E0987134E04BF2D617C14B4 /* NBPhoneNumber.m */, + F1784266A681BF6528925A9DCBDF3C49 /* NBPhoneNumberDefines.h */, + 271B4588307B82C38C920695EE4DCE3B /* NBPhoneNumberDefines.m */, + E806D22BAD3192C71B3C4629905EF193 /* NBPhoneNumberDesc.h */, + 5C4D99F7884E9B9040D0EF9DD5ECFED9 /* NBPhoneNumberDesc.m */, + 1E3E8B85E9546BC1C9D790F0EB545320 /* NBPhoneNumberUtil.h */, + 2865C3BA2BC138BF3AE3EBAFF87C1466 /* NBPhoneNumberUtil.m */, + 69E9B6A6D26B0C6C9C0361B41571832A /* NBRegExMatcher.h */, + 2313292EBBDAF0A5A569EF43BEF08AF1 /* NBRegExMatcher.m */, + 4FDB7C07BD35492C61668457E957D178 /* NBRegularExpressionCache.h */, + 388F08709F81732E785503E1227F8165 /* NBRegularExpressionCache.m */, + 0CB816B2445DA8C1A10BDC50D57908CA /* NSArray+NBAdditions.h */, + 6F5F19320A6A35E163C501276DCC4CB3 /* NSArray+NBAdditions.m */, + 3A6E10490316373AF256890F0F5947DF /* Support Files */, ); - name = SWFrameButton; - path = SWFrameButton; + path = "libPhoneNumber-iOS"; sourceTree = ""; }; - 582E78E1C3BA8C1C86D636F4BABC77DA /* UserAgent */ = { + 400CD09F551DCE0E7AC2FBC2C6375A95 /* Serialization */ = { isa = PBXGroup; children = ( - 9AD841A1D476AA46A923F5A5E79D95A5 /* OMGUserAgent.h */, - 9902D2961B12FFD2966CCF9D8A05664D /* OMGUserAgent.m */, + 2D26CCA0A92C81CCD5E0EDBE0B2816E4 /* AFURLRequestSerialization.h */, + 0AEEFC69439630896D56057325D90E21 /* AFURLRequestSerialization.m */, + D277A218EA6BE3EB94A0A6EE19695567 /* AFURLResponseSerialization.h */, + 97BF1A0A417BDF39D7113368038DAD05 /* AFURLResponseSerialization.m */, ); - name = UserAgent; + name = Serialization; sourceTree = ""; }; - 596E4158D691A4CA0457EE19D135FFDC /* SBJson */ = { + 40668D8E2798A23A647243AD255D0A35 /* DHSmartScreenshot */ = { isa = PBXGroup; children = ( - 2217687B36CB9D6945EDEC7513AD2E2D /* SBJson5.h */, - 8CC1117AB70CB9DC444E22977D7B77C0 /* SBJson5Parser.h */, - 55241A106C2AE0E537E9EEED249CF55D /* SBJson5Parser.m */, - A6B493DA9AC060E8403BA3226C0A75CE /* SBJson5StreamParser.h */, - 51C9AAC2C8BA616CDDDFB6ED7AE40599 /* SBJson5StreamParser.m */, - EF68547A8B6CC8A017075A3792973982 /* SBJson5StreamParserState.h */, - E16353BFBA0FC1281FE7B2F4ABB12F5C /* SBJson5StreamParserState.m */, - EAF00C6720746B362298EA7317F206D0 /* SBJson5StreamTokeniser.h */, - 8B897D0F92ABC751DE71092874D10D4F /* SBJson5StreamTokeniser.m */, - 7C193AD8254DBDD606B671F9653F63B6 /* SBJson5StreamWriter.h */, - 5A9BB1F5E2E39212C99D05F37DB96C66 /* SBJson5StreamWriter.m */, - 5716DAA9FE253DC73A74F6AD02DCDEFB /* SBJson5StreamWriterState.h */, - CE25BF35910B09D540C1AF77B82E826E /* SBJson5StreamWriterState.m */, - DA177E13472E42CC97A80E9112EE74CE /* SBJson5Writer.h */, - C182D71D9E76FB07C026EA0D34A76AE9 /* SBJson5Writer.m */, - BE833E3BAB280B9D745309AC5727390C /* Support Files */, + CA8DD0CDB832F6F7776379B505DBB905 /* DHSmartScreenshot.h */, + B4E63B4CC0385E52B3CAFFFD31045632 /* UIImage+DHImageAdditions.h */, + E08E980D6E07A6C1813621F515B86703 /* UIImage+DHImageAdditions.m */, + 1BD2E75E98A6CD714792745E86B24640 /* UIScrollView+DHSmartScreenshot.h */, + 3F2482213A1E276EF7B5388B8FA6E6A0 /* UIScrollView+DHSmartScreenshot.m */, + E8B607EE07CBDF8190A16B4C08FD6507 /* UITableView+DHSmartScreenshot.h */, + 5EB93C19B9FAE20233842A6EA10B6109 /* UITableView+DHSmartScreenshot.m */, + D8D474932649083EBFE62B5F2322A027 /* UIView+DHSmartScreenshot.h */, + 1D5FD622370665EB88A5F9CBCB671799 /* UIView+DHSmartScreenshot.m */, + 08C0EBA7308F2F2FD6A919C24348DE87 /* Support Files */, ); - name = SBJson; - path = SBJson; + path = DHSmartScreenshot; sourceTree = ""; }; - 5A50A85BBBE458C6DE5C3FEEF548393B /* Support Files */ = { + 41D3CE8A3535E0512A4D4C653006226F /* SocketRocket */ = { isa = PBXGroup; children = ( - 21D5A0991DE9BAB971785366D29013F1 /* APAddressBook.modulemap */, - 7752026FB3648064F723FE5B910A5B18 /* APAddressBook.xcconfig */, - 98809F376210D31C93325CE0EF236090 /* APAddressBook-dummy.m */, - C4EDE9972B07A8EB715F3417EEDCBB54 /* APAddressBook-prefix.pch */, - E3A79FF8B6719D1609C9E9C181D8E5BB /* APAddressBook-umbrella.h */, - DBE1AEF458ED14B6703508C195E79E73 /* Info.plist */, + 745916A36BE5BFCEDB74DF2DCC66A2CF /* NSRunLoop+SRWebSocket.h */, + E49899625E3D827D6440CBE6CB4377DA /* NSRunLoop+SRWebSocket.m */, + 1CC4A62FCB2CD24B8B791968781100F1 /* NSRunLoop+SRWebSocketPrivate.h */, + F29BF246846901AD3E77532463BCE8B5 /* NSURLRequest+SRWebSocket.h */, + A5C21A56FC972264CC5BEA5D456C6A1F /* NSURLRequest+SRWebSocket.m */, + 853B03AEC9C0186AB46D5DD7E0B979B5 /* NSURLRequest+SRWebSocketPrivate.h */, + 14902A5745D0E8A5D310591783999468 /* SocketRocket.h */, + D2C237BE97A334906FEBAA99D5E2EA88 /* SRConstants.h */, + 93DCFBEC541EF30BD69D340D771FB8A4 /* SRConstants.m */, + 8B81179C7A3AA4EF4E976F4A58592B29 /* SRDelegateController.h */, + FE3FF948CFA7668F2E994A30D36F698F /* SRDelegateController.m */, + 0AB577AC68AA917CA638EFEF2FCD780B /* SRError.h */, + A1301B2D249315F65E0F4C7E564CA701 /* SRError.m */, + 39A3DCB8CC27EAEB5BF6BE58447D4F53 /* SRHash.h */, + 0352367A2BB30CB850FBAD59C940AAFD /* SRHash.m */, + CA5B31A5D30958729E4D920CE3896A9C /* SRHTTPConnectMessage.h */, + 68D7125CE841BB9E525142DA57009D4E /* SRHTTPConnectMessage.m */, + A335E35D10A8FD56B41025780EC383BF /* SRIOConsumer.h */, + 3396DE7605695340A78B53D1D927516E /* SRIOConsumer.m */, + 58F85549C896D52F6685E60F5EF376D2 /* SRIOConsumerPool.h */, + 95DFFBEAB03A034C2D588E072509BD73 /* SRIOConsumerPool.m */, + 26FBE509209B95C705B008B5E10EEDBC /* SRLog.h */, + 16E470D6A79510B4F1FEC3FB6092D63B /* SRLog.m */, + 85834310D6000948519601B683380C8F /* SRMutex.h */, + 5942E01A5C46245BA706B98DFAF08959 /* SRMutex.m */, + 4474CD27C3955CDAB3CBB876702ABC3C /* SRPinningSecurityPolicy.h */, + 0B35A8547F10A8D2E1E934CE4FD6EAC7 /* SRPinningSecurityPolicy.m */, + 8BA108B6718BC9F3FB1D42EE809DDCFA /* SRProxyConnect.h */, + 82132962F09EE13080BDA3F8C1B2EF07 /* SRProxyConnect.m */, + FDF63610F82AEDF3F8F46FB3CDE3D82E /* SRRandom.h */, + 1EA61E9DB068B8699938637791065836 /* SRRandom.m */, + 87C221D04B4FDF17CC3BAEFEB981EDCF /* SRRunLoopThread.h */, + CF3266BD9F18685BD95A1A2233346E35 /* SRRunLoopThread.m */, + 8C2550A829B2B0943787B2F4AE302D93 /* SRSecurityPolicy.h */, + 6F18AC4BAFCF8AE523B7E2ED4042529D /* SRSecurityPolicy.m */, + 7249D22A4A0C2FDE2A710CC73D771627 /* SRSIMDHelpers.h */, + DD10C33DE6EC1D700F803E794DF11D88 /* SRSIMDHelpers.m */, + 1E46171C70400FE32626522272478FAF /* SRURLUtilities.h */, + 50FBD0D7D7763CF0720C02FF25DB9A94 /* SRURLUtilities.m */, + E7FBF97F131404C703F7E98B12F848F8 /* SRWebSocket.h */, + 0D9B0171EB9CBBE2B4E4D74555D457A2 /* SRWebSocket.m */, + EC6F6C1BE064F43689D977D8382C3936 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/APAddressBook"; + path = SocketRocket; sourceTree = ""; }; - 602212A445021C13EA15FFA3514892CD /* NSURLSession */ = { + 429DE03B35CACDEAE3D487E7C5D5A241 /* DTFoundation */ = { isa = PBXGroup; children = ( - 56E1F5CED4D92536754B9933F2945A9A /* AFCompatibilityMacros.h */, - 72F70E98328D102C67D0D2EC2893F8AA /* AFHTTPSessionManager.h */, - F20A2C088B1D60B7690542A9EF4B7EB3 /* AFHTTPSessionManager.m */, - 42DE2BFEFC468002E68559DEFC81BF4F /* AFURLSessionManager.h */, - CA22015DFE6F402AB7E1D32EDB92CA59 /* AFURLSessionManager.m */, + 1AB3A952D9E6B26352DE94B9B1ABB31C /* Core */, + D7F349AA9B64B798381D8976D0BD7C7B /* Debug */, + 8594F7BEA5F06481FDB29749565BDAFB /* DTAnimatedGIF */, + 60E5B3A57C47C01B5E0394B48DEE2478 /* DTASN1 */, + 97D2DD6D49B80C9C98D5F80967971A63 /* DTAsyncFileDeleter */, + 0A4921C4AB1925913E52B2D12DB950FD /* DTAWS */, + 927362889CD8AADBB08682AC1581681A /* DTHTMLParser */, + EC4F64DC55950418F46277ED2F6B91D4 /* DTProgressHUD */, + 62815BD24A096E8B550B3D59EB746276 /* DTReachability */, + 54B81CC9A387F92C53962D439C6D4FEC /* DTScripting */, + 9A5D855D2058219CCB6D3850A22F69B2 /* DTSidePanel */, + 5F906FF753B54736154917FB022ACECC /* DTSQLite */, + 52BA96BD6F1258B07B9884B58C566210 /* DTUTI */, + 4C06BDD368DD7171B62B081174305281 /* DTZipArchive */, + 25E22B145F2F4FF01FA63FE5F4C15459 /* Runtime */, + CFB900F590CF0E7CC3BEBB7B76AC5074 /* Support Files */, + F769DC0551D8372F284FB9694C9E677C /* UIKit */, + DF6453A05BDD0B6AEBBEDF18DB0D9998 /* UIKit_BlocksAdditions */, ); - name = NSURLSession; + path = DTFoundation; sourceTree = ""; }; - 66255E3B7D93E9EE1CDC98CE8E5EB71B /* Support Files */ = { + 45C81DC42754E96B43E0002AD2BBBD99 /* UserAgent */ = { isa = PBXGroup; children = ( - 8BCA12CDD4904935E530EEB1F243C1DC /* Info.plist */, - 22C71D507277CA51C842B2A817948243 /* SDWebImage.modulemap */, - 6BAED06F7C8DB1A5196A9B89B6031E2F /* SDWebImage.xcconfig */, - 1ED9524C818D7215BCFD0240DDA8334D /* SDWebImage-dummy.m */, - 45E667D168F0A0EC3C3F7980F14DEF27 /* SDWebImage-prefix.pch */, - 2DB5A01D71AB6A74BAC8EC177D451936 /* SDWebImage-umbrella.h */, + 876D124428E5FC268ADB04B9E6452F80 /* OMGUserAgent.h */, + 4C57AD11264BFF53C20E6BFFCC382270 /* OMGUserAgent.m */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = UserAgent; sourceTree = ""; }; - 66E49663FA5C82300C035769B06B9B84 /* Support Files */ = { + 47A0859B4428C4FEB94623DD76B3C8CB /* Pods-Jasonette */ = { isa = PBXGroup; children = ( - EE467DA1ED49C047423A0FA088406B33 /* Info.plist */, - 4BEBA1E83A797A92F678390376FC9517 /* TTTAttributedLabel.modulemap */, - BFB63C800897AC8E13F95F70B98A2CDE /* TTTAttributedLabel.xcconfig */, - F655A7570E8EB63AD833CA79CA1BF6C4 /* TTTAttributedLabel-dummy.m */, - 10F0CA104863E154574BC66AE8BF7851 /* TTTAttributedLabel-prefix.pch */, - F12DCBF02BDFFF51F240551B656BC7DD /* TTTAttributedLabel-umbrella.h */, + BFE65360E5B94EECA2D65E630CC70699 /* Pods-Jasonette.modulemap */, + 1B74A83A2D5A43D327635F41194A1CCA /* Pods-Jasonette-acknowledgements.markdown */, + 3C9FABD5BFAA79030821C5DE06A21C33 /* Pods-Jasonette-acknowledgements.plist */, + 5808BBE73D0D5D40AC148ED20055F6AB /* Pods-Jasonette-dummy.m */, + C6D1BCF118EFD3A3EB9B12148F1D57D2 /* Pods-Jasonette-frameworks.sh */, + A8BCFD5E47377B388608B928AAA6851E /* Pods-Jasonette-Info.plist */, + 08799A6F2B9348BA32AD2A6D6B26A349 /* Pods-Jasonette-umbrella.h */, + 4AD50BE5ADA00A53553039E1614751A6 /* Pods-Jasonette.debug.xcconfig */, + 77B0DC6E71DCE4BD962131E7862F6990 /* Pods-Jasonette.release.xcconfig */, ); - name = "Support Files"; - path = "../Target Support Files/TTTAttributedLabel"; + name = "Pods-Jasonette"; + path = "Target Support Files/Pods-Jasonette"; sourceTree = ""; }; - 66F1633BFF25EDFE142CC3A16DBAB655 /* Debug */ = { + 47AC0BF6278FDD5780A53B8A0D856548 /* Support Files */ = { isa = PBXGroup; children = ( - 401671E1232D5EF781E0EAC13522FD09 /* UIColor+DTDebug.h */, - E981EE64A22FB330C910C33449356B5D /* UIColor+DTDebug.m */, - DC620C69852C55DAE45621AF7FE2ECE9 /* UIView+DTDebug.h */, - C962B2DD307CE886902841C5D85E307B /* UIView+DTDebug.m */, + 7277DD452D54D6C9A55A26DD5DBBBB60 /* SCSiriWaveformView.modulemap */, + 341FAA4F453D917F3C5526D7FE54E4E9 /* SCSiriWaveformView-dummy.m */, + AC149368963C9111C85B31A8BFA0D0F1 /* SCSiriWaveformView-Info.plist */, + 5E148CDB2F4B9E9F8AFA888829CC037C /* SCSiriWaveformView-prefix.pch */, + AAA0ACA8346C2F70C6FE24388596295A /* SCSiriWaveformView-umbrella.h */, + FFD82A49945F0210C13D3759E9F4E1DC /* SCSiriWaveformView.debug.xcconfig */, + 3A39B3C1D89D279139A7D0D2D2BB5739 /* SCSiriWaveformView.release.xcconfig */, ); - name = Debug; + name = "Support Files"; + path = "../Target Support Files/SCSiriWaveformView"; sourceTree = ""; }; - 6A0CE06EACA1C536D1F4878B7F9E020B /* Pods */ = { + 4C06BDD368DD7171B62B081174305281 /* DTZipArchive */ = { isa = PBXGroup; children = ( - D1ACD0A01EAD2723191BA33166BAE928 /* AFNetworking */, - A7C2D162E7A10CCB03D8ABA32AFEC71B /* AFOAuth2Manager */, - 28938CB02CAB67595052D61E0091542A /* AHKActionSheet */, - A87734FA612EDBAC5C779D467CF8561D /* APAddressBook */, - A86F663D0ADDB4E816F8C5FB355A1F18 /* BBBadgeBarButtonItem */, - C258376BE39118C918F5088B70ED0144 /* CYRTextView */, - C3772B4088C59F834C2719D64EE91B4E /* DAKeyboardControl */, - F2AB44DFCA94719D858C7938E70A7518 /* DHSmartScreenshot */, - 95144D10ECF014D5FB82DCDABDCD9999 /* DTCoreText */, - 82DEEE42D452146F029B8E05AFC40C96 /* DTFoundation */, - C18BBDCB6840122771A1441160DD81AD /* FLEX */, - AC578A5A1D739BA1EA6441904C76074D /* FreeStreamer */, - F2B8EC3AF9D3C626CB76418F889CCB4F /* HMSegmentedControl */, - CBF76FCD1E91F8547E53704E2B7CD964 /* INTULocationManager */, - 11150B32E3697A4D52314BCC95E7DFB0 /* IQAudioRecorderController */, - CA7D9B61875D3278643AC7DB84773E0B /* JDStatusBarNotification */, - A99C81D9F58B048180865D871577FD8F /* JSCoreBom */, - 7744FC4ECD50DB08560782F08757FA1F /* libPhoneNumber-iOS */, - 34F5B358BA87E553ED3EF462F40B33F8 /* MBProgressHUD */, - BDC92B14330418125842E560A16CB7F3 /* NSGIF */, - 3C8FE03EA78D45AAD326DD777FA3CD2D /* NSHash */, - 1CE0D1690B18F0E26181421E9437B4E9 /* OMGHTTPURLRQ */, - 7E548DE9FFC19956A0DDF94A0C86AEA4 /* PHFComposeBarView */, - A84CA5A7C60406F530C895916A76B908 /* PHFDelegateChain */, - 03E54C919696BAFF28B5ACEF215FCE05 /* Reachability */, - E862A1984D9328BF05DBFCA5C0A1313B /* REMenu */, - BBA89AEEB8D509260A73FEC2749A2B11 /* RMActionController */, - 1AD1985FC95E4AEE866F2DD32D40DBA5 /* RMDateSelectionViewController */, - 596E4158D691A4CA0457EE19D135FFDC /* SBJson */, - 4579DEA58179E10F9DF75040BBFC75A9 /* SCSiriWaveformView */, - 4B1533CACEE88DF39E926A6DFCE8E7FD /* SDWebImage */, - F6F80A5D9CBF986D1350696BC2C53364 /* SocketRocket */, - 5823ECBC6520EECCE2B55A12337C4FB3 /* SWFrameButton */, - 726983A09555486BAA26EFFC72AE493C /* SWTableViewCell */, - A32C6AD4DD656254E17B846409E06443 /* SZTextView */, - 76ED3D6512ECD1E59260CD9F16C555D0 /* TDOAuth */, - 7DC2A71EF5C69635E2130AAEE303823A /* TTTAttributedLabel */, - 8E16469A8383E2B81F58D7CF86B7545D /* TWMessageBarManager */, - BDFC537A77B364A0921EAEBA062E2055 /* UICKeyChainStore */, + 5F99F4BB02ADA6B4E6320038E3FE503E /* DTZipArchive.h */, + 5CE82FB8CA7EFB6D80FCE59220FC483E /* DTZipArchive.m */, + 11FE939F5CFD35243D341936CA26740B /* DTZipArchiveGZip.h */, + 0DC98519A5B6DBFB330DC7072FAF842E /* DTZipArchiveGZip.m */, + 1DEE9FE133D0F515CD9FDDB8BA90FEA5 /* DTZipArchiveNode.h */, + F6268C1EA07ABE582516CB63F84E4955 /* DTZipArchiveNode.m */, + C99F47677CB345749D8DCB7348783A28 /* DTZipArchivePKZip.h */, + FC1C08796E48EDF4D7CC9B7AB59F5F1C /* DTZipArchivePKZip.m */, + 2478D4C87D4999A5C10F6E61B26F798C /* Minizip */, ); - name = Pods; + name = DTZipArchive; sourceTree = ""; }; - 6A5DA3C6D533308FECA68C03927ECE12 /* DTAsyncFileDeleter */ = { + 4E36A0BC0EB5ECA26B4728750C7FF15A /* Support Files */ = { isa = PBXGroup; children = ( - A467D721F083F40D991420C33447A263 /* DTAsyncFileDeleter.h */, - 7F3A3D6BADE58B71622C50DFF1A6FF39 /* DTAsyncFileDeleter.m */, + A81D6CA3C0DFC4808A4C3E8E640E7289 /* NSHash.modulemap */, + 002D08B8686CAD5A63BC441CA91293E3 /* NSHash-dummy.m */, + FFD9467AC2652AF7B1B4614176FC17D6 /* NSHash-Info.plist */, + 83CB868F330B37B14B96745E2C471A8C /* NSHash-prefix.pch */, + 158816052E45B203BA41B81EB8DD72EB /* NSHash-umbrella.h */, + 6A3C02F7987A57370C1BBB832F3E5353 /* NSHash.debug.xcconfig */, + 6D962564751BFA369B17397883A390F3 /* NSHash.release.xcconfig */, ); - name = DTAsyncFileDeleter; + name = "Support Files"; + path = "../Target Support Files/NSHash"; sourceTree = ""; }; - 726983A09555486BAA26EFFC72AE493C /* SWTableViewCell */ = { + 5113ADAC802F386304EFD06A984F00F1 /* Core */ = { isa = PBXGroup; children = ( - 73B89D9F822433AAC0785D592348EE03 /* NSMutableArray+SWUtilityButtons.h */, - CC46E7B3ABF92C240934CF883379646B /* NSMutableArray+SWUtilityButtons.m */, - EF121C43BB84F9E9A72FD528BA342865 /* SWCellScrollView.h */, - 336B1B814BF3C65C2F5A68E7CDFDC5D1 /* SWCellScrollView.m */, - F253BFC581EE0DBE973673B0025CB6EB /* SWLongPressGestureRecognizer.h */, - 289C1E97D2E398374FA4F32A843F0366 /* SWLongPressGestureRecognizer.m */, - 8AD9214E149B8EBE282BFD18616DEEB4 /* SWTableViewCell.h */, - A7B5F1AE4A6476C604E4CF5478526240 /* SWTableViewCell.m */, - DE787FC6586C02E0E90491D286AADC3E /* SWUtilityButtonTapGestureRecognizer.h */, - CC2344A4259EE99B3A6655A078CA6F56 /* SWUtilityButtonTapGestureRecognizer.m */, - 866401195074BC0973A7586449FBA254 /* SWUtilityButtonView.h */, - A28E2665C8BD0009EAAFC255332B3265 /* SWUtilityButtonView.m */, - 3FAB1C7316011936C790CECA610D2300 /* Support Files */, + 431E63EC52335559B3454DC9CA71C36C /* APAddress.h */, + 3A6759A1EF50B0B74CE30CCB0A6E1F16 /* APAddress.m */, + 69CA72F2C220E8C1E9D7D12606923A0E /* APAddressBook.h */, + 53E55F3C08B06720B0C4A04BD61E2367 /* APAddressBook.m */, + 4BB202111958BB14E75302263E34A61E /* APAddressBookAccessRoutine.h */, + 7EC052ACACA9630000CEAEC1796E2D1C /* APAddressBookAccessRoutine.m */, + 334D0989C3924B7E62ECB88C053A3EC2 /* APAddressBookBaseRoutine.h */, + 9198785C02A82C194B44D8BDC557B562 /* APAddressBookBaseRoutine.m */, + 9F977E418BBF3AB76482E21783B63480 /* APAddressBookContactsRoutine.h */, + 85FCBB40F9F0845DCFBA2BEB0EB3ABCD /* APAddressBookContactsRoutine.m */, + CE8B11965B7DA7048A0C7D79B2D06D85 /* APAddressBookExternalChangeDelegate.h */, + 0B58BBD84F4CB8F084B8898CB33F92AC /* APAddressBookExternalChangeRoutine.h */, + 1A0306FEA4D752C843625EAEEF26E214 /* APAddressBookExternalChangeRoutine.m */, + 8758E98311C100D695E9DD39354A339A /* APAddressBookFramework.h */, + D284697EB6E1A932E9BD70ED3DD99B2C /* APAddressBookRefWrapper.h */, + 4A45A2C9B03F1110645B05CC1FC41B3B /* APAddressBookRefWrapper.m */, + 992CDED25EE8F8CBC99D6F13DF495BDF /* APContact.h */, + 3291B1CAA3402E950716B88AD541AB45 /* APContact.m */, + FB783D6312A6E5CD1671DB4E492AA275 /* APContactBuilder.h */, + D00D7402CD29F413E5E9966BA33201A9 /* APContactBuilder.m */, + BBDA18E29EF0A3F30B570BCA5262D724 /* APContactDataExtractor.h */, + F7E24E5EDF0B14B9DE2FF399B71B0200 /* APContactDataExtractor.m */, + 2C5FBE58282DC7F28DF8918034FB3A97 /* APContactDate.h */, + CABBD5035ACE5C4F86E9656A8E6491AA /* APContactDate.m */, + 2B9E4072D6F936B2049599EADB78817E /* APContactListBuilder.h */, + 9BE9CE29299A9C50CDA5B73F5EAE93BA /* APContactListBuilder.m */, + 54D0553EBF50B7A545FAC19DCA665E07 /* APEmail.h */, + 59D5BD0A7C41D6AA5513B7F5BBC80DC9 /* APEmail.m */, + 97B0B7CB4BA0450A2746A9484E98E199 /* APImageExtractor.h */, + 8BFFDC4CFEA9857C5258E6C04420C824 /* APImageExtractor.m */, + F33155D38AB1DA2F593F95E346B66AE3 /* APJob.h */, + 8093992CD3EC3F8E026BF018FE0094E3 /* APJob.m */, + 8D2E65BB3F37F69ACA895F3D383F0E5E /* APName.h */, + BAED4BDAC4035A44527D8D78FF1EFC17 /* APName.m */, + 218B2240812412AF0461C77BF25CA6E6 /* APPhone.h */, + 58AF0171A7CB93B1CC449880EB7ED4B1 /* APPhone.m */, + AE37BCB539361B2DD2FE1DE5F2D0A24D /* APRecordDate.h */, + 65A3BDACE7385DEEFECFC0DD2B9E2546 /* APRecordDate.m */, + C16BA25512537A84BDDA5915842FF8B1 /* APRelatedPerson.h */, + C1ED6745CD7AE2716ECE8078AF203451 /* APRelatedPerson.m */, + 188EC7CC92ADAF3D81AFC9788A2A2D5C /* APSocialProfile.h */, + 8EEA43450F919333F6D075D8969E89F7 /* APSocialProfile.m */, + D3C978A87B64833A5E675182FE6BEE8A /* APSocialServiceHelper.h */, + F6E55484A1349EFFA5A91491DD5BF15D /* APSocialServiceHelper.m */, + 0E5EBA8130FE36306BFB3D4DE72A8907 /* APSource.h */, + 256FCAB914929D9C917ECBFDEB9103A5 /* APSource.m */, + 7732CD186F68C45FA3623CDB22165EEF /* APThread.h */, + 494B3E923318B12C9D1DA41B8B737864 /* APThread.m */, + 3747C11CF96542568B3CF09FCE223547 /* APTypes.h */, ); - name = SWTableViewCell; - path = SWTableViewCell; + name = Core; sourceTree = ""; }; - 76ED3D6512ECD1E59260CD9F16C555D0 /* TDOAuth */ = { + 52BA96BD6F1258B07B9884B58C566210 /* DTUTI */ = { isa = PBXGroup; children = ( - 20A1C1EE383FB03EC536ADDD80FBBCC8 /* TDOAuth.h */, - D8F5B03B264DEC05B6610285D6972AEB /* TDOAuth.m */, - D834A7AEF900A4301A7F3CBE5A8D1B9B /* Support Files */, + B5F402A3EC0E08E72B97A1F54135B14E /* NSString+DTUTI.h */, + BDFB9FCEDBD59EC2964ED0F1122BC2E9 /* NSString+DTUTI.m */, ); - name = TDOAuth; - path = TDOAuth; + name = DTUTI; sourceTree = ""; }; - 7744FC4ECD50DB08560782F08757FA1F /* libPhoneNumber-iOS */ = { + 54B81CC9A387F92C53962D439C6D4FEC /* DTScripting */ = { isa = PBXGroup; children = ( - 1CF48F61408DCC59EA59462400CA6DFC /* NBAsYouTypeFormatter.h */, - 3B8B851A78FBDB7830C6A99909E1D5AA /* NBAsYouTypeFormatter.m */, - 9CA306996EF026EE76590528A37CF0DB /* NBGeneratedPhoneNumberMetaData.h */, - 39BA38F2B8D34383684D8D0C09B73910 /* NBMetadataHelper.h */, - 9C93FDF659C9A5714CC06960DBFC73D8 /* NBMetadataHelper.m */, - 28A08E1337430D951D0F52CEA2768AF4 /* NBNumberFormat.h */, - FCB90BF6B02308EB6694C86BEEEB89EE /* NBNumberFormat.m */, - BF482B671BFBC6856CF3DE82684187F5 /* NBPhoneMetaData.h */, - 3240502E5D8013891B5AC87E43283615 /* NBPhoneMetaData.m */, - 87830096B0D5331ABCD532C4E3BE2B42 /* NBPhoneNumber.h */, - D20901577A61B36C526D5427EB900F52 /* NBPhoneNumber.m */, - 92D54C5C5AF24C4CAAE93D0E499A28D4 /* NBPhoneNumberDefines.h */, - C5C556F4E9E389C777D6DBA4D6B4749E /* NBPhoneNumberDefines.m */, - 68F6471CC02D47243436EDCCA2E98365 /* NBPhoneNumberDesc.h */, - 8A7BB6F13BE76C48FA8D859CB3C97139 /* NBPhoneNumberDesc.m */, - FA98FC625ED09545FBD9124CA090E34B /* NBPhoneNumberUtil.h */, - D9B46F5886A9A12063A78D288879D580 /* NBPhoneNumberUtil.m */, - B2D3D459AB835A3340765AC3004A9360 /* NBRegExMatcher.h */, - 34C0F54516F26E67DE9BA8E152C294B1 /* NBRegExMatcher.m */, - 0545D4C667CACF19E5877E96A375D4A3 /* NBRegularExpressionCache.h */, - DE5E76E7D4BA486824D56D2CB14CBD16 /* NBRegularExpressionCache.m */, - DB5CECAF441F681DF0AB7694FB26A957 /* NSArray+NBAdditions.h */, - 29129B02E241CBEC76590CDF19CF44F6 /* NSArray+NBAdditions.m */, - AC801D231DCDDD1164A74F487FE722C1 /* Support Files */, + ED9CE8B30CA8E19717B011E36E9AFC7B /* DTScriptExpression.h */, + A55C3E4AC2C9B1B22E44DCBBA3057D94 /* DTScriptExpression.m */, + 7223E290E19E3E8D9A8AAE27C061868D /* DTScriptVariable.h */, + 9A9A8DC2641992629867857CCBE7C8FD /* DTScriptVariable.m */, + 98369B4EBE5A95AC2AC3E08F3422D808 /* NSScanner+DTScripting.h */, + 18EBDC30BCDEF9E130E24154F2E6BBE2 /* NSScanner+DTScripting.m */, ); - name = "libPhoneNumber-iOS"; - path = "libPhoneNumber-iOS"; + name = DTScripting; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 58A05996A951106DE618D34A583864EA /* NSGIF */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - DC24B16987993B03F2DD28F3C510767B /* Frameworks */, - 6A0CE06EACA1C536D1F4878B7F9E020B /* Pods */, - 915818DAB85E7E0FB5E8E881C0776990 /* Products */, - FBDCEE903C81E7CC0B612C2B31723CEF /* Targets Support Files */, + BA2DBF0D876E9A031845C2D180EEF762 /* NSGIF.h */, + 6C43819912DC4120FC64EA4C0395A444 /* NSGIF.m */, + ACD1F1EA0C1A2D2F2F37EC6D169898D7 /* Support Files */, ); + path = NSGIF; sourceTree = ""; }; - 7DC2A71EF5C69635E2130AAEE303823A /* TTTAttributedLabel */ = { + 5AE727DDF7F441E6470B63BCC87B4B31 /* Support Files */ = { isa = PBXGroup; children = ( - 7B367001955C3BB3FEA8D874787101EB /* TTTAttributedLabel.h */, - 0B011B7E825F49E887D2E9C09AC44E07 /* TTTAttributedLabel.m */, - 66E49663FA5C82300C035769B06B9B84 /* Support Files */, + 3383F943413D5F41DC7A4408DDC3D552 /* AFNetworking.modulemap */, + 00253C10B4397FC1265133084A756946 /* AFNetworking-dummy.m */, + F2C631F551A937137BB5F58CFCE37471 /* AFNetworking-Info.plist */, + DF6F90773BC794F9FB6EC9E75A1D3AEF /* AFNetworking-prefix.pch */, + DBC163C08CC27AECF1902A9F73E77CB1 /* AFNetworking-umbrella.h */, + 4A10EDFAA7E661E4AD438A6F04D5BE30 /* AFNetworking.debug.xcconfig */, + 9D792A72AA43D32D354C2882BF4B3991 /* AFNetworking.release.xcconfig */, ); - name = TTTAttributedLabel; - path = TTTAttributedLabel; + name = "Support Files"; + path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - 7DCF9A0B02083F34A6A632A567AC1B23 /* DTAWS */ = { + 5E2B1D75FC82721D9D69E60C513F6C62 /* UIKit */ = { isa = PBXGroup; children = ( - 7F7DB9966F56D9B5CECCDBD53DB6419B /* NSURL+DTAWS.h */, - C62FDD6C6B1A12B9FE31B4E2AE0BFC3E /* NSURL+DTAWS.m */, + F91239B37A2AD2A491E0DC07032C78E7 /* AFAutoPurgingImageCache.h */, + 21F521728D6F6154A7364E6C3891A7BB /* AFAutoPurgingImageCache.m */, + C668F4E70971F1C1AA1A7CA5EF4194AF /* AFImageDownloader.h */, + CD7CEBE51E4FDFC4085E4A53DAD0D78D /* AFImageDownloader.m */, + C2904B61517BCA03652297C352FB6190 /* AFNetworkActivityIndicatorManager.h */, + C0AEA2B795CFEC399872E3506E759F80 /* AFNetworkActivityIndicatorManager.m */, + 549C39D2968D75FD476F7A9DF183459D /* UIActivityIndicatorView+AFNetworking.h */, + 3A72438B90A91A20FEB2A8DA248197C4 /* UIActivityIndicatorView+AFNetworking.m */, + AD6D6B6EDA06F1BC13B05982902F629F /* UIButton+AFNetworking.h */, + C9D62E0140E803C34055680C2A10DF4C /* UIButton+AFNetworking.m */, + 61E28EC6990C67076138744F68D21C38 /* UIImage+AFNetworking.h */, + DDDF2383AEAB26437399F1F2C5019255 /* UIImageView+AFNetworking.h */, + 3EC21C248F12785197C09A17EE49F156 /* UIImageView+AFNetworking.m */, + 53390D2EF21DC5D86510CED1CDC93011 /* UIKit+AFNetworking.h */, + BF271A833D9154250C25455F300192A0 /* UIProgressView+AFNetworking.h */, + BC0635F3CD4A800D9D2A528F54F29B24 /* UIProgressView+AFNetworking.m */, + 2AFEEDFF9641FBA2DBAD75D4C68B70EF /* UIRefreshControl+AFNetworking.h */, + 3B5E4C91D6A289128C5FB4385DEC3E17 /* UIRefreshControl+AFNetworking.m */, + 642BEB8C9D0C4E49E885E45FA13FEFD9 /* WKWebView+AFNetworking.h */, + A0F0549583368445B907B0AE11E4D869 /* WKWebView+AFNetworking.m */, ); - name = DTAWS; + name = UIKit; sourceTree = ""; }; - 7E548DE9FFC19956A0DDF94A0C86AEA4 /* PHFComposeBarView */ = { + 5F05C94A23FBC2BF2703591C73E7B2FE /* Frameworks */ = { isa = PBXGroup; children = ( - 26785D1C2E071576264D15A225899AA5 /* PHFComposeBarView.h */, - F5C89349E30A08E8E4B87C99333DB34C /* PHFComposeBarView.m */, - FB7CEF4B9C191B400A5CED0F57AAE1D8 /* PHFComposeBarView_Button.h */, - E86C6C93C07EC1A9274540DE53A4D928 /* PHFComposeBarView_Button.m */, - 4E5CEE5CD669FAB10E39C9F66FB4924D /* PHFComposeBarView_TextView.h */, - 4BA2E6CB4653F7D039DD9E0973E3C50D /* PHFComposeBarView_TextView.m */, - 317D5079A3A3459914578B8CC6F2FC6E /* Support Files */, + C4C1D06BCBA925A5DA67CD403C0082C1 /* AFNetworking.framework */, + 02F6059AE10EC5577C99A4867C058877 /* DTFoundation.framework */, + CBEAC381DFAA52662B80C32DA6CDA520 /* OMGHTTPURLRQ.framework */, + 381B1646C523369A20914ED412CBDD5B /* PHFDelegateChain.framework */, + 3B4E19D5B1F25035473C24110157B852 /* Reachability.framework */, + 7EE01EA5ADFAA689C52870D92389CEC7 /* RMActionController.framework */, + 115385682966AD7F6D538B473C910B42 /* SCSiriWaveformView.framework */, + 8894EA95FA24CC85B23BD78F4B61C0FD /* iOS */, ); - name = PHFComposeBarView; - path = PHFComposeBarView; + name = Frameworks; sourceTree = ""; }; - 817065ADE0D22E87409EFA796C10F26F /* Support Files */ = { + 5F534C58309D3CFD4437ED94A3381E36 /* Support Files */ = { isa = PBXGroup; children = ( - C438390B8302EA1B6F42234C7243A1F6 /* HMSegmentedControl.modulemap */, - E5F4DBEF4E966F988F41F694AA15F3EA /* HMSegmentedControl.xcconfig */, - 67AEE5ECD99B346C8A094BCCC784F9E8 /* HMSegmentedControl-dummy.m */, - 2FB0970ACC26B32755BB247B5B5B8388 /* HMSegmentedControl-prefix.pch */, - 306C6033059CFC7A0C2FAFE581517378 /* HMSegmentedControl-umbrella.h */, - 399ACC0C9B04A4707F46AEBBAE7C2437 /* Info.plist */, + 2E3961604D8A73D2C9686320D6FA1241 /* HMSegmentedControl.modulemap */, + D4E093FB08B0AC7CD5926C8926D1B226 /* HMSegmentedControl-dummy.m */, + 2E2A60DA45DC775E9EA644E9993FC987 /* HMSegmentedControl-Info.plist */, + 661A32505DCD2DCC9473FCACCD79967E /* HMSegmentedControl-prefix.pch */, + E754605D188120811807F2891CFE1591 /* HMSegmentedControl-umbrella.h */, + 86D8DDF2B354917508BD6EDDF22FA74C /* HMSegmentedControl.debug.xcconfig */, + 01593660F2D9248A7F4058E72E35265E /* HMSegmentedControl.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/HMSegmentedControl"; sourceTree = ""; }; - 82DEEE42D452146F029B8E05AFC40C96 /* DTFoundation */ = { + 5F906FF753B54736154917FB022ACECC /* DTSQLite */ = { isa = PBXGroup; children = ( - B7484FA2E2126D896CC305F2D483D4BF /* Core */, - 66F1633BFF25EDFE142CC3A16DBAB655 /* Debug */, - D1E86A3084D1C62B12820A6F21005D33 /* DTAnimatedGIF */, - 8608BB1315BB3473179A8AD9B3C54310 /* DTASN1 */, - 6A5DA3C6D533308FECA68C03927ECE12 /* DTAsyncFileDeleter */, - 7DCF9A0B02083F34A6A632A567AC1B23 /* DTAWS */, - E287FE9F7DEBEE42E3751EAF064A3575 /* DTHTMLParser */, - 01A35D72E83E20A05893E021D3499EAB /* DTProgressHUD */, - 455C0BA98994CA53A0039E48B522ABC2 /* DTReachability */, - FD4A174D86EEF35A620DAEF21B903633 /* DTScripting */, - D8A8A6DB6F3ADCDE9BAEF37D8B089DE2 /* DTSidePanel */, - 0AB98B67313BF40486AE92A187DE46A9 /* DTSQLite */, - 00C18B805EB41AB59DDFAAFCEF09B91C /* DTUTI */, - 38E340F288CCF31EC9A32363E19A1FA7 /* DTZipArchive */, - EF0B1D2ADD57BCDFE80F7DF938B918F7 /* Runtime */, - BE3CCBCAD03E002F57D5D46CA1BBBDD2 /* Support Files */, - 0C550946DEA172F5C1407EB2A2E96D8E /* UIKit */, - F5F02C58DCFEAB572650EDAE434904C5 /* UIKit_BlocksAdditions */, + 6D5134647D2AF1E64F7BB4ADDA97E67B /* DTSQLiteDatabase.h */, + 13CDB1BC4F2C90A655D240F6E4ADFF42 /* DTSQLiteDatabase.m */, + 8CE10D2E1AE3DFCA0B8911D9915BB2DE /* DTSQLiteFunctions.h */, + 323EC0E948ECDB984E2A5163F0FB2320 /* DTSQLiteFunctions.m */, ); - name = DTFoundation; - path = DTFoundation; + name = DTSQLite; sourceTree = ""; }; - 8608BB1315BB3473179A8AD9B3C54310 /* DTASN1 */ = { + 60E5B3A57C47C01B5E0394B48DEE2478 /* DTASN1 */ = { isa = PBXGroup; children = ( - A389805038693667C489FE8659582AA5 /* DTASN1BitString.h */, - 8F84C9020D06D4E481E6DD8ABBA264B2 /* DTASN1BitString.m */, - CB0B65BB0E2DFDF7C2F95DB06BF1A7BC /* DTASN1Parser.h */, - B62913AEDB9499BBC4BA801307C8AF53 /* DTASN1Parser.m */, - C03B2674190F3629601BE4E1DF146E24 /* DTASN1Serialization.h */, - 434442D1656B82307A269BDAB91756E8 /* DTASN1Serialization.m */, + 1AF2E48D7B824BA5D9B81E118198FE20 /* DTASN1BitString.h */, + FD203B0FB8A97B55112E52572F0B6175 /* DTASN1BitString.m */, + 02B226C8F836857901CE6C52DA10C8C8 /* DTASN1Parser.h */, + 46B6297851A5C084387DD79CC6F0700E /* DTASN1Parser.m */, + 8A3CF3E548B970691396E862DAA29435 /* DTASN1Serialization.h */, + 8A0763B9C564B7F5E6C2100F38944A1B /* DTASN1Serialization.m */, ); name = DTASN1; sourceTree = ""; }; - 89C88BF2F6CCDFF92925E33581F339DB /* Support Files */ = { + 62815BD24A096E8B550B3D59EB746276 /* DTReachability */ = { isa = PBXGroup; children = ( - A2E5DFB779C359D18E3A847E4B22AEA8 /* Info.plist */, - 035B3CA637504D56481DF978B1A5DACC /* RMActionController.modulemap */, - F94ABD383E84FCC39829A73AF91CC707 /* RMActionController.xcconfig */, - DDA6D9827B5722AC04019CE1602935BB /* RMActionController-dummy.m */, - 40D1A2E12B1B453F7DAD590E72C69397 /* RMActionController-prefix.pch */, - 994FFEE2F4F3DE962EB7EAAEAC7A621F /* RMActionController-umbrella.h */, + 9D280C2C35A22ABEBE9233E09B11774A /* DTReachability.h */, + 8D545569043D5C95CCAB3B6D62A307AA /* DTReachability.m */, ); - name = "Support Files"; - path = "../Target Support Files/RMActionController"; + name = DTReachability; sourceTree = ""; }; - 8D7A458F73E68E73F269C71E59C2C40A /* Support Files */ = { + 665B9E701F56F6B1D40A75F0314A90C0 /* Reachability */ = { isa = PBXGroup; children = ( - 895C94A91F6D96F19BCA2000206DAEC9 /* Info.plist */, - 47118026110DEB408CD4ECCE80D5EFBA /* SocketRocket.modulemap */, - 011A958F97F8F94B4225695A5C858C89 /* SocketRocket.xcconfig */, - 9D462966FAADC9C7425DC90CF7BFF525 /* SocketRocket-dummy.m */, - 3F1A6A033D3C83A1971877D209067BDD /* SocketRocket-prefix.pch */, - 1CEEC911DB18E5EA1DCDF59C7A6F5857 /* SocketRocket-umbrella.h */, + ADA430B91ECE5215E7893505F1DF4A27 /* Reachability.h */, + 2EEEC5B3FC38BD7675066354CBF01E3D /* Reachability.m */, + B3F73E9A75A4EDD987D12748B5EFA502 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SocketRocket"; + path = Reachability; sourceTree = ""; }; - 8E16469A8383E2B81F58D7CF86B7545D /* TWMessageBarManager */ = { + 6C9FCB30CF51953DE172A4FE20EA5530 /* Support Files */ = { isa = PBXGroup; children = ( - 83C37D5FB73A690EBB95ADEB9E81253A /* TWMessageBarManager.h */, - B9A77C530F6812A777BE422D7C9BDF4E /* TWMessageBarManager.m */, - DC379633DEB8A3D62579FEE9DEB6CA96 /* Resources */, - C46237AC852C91AA8C4828A31827FB2B /* Support Files */, + 1367A74BECED308C0D09869FD5F17298 /* PHFDelegateChain.modulemap */, + B8D000E2A956739B492114C3A77D8AB2 /* PHFDelegateChain-dummy.m */, + CBC6484CC053F725BD5FDE40FF3A429A /* PHFDelegateChain-Info.plist */, + CE7C303C6A6A464A66E5A2BECBBD92C7 /* PHFDelegateChain-prefix.pch */, + ED122249A49DF8819428A2525E549429 /* PHFDelegateChain-umbrella.h */, + 2C736EDD966B965B1F81E1E98017A08B /* PHFDelegateChain.debug.xcconfig */, + 62430FEF119CB4084273453913BB4A18 /* PHFDelegateChain.release.xcconfig */, ); - name = TWMessageBarManager; - path = TWMessageBarManager; + name = "Support Files"; + path = "../Target Support Files/PHFDelegateChain"; sourceTree = ""; }; - 908F172071445F1FE9BDAF5822E90526 /* Serialization */ = { + 720605DA485EB7734E9FADF5679270A5 /* DAKeyboardControl */ = { isa = PBXGroup; children = ( - 66CF7F80F139EDB4D3B70E0BBA93DA52 /* AFURLRequestSerialization.h */, - 6C2F252FE80E1FD2C9C56463D50FF7DE /* AFURLRequestSerialization.m */, - EDFA08E40D1AA8FA0F6C92D88FB0E478 /* AFURLResponseSerialization.h */, - 0982CA6B17EF8674989EE083F9A541D8 /* AFURLResponseSerialization.m */, + B6D6C475117C400880DD881902A8523D /* DAKeyboardControl.h */, + 06E6C89D9847E242CF8F81378A0302AC /* DAKeyboardControl.m */, + 027C3C8366849E7FAE752AE880B2C930 /* Support Files */, ); - name = Serialization; + path = DAKeyboardControl; sourceTree = ""; }; - 915818DAB85E7E0FB5E8E881C0776990 /* Products */ = { + 7335762FEBBC41DC91687F06F382668C /* SWFrameButton */ = { isa = PBXGroup; children = ( - 553D68EA4E14EE1E8537DDA11EDFCB11 /* AFNetworking.framework */, - E40BA757FB4E61D119A2C90C754F1A6A /* AFOAuth2Manager.framework */, - BB41E1FC01246398E6649D720591B511 /* AHKActionSheet.framework */, - 61D3B4C8E4F29B550C006455FC428B29 /* APAddressBook.framework */, - 6A705BB935FFD33E97659567904F3C2B /* BBBadgeBarButtonItem.framework */, - 8D4431198860DAA616545F1721451E35 /* DAKeyboardControl.framework */, - 318D529FBBACFB31C32B65B0E44D0EC1 /* DHSmartScreenshot.framework */, - 9E6C375AFDF60B24529C666180296602 /* DTCoreText.framework */, - 0BA95EB4697D3059990A109CB20E4678 /* DTFoundation.framework */, - 29B1E12538E72897C4665BB7B0821312 /* FLEX.framework */, - AB60B629F159129D64DDD58FDB30192A /* FreeStreamer.framework */, - 2A4A5A9B446BD29C6F4B29FEAC51A7D9 /* HMSegmentedControl.framework */, - 3F3238E8FB79C75517B2CCB9979005E0 /* INTULocationManager.framework */, - 051E14F217E39785978192242DAF7155 /* IQAudioRecorderController.framework */, - 081CFA2F2EA68EE6278C933BE1130B44 /* JDStatusBarNotification.framework */, - 02D0F0E36078FE736418D3B81DEFB41B /* JSCoreBom.framework */, - 97F417414DF505A13065444BDC4975F5 /* libPhoneNumber_iOS.framework */, - 2BB1C5C8FA8F8F787956B36994655165 /* MBProgressHUD.framework */, - 7CE96321B96B44AD12295012ED450F21 /* NSGIF.framework */, - FF0A5007253B5FE2982C91527BFDAC1F /* NSHash.framework */, - F4F94D4C37646D01BCCFCDEDF7802E32 /* OMGHTTPURLRQ.framework */, - CD263D52C7716C7F8E2ADE1C3E182FF4 /* PHFComposeBarView.framework */, - A1018895EDC769D307880CECA5D4B151 /* PHFDelegateChain.framework */, - BD188DCDA18CCDF1F7CDC866470603D6 /* Pods_Jasonette.framework */, - 14741E32483AD7253EBC66C24EF99B7B /* Reachability.framework */, - B1F8DA5502AF0C76569E90285941F642 /* REMenu.framework */, - 39E155782CDCF4D13D17CC87E2D5A1A1 /* Resources.bundle */, - F4391BA7A1CCD3B29EC5D094090870AE /* RMActionController.framework */, - 4D31B8FDFB387E867B599908BFE6EC82 /* RMDateSelectionViewController.framework */, - B0E7616E72496C96278627DFB1BA5116 /* SBJson.framework */, - 91F17964D0D5F42EFCA6948E125C1190 /* SCSiriWaveformView.framework */, - E944E2995B037E934DDEEF9D9CD20314 /* SDWebImage.framework */, - FA5379F429CC269E964A272D7314B421 /* SocketRocket.framework */, - 8905056BE752C30914FE90B590213460 /* SWFrameButton.framework */, - 8303466B3D1668DDE02BA95031381AF6 /* SWTableViewCell.framework */, - 116DC6A652F7C0E89D2169EA2EB69384 /* SZTextView.framework */, - 8A83B62D116416D79AA16FE0D44BFE05 /* TDOAuth.framework */, - C7B4684400DED67C5E1E6B259BBFF1A7 /* TTTAttributedLabel.framework */, - 8E6E39260F78D7879EC76E1A11A89244 /* TWMessageBarManager.framework */, - A9206F7ADB4184B73FC9E6328ADC5C45 /* UICKeyChainStore.framework */, + E4A1C49B0D5F7B9383BA478821467562 /* SWFrameButton.h */, + D92A2FA11A35065F67EE518464B2FD7E /* SWFrameButton.m */, + 8B54AD42E41A1D4096176C5E5E31320B /* Support Files */, ); - name = Products; + path = SWFrameButton; sourceTree = ""; }; - 92B6274ABF22F88E44D6E674779D69D5 /* Support Files */ = { + 73DE2B9F944A299EE97DB0BC772A7524 /* RMActionController */ = { isa = PBXGroup; children = ( - 3AC9D2E925C9A180C78226D87CAAE497 /* FreeStreamer.modulemap */, - 6099BDE6CEEAFD3FE824CA5730777F3E /* FreeStreamer.xcconfig */, - 9FD1C50E557D551E4FEC2FB690C25C07 /* FreeStreamer-dummy.m */, - B2125C5707243F2E119ACCC995E7EEF0 /* FreeStreamer-prefix.pch */, - 1D63F82EDAD117C9E975F2BB3107260E /* FreeStreamer-umbrella.h */, - E0E64B63B2AB3E900216F0102B840BCB /* Info.plist */, + 1EE250527407DF775C7ACEDE95D27015 /* NSProcessInfo+RMActionController.h */, + F8FE6AEADCBB9717BA5378AD08536AD3 /* NSProcessInfo+RMActionController.m */, + D7A30B7BAFABF8F34D6B7FB90BF3F834 /* RMAction.h */, + F2418F9D42782196418C0D344ED3DA1D /* RMAction.m */, + 76F6CB672AF5B3F27EEC26BBECA74463 /* RMAction+Private.h */, + DE56F746CA8ED814C10CE427E96AFC73 /* RMActionController.h */, + 572C8C5F1218AF4DE4A49729577A33B0 /* RMActionController.m */, + D0CBD9DCBC0D191EA10430FF06E3ABEB /* RMActionController+Private.h */, + 2AFAB0F31F5518CB1C36BDEF161ADBEE /* RMActionControllerTransition.h */, + AD03D57815980BAA42895E9397CBE574 /* RMActionControllerTransition.m */, + 30AD638588599A5D5E0151BC5D2192F8 /* RMGroupedAction.h */, + D9AA427BD24C4E18FF7DD21291DFC9FD /* RMGroupedAction.m */, + 771CE2A4297D94DEC70D38882596FF19 /* RMImageAction.h */, + 7527570298EBB22C02AA1D5778A7D1E1 /* RMImageAction.m */, + BD589F34C17E1DD9DC3928C2541C0015 /* RMScrollableGroupedAction.h */, + 0F8D7B92A78B76A38CA494289CCA877E /* RMScrollableGroupedAction.m */, + 024315D666286AD7E2D70D73B99A2C19 /* UIView+RMActionController.h */, + BBCE61B8CC60A2E0071F587F49418E75 /* UIView+RMActionController.m */, + A49F92436F2E501EE71A30266BF971EF /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FreeStreamer"; + path = RMActionController; sourceTree = ""; }; - 942529341416500C2213F9AE0C583F0A /* Support Files */ = { + 77211AD7BBA612448FA223A33DEEC81C /* HMSegmentedControl */ = { isa = PBXGroup; children = ( - 283A842D3313B8AD89CCCDF0804CA153 /* Info.plist */, - E440A4F9D99B6F6D56395090983B1D9C /* SZTextView.modulemap */, - D37F9BAD36742F897F8BF28710DBF8C5 /* SZTextView.xcconfig */, - BE8F1B61F67EC6D75C0EE3A24D43F127 /* SZTextView-dummy.m */, - 6841B667935D5F7AF6DF9BB121FCE323 /* SZTextView-prefix.pch */, - A36DE7D2F2BAA963BBC6D01224231B28 /* SZTextView-umbrella.h */, + DEB2FBAE58D1C59A91EC9CB07BFF64E6 /* HMSegmentedControl.h */, + D5C15A832FF7CB115CDB69CBE663F3F4 /* HMSegmentedControl.m */, + 5F534C58309D3CFD4437ED94A3381E36 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SZTextView"; + path = HMSegmentedControl; sourceTree = ""; }; - 95144D10ECF014D5FB82DCDABDCD9999 /* DTCoreText */ = { + 78528C130D6D57AB4513B13064509E26 /* Support Files */ = { isa = PBXGroup; children = ( - 6ADFD3746888CF1A155B596BBFEAE83A /* CTLineUtils.h */, - 7BC3E0E0FB72DAF87AB1DF473867D669 /* CTLineUtils.m */, - 2FAA42FD68777B37DC811EC07B299B4F /* DTAccessibilityElement.h */, - 835863DBC2516B295BB91F8A991563BD /* DTAccessibilityElement.m */, - B971A6E642880750BFE4C9A29E21B99D /* DTAccessibilityViewProxy.h */, - 3D1556756BF1C23AC926D6364BB85E45 /* DTAccessibilityViewProxy.m */, - 95DAE815F898E1A93B8B11A759986E39 /* DTAnchorHTMLElement.h */, - 1EE1A5E1EB2ED5D05F02167DF73BC51C /* DTAnchorHTMLElement.m */, - 9F5F6321F39C7C6EF68D88B6E3734EE0 /* DTAttributedLabel.h */, - CD651360C574B05050A6FC64F920C3F3 /* DTAttributedLabel.m */, - 3E41F9FE6F5667CCD5C183CFB2E087ED /* DTAttributedTextCell.h */, - 647801C4D9AEFBC80F87A3DE48A45CEB /* DTAttributedTextCell.m */, - F0A982518E1FF4F06C41C058EB3224B7 /* DTAttributedTextContentView.h */, - 7716FA16F65B0ECD19827BAEEA61EA40 /* DTAttributedTextContentView.m */, - 56894A8AACBFD972F0EB23DF976A5257 /* DTAttributedTextView.h */, - D82E38BB47B35F22A453C96C9B210B6E /* DTAttributedTextView.m */, - EC51C1A717CEE5CC3ABE3A19A1CFE737 /* DTBreakHTMLElement.h */, - 6EACC9B6C9158F9F7D9B5DBB31783D91 /* DTBreakHTMLElement.m */, - D2C615195137BE4B956ED2F8DF020F11 /* DTColor+Compatibility.h */, - D3FB70E3022F0A09AF1D7215EF602A0D /* DTColor+Compatibility.m */, - 692186D20ACD493FD60D0AEC8B449B75 /* DTColorFunctions.h */, - DCDDFB4ACF8FAC5F6735FA031F843482 /* DTColorFunctions.m */, - 09099B19A3D6838BCFCA9E0E32A52CC7 /* DTCompatibility.h */, - 2841E12BD983547440DCB8D929D4EF11 /* DTCoreText.h */, - 8545CB14E24FF526CB5152E9086FA913 /* DTCoreTextConstants.h */, - C7D0C6F9775D9D88BE695A5F091B7828 /* DTCoreTextConstants.m */, - 2F51BFAEF1903A5111D888842A6F4E0D /* DTCoreTextFontCollection.h */, - C2190544F7C9236FCBB69C5692D10D7B /* DTCoreTextFontCollection.m */, - BB07B3E81AB9C5FE3AB2298DF55BC0CF /* DTCoreTextFontDescriptor.h */, - EF494CAFCCC298A3D9BFC74B0691660C /* DTCoreTextFontDescriptor.m */, - 872E53CFD1085E0B05DA19A23A9688DC /* DTCoreTextFunctions.h */, - C1A63964D70C64A567DB17E1D9AF8950 /* DTCoreTextFunctions.m */, - 6DBB91FD9C95F6DB31A9A1C648E3476D /* DTCoreTextGlyphRun.h */, - 67A235E14AA38F5DB441F14CC44F651B /* DTCoreTextGlyphRun.m */, - 1E4D1ED88F04A238D7DE9EDA576C7342 /* DTCoreTextLayouter.h */, - 79B8D27082D7F68890ACE43D1EDC2D7A /* DTCoreTextLayouter.m */, - ABF80218A116CEEB75C7386974BFFEFF /* DTCoreTextLayoutFrame.h */, - 77725B87B010942D033614C46B9BED1B /* DTCoreTextLayoutFrame.m */, - 025F60E39B9C7DAD590A6881CAE385A9 /* DTCoreTextLayoutFrame+Cursor.h */, - 6B1F62D60F8822CD21C9F621579F3193 /* DTCoreTextLayoutFrame+Cursor.m */, - EB88FCF456B6DE80C77E749339836BDB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */, - 774DB96CCD1DAF3FD2D4F2E86E5AB5AB /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */, - B6C7BAABB57F9EC074F1A7BD908E7CF5 /* DTCoreTextLayoutLine.h */, - EFD7166B5A4B9900712141DD1627CFB4 /* DTCoreTextLayoutLine.m */, - 1CA0F6C8A26104EB03B31E4EC09953A4 /* DTCoreTextMacros.h */, - CBDB66B85D05E6287EA5408930F3C506 /* DTCoreTextParagraphStyle.h */, - 56A6087C30E0EAEC4E5B3B575E063C73 /* DTCoreTextParagraphStyle.m */, - 8A98FD238964ED238860683EFC130891 /* DTCSSListStyle.h */, - 41E187689DD717DD616C3C68C07BD3A7 /* DTCSSListStyle.m */, - D321F3E6B6ACCBA9ED85086495A79CCC /* DTCSSStylesheet.h */, - B377881DD507A2498C225FC5DDE5AB7A /* DTCSSStylesheet.m */, - 8E826E7E01C85E9618806299C72D0597 /* DTDictationPlaceholderTextAttachment.h */, - 98E1F94832D82026755AAD32CF83D035 /* DTDictationPlaceholderTextAttachment.m */, - 73FCE57D70A762D3BD218B0391E60AF3 /* DTDictationPlaceholderView.h */, - D3189FECB805ABD15E5FD40E1326EA36 /* DTDictationPlaceholderView.m */, - 6AD7DDBFAAFBE292FDF015EBE25D459E /* DTHorizontalRuleHTMLElement.h */, - A406BBAB4C433CEF07A0FA8D61ADB625 /* DTHorizontalRuleHTMLElement.m */, - FD3B1A88AFE5380A5CAE91A27E294607 /* DTHTMLAttributedStringBuilder.h */, - EAA29009F2FA539CB030429045E8DD0A /* DTHTMLAttributedStringBuilder.m */, - 8344E6EA329083A7430F58B1D03F33F3 /* DTHTMLElement.h */, - A0FB758ABF2DC3D078F17A501528E52B /* DTHTMLElement.m */, - 9065637C66199F7153EBA5D69775A9BA /* DTHTMLParserNode.h */, - 69202E90B9F5BC72E866B7A2C2E64281 /* DTHTMLParserNode.m */, - 05ED70ADD97441E94A644CB0B4D73DC8 /* DTHTMLParserTextNode.h */, - D801509F1F53CC0A1524357198DDF89C /* DTHTMLParserTextNode.m */, - D117BEB0DF65A0BCA1C68C5C64DF7034 /* DTHTMLWriter.h */, - BFE5F142C120EBD15C067114E05CEF91 /* DTHTMLWriter.m */, - 711BC7CEE51FB9A2D57CC59F9C839BB2 /* DTIframeTextAttachment.h */, - 528911BED3AB7AAC08D31D095376F8D7 /* DTIframeTextAttachment.m */, - 21A303AD6DE8C52A6318EB6AB293CC68 /* DTImage+HTML.h */, - F5EC73C7565197C98B05711E7F3D873D /* DTImage+HTML.m */, - 6999AFE652719BC391E5A3D9BFCE8EBE /* DTImageTextAttachment.h */, - AECF2CD225A702A9361C286B4BFFA285 /* DTImageTextAttachment.m */, - 3D259E26BBDA9B98BDF88EB4B5CC5115 /* DTLazyImageView.h */, - EF42C1A2CD48DFBD62238FCBD8DE5292 /* DTLazyImageView.m */, - B73A0713068F14420E09F72AC747985E /* DTLinkButton.h */, - D93F478AB7211353944BC6C7763BDD2D /* DTLinkButton.m */, - 2EE24019BCEADAB481DCA5E066095F6C /* DTListItemHTMLElement.h */, - CBF60C56D3579DA28ADCB337C9DAE7E7 /* DTListItemHTMLElement.m */, - CC06838690303F4DA7AF40958BF45B8B /* DTObjectTextAttachment.h */, - E5BD0B6D7CB5473A90730412F9D010D8 /* DTObjectTextAttachment.m */, - F34976739B9D9D9A295A1E9C8C5C5BC0 /* DTStylesheetHTMLElement.h */, - 0F50F1EF775314CF44AE84C535F40645 /* DTStylesheetHTMLElement.m */, - 347602E3770137BA2E86C1AC67088DD3 /* DTTextAttachment.h */, - 7FD3F16C6A04121C6BAE8993EF484FDF /* DTTextAttachment.m */, - A8121ECAC3B05CB6A59E85B52DF9DCC8 /* DTTextAttachmentHTMLElement.h */, - C5FA4E9215B860BBF43E6AF7A96D1D1B /* DTTextAttachmentHTMLElement.m */, - B32C525D04AF40ED9014B31FD1FE6396 /* DTTextBlock.h */, - 9F238D69636ABBA89999B530F57D6474 /* DTTextBlock.m */, - B4324C8C0DA84D67C4D72505872B34E9 /* DTTextHTMLElement.h */, - 4299CDC1811FD1EECB4DB5EC55A627C8 /* DTTextHTMLElement.m */, - C7862FBC21A6D5FFF54C93FE8C6AE6AB /* DTVideoTextAttachment.h */, - 19BF33EC0E3B511759B040C38DD92559 /* DTVideoTextAttachment.m */, - 89E8CD7F829FE03513ABF59FCA0D7C58 /* DTWeakSupport.h */, - A93344EFEF95FE44A4B7AED1B2CA9C3F /* NSAttributedString+DTCoreText.h */, - 86AF84C761574816B6A142134ACDFC60 /* NSAttributedString+DTCoreText.m */, - 246D99D70D7047C304152DEA5910994B /* NSAttributedString+DTDebug.h */, - 6D0BEC90ED8112E7B0773B4C764030EF /* NSAttributedString+DTDebug.m */, - 315C99237CCD850597FEE5DE64AF5EEB /* NSAttributedString+HTML.h */, - B96129A769033F366369E4A79BF2B048 /* NSAttributedString+HTML.m */, - 0CDE4A00D393E6382A4D66DD6DCA224B /* NSAttributedString+SmallCaps.h */, - 0B44458A77A7CFEF038996A84E4D398C /* NSAttributedString+SmallCaps.m */, - 289C875EE0587A1B18031AC9B1455DA7 /* NSAttributedStringRunDelegates.h */, - D68CA08C7384C24511E96D86A1F3A767 /* NSAttributedStringRunDelegates.m */, - 513E160F8F3010109DA38DD4AA45C58A /* NSCharacterSet+HTML.h */, - 19A8B19C7222EFCEA45063A33394FD25 /* NSCharacterSet+HTML.m */, - 1FFE60E8F3C60A95EE262A0B281E0879 /* NSCoder+DTCompatibility.h */, - DC2FA85ED1D9F53938C3BBB7F76C4B6E /* NSCoder+DTCompatibility.m */, - 66E77F3E2D2C21D1F2132D2970E35BB5 /* NSDictionary+DTCoreText.h */, - A4DA8C2BB56782B5F1FAE39DDDF08336 /* NSDictionary+DTCoreText.m */, - 9A5AC6A57F8729EDD1979A8D6C7495DC /* NSMutableAttributedString+HTML.h */, - 20033E63A017A79D63884F6AB383B13B /* NSMutableAttributedString+HTML.m */, - FF4B6A447DA65C56AE07B0D13F8DEF29 /* NSMutableString+HTML.h */, - E12B9F5E8FFC3DF06266D92FA3A53DF1 /* NSMutableString+HTML.m */, - ED33EB7B068A7ABAC8C09729EA573354 /* NSNumber+RomanNumerals.h */, - F2AD54F8CF82B02A3BB64862EFAA961E /* NSNumber+RomanNumerals.m */, - 201ECABDA0E05EE41544C13362C2B386 /* NSScanner+HTML.h */, - C92C24CB353C6E55C8F2A7A38A33B463 /* NSScanner+HTML.m */, - 6A9C380C1F8E98598276DBDB07E717C6 /* NSString+CSS.h */, - B2EEF4B05CFCB0EE80B44CF42AB623BD /* NSString+CSS.m */, - 646B47846A0CCEC64E273C7232F48375 /* NSString+HTML.h */, - 1AB9550774C5D293E8BEAD3936D73314 /* NSString+HTML.m */, - 310B3EDB4FAE61174320E1EBEE1670D7 /* NSString+Paragraphs.h */, - D4394DE0095782C44804B01651894BC7 /* NSString+Paragraphs.m */, - CA54D7B30D2DF761EF2AB60B9BF5A5CF /* UIFont+DTCoreText.h */, - 510C686AD8AE00A79583D4615287A67E /* UIFont+DTCoreText.m */, - D4BAA9B1D00026BA4581AB66564A1670 /* Core */, - 063A1449A83F0BAF2155DBEF6629580A /* Resources */, - E868ACF3FC033A01F918F19BF0165B0A /* Support Files */, + EF7CE0E1DCC5D22BC0297735B2169E0E /* BBBadgeBarButtonItem.modulemap */, + 9967C31E78896FBD9FA253FC36F29AB6 /* BBBadgeBarButtonItem-dummy.m */, + 2F70C7785AEFA173A9E161450B55463C /* BBBadgeBarButtonItem-Info.plist */, + 2CBC3CB79DBEF4C0F80D49B0952D71A6 /* BBBadgeBarButtonItem-prefix.pch */, + 736D3E88E13D309111421B524690241E /* BBBadgeBarButtonItem-umbrella.h */, + 15E68503618D4422AAC905A5A8A2EC73 /* BBBadgeBarButtonItem.debug.xcconfig */, + 812DF966F90296419775F6ABA5298A33 /* BBBadgeBarButtonItem.release.xcconfig */, ); - name = DTCoreText; - path = DTCoreText; + name = "Support Files"; + path = "../Target Support Files/BBBadgeBarButtonItem"; sourceTree = ""; }; - 9B3031C333AF699B5E3286786657B3BE /* Support Files */ = { + 7BEF9DD858A1D75878F7B7CCAA897A3A /* FormURLEncode */ = { isa = PBXGroup; children = ( - F55C2F4987EC3AE1515D9C78E39E7326 /* BBBadgeBarButtonItem.modulemap */, - 3EA2A54CF2A0A743D21B89E262F21CCF /* BBBadgeBarButtonItem.xcconfig */, - CB94D58B94EE0A760934C1D54572CD4C /* BBBadgeBarButtonItem-dummy.m */, - CBC833F4E3202763CE29CD12BF69B2C8 /* BBBadgeBarButtonItem-prefix.pch */, - 3D3544449382D4F630416FCC09B43508 /* BBBadgeBarButtonItem-umbrella.h */, - 35DF165C2109A53A7F43FC602E978E31 /* Info.plist */, + 3D660401E38170752115DFE8617DF310 /* OMGFormURLEncode.h */, + 3E5D6C4ABDD321558A67839B08BC51B8 /* OMGFormURLEncode.m */, ); - name = "Support Files"; - path = "../Target Support Files/BBBadgeBarButtonItem"; + name = FormURLEncode; sourceTree = ""; }; - 9DBA4747E0F8511F96D28BC02478B1DE /* Support Files */ = { + 7DC8BD11BD8E1AB3067FAB6EEC02EBEE /* Support Files */ = { isa = PBXGroup; children = ( - 674F00ABBE625D01BCAF7FCC8DB85342 /* AFOAuth2Manager.modulemap */, - 2014FD1A3A666B475076CD94D5FC8ECA /* AFOAuth2Manager.xcconfig */, - 927AD90E9D986182DEB3AAE58E97A6AF /* AFOAuth2Manager-dummy.m */, - F4904927B465EB4557166C0A0084F47A /* AFOAuth2Manager-prefix.pch */, - BD6FABD7748FD1F9F4E06FF17CC1FC20 /* AFOAuth2Manager-umbrella.h */, - 73FF8831F31F1FD925A7F94D4FA5E655 /* Info.plist */, + 9A1194094130801E5FEB41991F8508B3 /* APAddressBook.modulemap */, + 54A642ABA6713FE13CEA750A4D3AD565 /* APAddressBook-dummy.m */, + 22A7AA9B1907005D4116977FB45DB867 /* APAddressBook-Info.plist */, + 54D2251600FFB01B04A8481C0A259D9B /* APAddressBook-prefix.pch */, + 4A1590134F61F8B8C824B0A99B8BDE18 /* APAddressBook-umbrella.h */, + 824311AA91F3CAB809D3E6FD3DD5A007 /* APAddressBook.debug.xcconfig */, + 840AE85581A20188CA6E4094FFECE5F6 /* APAddressBook.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/AFOAuth2Manager"; - sourceTree = ""; - }; - A31F718C7888DD7B60331D46DB9F37FC /* RQ */ = { - isa = PBXGroup; - children = ( - 0B0984F2BC1EABCFFA9D2B4AA9C3175B /* OMGHTTPURLRQ.h */, - 83D4761478E69E114DF523BFEEFEF308 /* OMGHTTPURLRQ.m */, - ); - name = RQ; + path = "../Target Support Files/APAddressBook"; sourceTree = ""; }; - A32C6AD4DD656254E17B846409E06443 /* SZTextView */ = { + 7E4B5DBE1C228D04C75A50C156AA3D4C /* SWTableViewCell */ = { isa = PBXGroup; children = ( - DDDB37925257A30BA84D5807DC028A67 /* SZTextView.h */, - 36AFE5C2475F91D0FE2F81886658519B /* SZTextView.m */, - 942529341416500C2213F9AE0C583F0A /* Support Files */, + 56169B1C69A812F25BC91F5ACDD35700 /* NSMutableArray+SWUtilityButtons.h */, + 2B4CADBE8331440C80CBA47FA8AFC0D9 /* NSMutableArray+SWUtilityButtons.m */, + 2B39A6F2A3777667BF3FFD3CDE9140C8 /* SWCellScrollView.h */, + 43236CA31C87082971B11360C8BEB1A0 /* SWCellScrollView.m */, + 86F5A67368B52F3CCE5514EC959939C8 /* SWLongPressGestureRecognizer.h */, + 80052E3998270C3A96C7E325E07B357D /* SWLongPressGestureRecognizer.m */, + 174B0ED22B870AE674C4476564D33805 /* SWTableViewCell.h */, + EFEFFF466D348628C227F68055285728 /* SWTableViewCell.m */, + EC2CCFE865B27C4091BF1BB63F9413CB /* SWUtilityButtonTapGestureRecognizer.h */, + 0046FAC0553ECDCB0E0EB842ECA2F442 /* SWUtilityButtonTapGestureRecognizer.m */, + DD31E2EE1DEA6D5756FF05E94FF67843 /* SWUtilityButtonView.h */, + 1D890D567ABB81EE8F739BC7DF2C3BB5 /* SWUtilityButtonView.m */, + D724494F5D8D13309711DB17FA4FEAB1 /* Support Files */, ); - name = SZTextView; - path = SZTextView; + path = SWTableViewCell; sourceTree = ""; }; - A54C9291BEA09B1478FF8C9BBA05B42F /* FormURLEncode */ = { + 7E83997419275854EEE787E733EE7053 /* Support Files */ = { isa = PBXGroup; children = ( - 215CC70A94FB4F3A7152F96C7235287C /* OMGFormURLEncode.h */, - D730013F30728CD690ECE2DE331CB5E7 /* OMGFormURLEncode.m */, + 3ED0DC2A0DB6340F588C5CE20DB6F216 /* OMGHTTPURLRQ.modulemap */, + 913877BE66FEDFDFD3D033E497B3D274 /* OMGHTTPURLRQ-dummy.m */, + 97CCB6F87734E95770695DB3A7CDEBAE /* OMGHTTPURLRQ-Info.plist */, + 8EC405483E81B71EB1FA313B49358438 /* OMGHTTPURLRQ-prefix.pch */, + 0909843821FF578B1F7CC95931079917 /* OMGHTTPURLRQ-umbrella.h */, + DAD31DE454D4089BD767D4B462458EDD /* OMGHTTPURLRQ.debug.xcconfig */, + 21099CAB11D4385B610CC9CE0369AE32 /* OMGHTTPURLRQ.release.xcconfig */, ); - name = FormURLEncode; + name = "Support Files"; + path = "../Target Support Files/OMGHTTPURLRQ"; sourceTree = ""; }; - A7C2D162E7A10CCB03D8ABA32AFEC71B /* AFOAuth2Manager */ = { + 854BC5B54649804B662EDCC6CE38A2EA /* TDOAuth */ = { isa = PBXGroup; children = ( - 8FC088BB61511A69AC38C5F4C794429C /* AFHTTPRequestSerializer+OAuth2.h */, - 5E24B14F5FEE430E855F0991ECA632BB /* AFHTTPRequestSerializer+OAuth2.m */, - 1BE44B3E317C602BD795009820C425D2 /* AFOAuth2Manager.h */, - 24B341086B2ACAC5B5068136F9640B22 /* AFOAuth2Manager.m */, - C1278C21AC80BA4F46754E26B5FF55FE /* AFOAuthCredential.h */, - 2A32B4C26F736FEB7FB9777DBDDA425F /* AFOAuthCredential.m */, - 9DBA4747E0F8511F96D28BC02478B1DE /* Support Files */, + 674F6F2FB688D5001F638DCF45A3CEAE /* TDOAuth.h */, + B66AD122EF9D9E2682C8A06E891C4435 /* TDOAuth.m */, + 355E6F49877F241217C806C13E8482E5 /* Support Files */, ); - name = AFOAuth2Manager; - path = AFOAuth2Manager; + path = TDOAuth; sourceTree = ""; }; - A84CA5A7C60406F530C895916A76B908 /* PHFDelegateChain */ = { + 8594F7BEA5F06481FDB29749565BDAFB /* DTAnimatedGIF */ = { isa = PBXGroup; children = ( - A1A43899541A7EFC4F3AEF35FCEECBB1 /* PHFDelegateChain.h */, - 252160211A974EB1A46AEC3E19BF02CA /* PHFDelegateChain.m */, - 2621C89D591ED62824442FD11D61F26A /* Support Files */, + FCD0141340CB0EE5F568066AF4711E95 /* DTAnimatedGIF.h */, + CFF5F39168B54BE289D5AD6BD4728D7F /* DTAnimatedGIF.m */, ); - name = PHFDelegateChain; - path = PHFDelegateChain; + name = DTAnimatedGIF; sourceTree = ""; }; - A86F663D0ADDB4E816F8C5FB355A1F18 /* BBBadgeBarButtonItem */ = { + 86B8FAD6D88836ED83171F5148147881 /* APAddressBook */ = { isa = PBXGroup; children = ( - 2B5EF38935248E22B218E13D63803E18 /* BBBadgeBarButtonItem.h */, - 78B10E4030E682FDF3DAFEB7FB10FA0E /* BBBadgeBarButtonItem.m */, - 9B3031C333AF699B5E3286786657B3BE /* Support Files */, + 5113ADAC802F386304EFD06A984F00F1 /* Core */, + 7DC8BD11BD8E1AB3067FAB6EEC02EBEE /* Support Files */, ); - name = BBBadgeBarButtonItem; - path = BBBadgeBarButtonItem; + path = APAddressBook; sourceTree = ""; }; - A87734FA612EDBAC5C779D467CF8561D /* APAddressBook */ = { + 8894EA95FA24CC85B23BD78F4B61C0FD /* iOS */ = { isa = PBXGroup; children = ( - D057D5C77F3B901B7D1919EABC00C7AD /* Core */, - 5A50A85BBBE458C6DE5C3FEEF548393B /* Support Files */, + C9397011602308627820692C2118D220 /* AddressBook.framework */, + 53C1FF0E60E9420CE14B2669BE77E0D7 /* AudioToolbox.framework */, + E0EEFF8DAFB86B146B67FF3352F004F9 /* AVFoundation.framework */, + 7DFD305CB21F713A4250781B772AEF06 /* CFNetwork.framework */, + E31B6731F57E7DB3B8715CE39994F082 /* CoreAudio.framework */, + D26E221E1A5B2AFAD263AFCEB9CA1D1D /* CoreGraphics.framework */, + E80EE06E76744A71EC0142C5791ACFDB /* CoreMotion.framework */, + 84B902977DB9E3B7A7B8EF56A81395B0 /* CoreServices.framework */, + 239AEF27589B9DF6A872418C38F31AC7 /* CoreTelephony.framework */, + 0EABC993900DCD6B869B47E27BB6B1FC /* CoreText.framework */, + 0D23CFD7D74048CF2C707392B040239E /* Foundation.framework */, + 83EDE90FD24270722F52F93560C24698 /* ImageIO.framework */, + C276B87C7A6E53EA55D219B5B00A6CD8 /* JavaScriptCore.framework */, + 7E499BD426DA5BBC8A851F129D0DD335 /* MediaPlayer.framework */, + CD40D5B2EF1A211044C3A292A0171DA3 /* QuartzCore.framework */, + 2EC959EC69B3A210514024528CEB3C39 /* Security.framework */, + D8325B8F92F190DC3D058746E45C00C3 /* SystemConfiguration.framework */, + B63445B04535C838A5C7AF56DFEDA491 /* UIKit.framework */, + ACD6E43FFFA43D8CF3B335DCFFA4A647 /* WebKit.framework */, ); - name = APAddressBook; - path = APAddressBook; + name = iOS; sourceTree = ""; }; - A99C81D9F58B048180865D871577FD8F /* JSCoreBom */ = { + 8906AF470D42B9358F1B8E21EB24CD74 /* Support Files */ = { isa = PBXGroup; children = ( - 2E700FAED25BE958C3EF0753D13324BA /* JSCoreBom.h */, - 7A358CB924AE8A9F95E784F38641C5C2 /* JSCoreBom.m */, - CD970419C7F8D1C4E7D266794B13F9EE /* ModuleConsole.h */, - B647778B466E42ADD3E0CB5757C0EB06 /* ModuleConsole.m */, - 7F1BACD8F9697F29E0E3A1A7C2F32284 /* ModuleXMLHttpRequest.h */, - EFAC25459C887A2D79F51AC555586421 /* ModuleXMLHttpRequest.m */, - F0CD0D889CBDA61D6EB49A8FFC19FA1A /* Support Files */, + 0A7D97922B7D3A8807593D8887A15FFD /* INTULocationManager.modulemap */, + FA1D2103BEEEB431E0BDE8047D765B9D /* INTULocationManager-dummy.m */, + 1D6B1993EA94F17D568EE5372A29F22F /* INTULocationManager-Info.plist */, + 7C4CAFC02DC5972F020879551CC85AEB /* INTULocationManager-prefix.pch */, + 3D48AA2A96348CB7D832FF9A73B9AAD4 /* INTULocationManager-umbrella.h */, + F38FE4D3CD3B0DA24EB4D5806CA75772 /* INTULocationManager.debug.xcconfig */, + 3BFEFC4EA245589BECF3A1686E783C67 /* INTULocationManager.release.xcconfig */, ); - name = JSCoreBom; - path = JSCoreBom; + name = "Support Files"; + path = "../Target Support Files/INTULocationManager"; sourceTree = ""; }; - AA7F6CCE56CC9591745D26A18B8BC078 /* Support Files */ = { + 89737CB6BC963EA611B9A629BF42DA15 /* Support Files */ = { isa = PBXGroup; children = ( - 30D564A294E90E707C5823636EB873C1 /* Info.plist */, - 463F8B83307F2595FA7EAE617F4F309E /* IQAudioRecorderController.modulemap */, - 5610F1552C37FE6905EB2FD119C55DE5 /* IQAudioRecorderController.xcconfig */, - C2792F786D4BD47D7270DF1FF91DD8E4 /* IQAudioRecorderController-dummy.m */, - AC9E330C2FBE027ECEA17332476F5F3A /* IQAudioRecorderController-prefix.pch */, - EB7A9F7A6DF170596E1C229718A311C9 /* IQAudioRecorderController-umbrella.h */, + 42009AADFEF5D8F1FDAA86737A9D5B5D /* IQAudioRecorderController.modulemap */, + D15DFDC5386D98654AE7BB758DA9B45C /* IQAudioRecorderController-dummy.m */, + 55FC1EEDF9515465A2425A06FB502B92 /* IQAudioRecorderController-Info.plist */, + F6E503D97498960FC036A636352054C8 /* IQAudioRecorderController-prefix.pch */, + 8C0B9A1D654315BF8D8A4295890C6BFF /* IQAudioRecorderController-umbrella.h */, + 4247DFE516BDBE711FDE1C44CE82E7C9 /* IQAudioRecorderController.debug.xcconfig */, + 9459A1A91C896AC1A13FB9858F251D13 /* IQAudioRecorderController.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/IQAudioRecorderController"; sourceTree = ""; }; - AAB5B73D8170C02932FF3D1B51A78FE6 /* Minizip */ = { + 8B54AD42E41A1D4096176C5E5E31320B /* Support Files */ = { isa = PBXGroup; children = ( - AA694895E397E22D6B25D9D29A713390 /* crypt.h */, - 23AA760EE55EC0367B0DBEF0F5028DD4 /* ioapi.c */, - 4034D4646878E193FB63C45FCE37F8F4 /* ioapi.h */, - 7E30154FFC152F27B5F212062A7D551C /* mztools.c */, - 7ADABF833A68E5778035698D382409C9 /* mztools.h */, - 4B2EDC76756B699049F0A083400894FA /* unzip.c */, - DAC9CAF7C386DAB2380321508A4D3EFD /* unzip.h */, - 5DF81AB19D9703820F926DCBEF724454 /* zip.c */, - 5DA16A373A26BBB2123E4C0E18F625B9 /* zip.h */, + D8FDBEAB1307ECE58442B9B9409673C1 /* SWFrameButton.modulemap */, + 78353BC86AC56DB01C67C4BD7928FA4F /* SWFrameButton-dummy.m */, + DE8AB1FB68775A9A23C95D0C118E855B /* SWFrameButton-Info.plist */, + 14B202968DD88C3F9409897DDB2285C1 /* SWFrameButton-prefix.pch */, + BC1A55EBA3950DD1A9A807599D4DA6A0 /* SWFrameButton-umbrella.h */, + 508E8DC778DF854B9F71AFC308142699 /* SWFrameButton.debug.xcconfig */, + 473F8389B0AB3EE9DD514534867E4D1F /* SWFrameButton.release.xcconfig */, ); - name = Minizip; + name = "Support Files"; + path = "../Target Support Files/SWFrameButton"; sourceTree = ""; }; - AC578A5A1D739BA1EA6441904C76074D /* FreeStreamer */ = { + 8C3C8FE2966983835F3A10FD48F0AAF6 /* Support Files */ = { isa = PBXGroup; children = ( - 9376D088AC4FC38B79DFB05A9FD6AB9E /* audio_queue.cpp */, - CC4B107A6A4ADB9AF36368A173A781F9 /* audio_queue.h */, - 7225D54C287C3E3FBC18B9AF4D8F3C48 /* audio_stream.cpp */, - 51EB962C1DA80BA9F267B3A39F7F3942 /* audio_stream.h */, - 5ACEA54C5DC8C3BA971D585D9A87B1AF /* caching_stream.cpp */, - F64CDCCCBB1571D0F7EDE014F4D8CA7D /* caching_stream.h */, - 7B57484917DC351F6D92A971C8BA5D24 /* file_output.cpp */, - B5D0CF97791FB584863F27AE9047E8BF /* file_output.h */, - 4F92CD2C544119E504B28E3B57B082BE /* file_stream.cpp */, - 82F6E87C8FE732C726E4D90309959332 /* file_stream.h */, - A4582C94F3CEE550E18F6449FE1290A9 /* FSAudioController.h */, - F7A473FAECD8A144EF9AEF19D10E7108 /* FSAudioController.m */, - D37991693FC097B678DA9B2650A543A9 /* FSAudioStream.h */, - 8857D719CFEBAFA819DB09494272FE44 /* FSAudioStream.mm */, - F7F25A416DBE7844438558D1E187DAA7 /* FSCheckContentTypeRequest.h */, - 5CC1A62678BA86A5609A7E34F62A13DB /* FSCheckContentTypeRequest.m */, - DAD13C48C2C07729AE5EB6955045AE71 /* FSParsePlaylistRequest.h */, - 602EFE45F5B4511DE20D77B656220E0A /* FSParsePlaylistRequest.m */, - DB4B8D1C28283CBA952082A78CBB267C /* FSParseRssPodcastFeedRequest.h */, - DC38B92CE294F45F072E491B67BC63A8 /* FSParseRssPodcastFeedRequest.m */, - FC246A36504CEB5786B98D2CE93B7901 /* FSPlaylistItem.h */, - 0FD47F41D07390463F8CAC5DCB510941 /* FSPlaylistItem.m */, - 84AAFEFBC287F7BE0D872EB49165072F /* FSXMLHttpRequest.h */, - 3D9DA94B90593EBD8664CAFC338C29DA /* FSXMLHttpRequest.m */, - 626B30E7285718DAE34EA3FE5CE82601 /* http_stream.cpp */, - E4AD31FDA26518FB0AB42EEC37E54A14 /* http_stream.h */, - 34DF8ADDCBE435BF63E563C7C267009D /* id3_parser.cpp */, - E03D0EC1EDE75CC9F7782E4E1BFAA3AD /* id3_parser.h */, - 994C8A60C837DA901374D33B409AD377 /* input_stream.cpp */, - 4F3A83F6141FF726443C4343819D8C1D /* input_stream.h */, - E1A445037469CA9F90942E0ABB163550 /* stream_configuration.cpp */, - 6ED3133FEFC2467C11487557DF5756A2 /* stream_configuration.h */, - 92B6274ABF22F88E44D6E674779D69D5 /* Support Files */, + 5EA6F593F70E1692B6A218C159D7197D /* JDStatusBarNotification.modulemap */, + 38EC0D9ECEF1B8CEDE9C34FBAF43D5EB /* JDStatusBarNotification-dummy.m */, + 2353D243AFD2D8C3866EEDD3961D0ED0 /* JDStatusBarNotification-Info.plist */, + E24B6B60D3CF124862AF1BACAE0F4F1A /* JDStatusBarNotification-prefix.pch */, + 479EC7C429B6206E6A162652BEFAC404 /* JDStatusBarNotification-umbrella.h */, + 7E4940731BF9FB14C8753FCA75096C96 /* JDStatusBarNotification.debug.xcconfig */, + C51567D6FEE88FFF0AFC4A967243CDAB /* JDStatusBarNotification.release.xcconfig */, ); - name = FreeStreamer; - path = FreeStreamer; + name = "Support Files"; + path = "../Target Support Files/JDStatusBarNotification"; sourceTree = ""; }; - AC801D231DCDDD1164A74F487FE722C1 /* Support Files */ = { + 8F762976D3A967C6033C1CA0EDE45B5B /* Support Files */ = { isa = PBXGroup; children = ( - 4F27EC3BACB1FE37BF085E20BD7CAD55 /* Info.plist */, - 519E251A7E063DF83E33441CEA6B8F09 /* libPhoneNumber-iOS.modulemap */, - 05E47B5CE4905C23D5BBA83A356BF8B5 /* libPhoneNumber-iOS.xcconfig */, - AA9F116CA7A0B02610378D93294EB475 /* libPhoneNumber-iOS-dummy.m */, - 3E5BE7F851935DF5ADEA098FF6C8EEEF /* libPhoneNumber-iOS-prefix.pch */, - B0DD9B9ADB7D415193E6C82631C599A2 /* libPhoneNumber-iOS-umbrella.h */, + 373372F987E2C6871A5D575C949A36AC /* AHKActionSheet.modulemap */, + 051F04604B2BE2E3472BFBEB231578ED /* AHKActionSheet-dummy.m */, + C014D4FB933AD1BA473FFA4FF3659328 /* AHKActionSheet-Info.plist */, + 0C694BF4FBB915ACA9C3C696DAD8AA04 /* AHKActionSheet-prefix.pch */, + B243229E4D418674E2B6B5CB39265D98 /* AHKActionSheet-umbrella.h */, + 59B26A39B3370072CEB866A76B8E2708 /* AHKActionSheet.debug.xcconfig */, + 6B3AA4F6764D605B35C53E75E78A33DC /* AHKActionSheet.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/libPhoneNumber-iOS"; + path = "../Target Support Files/AHKActionSheet"; sourceTree = ""; }; - B6DA92827ED82B688F35A0D5245D1F7A /* Support Files */ = { + 927362889CD8AADBB08682AC1581681A /* DTHTMLParser */ = { isa = PBXGroup; children = ( - 11A6C338097664AAD9E7EE886D82B0E9 /* Info.plist */, - 7CE07936584EC20AC2455BE58C0A4969 /* NSGIF.modulemap */, - 81A9C82D345662D1D35B4EF3472FDF76 /* NSGIF.xcconfig */, - 1366EC2DEF047886DC4770F181F90BE8 /* NSGIF-dummy.m */, - E0BC909404473077084D2034AB2564B6 /* NSGIF-prefix.pch */, - 45D0959EB7EBA19D3C1B3B4B395D0DA6 /* NSGIF-umbrella.h */, + E6971E6FD90EA031A02813C2F3320A3A /* DTHTMLParser.h */, + AFDF61A12DBBBCA507B66D64FDE70203 /* DTHTMLParser.m */, ); - name = "Support Files"; - path = "../Target Support Files/NSGIF"; + name = DTHTMLParser; sourceTree = ""; }; - B7484FA2E2126D896CC305F2D483D4BF /* Core */ = { + 9458642717B342BF1102CF5D2540C116 /* AFNetworking */ = { isa = PBXGroup; children = ( - 0FA59CC96028E599E0634E4630824444 /* DTBase64Coding.h */, - E9DA8B689510914319087A6ED82C7C33 /* DTBase64Coding.m */, - 7CA804AC6FA20B2600B010E320A4EF24 /* DTBlockFunctions.h */, - 3114DBEE92E39D1B9F11A45689D3CE41 /* DTBlockFunctions.m */, - EC5AB1B4F3D160CD6BA55EC953920D35 /* DTCompatibility.h */, - CE70F7109B640EEF2B57621E2A4EB0A4 /* DTCoreGraphicsUtils.h */, - CF485FB9C7CA3225D92D784955B5EDB9 /* DTCoreGraphicsUtils.m */, - AD4F0A423486056FF2FABD51CA69570E /* DTExtendedFileAttributes.h */, - 8A806196B79C540BFA1D38692C3F546E /* DTExtendedFileAttributes.m */, - EE780AFF48E515DB01ADDB601D347128 /* DTFolderMonitor.h */, - F848E9F99780B37F0335D5A7DB01C1C7 /* DTFolderMonitor.m */, - A7ECD035BC6281569481F5976881F20D /* DTFoundationConstants.h */, - F23A3026D1C0C6F67510ABBC342F565B /* DTFoundationConstants.m */, - 124D087CEF9C00948AF3D880B262E2B1 /* DTLog.h */, - D5F648FA42D711CB2E1ADF70F4D14AEF /* DTLog.m */, - C24DE4DB70374783F27CBFEF6487C0D5 /* DTVersion.h */, - 98E825D8D936DC3FF8DBB9C0DDF9BFB4 /* DTVersion.m */, - EE29D6648B21891CAF58BAC5F393A468 /* DTWeakSupport.h */, - 384AC07E989EF83B131F226B71B430E9 /* NSArray+DTError.h */, - 5DE7AB8C7CB1A03544D318F35CC5987A /* NSArray+DTError.m */, - 7DF076D45312FBACC1E33C74E1CAF3D8 /* NSData+DTCrypto.h */, - C93BEEF07CFDC274D1A483BD2D7323FE /* NSData+DTCrypto.m */, - ABE7BCE107726EB1846BA00474EFE33F /* NSDictionary+DTError.h */, - AB82C2192A668AA0E5FE00F189F4301F /* NSDictionary+DTError.m */, - 936B922ED0C8C673CF16C437EA897BAD /* NSFileWrapper+DTCopying.h */, - C6741FD2987718F27900A23DFE303F23 /* NSFileWrapper+DTCopying.m */, - 5A7739F68E6EDD46D7681D31C9A09805 /* NSMutableArray+DTMoving.h */, - 97BE351AFF77697E1B8B1B27757E4C35 /* NSMutableArray+DTMoving.m */, - 3F0356E6E103425749BEB8891902E6D1 /* NSString+DTFormatNumbers.h */, - 39C5EB7718896613E826722EF646C0E5 /* NSString+DTFormatNumbers.m */, - 5B0AFA05E1D8C9DC6F6F10239602DC9B /* NSString+DTPaths.h */, - 1DC1C9D954DE8DD48876E54E70294E94 /* NSString+DTPaths.m */, - 5AAC870DCFA62F62F09C83FF44ADF484 /* NSString+DTURLEncoding.h */, - A591F14FE933AB20562D4374A15E0A8F /* NSString+DTURLEncoding.m */, - A3F2E017D30638279291DD0B2F8FDD4D /* NSString+DTUtilities.h */, - AC7B01A99CF5E015C7480DC4611ADA6E /* NSString+DTUtilities.m */, - 4F4776337571480F4EF37313A9BC558F /* NSURL+DTComparing.h */, - 0D3C2981C7A49D4410509F4838CCDE5B /* NSURL+DTComparing.m */, - 6AAD89029B1CEF93713ADC6CF75D49F6 /* NSURL+DTUnshorten.h */, - 9ACB73DC6EDDD066E9FFA6C87526D6AD /* NSURL+DTUnshorten.m */, + 3FA3A1F37B7AB5E2B4094CDD72D0B166 /* AFNetworking.h */, + C02788E2A404F27B50F1089CF46F034C /* NSURLSession */, + FAF470A4521010F87E84981D3090EE7A /* Reachability */, + AED3F0631D23B2D6D24C752AF6022BEC /* Security */, + 400CD09F551DCE0E7AC2FBC2C6375A95 /* Serialization */, + 5AE727DDF7F441E6470B63BCC87B4B31 /* Support Files */, + 5E2B1D75FC82721D9D69E60C513F6C62 /* UIKit */, ); - name = Core; + path = AFNetworking; sourceTree = ""; }; - BBA89AEEB8D509260A73FEC2749A2B11 /* RMActionController */ = { + 97D2DD6D49B80C9C98D5F80967971A63 /* DTAsyncFileDeleter */ = { isa = PBXGroup; children = ( - 16ABB2B0349D265EA9D4CC8D80E390A4 /* RMActionController.h */, - 78356459AFC2AEFA74B9215AA8C91E73 /* RMActionController.m */, - 89C88BF2F6CCDFF92925E33581F339DB /* Support Files */, + 40A4CCD030CB39845F7149D68845F25A /* DTAsyncFileDeleter.h */, + E28D798F8390DB5D32114D498C4481DA /* DTAsyncFileDeleter.m */, ); - name = RMActionController; - path = RMActionController; + name = DTAsyncFileDeleter; sourceTree = ""; }; - BDC92B14330418125842E560A16CB7F3 /* NSGIF */ = { + 9A5D855D2058219CCB6D3850A22F69B2 /* DTSidePanel */ = { isa = PBXGroup; children = ( - 1331C92AB1ED843CA54591E93CA96198 /* NSGIF.h */, - B77AF1015A6D0BBBF82A106B4031D83F /* NSGIF.m */, - B6DA92827ED82B688F35A0D5245D1F7A /* Support Files */, + 98D5B3AAD59B94623B75CD2D169007B1 /* DTSidePanelController.h */, + D6ADD5E8CD8512DE3C13DD2C20BAB8F1 /* DTSidePanelController.m */, + 0FDA725011F6F3BDC2916D99A2CB4887 /* DTSidePanelControllerSegue.h */, + FBF61FCB772D8FB2BA89FE53677C1B60 /* DTSidePanelControllerSegue.m */, + E76D4007EA543F40DC30137DD966AA07 /* DTSidePanelPanGestureRecognizer.h */, + C3D4EC58F1A9FE8E9785D29CCAA3A53B /* DTSidePanelPanGestureRecognizer.m */, + 20783966C716EE77AF50F2B32A2BCA63 /* UIViewController+DTSidePanelController.h */, + D39ECF712982709EA77A053E682DDB14 /* UIViewController+DTSidePanelController.m */, ); - name = NSGIF; - path = NSGIF; + name = DTSidePanel; sourceTree = ""; }; - BDFC537A77B364A0921EAEBA062E2055 /* UICKeyChainStore */ = { + 9AE61CB818BAA0D25FEF582E72E4312F /* SZTextView */ = { isa = PBXGroup; children = ( - 502D2016ADF832FC3666AF6CB08CBC2C /* UICKeyChainStore.h */, - 19424C722E4620CEDD42FBCA98D500C0 /* UICKeyChainStore.m */, - 47F57B06AEEEFD5FAA08A83660108A02 /* Support Files */, + 361A051717FBEA3827F6A2133C47D079 /* SZTextView.h */, + A4DDBFBD5F4A8E6CAF9C584A49F90C99 /* SZTextView.m */, + 385375C6F72B006F8AAFDD0B2C58523D /* Support Files */, ); - name = UICKeyChainStore; - path = UICKeyChainStore; + path = SZTextView; sourceTree = ""; }; - BE3CCBCAD03E002F57D5D46CA1BBBDD2 /* Support Files */ = { + A49F92436F2E501EE71A30266BF971EF /* Support Files */ = { isa = PBXGroup; children = ( - 25066EADA65A04FE92EC9324A769342B /* DTFoundation.modulemap */, - BD35C76D54BF9BF6B0F081BAE9B52A7E /* DTFoundation.xcconfig */, - 2ED1B3A564FA8ABAA858BA7B07B28FBC /* DTFoundation-dummy.m */, - B0E64FD081EF766EF788A8716C88F369 /* DTFoundation-prefix.pch */, - 07AF24383D5DE011E47A13A15DC4644A /* DTFoundation-umbrella.h */, - D72BC3D851691E7C33EBA96ADDBAF5F2 /* Info.plist */, + 3773C38D37202FA786CDBE18FAAB4A43 /* RMActionController.modulemap */, + F8DAF1C61CEEF284CC1AD22391991B50 /* RMActionController-dummy.m */, + 5C86479B7995221EF00C2562480A6F17 /* RMActionController-Info.plist */, + EDF30867D9A8F401029C49F7BF7AB1EB /* RMActionController-prefix.pch */, + F60AD413A65C8827E2FE9A67C91C96C0 /* RMActionController-umbrella.h */, + AFE307446BA40FAA8D232062503641EE /* RMActionController.debug.xcconfig */, + 1993EA6497488CE23ECB674A7401838A /* RMActionController.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/DTFoundation"; + path = "../Target Support Files/RMActionController"; sourceTree = ""; }; - BE833E3BAB280B9D745309AC5727390C /* Support Files */ = { + A81CD63C3325FE58AA3F4D8582EDF76F /* PHFDelegateChain */ = { isa = PBXGroup; children = ( - 64ED5E2F92C7AE3DEB6D8B647EDED15E /* Info.plist */, - 6E23AB6257D7151393371ACCC76E9CEF /* SBJson.modulemap */, - DB58FAD47423BFD1EF0D50F4D558528C /* SBJson.xcconfig */, - 5D3D059687201D4BBA31D8124DEBD936 /* SBJson-dummy.m */, - 46B77B27DB7CBC4D299F73831B3A6CB3 /* SBJson-prefix.pch */, - 0060401B5ABDF7627088C24E4866B620 /* SBJson-umbrella.h */, + 5ED53C4D92516B575684D9F8E2CDB4C2 /* PHFDelegateChain.h */, + CCE12A42CA42017C26E5D0A1A1712853 /* PHFDelegateChain.m */, + 6C9FCB30CF51953DE172A4FE20EA5530 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/SBJson"; + path = PHFDelegateChain; sourceTree = ""; }; - C18BBDCB6840122771A1441160DD81AD /* FLEX */ = { + ABEEBDE4D313B3D6A863A2E9E8E65C1F /* Pods */ = { isa = PBXGroup; children = ( - F3E8EC0F38D75F402DB3E7246D6601DB /* ActivityStreamAPI.h */, - 692A213FABEAAE1206ACCDE41FE2F9F3 /* FLEX.h */, - A421F64D175E41780EB54DE0E9DE0F58 /* FLEXAddressExplorerCoordinator.h */, - 2283C48D99A173A3579523FBD0765612 /* FLEXAddressExplorerCoordinator.m */, - 30794A4A4B3E2765414D0297052791BA /* FLEXAlert.h */, - 106211D24A7AA7AEE92C703FE566C66C /* FLEXAlert.m */, - 6F6323EF9CC5F75A726A967EA390291C /* FLEXArgumentInputColorView.h */, - DC93312F0743FE28DCA28EF085249457 /* FLEXArgumentInputColorView.m */, - A199D8AB78103B3CB3276666172764A8 /* FLEXArgumentInputDateView.h */, - 2225F5A869DA598F00433CE6BEB69E4C /* FLEXArgumentInputDateView.m */, - 9FE2A02F9ACC19295F4A642D2250293B /* FLEXArgumentInputFontsPickerView.h */, - B94F3B0F7BE2309EA0DAB31C051A6431 /* FLEXArgumentInputFontsPickerView.m */, - B9EEE580CE57330166F110ED1C9258E1 /* FLEXArgumentInputFontView.h */, - 983EC837A4A6FDDCF7C5D53B459483C1 /* FLEXArgumentInputFontView.m */, - 59B21DD364ED7191DD0812C2A975B9DA /* FLEXArgumentInputNotSupportedView.h */, - 916AB2E8FCA938D8D3FF12D30010F83F /* FLEXArgumentInputNotSupportedView.m */, - 9A7C98F8C42B072499FA0916E4B38D4A /* FLEXArgumentInputNumberView.h */, - 4383780137AD6EBC331C98A674D85D2A /* FLEXArgumentInputNumberView.m */, - C2A6C2AF833D382AA66EC848C27FC441 /* FLEXArgumentInputObjectView.h */, - 53AF4145B2AC68B078DC9F1E4D6842F5 /* FLEXArgumentInputObjectView.m */, - 5362D9D77EE5965634942644200D8D10 /* FLEXArgumentInputStringView.h */, - E4F2F525BCB4F1F967AADB485A0F227E /* FLEXArgumentInputStringView.m */, - 6902717064749154F383EC2D796D5FE3 /* FLEXArgumentInputStructView.h */, - BAADAA5F0611A0C9DB80A44F12D97041 /* FLEXArgumentInputStructView.m */, - F79AEEE2731EFD7A09E2067504C88006 /* FLEXArgumentInputSwitchView.h */, - FD529D8B37A0A73498672CF42DAEC5DF /* FLEXArgumentInputSwitchView.m */, - 4634E4991F328EAE939D4C93931E6677 /* FLEXArgumentInputTextView.h */, - C2AD55A41D8E4AEB700B037DBEAA6F3D /* FLEXArgumentInputTextView.m */, - FC38C7C8C704E4F6ED37BD52F1CFA3BC /* FLEXArgumentInputView.h */, - 2D7AE9B08BCC7A5611FB75AC56E06631 /* FLEXArgumentInputView.m */, - E79880929D7436C74A23FD40BF734654 /* FLEXArgumentInputViewFactory.h */, - B0F4FEF710BAB5AF5A0A32C4833AA1DF /* FLEXArgumentInputViewFactory.m */, - 4C977A7974E7F2A432E97A6DAE8B2F85 /* FLEXArrayExplorerViewController.h */, - 659C54963EB5C71323D49C2FD62901B5 /* FLEXArrayExplorerViewController.m */, - 503404F3357CE70B9FE3953AAE32D003 /* FLEXASLLogController.h */, - 4CA6D12BEC506A1FDA7780F7F0E03CD5 /* FLEXASLLogController.m */, - 09B0A6316A485E766AA4D068DC91CC97 /* FLEXBundleExplorerViewController.h */, - 774D0A881EB1E923C6FD797A75258541 /* FLEXBundleExplorerViewController.m */, - 199778DB1A7E09231190B2612CA2DA49 /* FLEXCarouselCell.h */, - 418D9A214DF5A1DDE02B884BBA3A943D /* FLEXCarouselCell.m */, - 210FE372B9D3C94B682E4A74A922198F /* FLEXClassesTableViewController.h */, - 9C53160F17BA7CA192D32A381D3582E1 /* FLEXClassesTableViewController.m */, - 56060A737B5355D3BE39B242354DEABE /* FLEXClassExplorerViewController.h */, - BEA38BF669A3312F411F2C3BE8B754F0 /* FLEXClassExplorerViewController.m */, - 32979BC7202F6FED970E2C7C5BA7C3EA /* FLEXClassTreeViewController.h */, - 3CAE33FC0216EE9A1264B5FDF3CB6E99 /* FLEXClassTreeViewController.m */, - 790A917F383C910A85C38C8361628DB9 /* FLEXColor.h */, - EFBBE285493DA67511C89DA71B82B91F /* FLEXColor.m */, - 7E8DBAFB518B96F0C3B608E8EF560BAF /* FLEXColorExplorerViewController.h */, - A9F03B1B6069CA3AF7AE9CD3E0020983 /* FLEXColorExplorerViewController.m */, - 5F4320438835EE011B17FF3C582BDD15 /* FLEXCookiesTableViewController.h */, - DBAAE5F749264DB714EC79237A0A21D6 /* FLEXCookiesTableViewController.m */, - DA509959D3B19EDCE61A62FD6E7FC8F4 /* FLEXDatabaseManager.h */, - B813639F40C040CCD6EF6026596A3DF0 /* FLEXDefaultEditorViewController.h */, - B37D3C412865D5F09F92E2CF1A08F153 /* FLEXDefaultEditorViewController.m */, - 5A558BB449925114C72D0869B6075618 /* FLEXDefaultsExplorerViewController.h */, - AA95FAD78D3BCB1E4C8CF525ED730775 /* FLEXDefaultsExplorerViewController.m */, - F647B07C141083DB0492B8821328085B /* FLEXDictionaryExplorerViewController.h */, - 45495AE4FE92B37E892170BF78584ABB /* FLEXDictionaryExplorerViewController.m */, - 2365F86A3A72C784D61723F8C3C4E38F /* FLEXExplorerToolbar.h */, - F3995BBA3B466CA625783658DC311818 /* FLEXExplorerToolbar.m */, - FC894093315C40650983CBD34D67C46A /* FLEXExplorerViewController.h */, - 4A0312B6BF1345E2CE38CD7515451551 /* FLEXExplorerViewController.m */, - 99EE8C44A675D9AFCDC06502C17B85AD /* FLEXFieldEditorView.h */, - 632744D9C7F01AE30CD290C1A4CBFBCE /* FLEXFieldEditorView.m */, - BFA1A20A187639823BDAF418AC86EB7E /* FLEXFieldEditorViewController.h */, - 8211D6AF671ECB6C1A438701B45C9E49 /* FLEXFieldEditorViewController.m */, - F0107051102ADEDA9638D91B6EB1B3BF /* FLEXFileBrowserSearchOperation.h */, - 84993C5A44DC766A0F76381F9DBB86EC /* FLEXFileBrowserSearchOperation.m */, - 408E5F58E8CB774B4213FF9C478B7D32 /* FLEXFileBrowserTableViewController.h */, - 2756228CA31BF251FF452CD35DFF42B4 /* FLEXFileBrowserTableViewController.m */, - 9E27A77FC3620B35F4EAD9A29F231376 /* FLEXGlobalsEntry.h */, - EB0A04CF0D25317BA4C94F919532290B /* FLEXGlobalsEntry.m */, - 93FD69EB7789944AC6E4C2465C8E9955 /* FLEXGlobalsTableViewController.h */, - 692348476D648C51B26B1E1D5B0EF9FD /* FLEXGlobalsTableViewController.m */, - D043F708CDDB1F90F9A06B67C468DA7D /* FLEXHeapEnumerator.h */, - F79BC32CCDE6363A10436C925BDFB082 /* FLEXHeapEnumerator.m */, - AD45BAEAB19C20423AE9A6C9EF2D2013 /* FLEXHierarchyTableViewCell.h */, - 50BDADB663342EF4517A740562288951 /* FLEXHierarchyTableViewCell.m */, - E43ED2958FE68EAA12E678A0348B93CC /* FLEXHierarchyTableViewController.h */, - D9F5B2E27548A61727498971BA5185CC /* FLEXHierarchyTableViewController.m */, - F618D7B6C183E833D598499ED5D30192 /* FLEXImageExplorerViewController.h */, - 271611DCE41D42A8ABC7E3E7FAE6F516 /* FLEXImageExplorerViewController.m */, - C592F3A36C5B4C057998B7EDB1BACA0B /* FLEXImagePreviewViewController.h */, - 0E0A1083888D624A4F68FB47D5A2148A /* FLEXImagePreviewViewController.m */, - DE29B35333F3047245AE4F61620D7770 /* FLEXInstancesTableViewController.h */, - 488C892303279126A9F2448A5193E275 /* FLEXInstancesTableViewController.m */, - 0847F465CF5EDDC9545746E722A6D666 /* FLEXIvarEditorViewController.h */, - 47CDDBE29EEA6FE6BA39A06B8E7E4C26 /* FLEXIvarEditorViewController.m */, - F2C176FF06E151F6A46C79A5AD13BE16 /* FLEXKeyboardHelpViewController.h */, - 0B736D31AABAF4A293557B523EDA52DB /* FLEXKeyboardHelpViewController.m */, - 8E96ED42EC96E21B49EA20E645DD263E /* FLEXKeyboardShortcutManager.h */, - ADED79C3EEDC870C51BF0A6622401B76 /* FLEXKeyboardShortcutManager.m */, - A725E6C1E1BDCD0A049FACA2AE27B00F /* FLEXKeychain.h */, - D504E1969CFBC80B19AD64502EB7B5F6 /* FLEXKeychain.m */, - 724DB3E50807BE9026DAEE2CADC2DB2C /* FLEXKeychainQuery.h */, - 30578C0D300FF6EA6ADEA0FC4E4931D7 /* FLEXKeychainQuery.m */, - 6901AD032FD24B4C4CD23780A95AF91A /* FLEXKeychainTableViewController.h */, - 7DA7D0E84BED7368467B8EF74E137B52 /* FLEXKeychainTableViewController.m */, - 83F568B41BA7D531C4735401CD7BBFF1 /* FLEXLayerExplorerViewController.h */, - A735C5F2060CAA9FDC8FCB0686671FF3 /* FLEXLayerExplorerViewController.m */, - 00590FFF4B562E19197E6CA41F44A452 /* FLEXLibrariesTableViewController.h */, - B27FA7DB450F43966F922E39C435E10A /* FLEXLibrariesTableViewController.m */, - 3A1E7A4ED1F0AB8657146BFEFEF5B2C3 /* FLEXLiveObjectsTableViewController.h */, - D40613B771393A55680D88EEEC61DB34 /* FLEXLiveObjectsTableViewController.m */, - 2C9618E138A3F4347925BEC207752B91 /* FLEXLogController.h */, - 0D09E48810B69EF840F1D53AC595548E /* FLEXManager.h */, - 2F7E0252D7CE3929D4476102974DD31A /* FLEXManager.m */, - 11ABB40003A9B60F97133EB7B7B9D569 /* FLEXManager+Private.h */, - 5D432C60EE6535479A58D8216721EE3C /* FLEXMethodCallingViewController.h */, - 34B7292C56814A1334DF6C82161ED0C9 /* FLEXMethodCallingViewController.m */, - A6C13E522484A74BCD47471DD57638E4 /* FLEXMultiColumnTableView.h */, - 9941B261CD1796A6A5FBA5F1DF31B058 /* FLEXMultiColumnTableView.m */, - 0DF23DD7452B1B3B0E8B175FD528BD0C /* FLEXMultilineTableViewCell.h */, - AF7C4392F45D371CE68E4509C821E314 /* FLEXMultilineTableViewCell.m */, - F877D7315232F06CC3AB685E68CB877B /* FLEXMutableFieldEditorViewController.h */, - E9A2478F054933BF30848A0F88F2D30A /* FLEXMutableFieldEditorViewController.m */, - C337B467340FD74E2B44880187A1154C /* FLEXNetworkCurlLogger.h */, - 61B28B06B600C69667B396E129B7C6C5 /* FLEXNetworkCurlLogger.m */, - 8C38E31BA803BD80E911AAA776FEF715 /* FLEXNetworkHistoryTableViewController.h */, - B5A12DD603E07134BD0335A8F16F7798 /* FLEXNetworkHistoryTableViewController.m */, - 34BFF7C0E446A1A652209F7BDC8094AB /* FLEXNetworkObserver.h */, - 110E311DED94C4BCA10ED3BCEE4CAE6C /* FLEXNetworkObserver.m */, - 9D6EF124F78785238597EBB9B69AFFF8 /* FLEXNetworkRecorder.h */, - 07F8A787A986B14DBBE930E8146FC79A /* FLEXNetworkRecorder.m */, - 32203EE31F573687CA29747A9390663E /* FLEXNetworkSettingsTableViewController.h */, - B5824980F5CC878E4E7184537E9AB473 /* FLEXNetworkSettingsTableViewController.m */, - 1A12AE7BA9D1823E9C31BD584B238163 /* FLEXNetworkTransaction.h */, - 89EE1F8881CEF6C851DDDCBDDBBA9A81 /* FLEXNetworkTransaction.m */, - B83027FEFB5F038387A9B68240D2B902 /* FLEXNetworkTransactionDetailTableViewController.h */, - D943A1E941659E7AC12C391374B15A28 /* FLEXNetworkTransactionDetailTableViewController.m */, - 28E80878156EDDE690C214A37A566408 /* FLEXNetworkTransactionTableViewCell.h */, - 2B395DC1DA411B99E2E5542C2639C513 /* FLEXNetworkTransactionTableViewCell.m */, - 30B9F1B75F0A6573075AD7274C90B105 /* FLEXObjcInternal.h */, - 87C731CD7F8E46304CBE735FED9BE8BC /* FLEXObjcInternal.mm */, - ABC1E75A887A0778BF374BB158AAF91D /* FLEXObjectExplorerFactory.h */, - 19558C76B51E066B813B70C64BCD54DC /* FLEXObjectExplorerFactory.m */, - 528D6C2EEF4372B3B714C29EDD3B0832 /* FLEXObjectExplorerViewController.h */, - 715F5A7F699E5FFEB36F1BB7163B504D /* FLEXObjectExplorerViewController.m */, - C8F6CE6BCF5347E17ED1622E9395C4FA /* FLEXObjectRef.h */, - 055ECA5EBCBA576429559B8A8BA20DE1 /* FLEXObjectRef.m */, - 44E1E9B895CE79FC2B5A86A2A4C31800 /* FLEXOSLogController.h */, - 175E97B58AB6FEC91E0BDA8AF81D83A4 /* FLEXOSLogController.m */, - 6164CB83D962C4CA9B1BC981FE007781 /* FLEXPropertyEditorViewController.h */, - D4BFC87F87268A3124AEC51125D3075D /* FLEXPropertyEditorViewController.m */, - CE6D22D3943CF06F9A01FF516F51E4D6 /* FLEXRealmDatabaseManager.h */, - 6DE07D2BD898DCDD5B4C310C960737B9 /* FLEXRealmDatabaseManager.m */, - FB0B2CE6BC0875E2F837679A27A93D0D /* FLEXRealmDefines.h */, - FF961EC4715670E65BF472BB0F51EC55 /* FLEXResources.h */, - AF4C2FF36D22BEAA4F3EF463D4D453C5 /* FLEXResources.m */, - C59F952A2706D3B661F03F3D6ADDCAF8 /* FLEXRuntimeUtility.h */, - 607A80231556DB7CBECDCAA31DC5CD04 /* FLEXRuntimeUtility.m */, - 88312E821A23572FF1D63EDD210D6842 /* FLEXScopeCarousel.h */, - 4E4241F221C2F1CB41BEB6C998F0E87F /* FLEXScopeCarousel.m */, - 2C14404F42CCE7479F8F26CFB13B8B85 /* FLEXSetExplorerViewController.h */, - 4E88AE40AE581BA5ADC854D28C584B7F /* FLEXSetExplorerViewController.m */, - 0B94321C3E3FE46F83DC1FF82FC3A7FE /* FLEXSQLiteDatabaseManager.h */, - 57BE58BA5CDF596290D40BE457FC1561 /* FLEXSQLiteDatabaseManager.m */, - 387287257B2F0560E33603EB26376572 /* FLEXSubtitleTableViewCell.h */, - 1BD569E0A890EC7DFCAA3D3D57C8BA73 /* FLEXSubtitleTableViewCell.m */, - 35FABECFE9E56BCCF477C4BFC0A3FC8D /* FLEXSystemLogMessage.h */, - E055C45F8C526C958ACBD2E97FC84F42 /* FLEXSystemLogMessage.m */, - 4CCC40A1E5649E139FD43639B250C420 /* FLEXSystemLogTableViewCell.h */, - 6C8C5FC75A3F1EAD106D8A2F943EE86B /* FLEXSystemLogTableViewCell.m */, - 01E094DD2A7CC7861A8CF80FD07A373C /* FLEXSystemLogTableViewController.h */, - 346F6A7E2E541786322C84E60A10EC1A /* FLEXSystemLogTableViewController.m */, - 9EF0482D2F33D9DA29476F19D15DB6F8 /* FLEXTableColumnHeader.h */, - 868E9476F93AC954706428A1D56EDF01 /* FLEXTableColumnHeader.m */, - 9812A3AC4953CA14754BC8C890EF20B6 /* FLEXTableContentCell.h */, - 52F326DDD5B5695ED1CEC359AF91EEFF /* FLEXTableContentCell.m */, - DD2BC37781F3E1D980D95FC5C3019F53 /* FLEXTableContentViewController.h */, - 4241B2CB47194CBC35A6911C09D21121 /* FLEXTableContentViewController.m */, - 277DE8ADDCBC34F845D324D32C7A3C1E /* FLEXTableLeftCell.h */, - F4E6EA3DC93C08180AEB5F94812C4C25 /* FLEXTableLeftCell.m */, - 22D344B94FE0D3002F648824A317F491 /* FLEXTableListViewController.h */, - 302C4648767B4DE7AA2E8E62FE19D84E /* FLEXTableListViewController.m */, - 9446F744FAD2CA25EB08CA2B4F38CFDD /* FLEXTableView.h */, - 0220C54EA1896FF0F5FD5334B0F6C5A5 /* FLEXTableView.m */, - 0399DA997C18628E4E183415AF49AAC5 /* FLEXTableViewCell.h */, - 7DC52B059F9812EA3FD2263CB01F42EF /* FLEXTableViewCell.m */, - ADA1C058D8E035FEB8E02193A33A4276 /* FLEXTableViewController.h */, - C1BD446DFB68818EEF4BE9EE73DBE74D /* FLEXTableViewController.m */, - 464E35DD28A5D00C024FACFCD10F17F6 /* FLEXTableViewSection.h */, - B1991F495A9CE99062F7474E67378944 /* FLEXTableViewSection.m */, - 7376C211B8E31E8297D6B37DAD438A02 /* FLEXToolbarItem.h */, - A8202BF60BC84205E0DC991E0E152FB7 /* FLEXToolbarItem.m */, - A85B8B7A9E7F9C89955ED9C4015977BB /* FLEXUtility.h */, - 5381A2E0FD2ADD63C4B15D83E73F2C03 /* FLEXUtility.m */, - E0ED8D906670F3B8C886F35E0E5DB867 /* FLEXViewControllerExplorerViewController.h */, - E3694FDD47C09047E4232AFF3B1A1A62 /* FLEXViewControllerExplorerViewController.m */, - 910891C40CD69EBC29501EE867E34AA4 /* FLEXViewExplorerViewController.h */, - EE9A52AE7397F9D8E595DE0C438CBC86 /* FLEXViewExplorerViewController.m */, - ADA8E9751F52E1FD0A77E8151A8CDC6B /* FLEXWebViewController.h */, - 46688ADA29BFC2BD489BF661E0EADCE3 /* FLEXWebViewController.m */, - 265B19C853A3C08B1AA8B695E7176CDC /* FLEXWindow.h */, - 8E637F32F2A1B780B2A34ACC85B93A45 /* FLEXWindow.m */, - C017588546EA73F9019E57E2884C07CC /* UIView+Layout.h */, - A140E670322308772DDF6839B9D6DFCA /* UIView+Layout.m */, - 3B71503D479F64C42E88634325193A76 /* Support Files */, + 9458642717B342BF1102CF5D2540C116 /* AFNetworking */, + 165EEC869717378C020E0EAA70E94DAC /* AFOAuth2Manager */, + 228159B6925DB89506059251A9E3D7FB /* AHKActionSheet */, + 86B8FAD6D88836ED83171F5148147881 /* APAddressBook */, + D3F27CC65C43612A4A4840EA74CD1822 /* BBBadgeBarButtonItem */, + DC8CABA53FB0EB747CE271CE3C8C3A5F /* CYRTextView */, + 720605DA485EB7734E9FADF5679270A5 /* DAKeyboardControl */, + 40668D8E2798A23A647243AD255D0A35 /* DHSmartScreenshot */, + F9E6BDD1D8536E963DFF95BF5CE199B4 /* DTCoreText */, + 429DE03B35CACDEAE3D487E7C5D5A241 /* DTFoundation */, + C69B1E132B50D2AADA8A4FA97ED5964E /* FLEX */, + E83A20CAA4F908B404CC62F5F911CD0B /* FreeStreamer */, + 77211AD7BBA612448FA223A33DEEC81C /* HMSegmentedControl */, + 28183B3C03A657147535DAECF8B25529 /* INTULocationManager */, + 271D14A436E60C79F80A7A606FD47B9B /* IQAudioRecorderController */, + B681D0808276EEE3E661F096E2EB6873 /* JDStatusBarNotification */, + FED1CC30BFD717B425FD109BEFA45CC7 /* JSCoreBom */, + 3BC9F2F849F0035E7DB381A6B9438D7C /* libPhoneNumber-iOS */, + D95C0C31FE2A5B3638DC1E0CAA207E1D /* MBProgressHUD */, + 58A05996A951106DE618D34A583864EA /* NSGIF */, + 0E28C4B7B99BD922A47AAE1653674303 /* NSHash */, + C9A93BEEB8B02787F772103B3ACE2E35 /* OMGHTTPURLRQ */, + D5D196AAF7A82B365859CBA88A8A6F12 /* PHFComposeBarView */, + A81CD63C3325FE58AA3F4D8582EDF76F /* PHFDelegateChain */, + 665B9E701F56F6B1D40A75F0314A90C0 /* Reachability */, + D85BB19528E00102DE23453B74445A76 /* REMenu */, + 73DE2B9F944A299EE97DB0BC772A7524 /* RMActionController */, + FF5DCF18C3B83CC5A0BB7164A41737A6 /* RMDateSelectionViewController */, + B5DC084319AA9093D47B58BCC7F905E3 /* SBJson */, + 0FE29FC4C14F5DAF06089C19A98116B1 /* SCSiriWaveformView */, + 089C457641B8DD2DE0BF362944543632 /* SDWebImage */, + 41D3CE8A3535E0512A4D4C653006226F /* SocketRocket */, + 7335762FEBBC41DC91687F06F382668C /* SWFrameButton */, + 7E4B5DBE1C228D04C75A50C156AA3D4C /* SWTableViewCell */, + 9AE61CB818BAA0D25FEF582E72E4312F /* SZTextView */, + 854BC5B54649804B662EDCC6CE38A2EA /* TDOAuth */, + 19F22A6F4183D1B38299345291862986 /* TTTAttributedLabel */, + 228CBD3D4782461833AF94B470D24555 /* TWMessageBarManager */, + 1CED7A1F7EF688D254F15FDF8F111675 /* UICKeyChainStore */, ); - name = FLEX; - path = FLEX; + name = Pods; sourceTree = ""; }; - C258376BE39118C918F5088B70ED0144 /* CYRTextView */ = { + ACD1F1EA0C1A2D2F2F37EC6D169898D7 /* Support Files */ = { isa = PBXGroup; children = ( + 5B8F86CD2D207B1D81E22D8E4611C467 /* NSGIF.modulemap */, + 7B3D5A058DACD2B482111D932318D8A7 /* NSGIF-dummy.m */, + 0C45CB6619CD2CF488C85F4DA14FD7D3 /* NSGIF-Info.plist */, + 78F07E289EDDC4F61B45F5F83F93E8A1 /* NSGIF-prefix.pch */, + 6CE8A4C815EF8523D4982C53E0230B21 /* NSGIF-umbrella.h */, + 0F585109AA06E33BA58D4E8364A3C50C /* NSGIF.debug.xcconfig */, + BA4E1B1555ADEC788BABEE8D174CA5BC /* NSGIF.release.xcconfig */, ); - name = CYRTextView; - path = CYRTextView; + name = "Support Files"; + path = "../Target Support Files/NSGIF"; sourceTree = ""; }; - C293C6C6DDBDDE379BEBBC9DB8647B54 /* Core */ = { + AE100478CCCA32DB9E3EAA457997D1C4 /* Support Files */ = { isa = PBXGroup; children = ( - EE779B9E19D7398131E0532E65FC8C1B /* NSData+ImageContentType.h */, - 361AB94FB4FC654A76F951414E37C23D /* NSData+ImageContentType.m */, - 66196CF3AAA01E8A783CB47BDF87F3B5 /* SDImageCache.h */, - C126F8AAA2F5F9E8039BAF206267C605 /* SDImageCache.m */, - D36E53247A6ED9033E9DF56266B271BD /* SDWebImageCompat.h */, - 7C9F85C9340B76690952E7EF4F878566 /* SDWebImageCompat.m */, - 2C6D7B21C31C90C04DFAA2E3183FD067 /* SDWebImageDecoder.h */, - 424EB09168A9B08701838D2A7EDC94C2 /* SDWebImageDecoder.m */, - 9F2088C89A3375EBA8785ECC12A537EF /* SDWebImageDownloader.h */, - C57BA731F7440DA61F7F642ACA24E9D6 /* SDWebImageDownloader.m */, - 3A96CC55A2CAFD92DF26C78EEAEC1FC6 /* SDWebImageDownloaderOperation.h */, - B1173CC3EF8E25018ED6D1E3725D921C /* SDWebImageDownloaderOperation.m */, - 48079E13FE814951D588D4E102DAE5DE /* SDWebImageManager.h */, - BB78597868604A7B6C94D13DB969AB35 /* SDWebImageManager.m */, - A67CEFBB38E1976557F31F6DEB7AB1AA /* SDWebImageOperation.h */, - 875B943FAF593187E812BC0513709071 /* SDWebImagePrefetcher.h */, - D3C9B8E1440661332D3E0B2A6784DB4C /* SDWebImagePrefetcher.m */, - 81E9DDB36A88501A0C99AFC827BD4ACC /* UIButton+WebCache.h */, - D62E520F4E4C9E1FA31CE34E289793CB /* UIButton+WebCache.m */, - D603E5E3A2D558177E6AD8BC29FDC577 /* UIImage+GIF.h */, - 3B139A80291D9E9507F3D44DA3B529BF /* UIImage+GIF.m */, - C867847D1262446F0B7495E31D5EDEEB /* UIImage+MultiFormat.h */, - E4787984D9E1197C013D216A8B1A1515 /* UIImage+MultiFormat.m */, - CB7C3E02C6F7C62EDC0A3DD80B764733 /* UIImageView+HighlightedWebCache.h */, - 4029936FDEF3C065A7BC58F39E8FE05A /* UIImageView+HighlightedWebCache.m */, - F75DFC87970D878D4AE8C369690D1D24 /* UIImageView+WebCache.h */, - A123F795F4B2DE04BC403A06A754ED0D /* UIImageView+WebCache.m */, - 0828D8E1708DF7780C1ABB7BE737D0AA /* UIView+WebCacheOperation.h */, - B636776F10AD73061D50C4C7EDFCA498 /* UIView+WebCacheOperation.m */, + 749763E5BA7C51DEE56D6A51C7AC8328 /* SDWebImage.modulemap */, + 6F64DD1EB9821F0A966C498485F3B52D /* SDWebImage-dummy.m */, + 372687B5AFED2D8966BE95645FFA0E25 /* SDWebImage-Info.plist */, + 43F07958A8CCCC50589FB6EBFEB0BF6F /* SDWebImage-prefix.pch */, + 5D1789C2DE4DEC1D0D9622401DF31CCB /* SDWebImage-umbrella.h */, + EDB83083A31D85CA445F0685ED09F293 /* SDWebImage.debug.xcconfig */, + C770563EB2DC08C78FCB30DDA92152F3 /* SDWebImage.release.xcconfig */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - C3772B4088C59F834C2719D64EE91B4E /* DAKeyboardControl */ = { + AED3F0631D23B2D6D24C752AF6022BEC /* Security */ = { isa = PBXGroup; children = ( - E07977DD90B34512DBB4313B5034DA70 /* DAKeyboardControl.h */, - FB2C9841274A02C950772F1BB8352C6E /* DAKeyboardControl.m */, - 3DEA88AE3F6E9D2163378F5EED3CBDE3 /* Support Files */, + 1107E32DE500DA81378FCA612EC6F45C /* AFSecurityPolicy.h */, + 018CA73C0BD72EE136ED86AA36BAD82A /* AFSecurityPolicy.m */, ); - name = DAKeyboardControl; - path = DAKeyboardControl; + name = Security; sourceTree = ""; }; - C46237AC852C91AA8C4828A31827FB2B /* Support Files */ = { + B13003A206B16CC9D70DABE35CEF697A /* Support Files */ = { isa = PBXGroup; children = ( - F013081C847B0ABCA0339699BEC85D5D /* Info.plist */, - 031282C71E79C5995707D8E8699854B6 /* TWMessageBarManager.modulemap */, - C6ADB996FEC5B74B4261B8585942AF90 /* TWMessageBarManager.xcconfig */, - CB4576BC69FCCC0EFDF2AA3D0A07A1ED /* TWMessageBarManager-dummy.m */, - 7D33FB6B69DB55E1222425ECD97B4EE4 /* TWMessageBarManager-prefix.pch */, - 0A0FB9D0D4C3E950FEC1C5572191F6B1 /* TWMessageBarManager-umbrella.h */, + DC08D581D5E39C60AABC4A5E9FBB7181 /* FreeStreamer.modulemap */, + BC9494E3163598C985E96DBA0BE99C84 /* FreeStreamer-dummy.m */, + 7AB4B09921E7B0A5D62720A0BDC49C81 /* FreeStreamer-Info.plist */, + 9CD74A1DAD5101C3586A75FE90A65492 /* FreeStreamer-prefix.pch */, + 9FAFD4B0E30270AD8F5EE83A90542651 /* FreeStreamer-umbrella.h */, + 6223D78759BC4CC8E5B9C194E3F6C07A /* FreeStreamer.debug.xcconfig */, + 3626A99BA881B21FF7E0124FC7576124 /* FreeStreamer.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/TWMessageBarManager"; + path = "../Target Support Files/FreeStreamer"; sourceTree = ""; }; - C7AE5676C72C6F38AE273E707A3D4A31 /* Support Files */ = { + B3F73E9A75A4EDD987D12748B5EFA502 /* Support Files */ = { isa = PBXGroup; children = ( - FBDA8A4ECE71823E7D2A99D1D029B9E0 /* Info.plist */, - 55442B4C3FE71D874309E53D14581064 /* MBProgressHUD.modulemap */, - 68D3E8836D2BFCAF9ACE69CAFB685927 /* MBProgressHUD.xcconfig */, - E39BE1623F1B11A76FC22EC7A06B675F /* MBProgressHUD-dummy.m */, - 7BCE1086466D7E0BC13AB582F3FA06F9 /* MBProgressHUD-prefix.pch */, - 9572B0A3869FCD4CB12FFB0F061843EF /* MBProgressHUD-umbrella.h */, + 86240753E7962E9F10465FD25F3E6CDB /* Reachability.modulemap */, + 2A0702D1FE5B5852843B50DBF7788377 /* Reachability-dummy.m */, + C00B5AAA16652AD7934BF5C6B45F2734 /* Reachability-Info.plist */, + D6B3E4098DC1CC326D6F976E2045C94A /* Reachability-prefix.pch */, + 3C0CEE47C188E2411B60D3E581F7C54E /* Reachability-umbrella.h */, + 166AE55C4378FB5225F33BCF665A5EB6 /* Reachability.debug.xcconfig */, + 5DB4748045B8DCFC52AFB37C600FA4F2 /* Reachability.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/MBProgressHUD"; + path = "../Target Support Files/Reachability"; sourceTree = ""; }; - C86E4DFC505C78558D19C6B8CB943EF2 /* Support Files */ = { + B5DC084319AA9093D47B58BCC7F905E3 /* SBJson */ = { isa = PBXGroup; children = ( - EB0023D889D6EC6D48B64A2691AFBE06 /* Info.plist */, - 80E1E5263559998446D4A2752E9D2CE3 /* Reachability.modulemap */, - 63E12866C1EDA1E6E8EE1DED2CFC18A4 /* Reachability.xcconfig */, - 8779C6F78EE439D7D87FBE9495CFAF03 /* Reachability-dummy.m */, - 0A3760CFEE99160586FDC1E19FD258D4 /* Reachability-prefix.pch */, - 5D60321161BB405E4D6ACB1F10E7B3AF /* Reachability-umbrella.h */, + 08A443FCBEBF624C30A486DC6F810F72 /* SBJson5.h */, + 63A03EFFA2289B965ECFB5C028A90427 /* SBJson5Parser.h */, + 8457027CAC5116155A2A074C731F1BF7 /* SBJson5Parser.m */, + 2D82B3C54D33038DB64437395FA6FBD7 /* SBJson5StreamParser.h */, + 1470F7210D81DEB1DE9135C22A15108F /* SBJson5StreamParser.m */, + B2EF20CCFADBD27C45419CC4F251B4F5 /* SBJson5StreamParserState.h */, + BD7CB7A6540150E722BC2B318E0DE6B1 /* SBJson5StreamParserState.m */, + BEB53BE2CC04102C40C7CF499E58E623 /* SBJson5StreamTokeniser.h */, + 87D0D334915059C36ACCD818B3338593 /* SBJson5StreamTokeniser.m */, + 328A09608D3392602CA37431D74092B6 /* SBJson5StreamWriter.h */, + 0C9F695850B16F9058BAB79CD54F5030 /* SBJson5StreamWriter.m */, + 3A0FA2AB44CE0E3CD7EF458739BF37F9 /* SBJson5StreamWriterState.h */, + 60BD091CEE741B68BA4E6C9315949912 /* SBJson5StreamWriterState.m */, + FEDDD3B4C7C51EAE0748A37FCC89328A /* SBJson5Writer.h */, + 08369255761B9EEB1B9F32C5453773CE /* SBJson5Writer.m */, + 156980BE6A8FE86C3B1B33CA0AFDAAEE /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Reachability"; + path = SBJson; sourceTree = ""; }; - CA7D9B61875D3278643AC7DB84773E0B /* JDStatusBarNotification */ = { + B681D0808276EEE3E661F096E2EB6873 /* JDStatusBarNotification */ = { isa = PBXGroup; children = ( - 33974DC3D084271B00AA8ADAADB5B288 /* JDStatusBarLayoutMarginHelper.h */, - 2A491074D8FDB01E785206BD21DC4F16 /* JDStatusBarLayoutMarginHelper.m */, - E5DEBC8830EEBED16CF1CE9D7543D0D3 /* JDStatusBarNotification.h */, - 5A8829696025A909095121D5683BFFA0 /* JDStatusBarNotification.m */, - 75AE13BB1300AE1EF183AD9519819DCC /* JDStatusBarStyle.h */, - C874CA412C0178379DC6D35724928F86 /* JDStatusBarStyle.m */, - 4D8809AA404A801D77157B6CBCF22DC9 /* JDStatusBarView.h */, - C956CBD2DCECA9BAF3B4DDE20A63E5EF /* JDStatusBarView.m */, - CF35C9D112EEAC73DAD45506EE9A26D6 /* Support Files */, + 05671AC6A1E52D9EF055B08B252FEF77 /* JDStatusBarLayoutMarginHelper.h */, + D24FA8ABF2E44647DBD458FA263C1144 /* JDStatusBarLayoutMarginHelper.m */, + C2B98ACCC34D45042EB62E4CA407F81C /* JDStatusBarNotification.h */, + CCD27C18259F8C10EB0C2AB92C9F51B1 /* JDStatusBarNotification.m */, + B9573285DD1A79DB35C70648E4CE5605 /* JDStatusBarStyle.h */, + CFBC9747BE835EBC03AC0A2CE5C8B54D /* JDStatusBarStyle.m */, + B6F16B82469320F5EBBCE7628D936C72 /* JDStatusBarView.h */, + 90F737AB4F7D4A361B0367283E41B608 /* JDStatusBarView.m */, + 8C3C8FE2966983835F3A10FD48F0AAF6 /* Support Files */, ); - name = JDStatusBarNotification; path = JDStatusBarNotification; sourceTree = ""; }; - CBF76FCD1E91F8547E53704E2B7CD964 /* INTULocationManager */ = { + BAA46D106D10C6681EF819772D5136EF /* Support Files */ = { isa = PBXGroup; children = ( - 28FB7899B47E4C179A197B8CA5C23327 /* INTUHeadingRequest.h */, - 235E96C419C684CF3F9E086C3EF4A7D8 /* INTUHeadingRequest.m */, - 8151B931EE4CB02873E6BA5B9AF564FD /* INTULocationManager.h */, - B23A5FE28CAC621E864F69F54271C7F1 /* INTULocationManager.m */, - E2CA2E005E8E4467FB091B0DEBD88982 /* INTULocationManager+Internal.h */, - 0BB78F7977A16CC52CF8D281842DAD47 /* INTULocationRequest.h */, - 20A496C72B5C0A294BFDA12F8E31538A /* INTULocationRequest.m */, - 77F5D2C3B8753C48E21E9C0DD2BCD1CA /* INTULocationRequestDefines.h */, - 70A05BDAAEB19276EE7B6ED2F11D4B46 /* INTURequestIDGenerator.h */, - 6DF8B1D18183403EAE47932EA21C1EC1 /* INTURequestIDGenerator.m */, - F41708EC0AAAE8E7CB1445E665837C0D /* Support Files */, + 0A69D1E74E779B6F54ADEA2FB8933CEE /* MBProgressHUD.modulemap */, + 62077C0B6278112FD17AC8B73692997A /* MBProgressHUD-dummy.m */, + EC847778D2A24C2AEED78123127FFC15 /* MBProgressHUD-Info.plist */, + 408B9C0B70B38D8EF2661D7380C72F11 /* MBProgressHUD-prefix.pch */, + A30A07AFB6ADD8288720404260C1F9C9 /* MBProgressHUD-umbrella.h */, + 0C47600F56FD9EE7F286AA1D84C882A6 /* MBProgressHUD.debug.xcconfig */, + 48095194E2942D6DB2712647A93EF567 /* MBProgressHUD.release.xcconfig */, ); - name = INTULocationManager; - path = INTULocationManager; + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD"; sourceTree = ""; }; - CDBCEF7E31A584F635FBAA7B10C9AF72 /* Security */ = { + C02788E2A404F27B50F1089CF46F034C /* NSURLSession */ = { isa = PBXGroup; children = ( - 8208E65A4B9EA574E2D254E9286BCD22 /* AFSecurityPolicy.h */, - 22C4E4A3A89EDD140F6FEC73FFBC3279 /* AFSecurityPolicy.m */, + 79BCF4FFB7930EA5D93951681411C6C5 /* AFCompatibilityMacros.h */, + DEE989214F2CDAE82BF7D864D9108FF9 /* AFHTTPSessionManager.h */, + 49C4A8039800F1DBE22653AD92A5E385 /* AFHTTPSessionManager.m */, + D74D727ACC34D033964C90A4D2DE754B /* AFURLSessionManager.h */, + A3789D8821F34BD0F90A144EACBE80AD /* AFURLSessionManager.m */, ); - name = Security; + name = NSURLSession; sourceTree = ""; }; - CF35C9D112EEAC73DAD45506EE9A26D6 /* Support Files */ = { + C69B1E132B50D2AADA8A4FA97ED5964E /* FLEX */ = { isa = PBXGroup; children = ( - 00F7C698E12C25B24646F0EE07DFEDFC /* Info.plist */, - 10EABD547ED7532D88C5B7DADC7A94CD /* JDStatusBarNotification.modulemap */, - 2B4AC9C8B37DE25E08BC1A02C78C34ED /* JDStatusBarNotification.xcconfig */, - C8EA2118B0F8D8D4E4B1DA34956E1370 /* JDStatusBarNotification-dummy.m */, - 8C1FDAE878767B1460CDF63F0DB3745D /* JDStatusBarNotification-prefix.pch */, - 86C5591AEFDB82CAE5C7AEA872C0C22A /* JDStatusBarNotification-umbrella.h */, + 73387FD2691E0D818E25DA021EE7C316 /* ActivityStreamAPI.h */, + F93C261B72CF415FED393D52BF9DA7A5 /* CALayer+FLEX.h */, + 61174303DD602CFBFB1302309BA33BFD /* CALayer+FLEX.m */, + F99308A4488E85C6C14B56184B7A0BBD /* FHSRangeSlider.h */, + F68016BB420AEAF19F05567AB2752BCF /* FHSRangeSlider.m */, + 3403BD6F593C47D4C33BC4380F6CA87E /* FHSSnapshotNodes.h */, + 5F21CBBDCB4A3B6CBE0F090847240E7C /* FHSSnapshotNodes.m */, + 20FE7C8A8082AE53A3A24F93A27AE858 /* FHSSnapshotView.h */, + 7FA982DB54DE9210736AD89C89A016B2 /* FHSSnapshotView.m */, + EA479FA6DAA018589FF85EEB338234EA /* FHSView.h */, + 296BA21F300212CFEC30F69AABFA46CE /* FHSView.m */, + BE6998E73DE6CCC443E50B0E6B87858F /* FHSViewController.h */, + 2F076555AA2AAC4B97E9EB08D0BC5A1D /* FHSViewController.m */, + AE2B9BD95C6C32DC4037CFE587889BCE /* FHSViewSnapshot.h */, + 4BDE1F8F1C024BAC5FDA9084581B9EE0 /* FHSViewSnapshot.m */, + 829F18162BCBA0901A795006B5416C9F /* FLEX.h */, + B282B2E9D99E31B009D5406C2C77EBA5 /* FLEX-Categories.h */, + 40AFE6C47E923263464A9453BEF30317 /* FLEX-Core.h */, + 7734B3597F1CD577A3754C4ECDB3238C /* FLEX-ObjectExploring.h */, + 5BB633B4F3BF2B4AF9BC51FCBE3A6957 /* FLEX-Runtime.h */, + 6C66921953D1E4B9C08E137EFCF0C835 /* flex_fishhook.c */, + 8DD2E0E45A9B885BC30408B0E15C68A3 /* flex_fishhook.h */, + 6029D4A09BE1D74F5F581B0C349A3832 /* FLEXAddressExplorerCoordinator.h */, + 43BCA909FE08A54BE2EBF674B8FEC0F6 /* FLEXAddressExplorerCoordinator.m */, + 1CC661EC3AF8AF59D60A6EBDEE8BE0F0 /* FLEXAlert.h */, + A0A73871AF8714EE242BF51E9139A290 /* FLEXAlert.m */, + C786728F5D47D4544B6904BD8452A997 /* FLEXArgumentInputColorView.h */, + F870F4554813A03F90EE30481E6BFB86 /* FLEXArgumentInputColorView.m */, + 7DDC476C5D417A6722752F490742558B /* FLEXArgumentInputDateView.h */, + 589F4250F896280E34AD0C32D0131FEF /* FLEXArgumentInputDateView.m */, + 10D0B32C2D423CFF0E15B149A4BBF70C /* FLEXArgumentInputFontsPickerView.h */, + EEF12618689A9210DB2A06CB3AC3595B /* FLEXArgumentInputFontsPickerView.m */, + FF4866D5B426AF08723CDEB44F1B1D80 /* FLEXArgumentInputFontView.h */, + EAAF533C772D580CD14FDF4B8691D122 /* FLEXArgumentInputFontView.m */, + 8B2D0A0353C2CCE7CD1DC9411443DE25 /* FLEXArgumentInputNotSupportedView.h */, + 564BEC7E78AC07EEB1F7F02D04B93555 /* FLEXArgumentInputNotSupportedView.m */, + F5DC87446019AA3252019721A0901DE1 /* FLEXArgumentInputNumberView.h */, + 93622956403B6189AD7668DE1022747A /* FLEXArgumentInputNumberView.m */, + 8D21A7AC9BE7102C6328E403FA3D4C33 /* FLEXArgumentInputObjectView.h */, + 2BE9745DA7E1479B05F6C32B2AFF0BEB /* FLEXArgumentInputObjectView.m */, + D04CCE7F728734F5A61362C7B854D40B /* FLEXArgumentInputStringView.h */, + 9375871C2646D8463E40AEACD7E5E7D5 /* FLEXArgumentInputStringView.m */, + 36655ADCE875159F7223C994C1DCB650 /* FLEXArgumentInputStructView.h */, + C197CBE834200C6AD94C29475727C929 /* FLEXArgumentInputStructView.m */, + 4B052C0CB2F075654DDAB1A157D07D16 /* FLEXArgumentInputSwitchView.h */, + 55459FCDDE2EA7126FE79CDD30DEB5DC /* FLEXArgumentInputSwitchView.m */, + 0D8BD246223C519F3CE5CDF34D560543 /* FLEXArgumentInputTextView.h */, + 06ED8759E8B2DC57E43C77F2D6337A48 /* FLEXArgumentInputTextView.m */, + E1535989317B7636E47FBE8A66C6CF33 /* FLEXArgumentInputView.h */, + BBC1C069FD824BE54D5199C3AC55CBDB /* FLEXArgumentInputView.m */, + 48E107416181C2A8AFD964D1748F6E4F /* FLEXArgumentInputViewFactory.h */, + 68B34196F69477C7A65593424FFF4D1B /* FLEXArgumentInputViewFactory.m */, + 92ADE9BFB002C499E180ED865BCAE216 /* FLEXASLLogController.h */, + BE9017373D22329B32E123C58BD7B3D3 /* FLEXASLLogController.m */, + 30FB0362F010A58FE71E2B72B940F2A9 /* FLEXBlockDescription.h */, + 948D5A76E28A213A30AEE1BAB05B3972 /* FLEXBlockDescription.m */, + 191C7E73A5D8E99E678A67F6D43C0EFC /* FLEXBlockShortcuts.h */, + 8EA198FBC1F8F6AAD8E45550A0932E51 /* FLEXBlockShortcuts.m */, + 595F9CF1F98BF8B4838887E2188C5FCA /* FLEXBookmarkManager.h */, + B61EB1BF1F93AEC05E56E361D592FDEA /* FLEXBookmarkManager.m */, + 9B8B7B01871F482BA3E1BB0FEDE6B946 /* FLEXBookmarksViewController.h */, + F03DA9FE31B3890BED978D5E155364C0 /* FLEXBookmarksViewController.m */, + 489CB2881C04E492524E39EB183AA852 /* FLEXBundleShortcuts.h */, + 824B075084DD7B2086975E01C99A8E71 /* FLEXBundleShortcuts.m */, + F2DBCCF3460EAF77EA7B8B75C75B942B /* FLEXCarouselCell.h */, + 57398F3C8EBC7F798A81FE77DFD79228 /* FLEXCarouselCell.m */, + CC357CD91F53DD2907DA100FDDE5732F /* FLEXClassBuilder.h */, + 7ABA3A41260E5D825CA19AE49B4ECD72 /* FLEXClassBuilder.m */, + 2914B996BCD1154FE8177BE348CE4AEE /* FLEXClassShortcuts.h */, + D757ECF8B81D69D734326F5BEC005AA1 /* FLEXClassShortcuts.m */, + E9F1B955D0975D295065201644EB1BFE /* FLEXCodeFontCell.h */, + 46F2EBA324145D420BBA3DFB1718800E /* FLEXCodeFontCell.m */, + 29F70D8F7CB82446F899CCD7C14D3A2C /* FLEXCollectionContentSection.h */, + 8705F4256376C637C0F1C08CD4FE8543 /* FLEXCollectionContentSection.m */, + 76703B1EFF3179F2DA85BB449FB87606 /* FLEXColor.h */, + 4D26B064F0BBCA21CFC2E900A20672B7 /* FLEXColor.m */, + 664646B5CA3289A278530402814D64E8 /* FLEXColorPreviewSection.h */, + 9D651008D3EBD141D430610EFD5F3D93 /* FLEXColorPreviewSection.m */, + CDF7C72EA9CB531D5A030BA35C4BD4BE /* FLEXCookiesViewController.h */, + 86E0104D58C77AF87D1C6E2DA46B7AB7 /* FLEXCookiesViewController.m */, + 5EE8FEE1D1B9596407A5ADA81D6CF94F /* FLEXDatabaseManager.h */, + 94987AE4422A8989D9A9AFAC87347879 /* FLEXDBQueryRowCell.h */, + FCBF86BD9EC3384724FA848536B06788 /* FLEXDBQueryRowCell.m */, + DED2DF51360A8C1FD4E1D2CA071F5E0B /* FLEXDefaultEditorViewController.h */, + 3EDE185B81D85D1B845C5E17995A2816 /* FLEXDefaultEditorViewController.m */, + C0CE365568F87FA6800F1B01C4FD68B9 /* FLEXDefaultsContentSection.h */, + EF97F18A71813674F4F15B825CF6D829 /* FLEXDefaultsContentSection.m */, + 2DFC49659DBDCE6B928E224FB51E677A /* FLEXExplorerToolbar.h */, + 847446884A02779B989DE12B1FC3231B /* FLEXExplorerToolbar.m */, + FF5B2138EB628DC147983C0A12D19C13 /* FLEXExplorerToolbarItem.h */, + 240C377A5EBED75631FBA182CCCFF349 /* FLEXExplorerToolbarItem.m */, + 829EDCCB45CFE70D7982D882F3A3A270 /* FLEXExplorerViewController.h */, + 7C952E3C913E187A4DDF1E6555742CDE /* FLEXExplorerViewController.m */, + 0D87D4ED3E4C4A21A83644AAF0B76E6F /* FLEXFieldEditorView.h */, + 27C9D4AD22F960E08C7DE3A2DF406291 /* FLEXFieldEditorView.m */, + D1B7FC692D99B52D25304729695630E6 /* FLEXFieldEditorViewController.h */, + 08F3110F185D731EDD06853426F50C8F /* FLEXFieldEditorViewController.m */, + 2A58ED9CAFDE5C9695331803858439D1 /* FLEXFileBrowserController.h */, + EE3F010EB34A84AEE01741089B525A48 /* FLEXFileBrowserController.m */, + FE6369973241C33445A2243E36D63172 /* FLEXFileBrowserSearchOperation.h */, + 9C7A34502C89044200242B46513117F6 /* FLEXFileBrowserSearchOperation.m */, + 5E731E790506B8ADF4035DA353D90385 /* FLEXFilteringTableViewController.h */, + 5C6CE05686ABDFA639897913F3FEDED2 /* FLEXFilteringTableViewController.m */, + A405C31027BE5E6C0D4F5B59EB003E1F /* FLEXGlobalsEntry.h */, + 6555F4AD293E8A62B79666191AD44B7D /* FLEXGlobalsEntry.m */, + CD6187BBCBB963C457A727F887E0BBDF /* FLEXGlobalsSection.h */, + B19630EE02699F33A1C33F4DAABD93AC /* FLEXGlobalsSection.m */, + A9FE92512FD716AA5A0C3A0FE9409758 /* FLEXGlobalsViewController.h */, + FED99B3B79CFB1948CE5CA881D6749DF /* FLEXGlobalsViewController.m */, + 9BFEDF5F9DEF6A42DC44D995AFB20FDF /* FLEXHeapEnumerator.h */, + 80135B3DAF2C67767F4D9CAF3DAEE5F8 /* FLEXHeapEnumerator.m */, + F71FC37EC511A0AA27833222B56BB156 /* FLEXHierarchyTableViewCell.h */, + 0D12D27AEBCF16393291E64A7247D9A1 /* FLEXHierarchyTableViewCell.m */, + 413DE188CD2A8443F227B5E05CFAF747 /* FLEXHierarchyTableViewController.h */, + 5E1DB158FEC739E7BB402075C2840620 /* FLEXHierarchyTableViewController.m */, + 5F966BD2F09611F8CDFD4A4D1DF03827 /* FLEXHierarchyViewController.h */, + B3E094966B96D7682983E52FF1D9FC12 /* FLEXHierarchyViewController.m */, + 6C773D766BFE42C2165618EA8CFC3321 /* FLEXImagePreviewViewController.h */, + 7CB597FE284D0FCD3C49DDE5D734537E /* FLEXImagePreviewViewController.m */, + 6D97600B41F0B757F2F442D21A2AC95E /* FLEXImageShortcuts.h */, + FED3AC56009E3AEA1E3E352D88B27964 /* FLEXImageShortcuts.m */, + 90A961FFAB3DFCD4B09D4D9EFBD6B133 /* FLEXIvar.h */, + 70A494B258CDBA67EB93A96ED97E0785 /* FLEXIvar.m */, + DB853DAD4E01CA82D250A1D63734E833 /* FLEXKBToolbarButton.h */, + 922610CF77AAAECB147BBBAF4BE7F291 /* FLEXKBToolbarButton.m */, + 4A7227536777BADB58E76439A738B327 /* FLEXKeyboardHelpViewController.h */, + 3C4D5A507AC60F40F9831EC9BCFEF251 /* FLEXKeyboardHelpViewController.m */, + EF174797873BD09C911A8433D64D447E /* FLEXKeyboardShortcutManager.h */, + 09383ED027CD6B941FA42B1D2E006CCE /* FLEXKeyboardShortcutManager.m */, + 18AF7EDC7B63B9E0589C06718B2ACDE0 /* FLEXKeyboardToolbar.h */, + AB7ACC9C3E0F08D8AEDEBF846C9CF648 /* FLEXKeyboardToolbar.m */, + 825D49BC6B240F50F43E67FF152B389B /* FLEXKeychain.h */, + 4E5185FC017521D8355C6F7A6AAACD32 /* FLEXKeychain.m */, + 2E9AE625DA3AA3059422F6B96F028C60 /* FLEXKeychainQuery.h */, + 9009D85242271158797C8F97F7DDA1F7 /* FLEXKeychainQuery.m */, + 10701C818F4A4D82137E305CB033D913 /* FLEXKeychainViewController.h */, + 12D37DD1E83EB721796E1F7234FCDD85 /* FLEXKeychainViewController.m */, + A126CC73EE40996C66668D1B5E62E4AC /* FLEXKeyPathSearchController.h */, + 3F1B841187477268F44E19E89CB9D03F /* FLEXKeyPathSearchController.m */, + 3AD8EB50B82BB8B4F397149BC5B68226 /* FLEXKeyValueTableViewCell.h */, + 8963C03F781CD740226B4C0D62CE9EC9 /* FLEXKeyValueTableViewCell.m */, + 03CEFEB1F2BC649BE5ECCDAE08DB998C /* FLEXLayerShortcuts.h */, + 6CC367002CB509DF436D2DE42E47C41F /* FLEXLayerShortcuts.m */, + B4A2C00FB728B7163D08A2DC4AB69499 /* FLEXLiveObjectsController.h */, + C8BC444F95706BE203EE30A7A7773DA3 /* FLEXLiveObjectsController.m */, + 444C9351AC90D63C67A50BE5308DF463 /* FLEXLogController.h */, + E78CC223EA0DFDAEB2DD2C53EB574EFC /* FLEXMacros.h */, + DA281EB991EF37495C077D0E3B005483 /* FLEXManager.h */, + 0B9857927370D40CE850DC11C41A740F /* FLEXManager.m */, + B51276CC3BCDADEFC6E5122339E99A9B /* FLEXManager+Extensibility.h */, + 0240995CE469F1D2AAEBB3344CD1A50F /* FLEXManager+Extensibility.m */, + 76D8FC0EAB9CB3D5CE848326DDC7B3D6 /* FLEXManager+Networking.h */, + 985E9BC261260914DAD0B8F80BE33208 /* FLEXManager+Networking.m */, + AE84BC9ECA8D2E112875A0111F42A574 /* FLEXManager+Private.h */, + 4826742AAF47B0EA39E83D26A3AAA83E /* FLEXMetadataSection.h */, + 76C6B96BF3DC75254D086D966CB4C22E /* FLEXMetadataSection.m */, + DC5D273680A973B9DF2A1BAC5AC4D8DF /* FLEXMethod.h */, + 0318179DD31021BCC4BA68397344457A /* FLEXMethod.m */, + 184582CBB8B7034924660C449B7245CE /* FLEXMethodBase.h */, + 885698E49A160D407D648C56B8846ECC /* FLEXMethodBase.m */, + 309F48006B772851697FB1ED9089BFDB /* FLEXMethodCallingViewController.h */, + C51C9CB8B11EC2D118F38F90A8D4EAA6 /* FLEXMethodCallingViewController.m */, + 4430BC6D16ED138C6F0431EA7954FB59 /* FLEXMirror.h */, + 1E4A6FE49B0330D9EADE8B1D46DF3FE3 /* FLEXMirror.m */, + 5DF686C359BA3C6503ECFAC6FC14E915 /* FLEXMultiColumnTableView.h */, + 5299FDB840E147597FD36F5BB23A0189 /* FLEXMultiColumnTableView.m */, + A28E3C6B4333168A89C996E19EDD66E9 /* FLEXMultilineTableViewCell.h */, + F892D5CA8A20AB0F6DC922EAD389B776 /* FLEXMultilineTableViewCell.m */, + 51C3F483B630FFE171126FCA8F0CFD3A /* FLEXMutableListSection.h */, + 4846A1F007F56809E02F5D5A8C934C64 /* FLEXMutableListSection.m */, + 17F2AE761B72DEA4DCF7EC4429055A2C /* FLEXNavigationController.h */, + A078AEB56CE337D16DC5D83A8F102AAF /* FLEXNavigationController.m */, + 8FBF1A4B7F35056901EA0A55239BEDCB /* FLEXNetworkCurlLogger.h */, + 0BE5BA9388B38DD51E7054400100E375 /* FLEXNetworkCurlLogger.m */, + F45287FDEE47273C1750295561F377F9 /* FLEXNetworkMITMViewController.h */, + 479E70D9ECB7889979F693F664970367 /* FLEXNetworkMITMViewController.m */, + 1D6821D3ACDB5CA1B63C1D7589FED4C7 /* FLEXNetworkObserver.h */, + 87BB95649FFB1ED39E250EE83E6B906B /* FLEXNetworkObserver.m */, + 98EBB14538DD0FE85D130344B8100035 /* FLEXNetworkRecorder.h */, + 69CAD424ABC114922A053950FF25B216 /* FLEXNetworkRecorder.m */, + 510E4796E68862D66F160B52C29B91FB /* FLEXNetworkSettingsController.h */, + 496390F89555A04A7FEE90035A2DB2A9 /* FLEXNetworkSettingsController.m */, + 1A3191B8E24F37985E0D123CD1692ACF /* FLEXNetworkTransaction.h */, + 6309F514AA8FF539D1A9F3E32B7A06BE /* FLEXNetworkTransaction.m */, + C1008A5A0662C4D06CA70EBA68AE2514 /* FLEXNetworkTransactionCell.h */, + CE2CB95301FF9C80DCE9CF12348C0370 /* FLEXNetworkTransactionCell.m */, + 8204B88C912A506B4538EFF9F394C2B9 /* FLEXNetworkTransactionDetailController.h */, + D5106286979560A74BE343A60D63E7B6 /* FLEXNetworkTransactionDetailController.m */, + 05D1D3F53D8D05EEB400DBDA2EF3ECE3 /* FLEXObjcInternal.h */, + 4AC71F5D986E829C21477710E0D7D5E5 /* FLEXObjcInternal.mm */, + 85263567B681E054FAD92A895D8F0D38 /* FLEXObjcRuntimeViewController.h */, + 98F8D926C64EEF2675AEDE78D60284D4 /* FLEXObjcRuntimeViewController.m */, + 135F220EB523843A62795583A2F2A12F /* FLEXObjectExplorer.h */, + 3ED898203A56B317EFCE6F9C7C28F6B7 /* FLEXObjectExplorer.m */, + 9FEE46C2089701F367345357C7926850 /* FLEXObjectExplorerFactory.h */, + ED9A28E67C107796EA05E33C04B4B096 /* FLEXObjectExplorerFactory.m */, + 3AABD45CF4696DEB15D7F64EE7E45CB4 /* FLEXObjectExplorerViewController.h */, + DA984E08FC9C91074BCF3441CED410C0 /* FLEXObjectExplorerViewController.m */, + 34D0CFE322D568260C686E56B68371A3 /* FLEXObjectInfoSection.h */, + 5304F25A0C3075A3CA726786108BA5AB /* FLEXObjectListViewController.h */, + E4E1B2446AC425C1506C4FB0DC074567 /* FLEXObjectListViewController.m */, + 46E255A29709D4721FA0C72B33227F00 /* FLEXObjectRef.h */, + E1C3C614C23CB499362D5867A152D600 /* FLEXObjectRef.m */, + B0082E4A62AAB78F53B1F3B080BFA1A5 /* FLEXOSLogController.h */, + 1DBF40FD1EB3A6CBBE68E2211FD2F2C9 /* FLEXOSLogController.m */, + 47AF04B9B3129AE8926E2F7EC89983E6 /* FLEXProperty.h */, + CFE40888131E8FB124445AA8F8D3143E /* FLEXProperty.m */, + 6C9C7DC2EDB1C67ED772453F41DE4430 /* FLEXPropertyAttributes.h */, + AE20E63F604D9EA99DE94ECB1524E27E /* FLEXPropertyAttributes.m */, + F70B26AA7F96647287E91A1843F45ED6 /* FLEXProtocol.h */, + 40DFD05C01872AA39C1458362A89D3FD /* FLEXProtocol.m */, + F70B96C094EAE303D959102B9ED795B5 /* FLEXProtocolBuilder.h */, + E0EE46CEF6B2E44223490B468B714896 /* FLEXProtocolBuilder.m */, + 532A2AAA75A75AC841BD24A90086CF0F /* FLEXRealmDatabaseManager.h */, + 1928EA02DD98BD7285643703CC2EEAE8 /* FLEXRealmDatabaseManager.m */, + 7084941C36A5660CB27F779246996DB3 /* FLEXRealmDefines.h */, + E5E1091ADDF9A15EB7552F7FBE976547 /* FLEXResources.h */, + 1945BF85D3AF7C9FC7FADD9741FF1AC2 /* FLEXResources.m */, + 13B87DDA74AB10C9F77FEAF04D84F511 /* FLEXRuntime+Compare.h */, + 43894FA81F52E6BE73B0580231F45026 /* FLEXRuntime+Compare.m */, + 1C600D8DC01B455BC6296D31E2773D91 /* FLEXRuntime+UIKitHelpers.h */, + EA557DA1A326B7B7DCFEC095847B8874 /* FLEXRuntime+UIKitHelpers.m */, + 57BEBD7065A708D9D818865C5D4314B9 /* FLEXRuntimeBrowserToolbar.h */, + 475824F43B073C628A95E8A5BB6233A3 /* FLEXRuntimeBrowserToolbar.m */, + 21DC699BCE63ED17BCA5BBBA209CD75E /* FLEXRuntimeClient.h */, + DE659F3346E23838366637EEEC8FB8AB /* FLEXRuntimeClient.m */, + 38551FEAC72CA33C4619149E8F003EC0 /* FLEXRuntimeConstants.h */, + E0B3469A888470DECA1230A2D8BF8D8F /* FLEXRuntimeConstants.m */, + F12955C51FA76A9CA1B8878B9620EA16 /* FLEXRuntimeController.h */, + 516758C8621AFBD1F9B4B6C878880C4B /* FLEXRuntimeController.m */, + EF2DC5E8C13279A82A2211D167744F6D /* FLEXRuntimeExporter.h */, + 19368D61F22E634FDC3BFFBDAB3A8F58 /* FLEXRuntimeExporter.m */, + D2FE70430FEF475FEB2DCA64570429FD /* FLEXRuntimeKeyPath.h */, + 8481B68C584827D9D31F0F29F25DC55D /* FLEXRuntimeKeyPath.m */, + 214879172CC4A58D33319E97A23A6358 /* FLEXRuntimeKeyPathTokenizer.h */, + 721A9259F0791F855D4D0AF8929D380C /* FLEXRuntimeKeyPathTokenizer.m */, + DADC78E9A981E2057A10118C12245F48 /* FLEXRuntimeSafety.h */, + 820E9103F76FEAB783DAEC8E54A889BD /* FLEXRuntimeSafety.m */, + 9CD6C14B9B046084DB69276AEE209010 /* FLEXRuntimeUtility.h */, + 64192CF1E2B7E9FADE995B54FDBE9E68 /* FLEXRuntimeUtility.m */, + A4932A83E75DC9B20FAC866F2F54CF75 /* FLEXScopeCarousel.h */, + 55CCB6B07F9F41496526502B02439089 /* FLEXScopeCarousel.m */, + F1D01516661723A1D365FDB4BA6E97B8 /* FLEXSearchToken.h */, + 03DBA6BF4A17FF4DCF818A82D62C7AE9 /* FLEXSearchToken.m */, + 41CC9540F9736915DB7E28481A5BBBC1 /* FLEXShortcut.h */, + 72D1E5DCAFC03F0117516EBEE7B70026 /* FLEXShortcut.m */, + EAB779695A13D1DECD43ABFE358EBBBF /* FLEXShortcutsFactory+Defaults.h */, + D0759318A70841227FF8E517A7B7E6A4 /* FLEXShortcutsFactory+Defaults.m */, + 79AC63EA19E09B66AD0AED0BB1F98A7F /* FLEXShortcutsSection.h */, + FE7F232022C03A2C147835997EE41400 /* FLEXShortcutsSection.m */, + BE460AC55A863064991F4E3D27F57847 /* FLEXSingleRowSection.h */, + 4ABC2CCC9EAFD34DBFEF44B46FC9D68F /* FLEXSingleRowSection.m */, + C511F737CFD57D70D08A651CA53C6810 /* FLEXSQLiteDatabaseManager.h */, + 7E6A6FB8913E323B7AF9D8AE78CF88B6 /* FLEXSQLiteDatabaseManager.m */, + 5E4FF1C1B72F8CE962AEFD84BE7D5394 /* FLEXSQLResult.h */, + E52898B7F103F91D92D703DD03DA6805 /* FLEXSQLResult.m */, + 026ADBD17EB07FAD15D15CEFC1573A79 /* FLEXSubtitleTableViewCell.h */, + 72059824EF1E7A34996FA9DCBA99737A /* FLEXSubtitleTableViewCell.m */, + D5D0BB9A8025619E8CA73FAA1FB512A2 /* FLEXSystemLogCell.h */, + 0329C2AA21E13E797AB18273E651C987 /* FLEXSystemLogCell.m */, + 74C1C8F95759EAD616E0451E5B75A6C4 /* FLEXSystemLogMessage.h */, + 1B183788C8B482A27BF8A124544A3F30 /* FLEXSystemLogMessage.m */, + B7C64F98D10BC3B37ADE22C38C156BCC /* FLEXSystemLogViewController.h */, + 17D968CAE39FAB5B30D533DC9903A656 /* FLEXSystemLogViewController.m */, + 26C548294066CD56BCB0F6310BF70B2C /* FLEXTableColumnHeader.h */, + B63BB6CF7E8F7A2D8AEB933715E23007 /* FLEXTableColumnHeader.m */, + 8955D8E969B5B5B7F8641FBF17659951 /* FLEXTableContentViewController.h */, + B43499ECCE09C248382F2F4B182595DB /* FLEXTableContentViewController.m */, + 83AFD62602F74E1FD45D51BD91029581 /* FLEXTableLeftCell.h */, + 86F7FD7AE851E367A3E14DBE048DF3C2 /* FLEXTableLeftCell.m */, + 3938F1160B8DE6C9314C3C1B685893F3 /* FLEXTableListViewController.h */, + 609CE51C6268A8D2179AF6C292B4EFDC /* FLEXTableListViewController.m */, + A275B3FF46072F2429F3833EE622944B /* FLEXTableView.h */, + 39BA6AC1B9F5C778058A0E5ACE45B296 /* FLEXTableView.m */, + DD4385531B6D2667A2491B22562A9784 /* FLEXTableViewCell.h */, + A88D87E7A9C2F3302A6AD3ECA8208B57 /* FLEXTableViewCell.m */, + 599036A694797D985CFFDE1C27E02943 /* FLEXTableViewController.h */, + 96A818790875679DED3E5455903D40B1 /* FLEXTableViewController.m */, + F6B7BC593E9DDE58F93086DBE561F61D /* FLEXTableViewSection.h */, + 76CD28F54BC5446ACC9E710F0D729D3D /* FLEXTableViewSection.m */, + 7C323032424364FE6261FB47CFB82923 /* FLEXTabList.h */, + D8C5DE28D2CA96BCB734FEFD89300D55 /* FLEXTabList.m */, + 168B9D87CB46219393A8BFA526F5D74D /* FLEXTabsViewController.h */, + 9569B08F876C96D4902A0A2D291F6913 /* FLEXTabsViewController.m */, + FE9C3226E64B16B17E66417FD8B76563 /* FLEXTypeEncodingParser.h */, + 3FA4ED1572B99C493A1F0BFD3C2B43B6 /* FLEXTypeEncodingParser.m */, + 4FD8D2160ADAE6BAA12585ED5EDB6A2D /* FLEXUtility.h */, + 14963FE1DC595E61E18507240C0FBFAC /* FLEXUtility.m */, + 0E9CF7D9F1AFCD8EA30AC8D9CAF48EA1 /* FLEXVariableEditorViewController.h */, + 3443AB58C66B6E70BB26822FB7CE4FAF /* FLEXVariableEditorViewController.m */, + 1E0E1DA564C507FACCBB24AA3A5FC48D /* FLEXViewControllerShortcuts.h */, + 46FF193138C49D5DB0E076CE1505F804 /* FLEXViewControllerShortcuts.m */, + 6C00447E9FDF6FF7D506EDB386D38039 /* FLEXViewControllersViewController.h */, + 7E288E222276F39A24902C7C59C07F60 /* FLEXViewControllersViewController.m */, + 2632A8986040CCE8FABD1C03052E55AC /* FLEXViewShortcuts.h */, + 54041772509480637AF21C271544F66F /* FLEXViewShortcuts.m */, + E9DFBBBDCAED23575EDADF065D0C0202 /* FLEXWebViewController.h */, + 9CAD70ECA2E5BF6B2AE975E7A2D762F2 /* FLEXWebViewController.m */, + 85CE0124C69F7A107EB352782D960FE3 /* FLEXWindow.h */, + B78ACB34B187632A9B327A7B5E3E8684 /* FLEXWindow.m */, + 571F10CC7B7D0B873D8E53F6F75515D8 /* FLEXWindowManagerController.h */, + 9907F73C39F11E1AB908FC536359BEFD /* FLEXWindowManagerController.m */, + D88295CE802CA9E503C93F8E9B579F47 /* NSArray+FLEX.h */, + 449615D5013EAB65B4992331CF3E32B6 /* NSArray+FLEX.m */, + 8B9E2AEC04E10AA97FF997ECFF5CD6D4 /* NSDictionary+ObjcRuntime.h */, + 001A5E6A81242FCA8F0C516B96E7A1DE /* NSDictionary+ObjcRuntime.m */, + 961252D99237F9F7FC4BA72D1D71298D /* NSMapTable+FLEX_Subscripting.h */, + CD9B700570B77718178E6266E1334F5A /* NSMapTable+FLEX_Subscripting.m */, + 79A8499704F446C0F3B8D4B4BA47D3B1 /* NSObject+FLEX_Reflection.h */, + DEDC4B4F4CA7DA15E840B68FDD568950 /* NSObject+FLEX_Reflection.m */, + 9AAE8ABF7AFC8CF7FB8E8488ACAF19B7 /* NSString+FLEX.h */, + 6AB4C806742477A12D5E26D4D9E3ED8B /* NSString+FLEX.m */, + 05E468F10B92B1B63F52DF06751B98B6 /* NSString+ObjcRuntime.h */, + 36F031EE19B50E0421C93518C038AD0E /* NSString+ObjcRuntime.m */, + CF4D8039A32331A7BD1B556333E3A32F /* NSTimer+FLEX.h */, + 807216B8F8DC6959E4E4C4E4CAE94408 /* NSTimer+FLEX.m */, + 8F3994C220306F4E686E4584E6FB5D24 /* NSUserDefaults+FLEX.h */, + 84C3CFD8576EEEBA478FB51F6E98ED02 /* NSUserDefaults+FLEX.m */, + 4C478AD3554A06D046E04A46CEDEC8A5 /* SceneKit+Snapshot.h */, + 0A653929D34325CB24AE563E03B62EE0 /* SceneKit+Snapshot.m */, + 0D0E7B0D4C56E5ED645573FC6EEC8963 /* UIBarButtonItem+FLEX.h */, + FCC54FEEB486D2CAC85C5DCF5EF01145 /* UIBarButtonItem+FLEX.m */, + FBEBCE0CEE5A44CC047ECAC92111CDAA /* UIFont+FLEX.h */, + D06F6DB304441E650D6327A91D07F337 /* UIFont+FLEX.m */, + CD92D7BCB8CB60723E64EF8F4E5B0C3D /* UIGestureRecognizer+Blocks.h */, + 632837FE04D04CFD98958CE96EF079C8 /* UIGestureRecognizer+Blocks.m */, + 4276CC02142BF4887AB3E21B19A90FD3 /* UIMenu+FLEX.h */, + 7A9AFF87FA166A02F8140D890A833286 /* UIMenu+FLEX.m */, + 4891EEE1E8889A884B5A72C5B4A5F33F /* UIPasteboard+FLEX.h */, + 569C4CCB9097492210FE9199C7EF6C93 /* UIPasteboard+FLEX.m */, + F8FF64800D93CD9364656616D8D54D8E /* UITextField+Range.h */, + F63B10E0A84172108B8E76B9E7BC4DCA /* UITextField+Range.m */, + EFFACD7D66FD7CACA3101E7E6298A0C3 /* UIView+FLEX_Layout.h */, + 579E31721A8511E7C31D9042C90024C7 /* UIView+FLEX_Layout.m */, + F860F17899650EE122E1F84E038B761C /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/JDStatusBarNotification"; + path = FLEX; sourceTree = ""; }; - D057D5C77F3B901B7D1919EABC00C7AD /* Core */ = { + C8539D7E3EA77FF160D52E7DB2F8A1A1 /* Products */ = { isa = PBXGroup; children = ( - 915524ED8AE27AD507033F12D49D9A1A /* APAddress.h */, - F33D67EF6B170BDA53B25422F50C09D7 /* APAddress.m */, - DC6DC33235B9304584B0E13B483B59F3 /* APAddressBook.h */, - 45612C5692984A9EA245DA0C4C277957 /* APAddressBook.m */, - 16864FF697BB1D4C1C65CD4E0AB8FA0A /* APAddressBookAccessRoutine.h */, - D3A092D6ADC0D9417FC39C22C18EF91C /* APAddressBookAccessRoutine.m */, - 9E49EBB17A0C3A237CECA6560DA151AB /* APAddressBookBaseRoutine.h */, - 46E7F0D4033DD4C42AA9CB9ED2D4CB7B /* APAddressBookBaseRoutine.m */, - 5E5DF4C07D250FD6802A7284992665F6 /* APAddressBookContactsRoutine.h */, - 702AE88D3598C4D9DC218B19BC95BB5F /* APAddressBookContactsRoutine.m */, - 5CB23C6E86FE2C212BF12EBBBA7F7AB4 /* APAddressBookExternalChangeDelegate.h */, - 913EAA1C6C283D66AD341139FBABD766 /* APAddressBookExternalChangeRoutine.h */, - 583460F762B34C8AD0AF96EC5307DCDB /* APAddressBookExternalChangeRoutine.m */, - 856A4FFECB004580D45FE0791BEA5CF5 /* APAddressBookFramework.h */, - 2DAF1E87AC1E90CA9DD6D612C7609936 /* APAddressBookRefWrapper.h */, - 83AA95BC2941502FFC0A2EAE00CC4FC6 /* APAddressBookRefWrapper.m */, - 5C511E890EFE892D27880620A9C9966B /* APContact.h */, - 15DD2CAEC873FC0E7D4F47F3D48C4965 /* APContact.m */, - 1AC5C17C89918AD23E6DCBA1240295EE /* APContactBuilder.h */, - 06ABB95F6029DC0C46C1B610200BB6BE /* APContactBuilder.m */, - 0D5241475DD5BD581301EAE2C1BFBAF6 /* APContactDataExtractor.h */, - BC6C3F47889FA9115242746386A1091A /* APContactDataExtractor.m */, - A3621A64D6B9D9730D71815E64FEE2D6 /* APContactDate.h */, - E588F9E12D8303F9679AE6BAE1658AF2 /* APContactDate.m */, - 5B6AB429233A413611E58B91E5BECA19 /* APContactListBuilder.h */, - 45FAF14D2E912131E973FED9C634CAE6 /* APContactListBuilder.m */, - 807CA6CEB5AFD3D42CC45F2A18637905 /* APEmail.h */, - E72F247C3C2C163098895EF41AAFE6DC /* APEmail.m */, - 744CA891DE97154A3654477FCEB2ACEC /* APImageExtractor.h */, - AA5478CCE3398B2987EF9B66231687BD /* APImageExtractor.m */, - AC307B9265144F18C25D2A4DBC8B4D17 /* APJob.h */, - 188544ECC9957D6CBA663D5B8B7BB7F5 /* APJob.m */, - F48398714A91C3ED9CA556E2343E5233 /* APName.h */, - 6F7E6A675E68B7B6EDAA440D94618922 /* APName.m */, - 806DAFD8F46AF91F1E33FD068B56EBAD /* APPhone.h */, - 3B3A6553DFC76B0444269C2F48E6EAD1 /* APPhone.m */, - 97AE06B5F0F7193311C48374ADAA2139 /* APRecordDate.h */, - 1C8D0B205B1C9918FB90837146671EA1 /* APRecordDate.m */, - 35E8438753DD0555D42FAC474B7E2167 /* APRelatedPerson.h */, - D510E69277CA8AF86E282C760846F6B1 /* APRelatedPerson.m */, - 73B8A9143DE5663AC556A41DA66F6814 /* APSocialProfile.h */, - 4C1C96A5F159D92214662D6F6FA1E7D9 /* APSocialProfile.m */, - 0EAC80306119C91498443D029EB9AB17 /* APSocialServiceHelper.h */, - 847A32348362EEDEEBF7F367F83317BB /* APSocialServiceHelper.m */, - 1F9C7FBA8D5E4325C08BF5CACD218AC0 /* APSource.h */, - 94C6F70EE02FEDB6E7DE16E00CB3F203 /* APSource.m */, - E089AB7E4CC01A8FB4E0268BCBD532E3 /* APThread.h */, - 532FB1B0F98CBFE8AF92AEA33A837B85 /* APThread.m */, - 572667F46D1B9FFAC8F573649B8E9064 /* APTypes.h */, + A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */, + D126097C2C01A62945DAB5FD692100F0 /* AFOAuth2Manager.framework */, + 8EED9ECD939DA773D74243745941896D /* AHKActionSheet.framework */, + 6AB2FCE2F293A7B9D0BAC1972EC2E76B /* APAddressBook.framework */, + 10185372742030059278DBCDC9172623 /* BBBadgeBarButtonItem.framework */, + 4E5A4B3F13E4FBE0F6A8902B4E4E733D /* DAKeyboardControl.framework */, + 552AEC4A0E655977AF81FBBC87E22706 /* DHSmartScreenshot.framework */, + EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText.framework */, + D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation.framework */, + 4AC7180564FE35A293CD0DD977EE56A8 /* FLEX.framework */, + 359F20447DD6B2DABE3B77D75DA92F82 /* FreeStreamer.framework */, + EAF47B8D3BA5B9248FB8BA7EFB248038 /* HMSegmentedControl.framework */, + 8974F428B5D3819A4909FFB30E8F05F9 /* INTULocationManager.framework */, + F9F7F9600F36D94C0CBB424098A5E418 /* IQAudioRecorderController.framework */, + F2F51A76CEBA43C420F8F841CF2645DE /* JDStatusBarNotification.framework */, + BF5B4B34263B35EECDD188E323B121C5 /* JSCoreBom.framework */, + 421ABAD2F376C4185F388A387E2E4655 /* libPhoneNumber_iOS.framework */, + 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */, + 3B447D48947836B83C98269D35855236 /* NSGIF.framework */, + 56453161405ACACAFF278743DCAB2213 /* NSHash.framework */, + 1A83E960361FE36341DE7B3438851568 /* OMGHTTPURLRQ.framework */, + A6413DDA236139B26117C3464491EA58 /* PHFComposeBarView.framework */, + 4A7CCF20E0E659C52C94FD33A3B54E2A /* PHFDelegateChain.framework */, + C8770241032825499CED42AC6C83136F /* Pods_Jasonette.framework */, + 400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */, + D480A2B043DA39A184507E18ABEF3FCC /* REMenu.framework */, + F4E2B1AC73977F10254628C0B7EBE38F /* Resources.bundle */, + 8692149DF8625E0159B298B0B6B79756 /* RMActionController.framework */, + DFA96C5BE21F66333FB92E0B7FA55A92 /* RMDateSelectionViewController.framework */, + DDF6A31DFFDAE17F80A34E666AA79832 /* SBJson.framework */, + 830DC758CE89836B130B50F4DA7A0267 /* SCSiriWaveformView.framework */, + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */, + 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket.framework */, + 1544B54196F3ED808D4C0A9FA781A255 /* SWFrameButton.framework */, + E01A22F240F2104F986828C36985F6A7 /* SWTableViewCell.framework */, + 6CB32DD4D074BCF496D34972EA157DFC /* SZTextView.framework */, + 9A618F7B1D93BB77C54A0E77C64F1380 /* TDOAuth.framework */, + 24906358D4472592AAB45254D975D5E2 /* TTTAttributedLabel.framework */, + 018DA84275AC6E25C9571F2B6E74C5AC /* TWMessageBarManager.framework */, + A0A4D131DB063279AE8AF52001C682FE /* UICKeyChainStore.framework */, ); - name = Core; + name = Products; sourceTree = ""; }; - D1ACD0A01EAD2723191BA33166BAE928 /* AFNetworking */ = { + C9A93BEEB8B02787F772103B3ACE2E35 /* OMGHTTPURLRQ */ = { isa = PBXGroup; children = ( - E1227E688607DC11BCF0DD5D31A25831 /* AFNetworking.h */, - 602212A445021C13EA15FFA3514892CD /* NSURLSession */, - 0C64B01DF7B502DF9EA83F00F8843CA3 /* Reachability */, - CDBCEF7E31A584F635FBAA7B10C9AF72 /* Security */, - 908F172071445F1FE9BDAF5822E90526 /* Serialization */, - 56515FC35F3D60BE7E92492FC075037D /* Support Files */, - 1691FFD437895ADFD035F828E647B087 /* UIKit */, + 7BEF9DD858A1D75878F7B7CCAA897A3A /* FormURLEncode */, + DFADD8EE424FCFAA39DFDC2D530B4638 /* RQ */, + 7E83997419275854EEE787E733EE7053 /* Support Files */, + 45C81DC42754E96B43E0002AD2BBBD99 /* UserAgent */, ); - name = AFNetworking; - path = AFNetworking; + path = OMGHTTPURLRQ; sourceTree = ""; }; - D1E680329A72B29B408DE0D339A9F775 /* iOS */ = { + CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( - 517FFC098D82CB32C96EBED73B000966 /* AddressBook.framework */, - D52B64AA446A5532214698228CC45E14 /* AudioToolbox.framework */, - C9E3F7FEE62CFB351A3E52E56C9DA25E /* AVFoundation.framework */, - 115075BBB42B72D672EA461D5485A9A5 /* CFNetwork.framework */, - 065D146005108A1C0DC95515CFDE4F25 /* CoreAudio.framework */, - 174E91AB978E2552891872563CBB7FF9 /* CoreGraphics.framework */, - 527989518798811C9AF2024CE931F685 /* CoreMotion.framework */, - D523A05600B2E6ED537D193C72A804EF /* CoreTelephony.framework */, - 4AEACBAC7A3F5F8F01F11B98534431D6 /* CoreText.framework */, - D9C98CBEBF4BDBC9F44AAAA91F30C3A0 /* Foundation.framework */, - 6ED61B41BF40279AF0B21C80AABBB9BE /* ImageIO.framework */, - B2544802C99D11AD537FED028E6985A5 /* JavaScriptCore.framework */, - 47E52BFCF60FE2A43DEF74EED2E75961 /* MediaPlayer.framework */, - 97A300E60E1BE23FA53A0B333E910E60 /* MobileCoreServices.framework */, - 93F1E8A4BC6AC4A5C98C6158D7E89E90 /* QuartzCore.framework */, - 13E46C080EE40508B23B845F0EC277BD /* Security.framework */, - 7D1C8E3D8BBD988B5E69A4F8AA69ED1B /* SystemConfiguration.framework */, - 14FEFC190BD55BA130EA9D071816D779 /* UIKit.framework */, - 6AFC5B1169CBD3816237A656BCEADCC0 /* WebKit.framework */, + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 5F05C94A23FBC2BF2703591C73E7B2FE /* Frameworks */, + ABEEBDE4D313B3D6A863A2E9E8E65C1F /* Pods */, + C8539D7E3EA77FF160D52E7DB2F8A1A1 /* Products */, + 07A1F12A9C4C97C2808A2D1FDBFF1D56 /* Targets Support Files */, ); - name = iOS; sourceTree = ""; }; - D1E86A3084D1C62B12820A6F21005D33 /* DTAnimatedGIF */ = { + CFB900F590CF0E7CC3BEBB7B76AC5074 /* Support Files */ = { isa = PBXGroup; children = ( - 260B9952B840263DD13C078E5CEBECCC /* DTAnimatedGIF.h */, - 05359C465F68C5338E5C867CC3EAE382 /* DTAnimatedGIF.m */, + D8937CB963F5AF6E07D137DC9829F020 /* DTFoundation.modulemap */, + 61535A975981FD7519299E7635FB7511 /* DTFoundation-dummy.m */, + 2B14B69FD2E917361C48A995A3D34B8F /* DTFoundation-Info.plist */, + AA2ECB971DE846CCF991C7EDBA7129A2 /* DTFoundation-prefix.pch */, + A8765576F90E80003B46CEA76F7D213D /* DTFoundation-umbrella.h */, + 1BAE50CEB46B9992E15C43727F081F48 /* DTFoundation.debug.xcconfig */, + 000D731D5B3B011041F2455F9FCB2D3A /* DTFoundation.release.xcconfig */, ); - name = DTAnimatedGIF; + name = "Support Files"; + path = "../Target Support Files/DTFoundation"; sourceTree = ""; }; - D4BAA9B1D00026BA4581AB66564A1670 /* Core */ = { + D2832A109AACF2C245D5CF57759B4FB7 /* Support Files */ = { isa = PBXGroup; children = ( + 24B50CC6DD2061343CC89D802D317DE1 /* RMDateSelectionViewController.modulemap */, + B4C4227F50344FD84A072C1E9E5C8143 /* RMDateSelectionViewController-dummy.m */, + C47DA3C4AA565ACDBCEF15825F9D863F /* RMDateSelectionViewController-Info.plist */, + CA50D68D819C329FA24F1E4355DB6F4F /* RMDateSelectionViewController-prefix.pch */, + 9B0E71CCE2474FF2419CB9D5937AFBD4 /* RMDateSelectionViewController-umbrella.h */, + 855E7F6EB9BB43EB04EF1FC9BE3022AA /* RMDateSelectionViewController.debug.xcconfig */, + 6F2F36E99E2947A6A3AE2BCCB62622CA /* RMDateSelectionViewController.release.xcconfig */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/RMDateSelectionViewController"; sourceTree = ""; }; - D834A7AEF900A4301A7F3CBE5A8D1B9B /* Support Files */ = { + D3F27CC65C43612A4A4840EA74CD1822 /* BBBadgeBarButtonItem */ = { isa = PBXGroup; children = ( - BE5635C488956923FF2E7E8062CECB9D /* Info.plist */, - B14ACACDD5831667F5FE54F58567C23E /* TDOAuth.modulemap */, - D4BE391535025401C4C1502442DA2CD2 /* TDOAuth.xcconfig */, - 08AE6AF1A823EB17053B6FEF0874E2F4 /* TDOAuth-dummy.m */, - 7373FE274C304384A42EAE330B218514 /* TDOAuth-prefix.pch */, - E23C960E86B16879515621F8D57DC04C /* TDOAuth-umbrella.h */, + 3EB1E869E3715F6BD0194CAA68523DDE /* BBBadgeBarButtonItem.h */, + E9A73B8BB098AFB3464177001B2C2B15 /* BBBadgeBarButtonItem.m */, + 78528C130D6D57AB4513B13064509E26 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/TDOAuth"; + path = BBBadgeBarButtonItem; sourceTree = ""; }; - D8A8A6DB6F3ADCDE9BAEF37D8B089DE2 /* DTSidePanel */ = { + D5B3276089738734B907CE9519618F54 /* Resources */ = { isa = PBXGroup; children = ( - CEEC502F80BE7F31F27B4EAFE2CE7134 /* DTSidePanelController.h */, - 52787F4F83BC9541911C3E2E8590D7D0 /* DTSidePanelController.m */, - E18A3A5C59950FEDE6D0C97AB90322A8 /* DTSidePanelControllerSegue.h */, - 9F717E709933E16DD86AD13DF92F5866 /* DTSidePanelControllerSegue.m */, - DD6F27F6C42EC3D294F34FF4C240B145 /* DTSidePanelPanGestureRecognizer.h */, - F79E0DEB7BAB2C55298B868FDB629CF9 /* DTSidePanelPanGestureRecognizer.m */, - 9444A5663D3B019C905A02CBAC0CF468 /* UIViewController+DTSidePanelController.h */, - 102F45BF2C1A1C3C3004765A88069067 /* UIViewController+DTSidePanelController.m */, + 0D921514C29D18E23B256FFDAB80C42E /* IQAudioRecorderController.bundle */, ); - name = DTSidePanel; + name = Resources; sourceTree = ""; }; - DC24B16987993B03F2DD28F3C510767B /* Frameworks */ = { + D5D196AAF7A82B365859CBA88A8A6F12 /* PHFComposeBarView */ = { isa = PBXGroup; children = ( - 2E17D802DF88671063BDFB108E30411A /* AFNetworking.framework */, - 4D2E857E6E138F2ACD5F3C5A429F9B60 /* DTFoundation.framework */, - D58675212DCD5E0FFCB2C40E77CCAD75 /* OMGHTTPURLRQ.framework */, - C280293D7C60C67B9DA1D34B74033CCC /* PHFDelegateChain.framework */, - 5838F38ECC23D2621CBB56354FD24DC0 /* Reachability.framework */, - CE392B2BE47C37A60E096276739C263E /* RMActionController.framework */, - C3C4BF6F85C93DA52DB28E687DC918D3 /* SCSiriWaveformView.framework */, - D1E680329A72B29B408DE0D339A9F775 /* iOS */, + 10418C9DCB9E75D7ABB45308D1276E57 /* PHFComposeBarView.h */, + 7BABF22CCB96C51A10E73CB6BDA64696 /* PHFComposeBarView.m */, + D705B22257B9E05D00A4C9D1490E2C10 /* PHFComposeBarView_Button.h */, + D65AA14353D4FE1763A91C03AD639988 /* PHFComposeBarView_Button.m */, + B3E4481204BF758ABB6E82F31A7D031F /* PHFComposeBarView_TextView.h */, + 8A958617A8CD3606C2FF74CF5E029950 /* PHFComposeBarView_TextView.m */, + 09E4F19B1C95B42314E43C826B499348 /* Support Files */, ); - name = Frameworks; + path = PHFComposeBarView; sourceTree = ""; }; - DC379633DEB8A3D62579FEE9DEB6CA96 /* Resources */ = { + D724494F5D8D13309711DB17FA4FEAB1 /* Support Files */ = { isa = PBXGroup; children = ( - 3970410E40B01DFC4D891FC48AA4F1FB /* icon-error.png */, - 428DB70602DCEE373AC9B0C4B608613A /* icon-error@2x.png */, - 602B1D21962A01493E18CE194E4EE632 /* icon-info.png */, - 8ACFAA84211391385F02B0694F51D0D1 /* icon-info@2x.png */, - A93B34936361FC43B900CD1EF0B6BB7F /* icon-success.png */, - 6F0555BE47801F69C39D049800668ECC /* icon-success@2x.png */, + 8318C2B38798E8FE215D9A993123D5EB /* SWTableViewCell.modulemap */, + 3E0F2A45E805D5224959B87DA63BC807 /* SWTableViewCell-dummy.m */, + FC300A407F0077FAE2BB35182EB3D679 /* SWTableViewCell-Info.plist */, + D90E91CA5C76CC036250865835E038D5 /* SWTableViewCell-prefix.pch */, + 7D0DA4068AB54241190934833176A702 /* SWTableViewCell-umbrella.h */, + CE3405355F40ABFFBE76ED58DA6C203A /* SWTableViewCell.debug.xcconfig */, + B8A3ACBB108276AE48D8FAC4E5FB7DEC /* SWTableViewCell.release.xcconfig */, ); - name = Resources; + name = "Support Files"; + path = "../Target Support Files/SWTableViewCell"; sourceTree = ""; }; - DCDC18806663D34D4EA9114E7DF13837 /* Support Files */ = { + D7B57C42F6320C5B7036981728EDCC45 /* Core */ = { isa = PBXGroup; children = ( - 26D3860EF6BB43DFF7BC24A7F355572F /* Info.plist */, - 10D63DF40896F438A90A02642C8A0AA5 /* SCSiriWaveformView.modulemap */, - 35346BACF0AF2C3DC53C066FC3AF5DCA /* SCSiriWaveformView.xcconfig */, - 6A4CC95AA11004A7B335FC00A65326B3 /* SCSiriWaveformView-dummy.m */, - 04A741FFEC176D472148D6FE35C0AC43 /* SCSiriWaveformView-prefix.pch */, - EF51B149022DEB36D940DB02AC616110 /* SCSiriWaveformView-umbrella.h */, + 785402C0F2D579F83ABD828E3E6BB4A8 /* NSData+ImageContentType.h */, + E307B2DC551D0125A97E8B49223258EF /* NSData+ImageContentType.m */, + 99DBF2D6F202193E7472466E4FEA03A5 /* SDImageCache.h */, + 5A8034FF44633272658CFE570D2D0DA0 /* SDImageCache.m */, + FA5D6ED58D7D88F738C03D8F4E364D46 /* SDWebImageCompat.h */, + 3DF68492FF9B3E597DE270004E41B2F5 /* SDWebImageCompat.m */, + 1D71056B575F514F2956546FCE0DA8D0 /* SDWebImageDecoder.h */, + FF39772C4AA081514723EF659C24573B /* SDWebImageDecoder.m */, + A5FCB3C8DDD57B43867FF3DF2FBE2EAE /* SDWebImageDownloader.h */, + B6AE0FFDA61D56E9E1C086AA3F791020 /* SDWebImageDownloader.m */, + 843ACAC657A1FB2457DE27692F7CA24E /* SDWebImageDownloaderOperation.h */, + 8AA1303674161F051805E5C9C852B9B6 /* SDWebImageDownloaderOperation.m */, + FE617195F5A51366B13DAA0541424726 /* SDWebImageManager.h */, + 3453F86AFDC53E9D31CAF1080998A32F /* SDWebImageManager.m */, + BE167669194E9CBE6BFEC4FA2B5BEAEE /* SDWebImageOperation.h */, + F847149D560A471FA9F83D3FA633A1D9 /* SDWebImagePrefetcher.h */, + 5A4EE79FDCDA47638884504C34FEE96E /* SDWebImagePrefetcher.m */, + 09ACC823B9BE596D7C115A38C1B5A02C /* UIButton+WebCache.h */, + 9A89ACA15A9583032D2D1CC9A768F04C /* UIButton+WebCache.m */, + BE2B695FC8C2AAF893FAB20C0E7DC37E /* UIImage+GIF.h */, + 941451FA71507516A655684957AD2FAA /* UIImage+GIF.m */, + 73F8C4CAF28816F1CF6585F8D7ED716E /* UIImage+MultiFormat.h */, + 24D5F5D11DAEBDACB55A77005631642B /* UIImage+MultiFormat.m */, + 1632A73459E0D3A1897AA039EF45207B /* UIImageView+HighlightedWebCache.h */, + FBCFED0871815861403858026DC54117 /* UIImageView+HighlightedWebCache.m */, + AA7336D004B72377475BE5BC6AD5D01D /* UIImageView+WebCache.h */, + 87D5BA284A05EAAD16F15F4353EBEDDA /* UIImageView+WebCache.m */, + 882EDA9A5A8843C5BE04FACEE1A3DCB8 /* UIView+WebCacheOperation.h */, + 4665F85EBD58D6715F7372387D93EA4A /* UIView+WebCacheOperation.m */, ); - name = "Support Files"; - path = "../Target Support Files/SCSiriWaveformView"; + name = Core; sourceTree = ""; }; - E287FE9F7DEBEE42E3751EAF064A3575 /* DTHTMLParser */ = { + D7F349AA9B64B798381D8976D0BD7C7B /* Debug */ = { isa = PBXGroup; children = ( - B3CFF822E6338B291FE5F5E1EB515303 /* DTHTMLParser.h */, - 4BCD92D4F40281CCF9EB7794E9E81BC2 /* DTHTMLParser.m */, + F2CCF24CFB7E83004AD75541CD624C39 /* UIColor+DTDebug.h */, + CEC83ED826113467293C5BD5A18645E5 /* UIColor+DTDebug.m */, + 8439AA86A9A9FFD86A905F99CBECA74E /* UIView+DTDebug.h */, + F6C70948300C5297B93E758FE51EE642 /* UIView+DTDebug.m */, ); - name = DTHTMLParser; + name = Debug; sourceTree = ""; }; - E862A1984D9328BF05DBFCA5C0A1313B /* REMenu */ = { + D85BB19528E00102DE23453B74445A76 /* REMenu */ = { isa = PBXGroup; children = ( - 3B628347782642A43B7EC8DC7274FB68 /* RECommonFunctions.h */, - 45C96A57E757799E5AFBF92D7408FB71 /* RECommonFunctions.m */, - 75C43D77B139BD0A1476E783B083241E /* REMenu.h */, - BCCDB2CF47516B00AE16A679A3C7D5E3 /* REMenu.m */, - 325C81C55277756B8536C427DE3FD36C /* REMenuContainerView.h */, - 99AA0520F9EEF32C7D7824EA794F0E74 /* REMenuContainerView.m */, - 379515B0789358171BB0EB6529D2F884 /* REMenuItem.h */, - 88D49248C0ABD703E32F29DD6E0A2FCA /* REMenuItem.m */, - A9F6B3FB296B2F8F7287718E03AF17B4 /* REMenuItemView.h */, - 9D968F0520B582EC5D1C813033847E0A /* REMenuItemView.m */, - FB7C9E3938A15A3F3FB757DC21C513BB /* Support Files */, + 2685E2593B2C0C31B26BBEB11BFFA80E /* RECommonFunctions.h */, + D4FD35F4EB0C679F851EFA1D6DE349D6 /* RECommonFunctions.m */, + BCDA2D026233177144F2A60861DDAC57 /* REMenu.h */, + 932AD74859FB72D6891FAD278005A963 /* REMenu.m */, + DB113A5E89138A209DC07CB2CDEAAFAC /* REMenuContainerView.h */, + 211119BA1CFADDE3524824CC3E4B6E66 /* REMenuContainerView.m */, + 8011C2E41CD34FBBC24AF4DDDAEC52CB /* REMenuItem.h */, + 3817A3BA79FECFB77F52162917901057 /* REMenuItem.m */, + 1B03E0BB54E18400FD822EDF7183A51E /* REMenuItemView.h */, + 8FC960457455EE88A8BC3710E2722930 /* REMenuItemView.m */, + 38F16DD7B2ADF1D9B3DA50CA7C63AE19 /* Support Files */, ); - name = REMenu; path = REMenu; sourceTree = ""; }; - E868ACF3FC033A01F918F19BF0165B0A /* Support Files */ = { + D95C0C31FE2A5B3638DC1E0CAA207E1D /* MBProgressHUD */ = { isa = PBXGroup; children = ( - 0F0741EE5FE70D3C0C4D17BF56A567FB /* DTCoreText.modulemap */, - DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */, - 3F2391D9C602D54700E7C415883229CD /* DTCoreText-dummy.m */, - A6586AE5B519A64D4E39083D2BD42C83 /* DTCoreText-prefix.pch */, - DC47169B8E30C3FBA11E32D72E524B91 /* DTCoreText-umbrella.h */, - 6DA4F082CFCA6BF5814CAA79BDD60D99 /* Info.plist */, - 92C7086E1753B9AB218FAE82A7A169F4 /* ResourceBundle-Resources-Info.plist */, + E6AFCB09635F358A9BE1A485AC5052BA /* MBProgressHUD.h */, + A4FD80B7B91FE718E3B53328FE2A307B /* MBProgressHUD.m */, + BAA46D106D10C6681EF819772D5136EF /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/DTCoreText"; + path = MBProgressHUD; sourceTree = ""; }; - EF0B1D2ADD57BCDFE80F7DF938B918F7 /* Runtime */ = { + DC8CABA53FB0EB747CE271CE3C8C3A5F /* CYRTextView */ = { isa = PBXGroup; children = ( - 82A04B3E2501CF6823953B111AE3E139 /* DTObjectBlockExecutor.h */, - 5C80D4CF03E04D01733CBEEF0C1591F6 /* DTObjectBlockExecutor.m */, - 8FFC6D4F2D2CBAC16BE71E3E10C1DC00 /* NSObject+DTRuntime.h */, - B4F61D15E542ED555238C2C4A80D81DA /* NSObject+DTRuntime.m */, + 3376202D2FE90FB1F2BC4DA4D58AAEF3 /* Support Files */, ); - name = Runtime; + path = CYRTextView; sourceTree = ""; }; - EFBEBB3C2D2812DDD43E53CF369FE048 /* Pods-Jasonette */ = { + DF6453A05BDD0B6AEBBEDF18DB0D9998 /* UIKit_BlocksAdditions */ = { isa = PBXGroup; children = ( - 25623BF828B34806A7A20A64B28F68C7 /* Info.plist */, - 3E962DD1E00E9DF6803CD9F85D778AF7 /* Pods-Jasonette.modulemap */, - 0FE242884A8CC93736498B7730370094 /* Pods-Jasonette-acknowledgements.markdown */, - 1D69D31E727AFDF524586A03DB652A75 /* Pods-Jasonette-acknowledgements.plist */, - 233E6458275E3A20881BFD42E2B4B0F6 /* Pods-Jasonette-dummy.m */, - 3B7CC660B6EE458F46529272C74D3258 /* Pods-Jasonette-frameworks.sh */, - 910637EF215102EED2433557C2CE2099 /* Pods-Jasonette-resources.sh */, - 9E242014E2E6D63EF5D624576E5EE98F /* Pods-Jasonette-umbrella.h */, - A43658F5311EF31402DCDEAD5F3162E4 /* Pods-Jasonette.debug.xcconfig */, - 3CB738349A50190EC83EB5B47BA08FF4 /* Pods-Jasonette.release.xcconfig */, + A54F7BC2E35257E3F8BE6421D84A6F1D /* DTActionSheet.h */, + 4B9442323A5730012E8EF8380E36E53D /* DTActionSheet.m */, + 2F7C04120E6DE171012711B6A156E4DC /* DTAlertView.h */, + 08ED423900B819A51250183F372AB807 /* DTAlertView.m */, + 5D9B917723F9181146753A6C996B5EFF /* UIView+DTActionHandlers.h */, + 92B7DC3E0A0E5FB544014D30086C4D06 /* UIView+DTActionHandlers.m */, ); - name = "Pods-Jasonette"; - path = "Target Support Files/Pods-Jasonette"; + name = UIKit_BlocksAdditions; sourceTree = ""; }; - F0CD0D889CBDA61D6EB49A8FFC19FA1A /* Support Files */ = { + DFADD8EE424FCFAA39DFDC2D530B4638 /* RQ */ = { isa = PBXGroup; children = ( - 6C12BACEF9761018BB080B4E6EF2312D /* Info.plist */, - 94B59AF90520B0CA79126C5F75700183 /* JSCoreBom.modulemap */, - E1CAA81CDE1525BDE3A7761A2F9C9491 /* JSCoreBom.xcconfig */, - 51F5B37FEF3F26ABF433BCDDED00F2C0 /* JSCoreBom-dummy.m */, - 37F67AC18C0A50A001DB8DF1FD2F91B9 /* JSCoreBom-prefix.pch */, - 8F56FA8A346DA9844A0003F8699216F9 /* JSCoreBom-umbrella.h */, + 64687ED38628C58AF10C4315ADA5CC11 /* OMGHTTPURLRQ.h */, + 0383919C55FC68160DA3769922869ED2 /* OMGHTTPURLRQ.m */, ); - name = "Support Files"; - path = "../Target Support Files/JSCoreBom"; + name = RQ; sourceTree = ""; }; - F2AB44DFCA94719D858C7938E70A7518 /* DHSmartScreenshot */ = { + E83A20CAA4F908B404CC62F5F911CD0B /* FreeStreamer */ = { isa = PBXGroup; children = ( - F0EBFB9C5F0764C3B08C111F746613A6 /* DHSmartScreenshot.h */, - 71576946D651BF1F2729C359EFBF9795 /* UIImage+DHImageAdditions.h */, - F380C5942196896912954385985C3F77 /* UIImage+DHImageAdditions.m */, - D8F4D980D7D3B48CBFFB50BCFFAB3D6B /* UIScrollView+DHSmartScreenshot.h */, - 454EF6585B707490E255BFCBF2EB2FEF /* UIScrollView+DHSmartScreenshot.m */, - BA099A0CF331154C36E45C1A4BE7A5F2 /* UITableView+DHSmartScreenshot.h */, - 91EE515F5C9B4150675C282875C197CE /* UITableView+DHSmartScreenshot.m */, - 1BB4136603998652B2E1B3AAA69F91FA /* UIView+DHSmartScreenshot.h */, - 7C49EF3607155225F4243CE25D561D11 /* UIView+DHSmartScreenshot.m */, - 3F11783E4B9E266FCAB1332880E3838C /* Support Files */, + 6D741473B5276E2C5199F3F8A281FB98 /* audio_queue.cpp */, + 6D1D32997DE2B0BE499D2F9BD4D35892 /* audio_queue.h */, + 3555CCD7C6588FFFBE590CBBF3D45E82 /* audio_stream.cpp */, + FAF6A7F951BC6517C1E3F088FFE9DC86 /* audio_stream.h */, + B11128B58D190F573444835435BDC894 /* caching_stream.cpp */, + 77490B74EE23BE98EC12F73193974B10 /* caching_stream.h */, + E264EAC9DCABD244F56AF168664C1527 /* file_output.cpp */, + B3D29644270870E690E2D1B8A91AE5C6 /* file_output.h */, + 53E2D986BF8E441ABB1BAF261526B321 /* file_stream.cpp */, + 7FD7C50C5B92A61CF6BD72E899F2C857 /* file_stream.h */, + 0492E93A4721430B8E6F88AB47DE2621 /* FSAudioController.h */, + 2D16AC0C01090118BCC6FE5ECE4374E2 /* FSAudioController.m */, + 7F210A9426AAFB0F6227FC96D2FCDD12 /* FSAudioStream.h */, + 8C0D98546863EF620AA6CEED451401EB /* FSAudioStream.mm */, + 59229BA9B048B7CBF7916E4D08EB9CFD /* FSCheckContentTypeRequest.h */, + 769DD709B4E94F46451FDBD4B0E80A6F /* FSCheckContentTypeRequest.m */, + 6EC5CA141313C8513E97A4AB5FA0B7E8 /* FSParsePlaylistRequest.h */, + 52674D49D87A4A486099B8778969C693 /* FSParsePlaylistRequest.m */, + DBF67CDFD49039113FDCF9B15032497C /* FSParseRssPodcastFeedRequest.h */, + 02F99ABE0542ADF79F50D1FBB385A76D /* FSParseRssPodcastFeedRequest.m */, + 0224A571EA0096DD07F25ECA9B561560 /* FSPlaylistItem.h */, + F1949B44672BB047CC6396CC98EFD402 /* FSPlaylistItem.m */, + 235E6E491AB1D5FEE8A3A3D65051C746 /* FSXMLHttpRequest.h */, + 1E53C4A5496F171A411217F14548DAF7 /* FSXMLHttpRequest.m */, + 0B60570A686BF21B1E20C890436385AB /* http_stream.cpp */, + 9A4544755D721FEC38459A9350F61BCC /* http_stream.h */, + A0D8BBFEF4650EE41D10DD5621D609E3 /* id3_parser.cpp */, + 8AE65349500846C2B404B374C73660CC /* id3_parser.h */, + 4660E0042C93AD93C8008AC4539E1643 /* input_stream.cpp */, + 2D91614841CFE21B4EF2E073644E5D5E /* input_stream.h */, + 46C260D1772565B128D6A570E93129B6 /* stream_configuration.cpp */, + 85ADC9628588250129D3A1C4C3D8D86F /* stream_configuration.h */, + B13003A206B16CC9D70DABE35CEF697A /* Support Files */, ); - name = DHSmartScreenshot; - path = DHSmartScreenshot; + path = FreeStreamer; sourceTree = ""; }; - F2B8EC3AF9D3C626CB76418F889CCB4F /* HMSegmentedControl */ = { + EC4F64DC55950418F46277ED2F6B91D4 /* DTProgressHUD */ = { isa = PBXGroup; children = ( - B4AF02FC03754A90C84B3556DFD1DD4B /* HMSegmentedControl.h */, - EDD6D0E720DB22A7E9F65206D29E85B3 /* HMSegmentedControl.m */, - 817065ADE0D22E87409EFA796C10F26F /* Support Files */, + 673F3001FFFABA94578E7CB63D374837 /* DTProgressHUD.h */, + 03F7031AFAC7E614F30512B73052B49B /* DTProgressHUD.m */, + 87ED9DB52EE84B95117513538CA696DD /* DTProgressHUDWindow.h */, + 130E2B4A35E4AC526552481F9214F1EC /* DTProgressHUDWindow.m */, ); - name = HMSegmentedControl; - path = HMSegmentedControl; + name = DTProgressHUD; sourceTree = ""; }; - F41708EC0AAAE8E7CB1445E665837C0D /* Support Files */ = { + EC6F6C1BE064F43689D977D8382C3936 /* Support Files */ = { isa = PBXGroup; children = ( - AAA643667535646FB16197E8F747A4FB /* Info.plist */, - 60C801C344F2192EA53CC6FCC3E088FE /* INTULocationManager.modulemap */, - 54050775A4C3864DEDC51400E3DC21AC /* INTULocationManager.xcconfig */, - 9A61CB8497F2C73DAAD95F71286C02E7 /* INTULocationManager-dummy.m */, - D18F4CF56B0CA93F21BA7320A3B64BF7 /* INTULocationManager-prefix.pch */, - EA44B48484471C13393633699894D5C6 /* INTULocationManager-umbrella.h */, + E609ED80B30B126C38FC9B7284F3021C /* SocketRocket.modulemap */, + C6520E57CB1C03329BCEA4E564BDE618 /* SocketRocket-dummy.m */, + 6759A2D87C558B8636881538962363AE /* SocketRocket-Info.plist */, + DF44A2E0670B3B05037082EA12D2D1B8 /* SocketRocket-prefix.pch */, + 2A26EEBAF27F375595C7F99B3A83E82A /* SocketRocket-umbrella.h */, + 3F8635373AC7F80231B23E0CF3A35012 /* SocketRocket.debug.xcconfig */, + 7279D7887CE25544AC486836129DED02 /* SocketRocket.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/INTULocationManager"; + path = "../Target Support Files/SocketRocket"; sourceTree = ""; }; - F5F02C58DCFEAB572650EDAE434904C5 /* UIKit_BlocksAdditions */ = { + F357D261B19D57CEB1EFB9806493787C /* Support Files */ = { isa = PBXGroup; children = ( - B6684B772F4B7045B83B5DB0B2995988 /* DTActionSheet.h */, - D6C4B0C188C5C060F82390EC545FCF5C /* DTActionSheet.m */, - 3CB7A1646F7357209B59BA685366AE89 /* DTAlertView.h */, - 94B2922AE61453475C06D165B1F3DBCB /* DTAlertView.m */, - 2BCCEA31FF61F4F09EAFAEC08D59F0F6 /* UIView+DTActionHandlers.h */, - C384E0FE74E694B5D2906781823BC3F3 /* UIView+DTActionHandlers.m */, + 800F759376848B2DD2673742844A46B2 /* UICKeyChainStore.modulemap */, + 0CF7459A23E478724B0574C05CF4C1F8 /* UICKeyChainStore-dummy.m */, + 4C7D3D9E1865D30147BD2FE248E6D08B /* UICKeyChainStore-Info.plist */, + 24336780B2CEA5B6AEB4010DBCDA1059 /* UICKeyChainStore-prefix.pch */, + 76C3F02E84C166B698AF212F73CA9108 /* UICKeyChainStore-umbrella.h */, + 0A0B2D28679E26682B7606F5558DDBC7 /* UICKeyChainStore.debug.xcconfig */, + E7ADF6F6F9BD889C27EE61BB769A35CB /* UICKeyChainStore.release.xcconfig */, ); - name = UIKit_BlocksAdditions; + name = "Support Files"; + path = "../Target Support Files/UICKeyChainStore"; sourceTree = ""; }; - F6F80A5D9CBF986D1350696BC2C53364 /* SocketRocket */ = { + F769DC0551D8372F284FB9694C9E677C /* UIKit */ = { isa = PBXGroup; children = ( - 0C81A10593D850F9148DF4B3BE8E3AC6 /* NSRunLoop+SRWebSocket.h */, - 913281EDD50CB49F2817676ED453F6F3 /* NSRunLoop+SRWebSocket.m */, - 6DE5574FC74A9700DC310DE46BED36D5 /* NSRunLoop+SRWebSocketPrivate.h */, - DCBEEF4F0418D7F42999BBB22466AF56 /* NSURLRequest+SRWebSocket.h */, - CCC3956AF9191A743E690910F6A05D63 /* NSURLRequest+SRWebSocket.m */, - 291B5D2F159D6B4EFC6849C6F906AC3E /* NSURLRequest+SRWebSocketPrivate.h */, - 109068B6B98153CB936218AE970F3AC2 /* SocketRocket.h */, - BCB937E2D6DDE33EB2588B0944FB5F13 /* SRConstants.h */, - F1903F7445643C237BACA0221759716F /* SRConstants.m */, - 2FF3A164B8691962676D1E92DAC41FA9 /* SRDelegateController.h */, - 4191DB56EB6B46A9EA0315F7ED025E67 /* SRDelegateController.m */, - FBB4AA8E1B48FD91CAFEFDB3AE824764 /* SRError.h */, - EDC064B30D2CF10587598BA2BEF814BF /* SRError.m */, - 4651E6622F02972A2208C55A578F7EBD /* SRHash.h */, - 7AB5425190F5A1242504B37C019F33E0 /* SRHash.m */, - 003BA59CB298CB042F4A13FF7A237721 /* SRHTTPConnectMessage.h */, - 20E5E38998512AC331B58C80D2D9CE9F /* SRHTTPConnectMessage.m */, - 084F524E1ED3139197019362EAB4C1D2 /* SRIOConsumer.h */, - A5F39E9594A7CE99A33CA30BD4FEBE62 /* SRIOConsumer.m */, - 94E3BD6BE8AAE3B81EB69BC4507AE6C9 /* SRIOConsumerPool.h */, - E9B62597F8B26E074D36DFF0E90B8475 /* SRIOConsumerPool.m */, - F3A3C3B22DC08A6B98DE32B4979B8CAB /* SRLog.h */, - 420B1F416125DD3D626F7C5B59F1A810 /* SRLog.m */, - 9FBD6C699C76EA33C662933E093779F1 /* SRMutex.h */, - 481690244A2714C30237941F162F6B46 /* SRMutex.m */, - 7CB92A1E91F7E4C328D1D52EE11F416C /* SRPinningSecurityPolicy.h */, - 3B5AC69FCBFB547343AB513CE8E3A560 /* SRPinningSecurityPolicy.m */, - 041EB0712265FF6E997059CFC24783EE /* SRProxyConnect.h */, - 170AB94FAB9ABC5C0FCB37F08605445F /* SRProxyConnect.m */, - E13A0BC3AE248ABC44838018DF30D0DB /* SRRandom.h */, - 7F4D86A246FC2AD543ACF2F29BE006D1 /* SRRandom.m */, - 430EFCFF0CB56FDBCE231FF94D931EDF /* SRRunLoopThread.h */, - 8CBCF64ADE3735E2F76A3707959BC527 /* SRRunLoopThread.m */, - 85A3E45D8E389F60BBDA4D1062821ADA /* SRSecurityPolicy.h */, - 49F268639578EBEF77F6C44AD158AEEF /* SRSecurityPolicy.m */, - 92DED794ADD640C5865DD93BF67C5658 /* SRSIMDHelpers.h */, - D51A3820C2A1A2C986D74E3D75B7BF32 /* SRSIMDHelpers.m */, - A3E6B3C19515267AD2EAD5266FCD5381 /* SRURLUtilities.h */, - 3E51C620923F003D185C3A9F2EB26DFF /* SRURLUtilities.m */, - F16DF22B6F07635B7C6F8EC8D01138A9 /* SRWebSocket.h */, - C309B1502E1762DBA62209DF0F664667 /* SRWebSocket.m */, - 8D7A458F73E68E73F269C71E59C2C40A /* Support Files */, + F9D975452C65D8C039F3926AB288F9AC /* DTActivityTitleView.h */, + D975B9F852E7E80A293632787518BB84 /* DTActivityTitleView.m */, + FEF271B1F3FE5EE2C4431CF87816EC42 /* DTCustomColoredAccessory.h */, + FAC8D5E162C7833216D924C71181AA24 /* DTCustomColoredAccessory.m */, + C8C6176141594729919C7035BAED9E55 /* DTPieProgressIndicator.h */, + 60494E31D214884BE2E25A36B5DBFA57 /* DTPieProgressIndicator.m */, + 267AEE253C482CAFCDF60DD2C6CD1D17 /* DTSmartPagingScrollView.h */, + 83AB997E8C7917EB2614452DF78C0CC5 /* DTSmartPagingScrollView.m */, + 79DDD5E8C1DD09D82A9DF75DDFF54A5B /* DTTiledLayerWithoutFade.h */, + 2130C0C12629465B1685F45A2B096DAE /* DTTiledLayerWithoutFade.m */, + E652554A1BCD3A171C6F83E4377351D5 /* NSURL+DTAppLinks.h */, + 8092F8DEDE8D7259F3E227EFF1AF1D52 /* NSURL+DTAppLinks.m */, + 765B0D9FA3D85E15DA37ACE4706D184D /* UIApplication+DTNetworkActivity.h */, + C8F42069BC534A3B5355828D37EC3E05 /* UIApplication+DTNetworkActivity.m */, + EE12C638CC195E9FAFBF7319D5530D03 /* UIImage+DTFoundation.h */, + D2AB27CB0359A5D3920790067959B8DC /* UIImage+DTFoundation.m */, + 54E1EB2C391923D837464ABF04988EE9 /* UIScreen+DTFoundation.h */, + FC99CD3D2BC49F3753B5C026834F526F /* UIScreen+DTFoundation.m */, + D3EE90CC5E943A0359E15E2EDDE3B192 /* UIView+DTFoundation.h */, + DC723AB3B15462F4EE3855AAB24DF3E2 /* UIView+DTFoundation.m */, ); - name = SocketRocket; - path = SocketRocket; + name = UIKit; sourceTree = ""; }; - FB7C9E3938A15A3F3FB757DC21C513BB /* Support Files */ = { + F860F17899650EE122E1F84E038B761C /* Support Files */ = { isa = PBXGroup; children = ( - D521A4BF65F0A591B484F7A2B420CACD /* Info.plist */, - 92D73F779C606BAEDFB61C034775444C /* REMenu.modulemap */, - CCDE845AC1984184025BC117B0AC5846 /* REMenu.xcconfig */, - 18229859DBEE62FF7E1E44AD339E4A57 /* REMenu-dummy.m */, - 4312AC8045A9523BBDA92EA881260CAD /* REMenu-prefix.pch */, - FE7672B07412B8D9F12BACB60E4BD56D /* REMenu-umbrella.h */, + F8DBAD310C4141515B27FC33A3D300E5 /* FLEX.modulemap */, + 9E1E382507D3CCCB95D54E5DF8D42EB5 /* FLEX-dummy.m */, + 0B46C87B131801463C6049D2AE104A4B /* FLEX-Info.plist */, + 5AE24E87AC659C7A0B5E83D6C79A0DF5 /* FLEX-prefix.pch */, + 627522CE23791DEED45E06EBA9C38BF0 /* FLEX-umbrella.h */, + 3907E6A8C3EA21F3F650146CA0682A1B /* FLEX.debug.xcconfig */, + 06C294331D65E40A01B93E0469C0B0DA /* FLEX.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/REMenu"; + path = "../Target Support Files/FLEX"; sourceTree = ""; }; - FBDCEE903C81E7CC0B612C2B31723CEF /* Targets Support Files */ = { + F9E6BDD1D8536E963DFF95BF5CE199B4 /* DTCoreText */ = { isa = PBXGroup; children = ( - EFBEBB3C2D2812DDD43E53CF369FE048 /* Pods-Jasonette */, + A3FA2EFE1F19A8A872F416F45C5094D2 /* CTLineUtils.h */, + 429B5E520B3095C41B3E06090291047F /* CTLineUtils.m */, + 1E2C33131956AE30202E677FCE6AE814 /* DTAccessibilityElement.h */, + 6499664C3D3D12E33AC4BED1910844E6 /* DTAccessibilityElement.m */, + 7E7A902F020DC6E3EAADBB19511D5D4A /* DTAccessibilityViewProxy.h */, + 0B7546516607DE0B06E079B3952BD544 /* DTAccessibilityViewProxy.m */, + EBDCAAD121C64711C2206118E9E92CCE /* DTAnchorHTMLElement.h */, + A200393A74D460711A5D1F8FB5AF3F46 /* DTAnchorHTMLElement.m */, + ECA576B6E438931913D215D503BAC37D /* DTAttributedLabel.h */, + EDA79E6BA489D7D612D652B7F30441D3 /* DTAttributedLabel.m */, + 4AB8B49FDBF934EC716B198E6AAA6BB9 /* DTAttributedTextCell.h */, + 1B294AD709ADB1020073FB1365211838 /* DTAttributedTextCell.m */, + 7E72124CA95803E95A02031BFFF781DE /* DTAttributedTextContentView.h */, + 403163F1F38F2846264AAD66E660C9C9 /* DTAttributedTextContentView.m */, + CBDDAB73759118F9499130F54C284DD7 /* DTAttributedTextView.h */, + 8C8E86F472A46C731FBBFBED592677E2 /* DTAttributedTextView.m */, + 68F20399CE871252621CE4A2CCE51C03 /* DTBreakHTMLElement.h */, + 45F348595522719BD1E383E47A0C5604 /* DTBreakHTMLElement.m */, + D25A2ED5FA01EC26D4D1F79220A38E5E /* DTColor+Compatibility.h */, + 7DD65F487E4BA0E9643D8AA4814D8B07 /* DTColor+Compatibility.m */, + B5806D2004242B9EC2411B0A46C3E3F6 /* DTColorFunctions.h */, + EAB647DBFDCEC0728B523A4275E45A6F /* DTColorFunctions.m */, + 52559B6C4B3032756996053F0E26238B /* DTCompatibility.h */, + 9882C5446AB74F168A6D5C511D0A879D /* DTCoreText.h */, + 575B4523E5FB00B499335E8A25BC72FC /* DTCoreTextConstants.h */, + 4EB16C3F1AE65645C3CEB9AEA94C4B32 /* DTCoreTextConstants.m */, + B9377FE85D82A8D83AFD602D8D028308 /* DTCoreTextFontCollection.h */, + 83B87A4EBBC71500DE2B17E3D980453D /* DTCoreTextFontCollection.m */, + AC3D4E3BBD78BD79F8E4F2D43C33CA84 /* DTCoreTextFontDescriptor.h */, + 78860BC0476204CDC8446FA3D0B34DA2 /* DTCoreTextFontDescriptor.m */, + 6B11D5806DE4E6AF6FFC13B4ECE3103E /* DTCoreTextFunctions.h */, + 920DF64FD43BFD575866505677D0B0E1 /* DTCoreTextFunctions.m */, + D2A1CAFBC36BF8FD0F2BD7DE2B585555 /* DTCoreTextGlyphRun.h */, + 94FB05E3554341D9BDBF80BFFB64CC4C /* DTCoreTextGlyphRun.m */, + 9699B6532774A4B9CB1275AF5E34692E /* DTCoreTextLayouter.h */, + A9A2D17796D4B51F4288C78E33B8A279 /* DTCoreTextLayouter.m */, + 5CD4A3112C3F1CB1EE252D4F46F1144F /* DTCoreTextLayoutFrame.h */, + 409CFAA7242E7D7EF4E88FDDC016DF2D /* DTCoreTextLayoutFrame.m */, + 3C994B08375B24253CAF2AE370ECA1B1 /* DTCoreTextLayoutFrame+Cursor.h */, + 2E004463D2348E81CA8412ED155CD1C0 /* DTCoreTextLayoutFrame+Cursor.m */, + 932B7410227349419CAD850A5D89A241 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h */, + 4FAA8A225379CF79D994C4C188493C25 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m */, + 1510CC098816658931E1F449C860276D /* DTCoreTextLayoutLine.h */, + 23A9E8DAD356225BC100B04F2B3BDAA1 /* DTCoreTextLayoutLine.m */, + 7059BA504D31FC403CD6A19402F3A0B2 /* DTCoreTextMacros.h */, + 81066231C6C2A0ED96B411AEDED60CE2 /* DTCoreTextParagraphStyle.h */, + 50A2E832D49AC6ABC48779A948E03981 /* DTCoreTextParagraphStyle.m */, + 6FE84B862425109C7B5469D0770BE688 /* DTCSSListStyle.h */, + 78DFB91E30B1640D9167171136BC2C35 /* DTCSSListStyle.m */, + C1F55DFC6740059BD39992FD3D909909 /* DTCSSStylesheet.h */, + B6AF341D38A8229D9B10A055EBB3423F /* DTCSSStylesheet.m */, + 864E668F951E85DA3738F4050EDD229C /* DTDictationPlaceholderTextAttachment.h */, + 23C1D4A06CA9AF8A4AEB61BC99745AF5 /* DTDictationPlaceholderTextAttachment.m */, + AB59E684C614382EB2B58E04DBF59EC2 /* DTDictationPlaceholderView.h */, + 7ED063C1BFBE1EF7A4B81F9DAF73DF52 /* DTDictationPlaceholderView.m */, + 8CE7F6CF30BC2F07DDDA58AECA7AEDC6 /* DTHorizontalRuleHTMLElement.h */, + 7FFDC04C7DC935150B0990D2C3636084 /* DTHorizontalRuleHTMLElement.m */, + 985FC9CAF96CDAE1F9C23CF1AD174998 /* DTHTMLAttributedStringBuilder.h */, + B9CF95B2F91AF0B258930EFE55FC81CF /* DTHTMLAttributedStringBuilder.m */, + 65458DA86960B5A9D2B2C703A58CBD07 /* DTHTMLElement.h */, + 6D60A28DEC26AFB133D68AE311068F69 /* DTHTMLElement.m */, + 8E1E9497569A271023757472504DCD0D /* DTHTMLParserNode.h */, + 72AA7139B921F7E8D9FD9579A3361983 /* DTHTMLParserNode.m */, + BD9F61655FA4F4176034E767F96CADF4 /* DTHTMLParserTextNode.h */, + 9655F5F788A842D7761AB1E851E9DA6E /* DTHTMLParserTextNode.m */, + 821274D80BC83D71C7FD8FC9144F0E5E /* DTHTMLWriter.h */, + 35759C9D92E84C363B403586FC9704EA /* DTHTMLWriter.m */, + 3A0F9B6A0ED29DC9C88FD3D6B9670F42 /* DTIframeTextAttachment.h */, + 289A7B06D81476B28215D9864C8EC746 /* DTIframeTextAttachment.m */, + 2100BF68E14CAFACD1792382D2522818 /* DTImage+HTML.h */, + 75768D4780F31C45D87F16EDF232F529 /* DTImage+HTML.m */, + 0148F90B56DA0DB2CBC09353932D79BE /* DTImageTextAttachment.h */, + 1756B08EF6F92497C85E8E7EC68CE200 /* DTImageTextAttachment.m */, + 08397B06C54ACD60EC0DE50BB57220EA /* DTLazyImageView.h */, + 22EB57184BC8FFFAF46FACA5444B3C03 /* DTLazyImageView.m */, + 916CBF3DB084F2C596AC9FFD287E71B1 /* DTLinkButton.h */, + D70C6653EF654D0152245BA342543B14 /* DTLinkButton.m */, + 1AD4AB1F7F8E6E7262462223A5F74FE4 /* DTListItemHTMLElement.h */, + BCC3E2FE64EB5E2A99B3E34B49AF8854 /* DTListItemHTMLElement.m */, + B8CED6E31EC14BA48D8AF4C7BB45C765 /* DTObjectTextAttachment.h */, + 1C99166F47F2585ADEAA26C9D6EB90D6 /* DTObjectTextAttachment.m */, + 4ECE815A8473E061D11E417343DABCE7 /* DTStylesheetHTMLElement.h */, + 3B0731C2ED879E40EC20EE83DD01B6ED /* DTStylesheetHTMLElement.m */, + 2BADEB3D1B61747AF8F217494859A5E1 /* DTTextAttachment.h */, + F465B3BF49EB382226B679320E176B20 /* DTTextAttachment.m */, + 4E4EB0829964D6584B95FAB116C3DEFD /* DTTextAttachmentHTMLElement.h */, + 1ADAF6487E5A6C91D631E1F2EC64BB7C /* DTTextAttachmentHTMLElement.m */, + 559A06E925FD477E0E70603BB825EA7B /* DTTextBlock.h */, + DCE140B7332F3FDA1466ADBBB7D68A65 /* DTTextBlock.m */, + 1C6D26021850C7AD8E85D4AD873AC93D /* DTTextHTMLElement.h */, + 65D1C02901F75FA1FBF61E14E1EBDCA6 /* DTTextHTMLElement.m */, + 424CE5AE0FDC906234D47B797E2569E9 /* DTVideoTextAttachment.h */, + 1C712DC3206415AD7C7818179B9683C6 /* DTVideoTextAttachment.m */, + 60276CB631A2C9D6AAD516BF4FF93B77 /* DTWeakSupport.h */, + 8BD14B2748FE1EB3579FC5C8E93651C1 /* NSAttributedString+DTCoreText.h */, + 9FDCB0BA5C19425ABD16ADB58A7684F2 /* NSAttributedString+DTCoreText.m */, + 14379351A21B3D58F067588050C0426D /* NSAttributedString+DTDebug.h */, + 4E702550999A13D60DFF27AA2FE09791 /* NSAttributedString+DTDebug.m */, + D877C91D516279D1AD44282E048FCF92 /* NSAttributedString+HTML.h */, + DD2DB063F6B94FD197B0E421C03C502C /* NSAttributedString+HTML.m */, + 04B4BEEE207D8BB614B0745D2817986C /* NSAttributedString+SmallCaps.h */, + 6D67C9FF86FF56F6FFF39BFC74B28711 /* NSAttributedString+SmallCaps.m */, + 7B7EEFA24AB3BD964AE31750FA202895 /* NSAttributedStringRunDelegates.h */, + F62AB3FAD072A698373BB287FD2A7CAC /* NSAttributedStringRunDelegates.m */, + 3B2A0507D6601EF2D53E1D698C3DD3C7 /* NSCharacterSet+HTML.h */, + F5DAE44BE68914D25BD324B9360680EA /* NSCharacterSet+HTML.m */, + 714429E4383D1AC166B7A11A2A9C5D7E /* NSCoder+DTCompatibility.h */, + 5707B92A88AB1C2D74D2DD862197DB23 /* NSCoder+DTCompatibility.m */, + C277CFF17E7E1A99F3AE60B375CDFD34 /* NSDictionary+DTCoreText.h */, + C908103F4D9BB7065F7F03A5D4AA71A3 /* NSDictionary+DTCoreText.m */, + 93ABA451D1E6B9B79212546A180AC502 /* NSMutableAttributedString+HTML.h */, + 4230648155956E5BA98C94F3F73B15AF /* NSMutableAttributedString+HTML.m */, + 117310F0305BDA98F0A4B2CD661A2671 /* NSMutableString+HTML.h */, + 0AF0DBFDACA70BA9F4DCC08E290A5970 /* NSMutableString+HTML.m */, + BCE21FAA362DAF601E7F4A5C42321FD2 /* NSNumber+RomanNumerals.h */, + EE619684931D8892641F3BC9DB5B2AAA /* NSNumber+RomanNumerals.m */, + 9500F15401782F0AD7E9D90B1BC3A6A4 /* NSScanner+HTML.h */, + 4F52F2AB1E2C35C1041E2577176330DA /* NSScanner+HTML.m */, + CD37D9C9CF892992D2AB49344EFD4EFB /* NSString+CSS.h */, + 1B78E0D7252C4E48AE420CCC060B9275 /* NSString+CSS.m */, + F277048A6CDC33521D08BB0CFFB02B9A /* NSString+HTML.h */, + 09BA36812A094CE9193A9C550471C031 /* NSString+HTML.m */, + 0BB6A097885ED18A60407D9B12325857 /* NSString+Paragraphs.h */, + AD410AB9E074E04C7B35B20E15894787 /* NSString+Paragraphs.m */, + AAD4BAC7D10DD584A62D1D9AAB216927 /* UIFont+DTCoreText.h */, + 0CEFCAD991BDA5EED078A40B6E24B50F /* UIFont+DTCoreText.m */, + 1C050356986D5E757E52BE088D2D67B1 /* Core */, + 2038DAF1517E03690701A319DBB28A32 /* Resources */, + 3191E85D3D90FF8743EA6C1D4B7DB050 /* Support Files */, ); - name = "Targets Support Files"; + path = DTCoreText; sourceTree = ""; }; - FD4A174D86EEF35A620DAEF21B903633 /* DTScripting */ = { + FAF470A4521010F87E84981D3090EE7A /* Reachability */ = { isa = PBXGroup; children = ( - 104698CD09FFFD99E91D5B4D7F8AA7A4 /* DTScriptExpression.h */, - F624CD6C4AEF6593D05D36F7CEB69C60 /* DTScriptExpression.m */, - 542AED4FFD6305FB32D4BFBEE5D5D426 /* DTScriptVariable.h */, - 7152F6BB0B41547546BFBD92CDE12346 /* DTScriptVariable.m */, - 346CC4AE4C60558B15CA52D474983F16 /* NSScanner+DTScripting.h */, - A6DB893E3A241188C685C0562286077B /* NSScanner+DTScripting.m */, + 8668AA3F5FA5E2A3AF98C2FD5393628A /* AFNetworkReachabilityManager.h */, + DC716084BB995B80B607B16BD725DDFA /* AFNetworkReachabilityManager.m */, ); - name = DTScripting; + name = Reachability; + sourceTree = ""; + }; + FED1CC30BFD717B425FD109BEFA45CC7 /* JSCoreBom */ = { + isa = PBXGroup; + children = ( + 679A02B83DC946E8A8FA306C34384CB5 /* JSCoreBom.h */, + B3B98D573855382F3E67C551A677E2F9 /* JSCoreBom.m */, + 090A3D626951CA260033F4E8BABEEC6F /* ModuleConsole.h */, + A481273DB2AD555C6F3582186B412F00 /* ModuleConsole.m */, + 69F7E31479D510B2F062D4F1539337F9 /* ModuleXMLHttpRequest.h */, + BC29A563B34AC2D874014EB53196569C /* ModuleXMLHttpRequest.m */, + 3A637AAAC913D35BB125B8E65492A70C /* Support Files */, + ); + path = JSCoreBom; + sourceTree = ""; + }; + FF5DCF18C3B83CC5A0BB7164A41737A6 /* RMDateSelectionViewController */ = { + isa = PBXGroup; + children = ( + 5A4A0ECCB02AB8D65E58ECE92D586AB3 /* RMDateSelectionViewController.h */, + 5DF0EFE351D02F3F797FE8ECC021DAC5 /* RMDateSelectionViewController.m */, + D2832A109AACF2C245D5CF57759B4FB7 /* Support Files */, + ); + path = RMDateSelectionViewController; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0153D33A49E1FFE51431128CFB3FF0E5 /* Headers */ = { + 0A10D1DB27DAA8D2CA5A242DD760D567 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2C463F353A6AE3907D489BA60523CDDB /* SBJson-umbrella.h in Headers */, - E6213995CB89CD3D25A1CD6843BC85BF /* SBJson5.h in Headers */, - A8FBF6EFD4CFD5128F892A3C71E0C563 /* SBJson5Parser.h in Headers */, - 20DB0C211E287BCB86BFE5B0BF8D6539 /* SBJson5StreamParser.h in Headers */, - A128CA958EF37665BA34CBD2B66CD306 /* SBJson5StreamParserState.h in Headers */, - FC02DA0C613B29362C2DB5BB93D97DE4 /* SBJson5StreamTokeniser.h in Headers */, - 694615A093913D5CE900FE269A93F983 /* SBJson5StreamWriter.h in Headers */, - 2F2BDF563B6A89D767C94FF2A23229BD /* SBJson5StreamWriterState.h in Headers */, - 2BCCB9192F95C3A81F0F422B2CB8E5A1 /* SBJson5Writer.h in Headers */, + C30A6C92E3781E3AFD8D2B3A8FC306B8 /* libPhoneNumber-iOS-umbrella.h in Headers */, + 3C24517B42E32F313BAB2A05E6A570DD /* NBAsYouTypeFormatter.h in Headers */, + CACAF4F4B67D69E989E1ABD8C562A856 /* NBGeneratedPhoneNumberMetaData.h in Headers */, + E5FA7F22DDD92428053AB02E66A910E0 /* NBMetadataHelper.h in Headers */, + 3F8566379714D5702C1491AF9A14634E /* NBNumberFormat.h in Headers */, + BFEDCED1AAF1F4820161B2D50E6A9839 /* NBPhoneMetaData.h in Headers */, + 14C2B8D8701E70F5A4D9CAD7350C7917 /* NBPhoneNumber.h in Headers */, + 08377DBF55532ED4D626D7E02ACF3B92 /* NBPhoneNumberDefines.h in Headers */, + 8EB2161DF2D8695DA8F3A68ECFAAE749 /* NBPhoneNumberDesc.h in Headers */, + 764FD885D7676402D1522862DC702A53 /* NBPhoneNumberUtil.h in Headers */, + 492CB91D75C4F86887C2D888761C55AD /* NBRegExMatcher.h in Headers */, + 83A99E20918F0D48ADE8805241E737F2 /* NBRegularExpressionCache.h in Headers */, + 36EEE8A65AC14D0B369AF7D1B19CBB78 /* NSArray+NBAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 023678CA8FF639D9982309EA77DE1309 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 9873D2DD1378FCE204AE757458A9D85E /* CTLineUtils.h in Headers */, - 9CF77D37893452A5D3E496698ADF7014 /* DTAccessibilityElement.h in Headers */, - 1E53A0E026A5C4F4EED0907768F631F4 /* DTAccessibilityViewProxy.h in Headers */, - 86983C9A2BBE1942A018FCFDF5B98781 /* DTAnchorHTMLElement.h in Headers */, - 9F1842D39CD8C76E5E72BF0D30520BFF /* DTAttributedLabel.h in Headers */, - 90CF57299354E4318CE55CF4CD61E5BE /* DTAttributedTextCell.h in Headers */, - 548746978592BD700503AFA5090C6A82 /* DTAttributedTextContentView.h in Headers */, - CCDA0F8075DA2F3E6CBDE7990ACE2A77 /* DTAttributedTextView.h in Headers */, - 3FF25176B80122BEB9F0D4754E025CF2 /* DTBreakHTMLElement.h in Headers */, - 9CDC1F904242CF40C2DB1563A5C384DC /* DTColor+Compatibility.h in Headers */, - D881418903629EF8ADFB9B17EAB8BFB4 /* DTColorFunctions.h in Headers */, - 306D2753DA11AD9F1B6999E240887CDE /* DTCompatibility.h in Headers */, - 959C5F3976507A747916FD35B1F5527F /* DTCoreText-umbrella.h in Headers */, - B46E18AE210F0F6D8681CE996834669F /* DTCoreText.h in Headers */, - B6CD325A7E21BEC166A03C28C5C854C3 /* DTCoreTextConstants.h in Headers */, - 3B4BE31EE0C79C0765B1DFDDC4E119B9 /* DTCoreTextFontCollection.h in Headers */, - 37D62958AF375CCB6C0EAC44B01EB4F8 /* DTCoreTextFontDescriptor.h in Headers */, - 8473B3227130CF9F91D8C578F4C7BEFD /* DTCoreTextFunctions.h in Headers */, - 136811330ADF9C568B93557412D61A55 /* DTCoreTextGlyphRun.h in Headers */, - A54610594CB63B288D80DBE856F076BF /* DTCoreTextLayouter.h in Headers */, - A65049BC66A84656F59C7286FD584612 /* DTCoreTextLayoutFrame+Cursor.h in Headers */, - B463F8558B60625F590B5AC500F04438 /* DTCoreTextLayoutFrame.h in Headers */, - 1931B9B8FF0CCCF05F8CA656B528B7C0 /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */, - DB8DE25A53F0F7A0E6AA3BF09735FD07 /* DTCoreTextLayoutLine.h in Headers */, - 053BE1E2E4D25CD836BAEB7A2BFBB66F /* DTCoreTextMacros.h in Headers */, - 971DFB2A6E6C042A673026740F676343 /* DTCoreTextParagraphStyle.h in Headers */, - 96A95BC094B83A1E56B4B6834D16D269 /* DTCSSListStyle.h in Headers */, - 04E965F49ABDC6D3DE5816FDC85AE0AF /* DTCSSStylesheet.h in Headers */, - 2D1B4C371B2B8CB88469CB20EBBFEC38 /* DTDictationPlaceholderTextAttachment.h in Headers */, - C042CDB84C2C238FBE146BAA1BC86896 /* DTDictationPlaceholderView.h in Headers */, - F17071A0932FECA640CAA533D5C16FF9 /* DTHorizontalRuleHTMLElement.h in Headers */, - 801DF30D1B4CBB81D4D4FCB28A4A18D8 /* DTHTMLAttributedStringBuilder.h in Headers */, - 427C329A22A9A65164F93DD1EDD3386F /* DTHTMLElement.h in Headers */, - 338AD91C9FF5F003D6E1B8A75E904948 /* DTHTMLParserNode.h in Headers */, - 9CE4843155E1E26907CE45D734940A74 /* DTHTMLParserTextNode.h in Headers */, - 58B75027E7DC333D0FD9D0DA55912580 /* DTHTMLWriter.h in Headers */, - 369FA1B7AA6EE9B655C8842ECD85395B /* DTIframeTextAttachment.h in Headers */, - CDB8263EAD30C55F299D929837B39DB2 /* DTImage+HTML.h in Headers */, - B3CB11D09B203A01A934DCBDA1042C0F /* DTImageTextAttachment.h in Headers */, - 8BEEC96659CF7509FA22651AAF425171 /* DTLazyImageView.h in Headers */, - 1701F9A970AF7ED6A1FEFF7E86D26695 /* DTLinkButton.h in Headers */, - F869A8974A53A9CCC74E72161D26BD33 /* DTListItemHTMLElement.h in Headers */, - D2AE2C3D31A00C4363042E8181A7DBE7 /* DTObjectTextAttachment.h in Headers */, - 776F06C966F297B9356D9A5FDBA5A49C /* DTStylesheetHTMLElement.h in Headers */, - 1077F96EAEA38003D033B591F2E0D0B9 /* DTTextAttachment.h in Headers */, - 82D790065D26F4498BEAD8739B81AB98 /* DTTextAttachmentHTMLElement.h in Headers */, - D1192DC5379C33550C6B3973EB99B6B2 /* DTTextBlock.h in Headers */, - DC7DB4C1385EF0D65FB8F89FF89EA961 /* DTTextHTMLElement.h in Headers */, - 2060AB5B6C6AB7504F53DF5D0D921841 /* DTVideoTextAttachment.h in Headers */, - 2EAD8412150E5E9BE40A020D63FABBE0 /* DTWeakSupport.h in Headers */, - A827391557BC97E2BC7A26D348F10C30 /* NSAttributedString+DTCoreText.h in Headers */, - 4E9C742E4E56B04EF220237CDEB05141 /* NSAttributedString+DTDebug.h in Headers */, - 0FAF2FE80E641096D5691254CEDE97FA /* NSAttributedString+HTML.h in Headers */, - 1A514CC1E83F0B55BE4AAE466A5D1B05 /* NSAttributedString+SmallCaps.h in Headers */, - 396D13A8AC794D749F9E3FF04E05C51C /* NSAttributedStringRunDelegates.h in Headers */, - 27761256D2EFC72CABE1BEC30B40D90D /* NSCharacterSet+HTML.h in Headers */, - 9B2F4CF74736B6D536DA83BE1ABD2072 /* NSCoder+DTCompatibility.h in Headers */, - 9B34539F3834424C456B4B5591B6AC1C /* NSDictionary+DTCoreText.h in Headers */, - 5736A04C2D5CDE17B18C2A15D08C6168 /* NSMutableAttributedString+HTML.h in Headers */, - B7BD8859B3EA0F00197B53E73979650D /* NSMutableString+HTML.h in Headers */, - 22D3A2135EE98C1AF025FEB648845021 /* NSNumber+RomanNumerals.h in Headers */, - 19FCD2B5541310AE612AF05A45A545A8 /* NSScanner+HTML.h in Headers */, - 44D127AD27E7C8F562416A16CF45F384 /* NSString+CSS.h in Headers */, - 328818A57333E586746514D3A3E69D4D /* NSString+HTML.h in Headers */, - F6E9949E70ECF1F99891420594595BBF /* NSString+Paragraphs.h in Headers */, - 762638EF71214E3F8D6B1D08A112F42F /* UIFont+DTCoreText.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 040CF4C111B1DA6CCEBF03C9E166915D /* Headers */ = { + 0B80A5EB4E8551BE0D020690988B702B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 36C4CB2436064534BE824C38D842CD13 /* DHSmartScreenshot-umbrella.h in Headers */, - AF308A95A55ABAC7AF4FF276E45ACFBF /* DHSmartScreenshot.h in Headers */, - 17863D605E642C334630432912C7CA77 /* UIImage+DHImageAdditions.h in Headers */, - A5ED73519C6324DB3BE69D59746C507B /* UIScrollView+DHSmartScreenshot.h in Headers */, - DA7EA282AC8D855C797D23C21354EED8 /* UITableView+DHSmartScreenshot.h in Headers */, - 0FB3AE64332522DDE85240A9B654ACC6 /* UIView+DHSmartScreenshot.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 06D740DD27FA07CC352FA98F916ABF3C /* Headers */ = { + E5B77AB6C3B3B820F767EC630E08A92E /* CTLineUtils.h in Headers */, + B8708D2F0C3FB9AFA169505616FA07FF /* DTAccessibilityElement.h in Headers */, + 321709A008E18BBD1C3E9F0DEC968C63 /* DTAccessibilityViewProxy.h in Headers */, + B1FA739B98C9F4DF633CE7610D896571 /* DTAnchorHTMLElement.h in Headers */, + 115ED742404147BF10AFF3461D54E19C /* DTAttributedLabel.h in Headers */, + 91D4FACBCBA39A3C00F66299E4BB467F /* DTAttributedTextCell.h in Headers */, + 7BFE7309AD5E973B330F5961F3C26323 /* DTAttributedTextContentView.h in Headers */, + 925F1AA4D9FB85975B30C5EBAC7BA0F0 /* DTAttributedTextView.h in Headers */, + 02E4B19BE7E5EB777DB112D1A73604CD /* DTBreakHTMLElement.h in Headers */, + 7ABEAF5A0D753ECE7F2433045CAE187D /* DTColor+Compatibility.h in Headers */, + B0B9E5118EB497882A0E2B39441AAF09 /* DTColorFunctions.h in Headers */, + 3585A64BA6FA4A4E1F4E4AC95E37F7A7 /* DTCompatibility.h in Headers */, + 5BDD7552E1D8F44B0AED38F35A5AD1F1 /* DTCoreText-umbrella.h in Headers */, + 3DD59DEB5897FC3BC18CB8F77B090DAB /* DTCoreText.h in Headers */, + 2E0CCC62A6BF6E9A6D58E09C124307BE /* DTCoreTextConstants.h in Headers */, + C25710DB8BFE82282837D9C0D2D92E54 /* DTCoreTextFontCollection.h in Headers */, + 79474B9A95573A42FEA91BE149FEFC18 /* DTCoreTextFontDescriptor.h in Headers */, + B5741E729242D9EF486F9FCCA5CB47D3 /* DTCoreTextFunctions.h in Headers */, + 85EF4DF2B2B6DB583C68FFE5BDAE8022 /* DTCoreTextGlyphRun.h in Headers */, + A20A19B9009CB6633AF701DB778EC4C9 /* DTCoreTextLayouter.h in Headers */, + B3FACC6B3AF996A30435E10E53B66ED8 /* DTCoreTextLayoutFrame+Cursor.h in Headers */, + 648BC9339D2A5E552C7ECC90C88BFB49 /* DTCoreTextLayoutFrame.h in Headers */, + 8BA2C6294AE5FF132934A5EA7D8F0B9C /* DTCoreTextLayoutFrameAccessibilityElementGenerator.h in Headers */, + 05A76237699EC0405DAAA68D3F99DDBA /* DTCoreTextLayoutLine.h in Headers */, + B368B784E76C166F58B8E32AE24F13D9 /* DTCoreTextMacros.h in Headers */, + 601BC21DB1C80CB0DFBB5CBA5D0B6E25 /* DTCoreTextParagraphStyle.h in Headers */, + 255F9016C4C76DA28E882E99867629D8 /* DTCSSListStyle.h in Headers */, + B6BDF6B9076C585130A37E17DF216754 /* DTCSSStylesheet.h in Headers */, + D35277188D419BE7950D9F9A800CA771 /* DTDictationPlaceholderTextAttachment.h in Headers */, + 0741033AA348342091E2D1EBE7E47F6C /* DTDictationPlaceholderView.h in Headers */, + 650F425DC11BC890AA81C9A431EF8E05 /* DTHorizontalRuleHTMLElement.h in Headers */, + BA51442A0B60E3277290709E548F64A0 /* DTHTMLAttributedStringBuilder.h in Headers */, + A58A7BE2982A6BB013E192389CE9DF9F /* DTHTMLElement.h in Headers */, + 1862CA6C7DE5E450851EC17AEE0AEBD0 /* DTHTMLParserNode.h in Headers */, + 5936EE1B16CAA1456C500C3F11C65E25 /* DTHTMLParserTextNode.h in Headers */, + ECB09EE1539DE0423068ABAA9CA5FF54 /* DTHTMLWriter.h in Headers */, + 134D67E4FBF0EFC41B7DD994A434D744 /* DTIframeTextAttachment.h in Headers */, + 3B5AC2C0D1A5B365E0183D4973E9A1A0 /* DTImage+HTML.h in Headers */, + B77056ECCC21E61E594DEEB340DA799F /* DTImageTextAttachment.h in Headers */, + 8C82F5C0DB7E25D3A24B1AD96BC4B401 /* DTLazyImageView.h in Headers */, + 9A1496E31E527FFE7320FB34B26CA03E /* DTLinkButton.h in Headers */, + 2FC538A749C957F9AC58B8F618FAB406 /* DTListItemHTMLElement.h in Headers */, + 36086C7EAD2D8ABE0DD7252F99067FAA /* DTObjectTextAttachment.h in Headers */, + B0CCC8FF25829BC2326C9D9D43A7B00F /* DTStylesheetHTMLElement.h in Headers */, + DD7BF526EC9FAEBE63B72790B1C01C8C /* DTTextAttachment.h in Headers */, + 2AB43A88AC85E7E9230B25E6D4099A17 /* DTTextAttachmentHTMLElement.h in Headers */, + F48936F1491C200EC90A8A0479379C7B /* DTTextBlock.h in Headers */, + 3E4D4B457DC1E90EED0E271833C1EA90 /* DTTextHTMLElement.h in Headers */, + E936976B34DD65E1D3253B9D55EF6F86 /* DTVideoTextAttachment.h in Headers */, + A51AD76D59C1D489D419C1BB45B43D30 /* DTWeakSupport.h in Headers */, + 480D096B0E6BE803B5C36646BB027AB5 /* NSAttributedString+DTCoreText.h in Headers */, + 05CD91E156EDBC2300A650AC90322207 /* NSAttributedString+DTDebug.h in Headers */, + 9A4C6ED9E12CE3CC2B1A64BC83D73165 /* NSAttributedString+HTML.h in Headers */, + 407EC75E402863D1153091E8DA164399 /* NSAttributedString+SmallCaps.h in Headers */, + 381EC180148D6E36CC440524A103A776 /* NSAttributedStringRunDelegates.h in Headers */, + 79ABB9D9ECD99B0D7136B42337A74FCB /* NSCharacterSet+HTML.h in Headers */, + 68A869F33983C25C9452A9843B339151 /* NSCoder+DTCompatibility.h in Headers */, + 86561B033C2B47DA116C8AF63325DEFA /* NSDictionary+DTCoreText.h in Headers */, + 8CC72B2A3E066CC24BE00F99F98851AA /* NSMutableAttributedString+HTML.h in Headers */, + C2ACFFD53186F23ECCEFA81EA8B926A1 /* NSMutableString+HTML.h in Headers */, + EA7F5E78340933B524E9E4DC675D7480 /* NSNumber+RomanNumerals.h in Headers */, + 72FBED6192672F4ABCB0B286BCD62493 /* NSScanner+HTML.h in Headers */, + D61A3A78CDF9D196FDBA2653C9A6DD44 /* NSString+CSS.h in Headers */, + C31CF1C534C47B5766B60AA47D141FFB /* NSString+HTML.h in Headers */, + 119E2109B31D6F01E05F51A40BFBB0F9 /* NSString+Paragraphs.h in Headers */, + 3E2A1AAAC47031FCE372A724936166DC /* UIFont+DTCoreText.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 11D76F145B7CD5127F084F34C3F2AB52 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3B040399363102B5B08DB61B5BD48277 /* NSData+NSHash.h in Headers */, - 36C7F2934F3F2846730C8B4D92065FA3 /* NSHash-umbrella.h in Headers */, - F5967BEE3D8D9C56A774658763EC9A47 /* NSString+NSHash.h in Headers */, + C66972F73B855151438A2D4E8D0DF2E7 /* SWFrameButton-umbrella.h in Headers */, + EED3EFFBAB0805F042A0D902A3C89312 /* SWFrameButton.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 090278469DD032C97E1B6E35ED06E04D /* Headers */ = { + 1C7421D55D5167EFF1DE93EDD4630293 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - ED9E7E6E82FBA767753FD7E84F01A129 /* crypt.h in Headers */, - 4C1E912EE49E5CACE721C1EDB653AF69 /* DTActionSheet.h in Headers */, - B0CDDD23867D6F2AB606136BBBC1106A /* DTActivityTitleView.h in Headers */, - 910D2DA2F2D94BBF9B8288FD5C6D88C5 /* DTAlertView.h in Headers */, - 1714D60426785AC85785C2E953A4315A /* DTAnimatedGIF.h in Headers */, - 3D7D9144C56EB8DC311F2A046652C999 /* DTASN1BitString.h in Headers */, - FDCD384B0F69B92A41A737E4C68AA1FE /* DTASN1Parser.h in Headers */, - 489428598F0DB388F2930B497AB4A38E /* DTASN1Serialization.h in Headers */, - 2A04D7F60E2FAD701484F497AFF11DD8 /* DTAsyncFileDeleter.h in Headers */, - BD98046E2FE6E73A209319F9DBE09202 /* DTBase64Coding.h in Headers */, - EAC771655E7523D79B9DA408D5E0A0B0 /* DTBlockFunctions.h in Headers */, - B936DEC14824DF2D61FB06DA426CE711 /* DTCompatibility.h in Headers */, - DC3D12604BB066766B048192CD981042 /* DTCoreGraphicsUtils.h in Headers */, - 77D5A8333FA2951C196CD1AB972E3C8F /* DTCustomColoredAccessory.h in Headers */, - 0CF3B42B7F9A2CF4D571EF1CA60CF198 /* DTExtendedFileAttributes.h in Headers */, - 17B8D2A7A3E9961554615EAC994EF2ED /* DTFolderMonitor.h in Headers */, - A7323FB0C94CDC950A0140C4678F42CE /* DTFoundation-umbrella.h in Headers */, - 732BB22B59C1B73521549F78D4A0FC91 /* DTFoundationConstants.h in Headers */, - 33E6F5332CBFD736BD206F1022F9C5B3 /* DTHTMLParser.h in Headers */, - FF4B0BC961A5B085730A0C462F58253D /* DTLog.h in Headers */, - 210A920635D5C7085E507565A382C5D5 /* DTObjectBlockExecutor.h in Headers */, - F59768F6127B841E4D2892D2B7261993 /* DTPieProgressIndicator.h in Headers */, - 857057F222053133975C165914F84EEB /* DTProgressHUD.h in Headers */, - D40FC8D95F20392FF0615E5A0E99810F /* DTProgressHUDWindow.h in Headers */, - A3A804882E719E39C2EEBBC58AF7B2B3 /* DTReachability.h in Headers */, - 16DDE8CA3C181CFE2B20AA5DA3F477F0 /* DTScriptExpression.h in Headers */, - 3C0794C02FA466E2E0CB5247EF3CA5B7 /* DTScriptVariable.h in Headers */, - 160659DF19BF04BD24BFF1A6D8D3691B /* DTSidePanelController.h in Headers */, - 8F955856DDBDD0698DA3649B3412D1EE /* DTSidePanelControllerSegue.h in Headers */, - F7F85EBB95AC8FD5C892DAF5D32738D8 /* DTSidePanelPanGestureRecognizer.h in Headers */, - 5EC551F61A1FB76F175D4509B14A52DF /* DTSmartPagingScrollView.h in Headers */, - 952AA15E63EBFB4BCBC23076C6162682 /* DTSQLiteDatabase.h in Headers */, - E7EC4C2967984373DB3C77F0292BF248 /* DTSQLiteFunctions.h in Headers */, - 1AB3BDE7BBB57C689EA7D4F7B465834A /* DTTiledLayerWithoutFade.h in Headers */, - BEF1AE60430CCA7D56FFCE44F3232975 /* DTVersion.h in Headers */, - B119E2C7EB6F794CD659558B708B9CF5 /* DTWeakSupport.h in Headers */, - 629DA639FA15B54291BC3B285C800722 /* DTZipArchive.h in Headers */, - 360DD39CF7558DB62B9E4B7B213C5364 /* DTZipArchiveGZip.h in Headers */, - DF382C3967B11399DA441146C67C380C /* DTZipArchiveNode.h in Headers */, - E3AF4FD48BDC9CA4B6397D9CE0E6C06D /* DTZipArchivePKZip.h in Headers */, - 5F455DCEE7BE552A510E65D5C0D5E1E2 /* ioapi.h in Headers */, - D0F9630CE2300C5E353B55F87966786C /* mztools.h in Headers */, - 3AF1FF2507831850C01C0B31E1FD4B13 /* NSArray+DTError.h in Headers */, - 32E93BED915B872D7D868AF15C4869F8 /* NSData+DTCrypto.h in Headers */, - 770FF5C9E53AA502B0909D2B7FB6945A /* NSDictionary+DTError.h in Headers */, - D7DCED7284DDD82054E3E4BA04E2AFFF /* NSFileWrapper+DTCopying.h in Headers */, - 6A01D1DD289ED62296CFD4C70C9A7C6A /* NSMutableArray+DTMoving.h in Headers */, - 06054E134E29344F01A2D2CBDC6090DF /* NSObject+DTRuntime.h in Headers */, - 2FB5465A92D35CD7C86117F479D81CAC /* NSScanner+DTScripting.h in Headers */, - BAC1B08D952EFA015284A8255CE18B56 /* NSString+DTFormatNumbers.h in Headers */, - 901F4D3472CB4E3F324F701B67077827 /* NSString+DTPaths.h in Headers */, - 7B267DA900C8E641EAC2AA8C8E6C1BF2 /* NSString+DTURLEncoding.h in Headers */, - C2009751BF1343F0F5668A7024CA10C1 /* NSString+DTUTI.h in Headers */, - 8CD10B083B4A5C9D531407BF4B122F60 /* NSString+DTUtilities.h in Headers */, - 43F1348D0BF9B73CCBD68F1408A30A9F /* NSURL+DTAppLinks.h in Headers */, - AF783CBEEDC4C1C3F85283378763F50F /* NSURL+DTAWS.h in Headers */, - 00B2732D5F9E362DA88E8E1B975EE41F /* NSURL+DTComparing.h in Headers */, - 76F70F0F014FD00BB4423207160D7E96 /* NSURL+DTUnshorten.h in Headers */, - 59469EC8914459110F5CD507725B8334 /* UIApplication+DTNetworkActivity.h in Headers */, - 1B53A70C644892A1A0C4F0E712790D66 /* UIColor+DTDebug.h in Headers */, - 5BD0E6895D27F2267CED6A8B72936062 /* UIImage+DTFoundation.h in Headers */, - 7E198822A5144A675309D565B191940A /* UIScreen+DTFoundation.h in Headers */, - 4F0A208101F4D4A21E05E409642D69A9 /* UIView+DTActionHandlers.h in Headers */, - 01E892035BDBFA8CB2EF337D5E76DC80 /* UIView+DTDebug.h in Headers */, - 85D6252EC8FA9F98AB10CFB9186753F4 /* UIView+DTFoundation.h in Headers */, - 0B2BA2841D748FC9A6248272FFCD76D0 /* UIViewController+DTSidePanelController.h in Headers */, - 3C822A3361DBD4AFCDDDEB4ED668AE77 /* unzip.h in Headers */, - 73FCDD6A47E2F884AF21BB86C42560CE /* zip.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0BD44572D89416E11E8FE15DB4A01390 /* Headers */ = { + 8687BE1C44982C3EEF6C92539BFF2C03 /* APAddress.h in Headers */, + 1895F7D7CDB0BEB1129B2CE3C1143774 /* APAddressBook-umbrella.h in Headers */, + C5789BF2AEE6433FA8669F8822EBDA05 /* APAddressBook.h in Headers */, + 0A7B779E70C54F7292B534CB3A956C1D /* APAddressBookAccessRoutine.h in Headers */, + 2977BC7AD6187C9D3B59389285D76E1C /* APAddressBookBaseRoutine.h in Headers */, + 8F68049FD2AF69B7476B2CAC0E13D9DA /* APAddressBookContactsRoutine.h in Headers */, + 8FEC3085CB6A9FA834C3C1398D8A0EB5 /* APAddressBookExternalChangeDelegate.h in Headers */, + 20C6D57F8557A496F1605E05F2F8A32C /* APAddressBookExternalChangeRoutine.h in Headers */, + 151B50B1B60FBF65DF912FE434F5B198 /* APAddressBookFramework.h in Headers */, + 921C6FC9D0333B4FEBC90D803B97E539 /* APAddressBookRefWrapper.h in Headers */, + 981F682FD063FDEE84D7257D40D96F6D /* APContact.h in Headers */, + 5894675EB1A4C9FAFA46E84FB2CCF4D9 /* APContactBuilder.h in Headers */, + 730C776225712211192E3A3192938B56 /* APContactDataExtractor.h in Headers */, + 0D6CDBFEDF31F59E63640FAB9C7B50F5 /* APContactDate.h in Headers */, + 2651E020401ED2535F3B26D3C8F4379D /* APContactListBuilder.h in Headers */, + 84AE7616596C1D85B4B2A7EEAAE33C9C /* APEmail.h in Headers */, + D9C916B7CE75DBEDA6083B422071BD31 /* APImageExtractor.h in Headers */, + 98A610023926BC16463CB53861CD8A46 /* APJob.h in Headers */, + 8493AE22EEF0B541B96824079FAB92C7 /* APName.h in Headers */, + D1EA3586C8157FED23161C1CC1E4F6E0 /* APPhone.h in Headers */, + D49B472FA76DDF5582C7636EA189C6EC /* APRecordDate.h in Headers */, + 6F61E4A779C863F682EBB343E22C9A07 /* APRelatedPerson.h in Headers */, + 79496839A133C99B9B36ED921B5DF867 /* APSocialProfile.h in Headers */, + 094FB7129648AEB896FEFB7AA02CC24B /* APSocialServiceHelper.h in Headers */, + 32AE87726C48FEFF82B81536189E5EB6 /* APSource.h in Headers */, + 03CA13757C68BDAD0A9194418D17AF9E /* APThread.h in Headers */, + D15DC1F556BC33C76E0A4EF6C6E05FBE /* APTypes.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1E2699BED3BA8C1420C1511EE7E8F325 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CC2A9CD50FDE8301E20DBAD33497B777 /* INTUHeadingRequest.h in Headers */, - 6E6F3EB86E7EDE66BCEB01821E7FE667 /* INTULocationManager+Internal.h in Headers */, - 6B10D51EFB6B58A6DD7873F9B2923131 /* INTULocationManager-umbrella.h in Headers */, - C8F1FB1ACA07D011B5B9FF2C7869F1E6 /* INTULocationManager.h in Headers */, - 4B6F573736F8A9EC5ED3C6A3EA9E6874 /* INTULocationRequest.h in Headers */, - C373E627B757D4D8CA4C3440151A9523 /* INTULocationRequestDefines.h in Headers */, - F9ADC3EFDAD8C8C349B6ABF9728EC974 /* INTURequestIDGenerator.h in Headers */, + DA4ABA5018CF4B581FF525960A98D11B /* OMGFormURLEncode.h in Headers */, + 5DDDDF6B0BF41DEF1680B024B6973619 /* OMGHTTPURLRQ-umbrella.h in Headers */, + 94B3B2DFE8942F01D95BAF8E295682AE /* OMGHTTPURLRQ.h in Headers */, + 1E6953BE3DAF98EF20715E34C1C095A9 /* OMGUserAgent.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 15B7E05ACE71636410D530D115C2BF6F /* Headers */ = { + 20EE7B3BD0B81612909BD372D5AC7CE6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E7F6E1A8B8000A91DDCCEC5C0D684AA4 /* JSCoreBom-umbrella.h in Headers */, - A5E82D055071E8053F87CC45FA8DCAA8 /* JSCoreBom.h in Headers */, - 0004BCAFC13EB239529B8C8921D761FC /* ModuleConsole.h in Headers */, - 83BAABAC63CEA8C49B68CB515CC66505 /* ModuleXMLHttpRequest.h in Headers */, + 0A9BF1BF0403F96D534C508B62B2C0FF /* AFHTTPRequestSerializer+OAuth2.h in Headers */, + B998F07D5322219FE4ED8D4AF3881BFB /* AFOAuth2Manager-umbrella.h in Headers */, + A1320FC99B347682201C21BCC96AF5D5 /* AFOAuth2Manager.h in Headers */, + E7189B3D3C256108776CDA0F1A28FFE0 /* AFOAuthCredential.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1A658A9665D4E1FB23037881BE56705C /* Headers */ = { + 27BA20A09F45A7BE740A049D4135B725 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4F0062EC56EC726C90BB0070805A408A /* SCSiriWaveformView-umbrella.h in Headers */, - CE0C0F177A70563CF4C24B948F9AF21F /* SCSiriWaveformView.h in Headers */, + B63F5278D90A6B6C35C3535A16C19490 /* audio_queue.h in Headers */, + B057E923400A0AE2B5E3BE3573B22DC5 /* audio_stream.h in Headers */, + EC6F9654B4F0A38FD66C253728D659DD /* caching_stream.h in Headers */, + 1B0C680FADEB84D40C30815E03B13512 /* file_output.h in Headers */, + 5BC4E6E9F707D41FEB503D1E8C67AC0F /* file_stream.h in Headers */, + 51FA5552F63C50F4B43F729941E76B79 /* FreeStreamer-umbrella.h in Headers */, + 8BBCC3CE993D27AB3D549F4AD0BD193A /* FSAudioController.h in Headers */, + 2B87F47F1F02AABF9890C42D673085FF /* FSAudioStream.h in Headers */, + 228CF7088D8A20B592EA3C69927CE474 /* FSCheckContentTypeRequest.h in Headers */, + 2D3DA048DA40C51027ACA79E1021797D /* FSParsePlaylistRequest.h in Headers */, + 56E96F6555019EA66D5562CA08EB79D5 /* FSParseRssPodcastFeedRequest.h in Headers */, + 49AEB12845843CCC4A3D45940D3BCF6E /* FSPlaylistItem.h in Headers */, + AA54B2D379FE9C15F2F21E543A326255 /* FSXMLHttpRequest.h in Headers */, + B941EE45092119E98B294A8857091FBC /* http_stream.h in Headers */, + 5A7FF6CFBEEE1106DA551F65094E57E4 /* id3_parser.h in Headers */, + 454EFC10A7ADA09798F30FDD2242BE0D /* input_stream.h in Headers */, + 84EF5042D6FD290A3C03127FF96B57A0 /* stream_configuration.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 252FF00E33FC87557C75990024FD4126 /* Headers */ = { + 2D3A6B298A9397088FA8E0B2CF7787FE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 66A4FF34D3DECC16C9B2581A794E40DF /* Reachability-umbrella.h in Headers */, - 3C0A98C44F9DACD093EA6979C96F2A63 /* Reachability.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 254CEBFE54B8C89BD0A05788C7BA4466 /* Headers */ = { + 8F8139E903A082543375C5583511211B /* AFAutoPurgingImageCache.h in Headers */, + B61B1319AC1D8CF11DFF57F350FA2029 /* AFCompatibilityMacros.h in Headers */, + 1891BEE40B474A299C264C9BFD0BE9F0 /* AFHTTPSessionManager.h in Headers */, + A6EBC25F73D0A87B5CA4667B39446CFE /* AFImageDownloader.h in Headers */, + CF1EF4B31B4F4328D570FAD76AA2DD79 /* AFNetworkActivityIndicatorManager.h in Headers */, + 1B13EBA651E621FC19565D6F32B7C79A /* AFNetworking-umbrella.h in Headers */, + A25BBCF4E79C6BE696805B52CC19978C /* AFNetworking.h in Headers */, + 948981849E5C49A966E991F8DCF62BBA /* AFNetworkReachabilityManager.h in Headers */, + CFE77FD23B3E6AC0EE62E33AB2C644CB /* AFSecurityPolicy.h in Headers */, + AE46C74D4B034E4BB01F081BA5DBBCDD /* AFURLRequestSerialization.h in Headers */, + 1150104E7B978A0C6B0B59FD42532C35 /* AFURLResponseSerialization.h in Headers */, + 08037116FFBC0C2D422A5F6C8FF73DDB /* AFURLSessionManager.h in Headers */, + 96CC09020B362D7FDBF3E8768B084030 /* UIActivityIndicatorView+AFNetworking.h in Headers */, + EA86854445827F9532DF097A98080DC0 /* UIButton+AFNetworking.h in Headers */, + 44BE7A0D0798F1D9C4C40F28963D0E6F /* UIImage+AFNetworking.h in Headers */, + 77EF88FC00534A355465AC506766C0FC /* UIImageView+AFNetworking.h in Headers */, + 4CB659152FA00EA03711D7CDCB89118E /* UIKit+AFNetworking.h in Headers */, + 868DE5B45567907635A78ECFEE9FA81E /* UIProgressView+AFNetworking.h in Headers */, + FD36973E09C5BAD16137D67E7A3BD3BF /* UIRefreshControl+AFNetworking.h in Headers */, + 5914D44E66907D33EEF3276FEE29BF43 /* WKWebView+AFNetworking.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 30511C47299238817595D346CEEF0AC0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8E4FF1064EA2F7F97CB4FFEBC80D9DA7 /* TTTAttributedLabel-umbrella.h in Headers */, - 1A2225D3E1C1484F9D4363643716EF3B /* TTTAttributedLabel.h in Headers */, + 2F02B8CAB6ECBF3BC2CE223BF16640BD /* ActivityStreamAPI.h in Headers */, + F83FB2FC0D79DEC7E52C20E52D248B80 /* CALayer+FLEX.h in Headers */, + 605496B39473C8D95BACD8BAAC8214D9 /* FHSRangeSlider.h in Headers */, + F06F85C0571AAA884351590943E8712C /* FHSSnapshotNodes.h in Headers */, + 0EF4EDE682299EAAE93048AD8D21D0E0 /* FHSSnapshotView.h in Headers */, + 8E4BA43DE796339CFE0902DE6997A230 /* FHSView.h in Headers */, + F5B1CE4B1F9E1F774238D0B1C262EEB7 /* FHSViewController.h in Headers */, + 543F7021538C273C0AEBCFCC2103D55C /* FHSViewSnapshot.h in Headers */, + FFB0DDC17872B9521389BA52161C2F01 /* FLEX-Categories.h in Headers */, + 1A317E1791272F6F51AD692300460109 /* FLEX-Core.h in Headers */, + B9E2AF404293CE290274190D13FCC239 /* FLEX-ObjectExploring.h in Headers */, + C55050F7014DF5547FEA9745C0BE87F7 /* FLEX-Runtime.h in Headers */, + AA048E6EBE595D761F205266BF196B27 /* FLEX-umbrella.h in Headers */, + F3A4527A0BB8C4ECBF43B21F28A7DB11 /* FLEX.h in Headers */, + 98D3054857A0D19617C78EE2ABB77A6D /* flex_fishhook.h in Headers */, + F9E1F74FD5E5054189224AF11AE5543F /* FLEXAddressExplorerCoordinator.h in Headers */, + 3EA9918BBB9541E08A6AD242B97B6A71 /* FLEXAlert.h in Headers */, + 989830E223FA3A1BDF355AC7DAB460B6 /* FLEXArgumentInputColorView.h in Headers */, + 2D263F15C0192DCD547EC6D506C7F22A /* FLEXArgumentInputDateView.h in Headers */, + 27EEE415AE18DF093E30C119AA9EBFD9 /* FLEXArgumentInputFontsPickerView.h in Headers */, + 6A3BF493EB8E0A62C52763ED5BFE9D97 /* FLEXArgumentInputFontView.h in Headers */, + 1D2386DB1BDA8972788D053F582B8BC3 /* FLEXArgumentInputNotSupportedView.h in Headers */, + 969641CF56F65B42AC045D72E7AB258B /* FLEXArgumentInputNumberView.h in Headers */, + 8D8DC4ECBF22E7A3DA090A0D502A3940 /* FLEXArgumentInputObjectView.h in Headers */, + 9DC1A76968A91F3CE0F8B73915828FC4 /* FLEXArgumentInputStringView.h in Headers */, + 27B4174F54DA10B4B81181E2B75184D2 /* FLEXArgumentInputStructView.h in Headers */, + 669F67786039E292EBEADED66826EA86 /* FLEXArgumentInputSwitchView.h in Headers */, + 3A693B34F1E1EC031941CE111AE06DA0 /* FLEXArgumentInputTextView.h in Headers */, + A5C3B7C3976BEDE0683D590FE729A1ED /* FLEXArgumentInputView.h in Headers */, + 1F8B8A808B7C3284200FDEB8E42EECE8 /* FLEXArgumentInputViewFactory.h in Headers */, + 4AAC5445D1FC8FC02DEDE17BDB7DF4B7 /* FLEXASLLogController.h in Headers */, + BF7E6AD7E83859380607DBDFD2453889 /* FLEXBlockDescription.h in Headers */, + 17961147FB591CDDDFE9954CE1A702F2 /* FLEXBlockShortcuts.h in Headers */, + 535FF372D53FA23B676E27F09D016334 /* FLEXBookmarkManager.h in Headers */, + 7E0F5A7D3F475C2F5A77EFF81BA4CD6D /* FLEXBookmarksViewController.h in Headers */, + 8D0F9500C4248CE55412442BC1B8CEFD /* FLEXBundleShortcuts.h in Headers */, + 8B54EBA9F648476C786340932DB0A7FE /* FLEXCarouselCell.h in Headers */, + 443837F4C9D03F92786D655865B7CFB3 /* FLEXClassBuilder.h in Headers */, + 5BF27B881498FA89F6E9CB9B49D01003 /* FLEXClassShortcuts.h in Headers */, + 92C9E5BF1854D9E2B1E1A6685AE0B93D /* FLEXCodeFontCell.h in Headers */, + D08117880BEC71D18B1E82BC2AD91269 /* FLEXCollectionContentSection.h in Headers */, + 1DA2FEC43CA2CA902FB1F3DA2D9B9D84 /* FLEXColor.h in Headers */, + 6EED2E6055C4576C20C9D298F39543D8 /* FLEXColorPreviewSection.h in Headers */, + 5F8D28B98BA067036F92D63146022565 /* FLEXCookiesViewController.h in Headers */, + 9D7A270582AFD338CB2534FC075C0E66 /* FLEXDatabaseManager.h in Headers */, + 461E1D56EBA79DE8E65AA1A512A33DDD /* FLEXDBQueryRowCell.h in Headers */, + ACCE9D98BB5CD8B5D81B01D1F2550B28 /* FLEXDefaultEditorViewController.h in Headers */, + 80BE364DE4ED6E481E825D7B3B504D0E /* FLEXDefaultsContentSection.h in Headers */, + 82BCE3CF53EC816BC2AD785038C244EB /* FLEXExplorerToolbar.h in Headers */, + 2856126EF666A37B537C85CCEBA00C20 /* FLEXExplorerToolbarItem.h in Headers */, + 03177E4D67DB5B562845F7A01026F10C /* FLEXExplorerViewController.h in Headers */, + 25D560E51691BA2EF21D2ECED726D839 /* FLEXFieldEditorView.h in Headers */, + F31E74B8E946059946152C8808C296E0 /* FLEXFieldEditorViewController.h in Headers */, + A6084D7614259B58B8271161E0DD2AEF /* FLEXFileBrowserController.h in Headers */, + B893DB45B6FD11E4FD5A928FD685784D /* FLEXFileBrowserSearchOperation.h in Headers */, + 95E4273565D931FD395EAE47B02FB8E5 /* FLEXFilteringTableViewController.h in Headers */, + EEF574C9E4458EB16F62C9C959A1CC5E /* FLEXGlobalsEntry.h in Headers */, + A8D01814315F1346BB1DB607A29CF90B /* FLEXGlobalsSection.h in Headers */, + 79AA826E0517E506A2F996F91479585E /* FLEXGlobalsViewController.h in Headers */, + 8B39240E3399A2EA6278EC39B416A18F /* FLEXHeapEnumerator.h in Headers */, + A587CD1A38241C9A102DF72555B993D5 /* FLEXHierarchyTableViewCell.h in Headers */, + 99788CCDD26B028DFEF2E0E5E1757172 /* FLEXHierarchyTableViewController.h in Headers */, + DFFBAD7693AE9B9CC6F5725E98FE9D28 /* FLEXHierarchyViewController.h in Headers */, + 34597DC4FD6102F17A69571F063D8BDF /* FLEXImagePreviewViewController.h in Headers */, + 7FED99FEB283923367B5483E58CBF296 /* FLEXImageShortcuts.h in Headers */, + 43890C788D95FFEE176D85CCEF46173D /* FLEXIvar.h in Headers */, + 5AF99F3812C82FC003E077EE4B9E6AD7 /* FLEXKBToolbarButton.h in Headers */, + A536AB69DFF230FE03034F4EADCBFB2D /* FLEXKeyboardHelpViewController.h in Headers */, + 28238FFEB523B6BA649825ADE042B9FA /* FLEXKeyboardShortcutManager.h in Headers */, + C378D007AC1BA1DB54DE7EC1EAC7638F /* FLEXKeyboardToolbar.h in Headers */, + 3F7607F35279641D15334131D0AB4E16 /* FLEXKeychain.h in Headers */, + DE9DEA9BD889AF7AB0AF62E15D1304F8 /* FLEXKeychainQuery.h in Headers */, + 8EF17C56E8AAF7D12907C2C0145B6342 /* FLEXKeychainViewController.h in Headers */, + 30F4B8F4316C651DA6363226A89A3F4F /* FLEXKeyPathSearchController.h in Headers */, + 805E1DC0152A2A00BA2695DBC7780E41 /* FLEXKeyValueTableViewCell.h in Headers */, + 31FC9FA09A95A047B7704DE064A6EB4A /* FLEXLayerShortcuts.h in Headers */, + FDC64C56B87E357B142FA953197E6C2E /* FLEXLiveObjectsController.h in Headers */, + 7F61B8F1B669C3CC145246244903C38F /* FLEXLogController.h in Headers */, + 421718BB62B9EFAAA6859CF6E507FC37 /* FLEXMacros.h in Headers */, + 759F734F20DB40987619A36A978C33AB /* FLEXManager+Extensibility.h in Headers */, + E69C6066A9C468CDAAEF52321EEEB157 /* FLEXManager+Networking.h in Headers */, + 280228F3120A597523FFE9EFAAB6DE6F /* FLEXManager+Private.h in Headers */, + 611F568D2E60B3D4BDD168EE0950D219 /* FLEXManager.h in Headers */, + 7AA86D6DB4A6AEE64CE80FAE465B8141 /* FLEXMetadataSection.h in Headers */, + 09D4340C5D7840F4B9631A88CF6AD852 /* FLEXMethod.h in Headers */, + 32970820170663C51170282F06510936 /* FLEXMethodBase.h in Headers */, + B375937E13086973A1074AF797F123FC /* FLEXMethodCallingViewController.h in Headers */, + 066344908AF3A36CAAC7F8BE93D4BA27 /* FLEXMirror.h in Headers */, + 4B776F35E19AD54620AAD46A164F3D8B /* FLEXMultiColumnTableView.h in Headers */, + 709F3B506B967EBD51DFE88C7FE96013 /* FLEXMultilineTableViewCell.h in Headers */, + 75BB9D632296D12CD0D5B36D44545F87 /* FLEXMutableListSection.h in Headers */, + 7505779C0EE9F8F114F2598F4339D45E /* FLEXNavigationController.h in Headers */, + 8CC3DF88B4B0DC750EE6F1CE6B1DB494 /* FLEXNetworkCurlLogger.h in Headers */, + 7F0B7DCB4BB6C24E3B06B8E04388E61A /* FLEXNetworkMITMViewController.h in Headers */, + C75275904F22D3EBBDDCBE141424E7AA /* FLEXNetworkObserver.h in Headers */, + 8A4A44D8B480187D48835037771078C4 /* FLEXNetworkRecorder.h in Headers */, + 45F6A5CD594A2D1E4308C93975F3C2D8 /* FLEXNetworkSettingsController.h in Headers */, + 2C8618F3D4CB8F2D6A73AF80C96C9817 /* FLEXNetworkTransaction.h in Headers */, + B2B2542DC588058140ECEB6279D8D505 /* FLEXNetworkTransactionCell.h in Headers */, + 8701430AA9629A7E6CDC2A6AA9BE0AA4 /* FLEXNetworkTransactionDetailController.h in Headers */, + 8150A1C517FB8B2B9A30C09E663F8F4C /* FLEXObjcInternal.h in Headers */, + 0DAFBFCE3072DB3453D12607027AF060 /* FLEXObjcRuntimeViewController.h in Headers */, + 9658798BEF1A1E1FA3BF2D557DCB9150 /* FLEXObjectExplorer.h in Headers */, + FE5BC3C0E3B272621708D531188DF587 /* FLEXObjectExplorerFactory.h in Headers */, + 4B754CC2A4DF6E7D058E05B257094EF9 /* FLEXObjectExplorerViewController.h in Headers */, + 7E3BDD69545F3E5D346446B4A3F23354 /* FLEXObjectInfoSection.h in Headers */, + 1FD6A7D333C6E30E1240478256C2EDE9 /* FLEXObjectListViewController.h in Headers */, + 4CD9E2D661CB0761EA54FD481BBE4E8B /* FLEXObjectRef.h in Headers */, + 38E8417B90294FAC4C08DEA6048AD115 /* FLEXOSLogController.h in Headers */, + 75CBB2893D09A7BDB672FDEAF3562CFD /* FLEXProperty.h in Headers */, + 4D93896078D3A524508828A6BCCF21C5 /* FLEXPropertyAttributes.h in Headers */, + 480A335DB30C28222150A8390D759A15 /* FLEXProtocol.h in Headers */, + 4B001EA7AAC78CB6E68506F72FD73A7E /* FLEXProtocolBuilder.h in Headers */, + 4E4B376D1A52FA8A4EB8636C4BC8BF4D /* FLEXRealmDatabaseManager.h in Headers */, + D06D881B85C1F597BAD0342624B634B7 /* FLEXRealmDefines.h in Headers */, + 6B422C9CB24581B0D870DC6F4F07BA41 /* FLEXResources.h in Headers */, + 5F11D70B708015C54EED43C2BD1D6038 /* FLEXRuntime+Compare.h in Headers */, + C8D04DA52DB94DF80027E76BB6CF1F3E /* FLEXRuntime+UIKitHelpers.h in Headers */, + C754C7A0BD520D137C64E21510FCD460 /* FLEXRuntimeBrowserToolbar.h in Headers */, + A5CBFC54AD5295453DFC6AF6D4D2721C /* FLEXRuntimeClient.h in Headers */, + 1D4A4779A2F5BCFD4C04AF95C50D7BDD /* FLEXRuntimeConstants.h in Headers */, + 82222260D6F57A6707DA1D55BAE2EB89 /* FLEXRuntimeController.h in Headers */, + F18169661CE752147FC049D66C604872 /* FLEXRuntimeExporter.h in Headers */, + 599705652097D30B0BF001A7045A2269 /* FLEXRuntimeKeyPath.h in Headers */, + 779E2225A0BDB68AA643655581A1B0CC /* FLEXRuntimeKeyPathTokenizer.h in Headers */, + F8E3384D17048E56451003B51AA0B593 /* FLEXRuntimeSafety.h in Headers */, + BA3A6DC820EE2A430BF604D4DFDEF38E /* FLEXRuntimeUtility.h in Headers */, + 55A5454DAD9F9BA364D8250099B70EA0 /* FLEXScopeCarousel.h in Headers */, + 3B9DCC7B7CFAA4B16BBB13500E6272B2 /* FLEXSearchToken.h in Headers */, + 7A96B51FEA9FBE9F832C904AD95489B8 /* FLEXShortcut.h in Headers */, + B4D1F0062762F19E59639EFED4CC0F53 /* FLEXShortcutsFactory+Defaults.h in Headers */, + 6C159F7964ECE16EBB10FD01A8BD7E80 /* FLEXShortcutsSection.h in Headers */, + 49B9F93FB25D167DD5791E78E230A6CC /* FLEXSingleRowSection.h in Headers */, + 5F7FF3755D5178DD764F77A2121B18CA /* FLEXSQLiteDatabaseManager.h in Headers */, + 0E40D62D472ABD7610DF48B50C0529F0 /* FLEXSQLResult.h in Headers */, + F96092E6884493A678D3D651DE387C50 /* FLEXSubtitleTableViewCell.h in Headers */, + 80989B989A5068C3A78F3E038B77F82C /* FLEXSystemLogCell.h in Headers */, + D26B237AF45A16D41E4151A72F22A408 /* FLEXSystemLogMessage.h in Headers */, + FB87E00B0C3B4F3405E08C43C4978824 /* FLEXSystemLogViewController.h in Headers */, + 5113345C153493F6620B99945A01324D /* FLEXTableColumnHeader.h in Headers */, + 804FA8D2272AD32448FA067D94DFEE72 /* FLEXTableContentViewController.h in Headers */, + A6954CC41B36DF6CB44290731F7314ED /* FLEXTableLeftCell.h in Headers */, + C190D95F981D0851BC35894C5B01A4D9 /* FLEXTableListViewController.h in Headers */, + 61901C85DC6B9955D757CCCAAC039570 /* FLEXTableView.h in Headers */, + ADA86441E110E90899F5D14FD2DBC290 /* FLEXTableViewCell.h in Headers */, + 89CC6C8129429AED79F1BD7AD22669A1 /* FLEXTableViewController.h in Headers */, + 01EC4055CF15A76B42EAEE6FBDB58DC4 /* FLEXTableViewSection.h in Headers */, + B8E5999D95DD23610112EB5AB233042A /* FLEXTabList.h in Headers */, + 0EC92DD216C19B1771319E121F213D36 /* FLEXTabsViewController.h in Headers */, + AE8592759AB22E3B3EB6386202FE93BA /* FLEXTypeEncodingParser.h in Headers */, + E3C3C3A98B5E881FC08D054C0E5F646A /* FLEXUtility.h in Headers */, + BE9044639E9B2102A5CA6983E30D6413 /* FLEXVariableEditorViewController.h in Headers */, + 312F91C65E30A17DBE1EFDD0AEEF6261 /* FLEXViewControllerShortcuts.h in Headers */, + 6FF845B478A05D81FFCB38A7EFA1B0C3 /* FLEXViewControllersViewController.h in Headers */, + DEE180BCA3A305DBC15BD067BEA17375 /* FLEXViewShortcuts.h in Headers */, + FCC6ECD96AFAB09BDE9516D7677FAC88 /* FLEXWebViewController.h in Headers */, + 687377C61E6C5FDA0EC0DE1E80D0928B /* FLEXWindow.h in Headers */, + C98B7768158567CB1323A9701C307D8E /* FLEXWindowManagerController.h in Headers */, + 57B8B8E5822E44BB22D51AE4F4822383 /* NSArray+FLEX.h in Headers */, + 751642D128D67C113F1DDBA77230949B /* NSDictionary+ObjcRuntime.h in Headers */, + 4F5F9685C7802749A676CDECB561D343 /* NSMapTable+FLEX_Subscripting.h in Headers */, + 9140AFBE4162CA4545CC96C2B5B5B40C /* NSObject+FLEX_Reflection.h in Headers */, + 0B33CD08B7FFDBA702374C35CCBC822E /* NSString+FLEX.h in Headers */, + 26113896D21A8A3D878601A3E5911A33 /* NSString+ObjcRuntime.h in Headers */, + 0F7B3DF3C166FB76FA68ABCFD79EF870 /* NSTimer+FLEX.h in Headers */, + 7BE55214272B402366B073224E601235 /* NSUserDefaults+FLEX.h in Headers */, + DC44935A5039E53398677A31BCFE6C75 /* SceneKit+Snapshot.h in Headers */, + 822A58D4AB73D44729A407ACA2811D20 /* UIBarButtonItem+FLEX.h in Headers */, + 82A5A8EE0222682F9D52FA8879FB487E /* UIFont+FLEX.h in Headers */, + 2A2458B24156FC03ED47BB42309B7105 /* UIGestureRecognizer+Blocks.h in Headers */, + 2956390FAAE7967B68E3A08718FAA9C2 /* UIMenu+FLEX.h in Headers */, + BE43566E47DACA4D09FD11BB2E2D6DC3 /* UIPasteboard+FLEX.h in Headers */, + CF66742EB734594627381107C37F050F /* UITextField+Range.h in Headers */, + 73F0E14D95184849A5A253B5BBC4A53C /* UIView+FLEX_Layout.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3484467E152201526F2DE5C3A9138340 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C4C7AD40C388B18784DDEBB9E7F714DC /* RMDateSelectionViewController-umbrella.h in Headers */, + 24E17C472FB4EA25A9D89747D490EA70 /* RMDateSelectionViewController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 29C02445A331EC795D9F72F181595429 /* Headers */ = { + 381B612C15080C85EE98EC156D812E90 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - AFDDEC39393E72103406890ACB7F61BA /* RECommonFunctions.h in Headers */, - 6652A6CDAD53F028B2CE81F105D4936E /* REMenu-umbrella.h in Headers */, - 75ECE822460E336464232194F67C6211 /* REMenu.h in Headers */, - A75EA5F2FC8EF5D93F27EC3DE560725C /* REMenuContainerView.h in Headers */, - 5813637B5513B13E9CACFC86F39B2AD5 /* REMenuItem.h in Headers */, - 9BB31C87879F810EC3A6EF0DF2892060 /* REMenuItemView.h in Headers */, + 6AC18AB45328FBD2D962015B27D7D62E /* HMSegmentedControl-umbrella.h in Headers */, + A4DC724D30B8774FD4C6228028A0F977 /* HMSegmentedControl.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 331DE9C5BA739C050E8DBE8EB75D13DE /* Headers */ = { + 42F498431F462BDFF78D92E4770E91A2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6319078F3264F68E82F2B45D0DD22B4B /* Pods-Jasonette-umbrella.h in Headers */, + 813B22FB025DA3FC2878BBA30EF79BAF /* SCSiriWaveformView-umbrella.h in Headers */, + 6C42C116AC0D957370CAD69E77727B6C /* SCSiriWaveformView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3F4E66535CD0999395E95FEE41254F43 /* Headers */ = { + 44E9201AD4FC9832E25B1E2CBFAA5052 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4E26E0540087CEF5F06B0D80C71F2F82 /* NSRunLoop+SRWebSocket.h in Headers */, - CC950580D3293705C12FEF7E61A29221 /* NSRunLoop+SRWebSocketPrivate.h in Headers */, - 7AE0429093577576281C07E1C2DB0089 /* NSURLRequest+SRWebSocket.h in Headers */, - 7E8C16C945605425234EE885551C7E63 /* NSURLRequest+SRWebSocketPrivate.h in Headers */, - DE261A7B3FCED71790AEA0E59125DCAD /* SocketRocket-umbrella.h in Headers */, - E15E8E860A6F115165C2F34A46BECF3E /* SocketRocket.h in Headers */, - D57BB33B8BCE7B14431B3EC8E3AB1DD7 /* SRConstants.h in Headers */, - 3D045BD89E82B448A7AEDF5AB93E73E8 /* SRDelegateController.h in Headers */, - 5CB64754B9119671E914A749438C3F5E /* SRError.h in Headers */, - EC0E22315B4050D6CCA797EB59328DD3 /* SRHash.h in Headers */, - ED7B800B4F6785529C0ADA97603AE52C /* SRHTTPConnectMessage.h in Headers */, - 9F8539D60C8665C2BC5CF488ECA2B254 /* SRIOConsumer.h in Headers */, - 25A0F73556CFE43F25A4C3A036A413BE /* SRIOConsumerPool.h in Headers */, - AE630626FD92006227F6965DE26FBDFB /* SRLog.h in Headers */, - A87AA78865496161830021EC8B99D8CE /* SRMutex.h in Headers */, - 66E9CD04EAA7D3DD9B14AF24496A3ECA /* SRPinningSecurityPolicy.h in Headers */, - 5DE977A737422B8F2569917F20F3B442 /* SRProxyConnect.h in Headers */, - 248796C4C5C4E0BBFB0C8A1B4FCCA2EE /* SRRandom.h in Headers */, - 0A374284FEF0EC1FD75E0C0C850D1F7F /* SRRunLoopThread.h in Headers */, - 84144906BDF4B496229626D76E6B1772 /* SRSecurityPolicy.h in Headers */, - D4D345B1CEB24A6610FDA3FF46B6FF24 /* SRSIMDHelpers.h in Headers */, - 4995B349A14B73260A87A1ABA290DC25 /* SRURLUtilities.h in Headers */, - A9C7EC784735B75FAD76A12C8459D7B2 /* SRWebSocket.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BC6FB0555E0C04C04523F4AAD78D079 /* Headers */ = { + 59634F95A06BFE138CCD6976B9F5CCCD /* Pods-Jasonette-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 45F46E7A7DDC340F8E5419779C99EBCF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 13BC361C00F71A38EAD9FB8895005D22 /* BBBadgeBarButtonItem-umbrella.h in Headers */, - 8EAF9107F23780E662B89CA04E1F055A /* BBBadgeBarButtonItem.h in Headers */, + 76322126B45649F04213077E6282B44F /* AHKActionSheet-umbrella.h in Headers */, + 9EE96E3DA60AE21305639C0884011052 /* AHKActionSheet.h in Headers */, + 025C2EAC07651B039613AC3F72D03E44 /* AHKActionSheetViewController.h in Headers */, + 53B53C67CB9CC5962ADD81BFBFDC7E87 /* UIImage+AHKAdditions.h in Headers */, + 5E917CC1306CDA4B5866ECCF61D9584C /* UIWindow+AHKAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5CE17C32A4504B751C3375AA3458D828 /* Headers */ = { + 497903E2829E9037047A942E7CFFA12D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C31470E92B1A691AC3D3D55A127DCBF0 /* MBProgressHUD-umbrella.h in Headers */, - D966EB561A0A6A10BAF414F0B952E95E /* MBProgressHUD.h in Headers */, + 64F4FC439CFD4D937994BCF7B964AC1D /* PHFComposeBarView-umbrella.h in Headers */, + EAFAC1649BA898C0D7077BF37BC5427E /* PHFComposeBarView.h in Headers */, + 47E9F6C4991CCAC64AC1FAEE61E5BF9C /* PHFComposeBarView_Button.h in Headers */, + 6DF721A470ED67A5EC3294E8F733C510 /* PHFComposeBarView_TextView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 69419FBDF8E90792E8BE207A8EA280F6 /* Headers */ = { + 49DD9354F69CB31AC8621E03553C14E1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C0F2064C9849D74973731B045C67EA92 /* SZTextView-umbrella.h in Headers */, - 87C4E3D9D920604FFE30F18FBD6ACB0C /* SZTextView.h in Headers */, + 2B1882D305F355C882158F91A5978C81 /* TTTAttributedLabel-umbrella.h in Headers */, + 8C8A0FF45122507799EB62E999023B1E /* TTTAttributedLabel.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 71FD3F8F57E3F51051DE66D12475C19B /* Headers */ = { + 4A8A4DA98D2A555958C6E154384931D7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 55E097B2AE3A88C04AC94CDF0CFF35D3 /* APAddress.h in Headers */, - F8B4CE094E560811327C68076EF8C35B /* APAddressBook-umbrella.h in Headers */, - C14C1DC873AEB6978F575758BB33C0F1 /* APAddressBook.h in Headers */, - 96D040FA9DCCC6563C02707DE853249D /* APAddressBookAccessRoutine.h in Headers */, - 4ABA83E4662FA47E2503CD1B5330BD32 /* APAddressBookBaseRoutine.h in Headers */, - 0E194D44F3F6BE17E648CB132C6E7526 /* APAddressBookContactsRoutine.h in Headers */, - 692C88F39ED74CDA934730325336AE3A /* APAddressBookExternalChangeDelegate.h in Headers */, - 0131DCB7E7E91F44F8389EF55E92311E /* APAddressBookExternalChangeRoutine.h in Headers */, - 1BC6AC35E5DC758E292C23949CBB4D23 /* APAddressBookFramework.h in Headers */, - A57EF2ACE5519D0065009C97BC0BAC75 /* APAddressBookRefWrapper.h in Headers */, - 5D3A05355F2221C626208B0DE09DA5EF /* APContact.h in Headers */, - 11FE9E60A4FBCE7BE6DBD707EC227B88 /* APContactBuilder.h in Headers */, - FE15B03D20458BCCE6A218E57DF4CCA0 /* APContactDataExtractor.h in Headers */, - 780B3D45A8ED0C9806AE372537D20670 /* APContactDate.h in Headers */, - 1258F3CA2E0985146E2DD1723AB694ED /* APContactListBuilder.h in Headers */, - AB91D9A58904A0A933355F6C21A3E34E /* APEmail.h in Headers */, - 8FF1A719A3A4001C664290FDE030A83E /* APImageExtractor.h in Headers */, - 2E252205D97FDE66485C977AE3344B7E /* APJob.h in Headers */, - 361C3E607EC6059438467EA8E7043F27 /* APName.h in Headers */, - EC2148EDAF745070337B1F16EB204251 /* APPhone.h in Headers */, - 9F3EB75DE84111CCE5FCEB9132E0A06A /* APRecordDate.h in Headers */, - C045B5F701DD530E0A4697EA239F1F3F /* APRelatedPerson.h in Headers */, - 9508D87F223F2C0A8B2CC85475AB70F6 /* APSocialProfile.h in Headers */, - 231AAB96D02E87508D7D4819CC7DDE60 /* APSocialServiceHelper.h in Headers */, - 4D471FC962EEAE129F349F950A631716 /* APSource.h in Headers */, - 371C1F9C10976BF107BE67B580044EB5 /* APThread.h in Headers */, - 76E61ABC889B8FE95DBC54DB338C7839 /* APTypes.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 892520B03394FB22B627DCDE2FD3D383 /* Headers */ = { + 8F2452B75F0FFA6BFAC7C382F8810A0A /* INTUHeadingRequest.h in Headers */, + 2B0A7BAD406CD1CFE67D3F3324669220 /* INTULocationManager+Internal.h in Headers */, + 79784551B995FBE11CFA12456FA773A6 /* INTULocationManager-umbrella.h in Headers */, + 2078C6854ABEE20BA757DF50B1071AE4 /* INTULocationManager.h in Headers */, + A07272558B47BB1C7CAAD5443507FA6F /* INTULocationRequest.h in Headers */, + 0C03CB7754294040A6C63A23FC191956 /* INTULocationRequestDefines.h in Headers */, + 9B516856D0867D1714B359ACEF3A77AC /* INTURequestIDGenerator.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5387EFB3CA9F0137D71542D441F55657 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1D7460220F0AAF028F2A6478EAA16361 /* JDStatusBarLayoutMarginHelper.h in Headers */, - 32D8493EC4516AB8A3CC4655F24C9F80 /* JDStatusBarNotification-umbrella.h in Headers */, - D0C699A3C41E5C90051423E54691319B /* JDStatusBarNotification.h in Headers */, - 2010476133A7C4E56D4CD7F1B89C8B7A /* JDStatusBarStyle.h in Headers */, - 7DE126299E92ACC1FA583F3EE2208DB0 /* JDStatusBarView.h in Headers */, + 7BDD8806C36736DEEF5659D3B832A0AF /* TWMessageBarManager-umbrella.h in Headers */, + D6CF9453A4CA9AA54B373A1AE955FF77 /* TWMessageBarManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8BBF558AF0BD205EB4FF904048466815 /* Headers */ = { + 739549140641031961B232FC613CAB65 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E2AFFB0A0BDD667A58AE3CD3B89E6FB9 /* ActivityStreamAPI.h in Headers */, - FF10B7E3A618E5FB871004EC1EB699F6 /* FLEX-umbrella.h in Headers */, - 2FE5C55DDAC2EABB4A695ADAED1C1A83 /* FLEX.h in Headers */, - AE5EF577BF54B821784015EB461E6F49 /* FLEXAddressExplorerCoordinator.h in Headers */, - 0F89766B20465150ADA8515E35E0520C /* FLEXAlert.h in Headers */, - A53BE744108147602C20A90A37B9F4C0 /* FLEXArgumentInputColorView.h in Headers */, - A342CDF46C75895E69ACEDA994C990B3 /* FLEXArgumentInputDateView.h in Headers */, - E5C4E4A99123C45751594FF65DB0A61B /* FLEXArgumentInputFontsPickerView.h in Headers */, - 44A614A6B1A9664B3B56504A15DE5921 /* FLEXArgumentInputFontView.h in Headers */, - 2F054609558D09D771452E58B6B1DA1E /* FLEXArgumentInputNotSupportedView.h in Headers */, - 653381DAB18E16F82D2BC1862578F27B /* FLEXArgumentInputNumberView.h in Headers */, - 656CF283B638F05B1A0CAA28CB4156BA /* FLEXArgumentInputObjectView.h in Headers */, - 1A06E6EFD43C981D153673317969AD5A /* FLEXArgumentInputStringView.h in Headers */, - 274414CDCB32C2D69B596060D88746EF /* FLEXArgumentInputStructView.h in Headers */, - CBFC141E3019C72FF6823D37E6DC28BA /* FLEXArgumentInputSwitchView.h in Headers */, - 869518C26CD1031AF54986FD4F6E0BD7 /* FLEXArgumentInputTextView.h in Headers */, - B36893679AD12A4B47DAE2BD484852D9 /* FLEXArgumentInputView.h in Headers */, - FA9A917224DF77EDB0BA879C933D5802 /* FLEXArgumentInputViewFactory.h in Headers */, - 076573C7BF8B1603B233AB1667B249B7 /* FLEXArrayExplorerViewController.h in Headers */, - 66FFEDC2AF89FF98C919F757A0B8AE3B /* FLEXASLLogController.h in Headers */, - 78A88C1369ECD0F780E4A6FE8365B419 /* FLEXBundleExplorerViewController.h in Headers */, - 74C4B197BEF1814D9FFB95152B853D48 /* FLEXCarouselCell.h in Headers */, - 6174762A65EAD81C2C0179A45937F0BF /* FLEXClassesTableViewController.h in Headers */, - D4BC16AC6DAB9217C481D96F1F128F32 /* FLEXClassExplorerViewController.h in Headers */, - D77B03FF0E6913A87C4F655E66980A38 /* FLEXClassTreeViewController.h in Headers */, - A4AAD0AE5D0322750CB17EFAA758AC57 /* FLEXColor.h in Headers */, - 4F6F91045B52F24C0B14775B2E50E015 /* FLEXColorExplorerViewController.h in Headers */, - F811B3FAEFDCCB9ACA25B4012E5D8043 /* FLEXCookiesTableViewController.h in Headers */, - C295272E5177147CF028545D59A6B236 /* FLEXDatabaseManager.h in Headers */, - 35F716F5DD1ABF45B540BDC274C7F4ED /* FLEXDefaultEditorViewController.h in Headers */, - 536EB103EC9496B19A66DC0413C0407C /* FLEXDefaultsExplorerViewController.h in Headers */, - DD19691B6961A3281B49A66C5A1975BA /* FLEXDictionaryExplorerViewController.h in Headers */, - BBD5457006B78633A386E833236A479A /* FLEXExplorerToolbar.h in Headers */, - 456916F5B529400EE319B1DCAF48D997 /* FLEXExplorerViewController.h in Headers */, - 62B42403D5E208276D8E98461D59042F /* FLEXFieldEditorView.h in Headers */, - 7E8CCCCC8EB4C80659770088EB905993 /* FLEXFieldEditorViewController.h in Headers */, - 0AD6A3684BFF0D97B2A02139C981AFCE /* FLEXFileBrowserSearchOperation.h in Headers */, - 464FC7F3E0E223BD886427BAE06CFC9F /* FLEXFileBrowserTableViewController.h in Headers */, - 1A1B6E34A01BB04D289907FEFAF6499C /* FLEXGlobalsEntry.h in Headers */, - 29C5CF88EA5EF571F8C5B507DB89B2A0 /* FLEXGlobalsTableViewController.h in Headers */, - CBB2EC4037C3A4D232DEBCC2E98DC5C9 /* FLEXHeapEnumerator.h in Headers */, - AFB1E657D7083F3A1B5012805E1FDA44 /* FLEXHierarchyTableViewCell.h in Headers */, - 3FA167BBDFD4A9880F9367AA35892681 /* FLEXHierarchyTableViewController.h in Headers */, - 262E587C3EED9DE9BA9FA04E0ED26D09 /* FLEXImageExplorerViewController.h in Headers */, - CAADEEC5A115F4F6B433AA01E5149095 /* FLEXImagePreviewViewController.h in Headers */, - FBD9D37D20D64917D162778C172F521A /* FLEXInstancesTableViewController.h in Headers */, - E03398A0B705C950C31F4AE37F635812 /* FLEXIvarEditorViewController.h in Headers */, - 73C7220A13FA0688E24357B54BE6901E /* FLEXKeyboardHelpViewController.h in Headers */, - 1C5CDA053752D34A3011304D4969AC4A /* FLEXKeyboardShortcutManager.h in Headers */, - 59E8530AC69AF2C93DC42C06F87ABBF7 /* FLEXKeychain.h in Headers */, - 61DBC6D80B43CC008487BBF19F382219 /* FLEXKeychainQuery.h in Headers */, - 9B2321579CEC28120E81A4ED1CDEA31B /* FLEXKeychainTableViewController.h in Headers */, - E1AF4E85E8311F3F2951DD9A0A7CEC83 /* FLEXLayerExplorerViewController.h in Headers */, - A77E727C45AD9AFFB33DA47E67663F2F /* FLEXLibrariesTableViewController.h in Headers */, - B8B9D4D24D6E94D71D25DA96F410B9EC /* FLEXLiveObjectsTableViewController.h in Headers */, - 80ECDDF05B73528807EDC57512F3B611 /* FLEXLogController.h in Headers */, - 373A15983054E47A8A7EB4E4D356F4A2 /* FLEXManager+Private.h in Headers */, - 00C76DFF0F35680AE08410B1C1C116E4 /* FLEXManager.h in Headers */, - 09A35A82AC4105068BF402B7421B7489 /* FLEXMethodCallingViewController.h in Headers */, - A5F5D33D937AA825991D922401779002 /* FLEXMultiColumnTableView.h in Headers */, - D21EEA0D0592B5AD0191D86123298ACC /* FLEXMultilineTableViewCell.h in Headers */, - CD4313CFE2CF8098AE16891693C7050D /* FLEXMutableFieldEditorViewController.h in Headers */, - 99142FD45CCDDF224231C990B23C02CD /* FLEXNetworkCurlLogger.h in Headers */, - 2D865C1C9F72BC6B2F64B9CB5C957502 /* FLEXNetworkHistoryTableViewController.h in Headers */, - C713D18DFE89D348A66FB1ABC9E9A277 /* FLEXNetworkObserver.h in Headers */, - 8DEDB81ADCDF4499793B1ACA0FAACB95 /* FLEXNetworkRecorder.h in Headers */, - 9459A0CF74E7A8F4E272B3D8A655BB76 /* FLEXNetworkSettingsTableViewController.h in Headers */, - 4A9DBBC5082A2BC68BD78408B672363A /* FLEXNetworkTransaction.h in Headers */, - 3F0AF9F83DACC8046215EB3988FECB4B /* FLEXNetworkTransactionDetailTableViewController.h in Headers */, - 0241EE2CF9BFBD178BDAD873845B14F2 /* FLEXNetworkTransactionTableViewCell.h in Headers */, - 87DB5E4BBE7908B09F6AB67BFCE84949 /* FLEXObjcInternal.h in Headers */, - D9D921F38A772D71D003820856F8F36A /* FLEXObjectExplorerFactory.h in Headers */, - 1A39056AA2D31350BAB5A86D1F05CF4E /* FLEXObjectExplorerViewController.h in Headers */, - A80EECFD3C25A576ABA11955A9DD1068 /* FLEXObjectRef.h in Headers */, - F4F2EE5C2E16755CE60F2B50EEC28433 /* FLEXOSLogController.h in Headers */, - 279ED228C46DF5278BF87EB2DED55F9D /* FLEXPropertyEditorViewController.h in Headers */, - 65F42425E3673988911E61CAFC2B3094 /* FLEXRealmDatabaseManager.h in Headers */, - 27C85F72C8D1E47C01F622A8BC7F4625 /* FLEXRealmDefines.h in Headers */, - 62AE09408E968A601698C6BD3D1CF43A /* FLEXResources.h in Headers */, - 315F39416F42ABEDD99DCB8EA935F940 /* FLEXRuntimeUtility.h in Headers */, - 862162447C4485BFE7E0BFD18E0A4DA8 /* FLEXScopeCarousel.h in Headers */, - 5A9A6EA141EF9697708F4A606563DF37 /* FLEXSetExplorerViewController.h in Headers */, - 8655A5A4283BB5F17156EBC2C22DF6A1 /* FLEXSQLiteDatabaseManager.h in Headers */, - AC9B6F2352426CBA2B912CD813DD168E /* FLEXSubtitleTableViewCell.h in Headers */, - E5F73FA2CD3048A6E9F1778A93848D43 /* FLEXSystemLogMessage.h in Headers */, - C49D840F5197B00171D9DA24C7C9AFBA /* FLEXSystemLogTableViewCell.h in Headers */, - 13E48EEA1DDE3B19B311BC952DAFBDB9 /* FLEXSystemLogTableViewController.h in Headers */, - CE008B38CFDDC905D40E48E10B03407C /* FLEXTableColumnHeader.h in Headers */, - 508960BBFC898B9E2D0FEDBE4A713F07 /* FLEXTableContentCell.h in Headers */, - 37DEFFBDCB24CA7B952C8764C9021185 /* FLEXTableContentViewController.h in Headers */, - AF50D949013A8916621573005B976570 /* FLEXTableLeftCell.h in Headers */, - 50A0FBB022E8C3715E28BA239B163F43 /* FLEXTableListViewController.h in Headers */, - 2B85139C58747397A9E45A84F533A68B /* FLEXTableView.h in Headers */, - 5699C12D3BA7141C91E5F58F32C3E7D1 /* FLEXTableViewCell.h in Headers */, - AC1B64030C4A434A27C9B5C7C737B4D8 /* FLEXTableViewController.h in Headers */, - 1B1CCBFE2E4411B69D2784B999D510B8 /* FLEXTableViewSection.h in Headers */, - 9EC5FD41E5A98A3DA0EC8651B73E1C64 /* FLEXToolbarItem.h in Headers */, - CB7223EE7CAFE15EB35F65E8C9A65ECA /* FLEXUtility.h in Headers */, - D3C3C4B893B4E594C684984B7C33A7CB /* FLEXViewControllerExplorerViewController.h in Headers */, - 16396A47249301DC9D4E5330A475090E /* FLEXViewExplorerViewController.h in Headers */, - 4958C8BBD6AA39E0349DB4BDF41F8C9A /* FLEXWebViewController.h in Headers */, - 493AF3922C1806184953DAF4ED1F7FFD /* FLEXWindow.h in Headers */, - 5AA5A2930474DD68DE7D3DBD3AF54EF9 /* UIView+Layout.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AB1EF21EEEA8FEFDEDB24DC58CEBAC54 /* Headers */ = { + 58B8AB5D01390D4A1DC1482FCFEA7F91 /* NSRunLoop+SRWebSocket.h in Headers */, + C7A0A5AC0223851322ADD747966049AE /* NSRunLoop+SRWebSocketPrivate.h in Headers */, + 268486613D8534C94AFF28C70C08630E /* NSURLRequest+SRWebSocket.h in Headers */, + 6C560EA9B49D2346C52E30214AA2F741 /* NSURLRequest+SRWebSocketPrivate.h in Headers */, + 0BCD469198F23BA5A8F9B37093945952 /* SocketRocket-umbrella.h in Headers */, + E394BDF5A92DC3F98AB3DD6C08BE1FFD /* SocketRocket.h in Headers */, + 83B47F2B919376A27F7C5B13571C5C8E /* SRConstants.h in Headers */, + 1498727E94FA7C70BA33FCDB801AE6DD /* SRDelegateController.h in Headers */, + E8530F7DC8635DA6E536207C3600C605 /* SRError.h in Headers */, + 93A94FE7BD24AC71CDABB6BDF03E20BE /* SRHash.h in Headers */, + F7E10FBB2E30075A6FA7A503A20979C5 /* SRHTTPConnectMessage.h in Headers */, + B4809B68AEBBF63402A90A449D953F02 /* SRIOConsumer.h in Headers */, + B2F4A2B2302D204B50DDDE1E449380FE /* SRIOConsumerPool.h in Headers */, + C623A3F63090363FF0D28A24A4B0C74A /* SRLog.h in Headers */, + 1960D9120450C6CD6BF8EA20E163257A /* SRMutex.h in Headers */, + 87B202727BDA00BC65F73F76AC2E469A /* SRPinningSecurityPolicy.h in Headers */, + E011215437382C3ECC799536C8F7EED7 /* SRProxyConnect.h in Headers */, + EB62FDB482265374A7099CB275764778 /* SRRandom.h in Headers */, + E4A14549CE46DABDE63273406583751D /* SRRunLoopThread.h in Headers */, + DEF786F399FA40D8568E8CEF45132B2D /* SRSecurityPolicy.h in Headers */, + 43ADD0BC2D8876271A9DAF74BC81D6DA /* SRSIMDHelpers.h in Headers */, + 044D982DA49BEBF66F81A4580C4B7B40 /* SRURLUtilities.h in Headers */, + 0FCC287290804DA9FEFFE1E821CAF8CD /* SRWebSocket.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75679707F7815C168EE2C788BA99E660 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E5388ED84FD5134BAB120E02C7924B95 /* TDOAuth-umbrella.h in Headers */, - E10FFE8869F000A4EBB57DDB5C851C5A /* TDOAuth.h in Headers */, + 19463D02004A8B5A2DB1D177A72DE964 /* NSData+NSHash.h in Headers */, + C09FEF954AA91F7357151B67BD9BEC68 /* NSHash-umbrella.h in Headers */, + E25B21DD0AA732055F7127430368500A /* NSString+NSHash.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - ADCDC1608ADA591EE7500E47D4FFB8C2 /* Headers */ = { + 764820044465312B14B2AC1B6D9B3B0A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 45276C78751ABF6CD1584A98DDE3AA35 /* HMSegmentedControl-umbrella.h in Headers */, - 89E8A95FA1C18CDE2AD2881E9CD2CF86 /* HMSegmentedControl.h in Headers */, + 86515CF48EDFDA99A7B243BD32E84A66 /* PHFDelegateChain-umbrella.h in Headers */, + 8367ED634900AD0FCB85A5B41466B039 /* PHFDelegateChain.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B15E1F976648DECFDA1D82641DB5E6CD /* Headers */ = { + 7969C7FE260E75B1ED3E2B719EE9AB69 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7AD68480E7FA38AA77424D901A57C87C /* RMDateSelectionViewController-umbrella.h in Headers */, - A36E7990E076203B6865AE3DF089FA11 /* RMDateSelectionViewController.h in Headers */, + 9258A33DE82BDB241E80BE59D0BEEB1D /* NSMutableArray+SWUtilityButtons.h in Headers */, + F8D237D10BC7F5919D9E8356C5834E44 /* SWCellScrollView.h in Headers */, + 8AD32E89CBB5216F34A38DE6175FBE80 /* SWLongPressGestureRecognizer.h in Headers */, + 79BFFE1C53358D5CE5808C4C03D3F5B1 /* SWTableViewCell-umbrella.h in Headers */, + DEDA1A634DEB2D3AFF3389BE6B010B6A /* SWTableViewCell.h in Headers */, + 38C1D9CC90E28B616BC98DBDFE819835 /* SWUtilityButtonTapGestureRecognizer.h in Headers */, + 13191A859A4C41066334D86A8110EDB7 /* SWUtilityButtonView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B633BCCC34F9CF262831217529277F96 /* Headers */ = { + 7C8E7066377729586BD868305D8E856F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A254EADAA01AE48243318972CFD67FF2 /* IQ_FDWaveformView.h in Headers */, - 930C9866442A3CDE6D742950820F2669 /* IQAudioCropperViewController.h in Headers */, - 14E2660C964A7BA3477729681FA8DC3F /* IQAudioRecorderConstants.h in Headers */, - 7489CC65A172D63D8A5AD3FAF94E3FD6 /* IQAudioRecorderController-umbrella.h in Headers */, - B4E543AE7B18AA40D835800E0D4EE8C5 /* IQAudioRecorderViewController.h in Headers */, - 1A22B05B891FA14F9235670BC25484C0 /* IQCropSelectionBeginView.h in Headers */, - D9BAC1850B1D89DE8E359F246240ADAF /* IQCropSelectionEndView.h in Headers */, - 918AC9F896552573858E6A60EED0C394 /* IQCropSelectionView.h in Headers */, - 30BFD0FBEEDE5E678FDB335013C903B5 /* IQMessageDisplayView.h in Headers */, - 35912E17834ED05F9D5090D3722CFA33 /* IQPlaybackDurationView.h in Headers */, - 99C3ACEC360B5D990E4F6241DF81B645 /* NSString+IQTimeIntervalFormatter.h in Headers */, + 52CF628D32C1CE6931F2BD4D660A6075 /* SZTextView-umbrella.h in Headers */, + 1EA7E9AF6C65E9934144B3C0F50B72F8 /* SZTextView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B7912A698A1503305DDD447B39982169 /* Headers */ = { + 82B5714A06F240438FE8EF9132F85730 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 72681E7873D636A4EC1542649344E9BB /* AFHTTPRequestSerializer+OAuth2.h in Headers */, - 3015491BB91D93B72BE5560B385A8AF3 /* AFOAuth2Manager-umbrella.h in Headers */, - DA64B609482AC8BCD451212B9B8D8B10 /* AFOAuth2Manager.h in Headers */, - A748C2C59AED21417E3C3A11A229AE2D /* AFOAuthCredential.h in Headers */, + FF7F22FEFD3EDB92ECC7FAD8BCE7279C /* UICKeyChainStore-umbrella.h in Headers */, + 54B9BB7ADB57619F1A53C348233EA23F /* UICKeyChainStore.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BA94C92B189F95EFC6AAA648C1D3C7D5 /* Headers */ = { + 8620852B6C7B5D1297ECF75A90C1A9DC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8632F759A4172DAEB79B41EDF56366F1 /* audio_queue.h in Headers */, - 14CE93D939810795B383C21F113AFF52 /* audio_stream.h in Headers */, - 4E819200C576F01336711F2BE4943D39 /* caching_stream.h in Headers */, - 1D464A466F3CAD92492C7BAD5ECFAB44 /* file_output.h in Headers */, - E370B6ED31D2168636A5621C576DBE24 /* file_stream.h in Headers */, - 898A31F4BE65701E0B5B977D2CB6BC75 /* FreeStreamer-umbrella.h in Headers */, - EC312608948D0C7FDDCC19A174FE57D5 /* FSAudioController.h in Headers */, - EB324FEDA5FBF587B06584A85F89AC20 /* FSAudioStream.h in Headers */, - 7FDD40C3A2DB29826D76B391BA121081 /* FSCheckContentTypeRequest.h in Headers */, - D78590C91109FE301E43DECCE0C71FE4 /* FSParsePlaylistRequest.h in Headers */, - 518CAD2F2431F5024A68C8FDB3C58213 /* FSParseRssPodcastFeedRequest.h in Headers */, - 0DB38B141504B8CC829FD304CC65046C /* FSPlaylistItem.h in Headers */, - 4B3AE7D8320B3E4C6342EBE902226198 /* FSXMLHttpRequest.h in Headers */, - C0C53372F66F3321290E99C1342C8B9C /* http_stream.h in Headers */, - DC0F03058984E1E5A40CDE50C0BE08CC /* id3_parser.h in Headers */, - 73E7475833B3FE3634A6D5E28FF96C65 /* input_stream.h in Headers */, - 8A61F6CD29D0E8460CA56F8EAB29C030 /* stream_configuration.h in Headers */, + 91364510E311B73A998A4EF134455F2B /* SBJson-umbrella.h in Headers */, + 1E7B67F8F0129C82A4306131EDE7EF16 /* SBJson5.h in Headers */, + 446DD6C37D53EA4AE3830CB41A2779A4 /* SBJson5Parser.h in Headers */, + 67685713F83D6AF25ACFEDDD81D4BCE9 /* SBJson5StreamParser.h in Headers */, + C0059F961E73A59688435B35CD9352AC /* SBJson5StreamParserState.h in Headers */, + 0097FBBB61C275FC0FB0F830858C8F22 /* SBJson5StreamTokeniser.h in Headers */, + A6E8D2CFB2C94EDCCD1100D8E2A33320 /* SBJson5StreamWriter.h in Headers */, + 58A68C141919F0879CCB0FC52EE12801 /* SBJson5StreamWriterState.h in Headers */, + 5CFCF5C66F4FA15767D73FB6C29FA1EF /* SBJson5Writer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFB86164A83BA0FDC14F7D6158C5EFEF /* Headers */ = { + 8F0EBAB2761523F18BB73EB4DC5CBEC3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0572C904ABCDC58CC125F6BA83804535 /* PHFDelegateChain-umbrella.h in Headers */, - 2E20DFEB7BD2A4A18E7E59B06480B0E9 /* PHFDelegateChain.h in Headers */, + 81B9E2F21B1EF9FE4E769103108DEA8A /* MBProgressHUD-umbrella.h in Headers */, + EB2A4C29BE958CCB03B3FD9FAB927F1F /* MBProgressHUD.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFE295770908E2875377B13E98ACF058 /* Headers */ = { + 9BE9BBEEC131B5524A7132A60A99082E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B09704B130A0EC6796C81A218B1577E7 /* NSGIF-umbrella.h in Headers */, - 0B38FE2A385DC638293D6047DB60397D /* NSGIF.h in Headers */, + 9A7EB66E14A79FF684EF976DC126320F /* NSGIF-umbrella.h in Headers */, + 34F10608437401B7F270BFFBF129DE29 /* NSGIF.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C366F5FD6EC7EE24897F4AC4DAA5A94E /* Headers */ = { + A03E2EFB59C5C7FDB25EC41831F1E03F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8FB42485AE4C726C7E8FBE51CA5204B7 /* NSData+ImageContentType.h in Headers */, - 4833B19C7A125119DA09723E15635784 /* SDImageCache.h in Headers */, - 0DFF7855B5DC94523651D3AADD727E51 /* SDWebImage-umbrella.h in Headers */, - 01ED6E5212F9D27BF5D9D77D7C8FBCC4 /* SDWebImageCompat.h in Headers */, - 0BCC5957D512B71925008F2A9B6C8ADD /* SDWebImageDecoder.h in Headers */, - D17EA2A9D9F04A963399061D637617D6 /* SDWebImageDownloader.h in Headers */, - 92A2D26D70352BE8CE18CA743F40DE16 /* SDWebImageDownloaderOperation.h in Headers */, - 358F0021153D1649AD37E84DA55C1A9B /* SDWebImageManager.h in Headers */, - F749713A76F0B0EAF2D0857DF75CA157 /* SDWebImageOperation.h in Headers */, - 3918BD8462051B40953B9775B469C68A /* SDWebImagePrefetcher.h in Headers */, - 04E3883D442466B24E95323A6FAB02AF /* UIButton+WebCache.h in Headers */, - 5B95DD0D3A6EFB1394A56D5C2E1259B6 /* UIImage+GIF.h in Headers */, - 1B9CF82A9C5381E7A99F09A9895DCCFB /* UIImage+MultiFormat.h in Headers */, - 2A79F74D3D96C3A8EED63D63A42F91B3 /* UIImageView+HighlightedWebCache.h in Headers */, - 1513DE44B395E78F58A7A684D5F2ED41 /* UIImageView+WebCache.h in Headers */, - C2A85E01D077B821AE818063872A41BA /* UIView+WebCacheOperation.h in Headers */, + 5F91495C5A4B80D49CF7EE5130664291 /* DAKeyboardControl-umbrella.h in Headers */, + 27CF5BFB4C02B662EDB5739EFA47CCE3 /* DAKeyboardControl.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - CC2E20462DBE5CBB391A7B1E36249F26 /* Headers */ = { + ABF8FBC9DD230D6CD614A66FA1D80B03 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B34AF4AB5D115074EFE6CB49374F3A6A /* UICKeyChainStore-umbrella.h in Headers */, - 83F51C45094DDBA8599189E33BA509A8 /* UICKeyChainStore.h in Headers */, + F3C847E1C5B2757654C7993B44E16825 /* DHSmartScreenshot-umbrella.h in Headers */, + 5BF0316F0599D4732F975D8B55B90CC1 /* DHSmartScreenshot.h in Headers */, + 04A489FCD2744F2FB031C12A9C7F7546 /* UIImage+DHImageAdditions.h in Headers */, + AEF58C21288F7771D553E339FD3C3525 /* UIScrollView+DHSmartScreenshot.h in Headers */, + 4FA5BE578368763496BF8BDBF19E8BAC /* UITableView+DHSmartScreenshot.h in Headers */, + 10A1AEC3E7FD7587F0215E23D1AB38BB /* UIView+DHSmartScreenshot.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D19BF424495801C467341CF257170DD8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CA3C2A596CB1AF4AC74AD680369EA0BF /* AFAutoPurgingImageCache.h in Headers */, - 193FFCFE80DAA549BDB6CB31228031B7 /* AFCompatibilityMacros.h in Headers */, - 68F2C94311D9B63B562B2AC951654747 /* AFHTTPSessionManager.h in Headers */, - 88FA923E22FC8E5BCA40EF0068B5DE95 /* AFImageDownloader.h in Headers */, - 41C060AB804446DA4800A8C52DD46C4B /* AFNetworkActivityIndicatorManager.h in Headers */, - 807B396F719C82B495EADC60045BEF41 /* AFNetworking-umbrella.h in Headers */, - C0AF5764EF573D99D0094CBA6CE306DF /* AFNetworking.h in Headers */, - D9BFABE65A5831F8000409565214207B /* AFNetworkReachabilityManager.h in Headers */, - 884F2D67A25DC1E98CC52A1971FAE02E /* AFSecurityPolicy.h in Headers */, - 16DB0BDEF51DBB10BD0B446048562A39 /* AFURLRequestSerialization.h in Headers */, - 6B969E85AEF96BF66A53216E81652065 /* AFURLResponseSerialization.h in Headers */, - AE337EDEBC3FC7985C549A78A2E39723 /* AFURLSessionManager.h in Headers */, - 3B16222DCCC006FC52DEFC75A38955E5 /* UIActivityIndicatorView+AFNetworking.h in Headers */, - A6E72474A41F9884598A7E1EF287FEFD /* UIButton+AFNetworking.h in Headers */, - BC59E749822496E6E98751CEDD571E3B /* UIImage+AFNetworking.h in Headers */, - F9EAA0B2A6C547064E69295AE11EBEA3 /* UIImageView+AFNetworking.h in Headers */, - 28284CFF8D33EE6D3B3408BD531DC3AF /* UIKit+AFNetworking.h in Headers */, - 8514811D611C8AB4B6BD3BEF27ADB1DE /* UIProgressView+AFNetworking.h in Headers */, - 626DCCE089E4BB83247C940FBD022B08 /* UIRefreshControl+AFNetworking.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E049F7021397D961B03A6BB51AD3023E /* Headers */ = { + BAC41A9ED87EEB9E4006C8B82BA6BB83 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E013B70D88643F86E24B88AA6415002B /* TWMessageBarManager-umbrella.h in Headers */, - C40C83631A7D46392807DF2B97B85CBF /* TWMessageBarManager.h in Headers */, + 1C9ADF9D199AA7A6523EF94568980119 /* IQ_FDWaveformView.h in Headers */, + 709A9920672557AA7FDF2FAEE9F39644 /* IQAudioCropperViewController.h in Headers */, + E3A31E91C4FFD4864EDE7E3D08F2C0FF /* IQAudioRecorderConstants.h in Headers */, + CD1C898ADA05A99EED3620B3FE10BC6B /* IQAudioRecorderController-umbrella.h in Headers */, + 8055E7AB597D53D509D8F5670D0C851F /* IQAudioRecorderViewController.h in Headers */, + F6B3172EA138579B5B581090471B11FE /* IQCropSelectionBeginView.h in Headers */, + 0C6A25917C6D5E6155CA0B0D27B16589 /* IQCropSelectionEndView.h in Headers */, + 3F700D66E723459F1D3502BCC9F4F857 /* IQCropSelectionView.h in Headers */, + EB47A72DA28EE0B99D9B1BDEEF6F2EB0 /* IQMessageDisplayView.h in Headers */, + 26CFA5579BF4762E346667D797D2F63C /* IQPlaybackDurationView.h in Headers */, + F5F5AC47DB4D59F4A8B8895DB0E1E22E /* NSString+IQTimeIntervalFormatter.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E2600F0C3E344EBB6537A773FBBCEBCA /* Headers */ = { + C2E2E2EA430B7397470104609C4C46AC /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 372ABDB1A3E512E473B556BBF92DEFD8 /* RMActionController-umbrella.h in Headers */, - 17C8BC19785CA59B0AA27AE3756E41BE /* RMActionController.h in Headers */, + 4DF74B6FF430EAFF80D0640023E43FF2 /* RECommonFunctions.h in Headers */, + 6FB454FD1EB381E8DF9FE70B42C4F232 /* REMenu-umbrella.h in Headers */, + 2703554C5805B818419BFBF42A9957B1 /* REMenu.h in Headers */, + DC1B4AD85DB20F24BEC11FDF4390A0A7 /* REMenuContainerView.h in Headers */, + 0970E773D8451052BE128C1020C55CF7 /* REMenuItem.h in Headers */, + A5C3A5254260A5874A98790782ACE6C9 /* REMenuItemView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E2E965A86508B0CD51ADC6903CBF4551 /* Headers */ = { + CF7ECEEE2375848FB7EEE57CBB7D67B3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 63FC9FD649E84E564F870C5055F3ACFD /* libPhoneNumber-iOS-umbrella.h in Headers */, - EFA23357C5876906B4FF1099D34C7E1B /* NBAsYouTypeFormatter.h in Headers */, - 55E1F481E337EDCF4CCBD241D663D32E /* NBGeneratedPhoneNumberMetaData.h in Headers */, - 485C58B48D8FDD041BDDF1A5BF115C90 /* NBMetadataHelper.h in Headers */, - 0F32E3ACBCD9F1A7FE74C50C2D150226 /* NBNumberFormat.h in Headers */, - D60FFC393AFAC268F4DA29ECD800EB76 /* NBPhoneMetaData.h in Headers */, - DF29048B281C2C950A572F32AEBADB50 /* NBPhoneNumber.h in Headers */, - 4FE21F1DDD64EF80BDC3A5CFCCBACD58 /* NBPhoneNumberDefines.h in Headers */, - CC19EC89ACF05DE9F5F67CAC7F9AF081 /* NBPhoneNumberDesc.h in Headers */, - 35937B370AE220B21E49A5E0A6A828AC /* NBPhoneNumberUtil.h in Headers */, - F0AE0C707D556620307AF1C8774EFCD1 /* NBRegExMatcher.h in Headers */, - 830C927FD6D938420EEDC664D71FB3D4 /* NBRegularExpressionCache.h in Headers */, - F56BE4E5EC7EABE79253F8894F38CEA3 /* NSArray+NBAdditions.h in Headers */, + F22B078DC80E8BBA084C9B3A1CEEF880 /* Reachability-umbrella.h in Headers */, + 5807B665F2519B3E08FD047AA0366F53 /* Reachability.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E526D088AF0216309CA564944C0406AD /* Headers */ = { + CF8CBA3939CE6AC3668B398365543F9E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6FB563D396B456D8FEA7FA1F8BFF6FAC /* SWFrameButton-umbrella.h in Headers */, - 1142EA99FD0A100FE975F4C29EDE8AEE /* SWFrameButton.h in Headers */, + A8CA547E6DE7017D2581157F861CDCA6 /* JDStatusBarLayoutMarginHelper.h in Headers */, + 2E2F203613EBF7A494EAED7B4828A4AB /* JDStatusBarNotification-umbrella.h in Headers */, + A74A3CE977E75E975A756C4B5F8FEA29 /* JDStatusBarNotification.h in Headers */, + 7AFD08C551D2D40508D0EE7C94FD2751 /* JDStatusBarStyle.h in Headers */, + 33E66F00FB3E377C20DC002CAEE1A7FF /* JDStatusBarView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E7EB1D534AFF224C872E805FF9B967DC /* Headers */ = { + D61E7CB8A6925C9C3318AC6DE314FD77 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - FBBFC317408B5186EF0DBEFF2193078A /* NSMutableArray+SWUtilityButtons.h in Headers */, - 46F7D91E9B02330071E5FC8AACDDAB56 /* SWCellScrollView.h in Headers */, - BF838F6156AA99DC8DE5244A383A43BF /* SWLongPressGestureRecognizer.h in Headers */, - 78998136FDC20EA4CC67FEED9A0B31B1 /* SWTableViewCell-umbrella.h in Headers */, - 125E5A5C89618C9C7F18339752D592EE /* SWTableViewCell.h in Headers */, - 58432E5E48B9A2DE2E59B73577740F21 /* SWUtilityButtonTapGestureRecognizer.h in Headers */, - E91A69877D89CD049C170C6A6D62F77F /* SWUtilityButtonView.h in Headers */, + 804D5B9C67EEFBBAF98F7C0D022B4871 /* JSCoreBom-umbrella.h in Headers */, + B13A63379AA95B1A0DF15B8BECA7CDAA /* JSCoreBom.h in Headers */, + 9F0B78CC0498C39990D026FDB486707C /* ModuleConsole.h in Headers */, + 27FD92EB15D10FA502E198C7EC5252E9 /* ModuleXMLHttpRequest.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - E7F43D289BD424EC532AA2814D1BC516 /* Headers */ = { + DF68A55017E8E3FA4B13460D90B09851 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 885E3BCB595CC08FC0F22D3221371D8B /* AHKActionSheet-umbrella.h in Headers */, - 25DA0DBF84BCFE49DD691EBEA927B14D /* AHKActionSheet.h in Headers */, - 1B2E4F05D317C9B495911F820564EC20 /* AHKActionSheetViewController.h in Headers */, - 3390EE6C363A5F6500373206A0AA90E1 /* UIImage+AHKAdditions.h in Headers */, - 133E817129704BB14BBA093DEF3EA5DC /* UIWindow+AHKAdditions.h in Headers */, + 9EF26843C36D6B15793FFAC149FA6F57 /* BBBadgeBarButtonItem-umbrella.h in Headers */, + 5F177D4D65E678E6895551C7E71DD65F /* BBBadgeBarButtonItem.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EA2F372D37D644557993D438A8A5B241 /* Headers */ = { + E6753BDFEBB07E8D02A324A3ED9DBD60 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 01C4211F3520A75E2FB5FED346B56491 /* DAKeyboardControl-umbrella.h in Headers */, - 3EB1923CA44680A52FE7100F5A4ED812 /* DAKeyboardControl.h in Headers */, + 3BDCA99BC8AE516C36D7C9ED11F8A074 /* NSData+ImageContentType.h in Headers */, + 85A7230F416A426CE71CABC04F194403 /* SDImageCache.h in Headers */, + A55E4BE1EEB322196F1B76E5F078C994 /* SDWebImage-umbrella.h in Headers */, + 409F4B1779C12A65A916105CCD6FEFA6 /* SDWebImageCompat.h in Headers */, + 0368EFDDF75297A5679E593B1740E286 /* SDWebImageDecoder.h in Headers */, + 41643AF6DD24C149CE100EA630699396 /* SDWebImageDownloader.h in Headers */, + 42958C16D9C1D35746A2F86F5BDC4D1B /* SDWebImageDownloaderOperation.h in Headers */, + FE22EE7A0E242C206BC5B468CCA77354 /* SDWebImageManager.h in Headers */, + 8BF2AF00B31B279B2AA74BF762ED3550 /* SDWebImageOperation.h in Headers */, + 3C0110956E834DEE271935D2A1AAAC01 /* SDWebImagePrefetcher.h in Headers */, + A0EF48E0461AA3B2E2EAEA38FE712EC4 /* UIButton+WebCache.h in Headers */, + A56F493FFDEBD570C3C364DEEDBDC690 /* UIImage+GIF.h in Headers */, + 14E4FC6D4D45E8D85A68AA2F34151A46 /* UIImage+MultiFormat.h in Headers */, + C0CAD0C4C01781EA88B50FF63C3494ED /* UIImageView+HighlightedWebCache.h in Headers */, + 81A33BB5D6CAFC575074850AB69BA1E7 /* UIImageView+WebCache.h in Headers */, + F18C699B9D82D729511C216D84ABB2F4 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F27E76FD1C293093AC899CEAEFEFCF91 /* Headers */ = { + EC2DA2B5EADD5C3BCCC3BB7B25091174 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DCCD087A93BF459F93EC66F90C2E28C4 /* PHFComposeBarView-umbrella.h in Headers */, - 4630E48385CA96D598BC1E6B6ED7AAE5 /* PHFComposeBarView.h in Headers */, - BB66492837A818C1130FFBA3AE8581A1 /* PHFComposeBarView_Button.h in Headers */, - F83E120F38D32B005C208CF17A95D7B6 /* PHFComposeBarView_TextView.h in Headers */, + CCCC1A9FC0058963DB59F40CF5C53474 /* crypt.h in Headers */, + DB0038866411D300F5679D013E3812D9 /* DTActionSheet.h in Headers */, + 5090F5C569CAC44656DFF7159C7C53E7 /* DTActivityTitleView.h in Headers */, + 21CD46C21CEE8C67FF6D8192100A447A /* DTAlertView.h in Headers */, + 32BE482A17197154839F56BA4FF78C97 /* DTAnimatedGIF.h in Headers */, + 79FF77CDE28DAD1208E0C447A53B5882 /* DTASN1BitString.h in Headers */, + FDA3ED0912E150DCD16DEABBDC81AB3E /* DTASN1Parser.h in Headers */, + CA6D112CB20D2B98982E41114F311666 /* DTASN1Serialization.h in Headers */, + E05DF0A438FB11CA49AEF959E34EFF74 /* DTAsyncFileDeleter.h in Headers */, + C4E9915110E1A5914616B0541B043B44 /* DTBase64Coding.h in Headers */, + 88BC0BBF5F7A70234582FAB5E03EA0F5 /* DTBlockFunctions.h in Headers */, + 7012C769DD8819F5A89EB63A36735D2A /* DTCompatibility.h in Headers */, + B55475134D5BFC78B028C54E8AE71948 /* DTCoreGraphicsUtils.h in Headers */, + A46E07A9C2C43E74EDDF63B1BA2D546C /* DTCustomColoredAccessory.h in Headers */, + 457BE15B44E0D10A99818D648F2F5E66 /* DTExtendedFileAttributes.h in Headers */, + 87F890C8A0B8D241CC297DC4E4EDDAB4 /* DTFolderMonitor.h in Headers */, + 16BD0599DB37CCE496ECF5C274DF9838 /* DTFoundation-umbrella.h in Headers */, + 816FE87BA44BFD45DC944F259B81C15B /* DTFoundationConstants.h in Headers */, + C32499BBE59CA5332A9C79406D65D559 /* DTHTMLParser.h in Headers */, + F4C284C08C734CDEC182D775EEFFE70F /* DTLog.h in Headers */, + 6C24F9AC87DD70991BF889D1F727F079 /* DTObjectBlockExecutor.h in Headers */, + 9E21D26FDE14FE8A32DB49FFCC8FC687 /* DTPieProgressIndicator.h in Headers */, + 790A27EEF908B0B1710B302FA96654D3 /* DTProgressHUD.h in Headers */, + 1F8BF8977F61C8DD822294C5815EA418 /* DTProgressHUDWindow.h in Headers */, + F2469E246F18D9303CEED72B12BB196F /* DTReachability.h in Headers */, + B78BF9C40C0A9B00A5310BC79D6AEAD2 /* DTScriptExpression.h in Headers */, + 84C13E1E0BAB870B6EBC3D56724E7F34 /* DTScriptVariable.h in Headers */, + 179531D0BD81DC0D06EC6D7ECD380315 /* DTSidePanelController.h in Headers */, + 373F2C279A71638F080B04A892C3BA02 /* DTSidePanelControllerSegue.h in Headers */, + 91B342F1BE7F96D280A0889D4AE97116 /* DTSidePanelPanGestureRecognizer.h in Headers */, + 45B36F5831F54867E453E29D3126C71A /* DTSmartPagingScrollView.h in Headers */, + D9D9F6EA3EA518AC08ADF990A99E8710 /* DTSQLiteDatabase.h in Headers */, + BFA5FF96CF7FBACDEE5E10F8CEF08902 /* DTSQLiteFunctions.h in Headers */, + C0291559A98729F42098114712C2BF27 /* DTTiledLayerWithoutFade.h in Headers */, + 3248EE0A2E66E7EBD3C3561352A7128E /* DTVersion.h in Headers */, + 23F6EC6B41CAA377201C13FF58D93A02 /* DTWeakSupport.h in Headers */, + 01FE8C2BCA5C279EC7301EE08A26C657 /* DTZipArchive.h in Headers */, + E6960A9FB6C4585A6D8A966CEAFA8134 /* DTZipArchiveGZip.h in Headers */, + 8EA8CCC57DAA9AE3B5982E19EDA4D3A3 /* DTZipArchiveNode.h in Headers */, + 5D15D19E6EB9D060378FFE7122A7D895 /* DTZipArchivePKZip.h in Headers */, + 084674DA7F959DB60F96771E22544BFE /* ioapi.h in Headers */, + EA95E317D66D3C118D89DEFB174DAE5B /* mztools.h in Headers */, + 52D8C9BCD6D54A78E0A848600DD0AFEB /* NSArray+DTError.h in Headers */, + 122B18A02EB8B0755434D715406056DC /* NSData+DTCrypto.h in Headers */, + B8416B082E3939F15CF93E71A489D482 /* NSDictionary+DTError.h in Headers */, + 9BFEC98648704226BD53595091201833 /* NSFileWrapper+DTCopying.h in Headers */, + 2615DBD9DEB37381EAC3BA5C7D2D6D0B /* NSMutableArray+DTMoving.h in Headers */, + 5B2125C8F5D15278C068E57ADD6526D9 /* NSObject+DTRuntime.h in Headers */, + 57E39F55F23F1176ED958D87D9E8FECB /* NSScanner+DTScripting.h in Headers */, + 7D64EFF1B369D36DDB8A5219998521B8 /* NSString+DTFormatNumbers.h in Headers */, + A0F6E3D7CEA819A80F23BCBAD3BE5833 /* NSString+DTPaths.h in Headers */, + CDDF8FB899C40C6F87BBA8D6B69F556C /* NSString+DTURLEncoding.h in Headers */, + 719ED7245C102E769E0716F7535E9B6F /* NSString+DTUTI.h in Headers */, + 741805361D45A1B360999485C7C9A2FA /* NSString+DTUtilities.h in Headers */, + 2A155AE8D2AB85AE5BFBD93D621CDA62 /* NSURL+DTAppLinks.h in Headers */, + BFE48AF9CF03C3F1588F856410089351 /* NSURL+DTAWS.h in Headers */, + 2E56BDD2B5C3C1E52C84A1ED84AB512E /* NSURL+DTComparing.h in Headers */, + E6BE6AD9F3DF13DCC3BC0061F33743D6 /* NSURL+DTUnshorten.h in Headers */, + CE3FB59E93C205FD6B493F124CFA9DDC /* UIApplication+DTNetworkActivity.h in Headers */, + FCCEE247711D5889C944F437F8DDED04 /* UIColor+DTDebug.h in Headers */, + D6B3E2BCEB090123FFB9EBF509254AF5 /* UIImage+DTFoundation.h in Headers */, + B7DB959FE62BD5F8898976C20F6E0162 /* UIScreen+DTFoundation.h in Headers */, + 70C5D855BA53EC124F3EC89F52C46D3D /* UIView+DTActionHandlers.h in Headers */, + 393258AC59DEB4DDA024B84DDF84584F /* UIView+DTDebug.h in Headers */, + CEB82FD190E5540B979E30ED914AF2CB /* UIView+DTFoundation.h in Headers */, + DD916FF2F53D982DC9748505A8F5021C /* UIViewController+DTSidePanelController.h in Headers */, + C4A20362D1A3400C5881228C1655C3EC /* unzip.h in Headers */, + B25FB34D354D99B2E29E1037D05427DC /* zip.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FA741EC5CFB5A8F8C2A5647AD36C846C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 654D5CE67C358D6A1B660A26A9190E23 /* NSProcessInfo+RMActionController.h in Headers */, + 834265773E618B9768504F8801632F00 /* RMAction+Private.h in Headers */, + 786B5107C9471D3218071C8F2D2BAA2F /* RMAction.h in Headers */, + E583ED285BD4284B22EEDD440C00B642 /* RMActionController+Private.h in Headers */, + 9451061588588184FC4B2EB13233D65E /* RMActionController-umbrella.h in Headers */, + 3CFC43AADF6691942A22122D13DCD4E1 /* RMActionController.h in Headers */, + DFDEE464FB58E4BBE4949FEE8F9CDFEF /* RMActionControllerTransition.h in Headers */, + F1836D635C7FE287335DBC22F1C3D840 /* RMGroupedAction.h in Headers */, + 08C1DC4EE027E1F719CDA31EB674D24E /* RMImageAction.h in Headers */, + AA0A0A306E12021E1FCE28FAE0DE946B /* RMScrollableGroupedAction.h in Headers */, + FA58942AAE2E21147B1B0CE0D0822E97 /* UIView+RMActionController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - FB1D28969747F926DA56C4BBDD32393E /* Headers */ = { + FE895418C3C13909100C86B802845E9F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 415FDFE46DF41A1823847B41250FC23F /* OMGFormURLEncode.h in Headers */, - 51B18B3AD476E9FD40D0EDBAEAD614D0 /* OMGHTTPURLRQ-umbrella.h in Headers */, - ADAAF13BDB1079CC22AE4AABC2A5F68A /* OMGHTTPURLRQ.h in Headers */, - 7BC8831EFF5F44C7DFA12C450F8E5B8F /* OMGUserAgent.h in Headers */, + A68CA0655464A7A762C52BCCF0DA1B98 /* TDOAuth-umbrella.h in Headers */, + 4D4D11A0262744543FEC6FA2D2322E8A /* TDOAuth.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 037435BA46F89806ED78BA9295251016 /* FLEX */ = { + 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */ = { isa = PBXNativeTarget; - buildConfigurationList = 6B2C6A03A372EE8EADCBDF9F481E8845 /* Build configuration list for PBXNativeTarget "FLEX" */; + buildConfigurationList = 10208D914FA75F86D9EC8FE636974170 /* Build configuration list for PBXNativeTarget "AFNetworking" */; buildPhases = ( - 8BBF558AF0BD205EB4FF904048466815 /* Headers */, - 88FF8E4146F8EA45F07B2E964869ACE2 /* Sources */, - B6999BA8D5675D1317952912617A8925 /* Frameworks */, - 9AC00667011A3B0318D9AD2C4A879234 /* Resources */, + 2D3A6B298A9397088FA8E0B2CF7787FE /* Headers */, + 8163A21728F735939E7F4273416471C8 /* Sources */, + F9EED9FDB6BDFCD02B9D7BDAD5BF2FA8 /* Frameworks */, + A293C257C6DD98782DDA9F6A33144D67 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = FLEX; - productName = FLEX; - productReference = 29B1E12538E72897C4665BB7B0821312 /* FLEX.framework */; + name = AFNetworking; + productName = AFNetworking; + productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */; productType = "com.apple.product-type.framework"; }; - 190026D091222FA1C9C4F63F8A6EF3D1 /* SBJson */ = { + 029C271E190BFB05ECAEB5F1A29AC0AE /* Pods-Jasonette */ = { isa = PBXNativeTarget; - buildConfigurationList = 376527BD97EB794CE07174A0CB24E239 /* Build configuration list for PBXNativeTarget "SBJson" */; + buildConfigurationList = 7B58A14930CBD745939D93C5D7D7C9D0 /* Build configuration list for PBXNativeTarget "Pods-Jasonette" */; buildPhases = ( - 0153D33A49E1FFE51431128CFB3FF0E5 /* Headers */, - 63A5FD2854858B1917316B5D8FBD7DA1 /* Sources */, - 77929D13767AC896A6C385C62D0FD219 /* Frameworks */, - 2D77077AB0B3C4E06B8BF88170440111 /* Resources */, + 44E9201AD4FC9832E25B1E2CBFAA5052 /* Headers */, + 28DFD5A7BC28AFBEA9EB714B51ED95A8 /* Sources */, + C969EB142F7D9D2B51D5B4A49E0712FF /* Frameworks */, + DC459F935ACA73C21C1B5239DB38C90B /* Resources */, ); buildRules = ( ); dependencies = ( + 20DFDB7903B42B5C1222270FB32BC143 /* PBXTargetDependency */, + 5DA6A77F5852F74F5A71BC17EF9F17BE /* PBXTargetDependency */, + B69E32677F9474049CFAAEF8D07151DF /* PBXTargetDependency */, + 67F286CDCF68B5BA6F4906E0AF21A0AC /* PBXTargetDependency */, + A36DD0284589DD78AB2A502BF715DCD1 /* PBXTargetDependency */, + 54F77AA7FF02047A9B31B5E5058B6979 /* PBXTargetDependency */, + DE5429B493CDFDA360C8500936705DBA /* PBXTargetDependency */, + BF75AE9B0497FE9AFAD06DADF41CB005 /* PBXTargetDependency */, + A21323A5B055A599CC644C1D82FF01CE /* PBXTargetDependency */, + 07B901B47ADA5B056C9B855BA3FDA029 /* PBXTargetDependency */, + 49FEDB3ACCEEC4A895D07FB9E3524D4A /* PBXTargetDependency */, + D1B87704F70D6DB97A93A809F914FC5C /* PBXTargetDependency */, + 13BD0C57DB3B5E679BB539E5BEB34D17 /* PBXTargetDependency */, + 9F76CD7B854DB4E7D9BB12DA064C7F0D /* PBXTargetDependency */, + 9F67C8412C9D114D7BB4586C9E71EB8C /* PBXTargetDependency */, + 1CE9F96A9B9168D3FF11999BF2D82CF1 /* PBXTargetDependency */, + DB4D229CA149B796C2B85412D217BF14 /* PBXTargetDependency */, + 50CFA01454337A6E2FF8F1B8A7960201 /* PBXTargetDependency */, + 4DA37DF42E06148D3F792976E5FAF80E /* PBXTargetDependency */, + 3AE104DD72145B418F03E64A986881DF /* PBXTargetDependency */, + 22351C9125B1F07965A663129BE34DBA /* PBXTargetDependency */, + 9CBC9743867F8E76948AF47B7D644A89 /* PBXTargetDependency */, + 6FECD198C269C1C0430AC7E14E1D328A /* PBXTargetDependency */, + 1E5108F9923E6EA8DA87FE1C9EF56308 /* PBXTargetDependency */, + 5975F0A0C182F1E6002AACCAFBC3D088 /* PBXTargetDependency */, + 8B67556E11FC3FEEC1252DA44F1BAE6A /* PBXTargetDependency */, + AE8CFC3E6F4E7FE83945570BD51EF041 /* PBXTargetDependency */, + 63AF562C1C2CB445CF240F6F75541519 /* PBXTargetDependency */, + 80AD6011D5AD9D6C2572D37639505312 /* PBXTargetDependency */, + 3A9F02761E6A7C7550F5CDE999B39755 /* PBXTargetDependency */, + 363BD221919A288C4741D14AF9D16115 /* PBXTargetDependency */, + 2CBD3160DF4CAE28FDB3A0810DA8CBC8 /* PBXTargetDependency */, + 903B4A4CB495C6DD8526715291024C94 /* PBXTargetDependency */, + 0BDA473A8AD89441D8C166B9FC780942 /* PBXTargetDependency */, + 6F6143A368E95AE972BE5317D71CA43D /* PBXTargetDependency */, + EED2ACFC0CDF5C1DDA8035C7A87B295A /* PBXTargetDependency */, + 6A3E4EE78CBACDE067FEA36707A0A92B /* PBXTargetDependency */, + 3E378147B1B8B30E9244C7A7F95578F0 /* PBXTargetDependency */, + BCEFBB3044CCB5C6E353DC87ED66F56F /* PBXTargetDependency */, ); - name = SBJson; - productName = SBJson; - productReference = B0E7616E72496C96278627DFB1BA5116 /* SBJson.framework */; + name = "Pods-Jasonette"; + productName = "Pods-Jasonette"; + productReference = C8770241032825499CED42AC6C83136F /* Pods_Jasonette.framework */; productType = "com.apple.product-type.framework"; }; - 1B21AD41EA8EE760ABE8B62F4AB9A473 /* JDStatusBarNotification */ = { + 04D19091436A065548D73C175B077CA4 /* NSHash */ = { isa = PBXNativeTarget; - buildConfigurationList = E71993FDFBA445C6298B0E41C794327F /* Build configuration list for PBXNativeTarget "JDStatusBarNotification" */; + buildConfigurationList = AF5E5A48B34550F8F14832E312FC5D46 /* Build configuration list for PBXNativeTarget "NSHash" */; buildPhases = ( - 892520B03394FB22B627DCDE2FD3D383 /* Headers */, - 8238A63FBB4B40A10B07725293CAA715 /* Sources */, - 21DD45EEAAFFEC23B8E54CCE9E323D2D /* Frameworks */, - 3EDC9912C379BD1229787F52CB06846A /* Resources */, + 75679707F7815C168EE2C788BA99E660 /* Headers */, + BF1462504A3AAB07913C868CBDDB6169 /* Sources */, + 01F4E17C1D188B195A2875CB32E30463 /* Frameworks */, + F1CAE55C81B9E4623193678C1C9666D7 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = JDStatusBarNotification; - productName = JDStatusBarNotification; - productReference = 081CFA2F2EA68EE6278C933BE1130B44 /* JDStatusBarNotification.framework */; + name = NSHash; + productName = NSHash; + productReference = 56453161405ACACAFF278743DCAB2213 /* NSHash.framework */; productType = "com.apple.product-type.framework"; }; - 1CDA796DD1DF09FEC12EF61E29A9E127 /* RMDateSelectionViewController */ = { + 0759FDF590D13F2CC841F8AFBEE34987 /* TDOAuth */ = { isa = PBXNativeTarget; - buildConfigurationList = C9E9A932F036A45513797E60692A31EA /* Build configuration list for PBXNativeTarget "RMDateSelectionViewController" */; + buildConfigurationList = 6B7F68864CD62750B8546A62BACD6647 /* Build configuration list for PBXNativeTarget "TDOAuth" */; buildPhases = ( - B15E1F976648DECFDA1D82641DB5E6CD /* Headers */, - 9BEE94FCF5C8BD958F691ACC5191E62C /* Sources */, - 8C85BC2B3F345384058B0D5082C69E0D /* Frameworks */, - 9AE3407849C27D300C723191AD978513 /* Resources */, + FE895418C3C13909100C86B802845E9F /* Headers */, + D7F0F3C6F06D11AB1C2CB956F15DE20A /* Sources */, + B24FFB6095B4A6C298073EC61547AE2C /* Frameworks */, + 41449730C6744F08787C405002711508 /* Resources */, ); buildRules = ( ); dependencies = ( - 42228839846F610626A2FAF0893AE79F /* PBXTargetDependency */, + F661155E534BCD8AFDB0CC91790A538E /* PBXTargetDependency */, ); - name = RMDateSelectionViewController; - productName = RMDateSelectionViewController; - productReference = 4D31B8FDFB387E867B599908BFE6EC82 /* RMDateSelectionViewController.framework */; + name = TDOAuth; + productName = TDOAuth; + productReference = 9A618F7B1D93BB77C54A0E77C64F1380 /* TDOAuth.framework */; productType = "com.apple.product-type.framework"; }; - 3154D7D2C3DBF1DF06AF199D18F3DF59 /* Pods-Jasonette */ = { + 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */ = { isa = PBXNativeTarget; - buildConfigurationList = 5FCA8239D88AC2F7A590C47A3171D297 /* Build configuration list for PBXNativeTarget "Pods-Jasonette" */; + buildConfigurationList = 56DA60E82A556A04B907FDDC7C774235 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; buildPhases = ( - 331DE9C5BA739C050E8DBE8EB75D13DE /* Headers */, - D0D6E09D3D0CBBDA2C3D4EFE43FDC8BB /* Sources */, - 2167B670409FB23E8F60F44E637DCBD1 /* Frameworks */, - 2F05AF0E0044501E339AADB878246B42 /* Resources */, + 7F78E8A27C193AA46754FFED22787010 /* Sources */, + F68F5828AB991D03771F48CD95B6DF19 /* Frameworks */, + 2429F179C0BE55F6AD78B9A4C4B8E96D /* Resources */, ); buildRules = ( ); dependencies = ( - C032D407A41AAB1E12DEA2C1900F1483 /* PBXTargetDependency */, - 5C2A758AA2F0F71E9CA7CFE42A5BBE0C /* PBXTargetDependency */, - 7E17BCA4898DF60C16AD4B04CD8F1EA8 /* PBXTargetDependency */, - 90A531E4009A78D358EC1B758BE51828 /* PBXTargetDependency */, - 6E9363DC921EE70C2BAD769C9AD05FC8 /* PBXTargetDependency */, - 0B8017B1C25DEF0D2BF85342B97656E1 /* PBXTargetDependency */, - AE1A1153FE496D847F16CE8E93A7D788 /* PBXTargetDependency */, - E3583987FFA759CE06EB78A06BFCC1E4 /* PBXTargetDependency */, - DAA6D38179C7610946FB8DD08EE2284A /* PBXTargetDependency */, - 36977B006B72BD8DDA479CE2E0FA84B3 /* PBXTargetDependency */, - 2CE219C4AF76BC02AE9F06752F9198B7 /* PBXTargetDependency */, - 757E448C460A597E0BC20926E899DB3A /* PBXTargetDependency */, - A7D3287B46CBEFFAB8BF298B9BF0538D /* PBXTargetDependency */, - E460A12D0E0B10C6345DB1C6B8461EB6 /* PBXTargetDependency */, - 8A0AE143FA85F72C536B346F3BCCE794 /* PBXTargetDependency */, - 5D861C8B79BAA19A543A3ADA9BD52FC0 /* PBXTargetDependency */, - 9731CFAFCE8D9866FBA052CC29FA6B49 /* PBXTargetDependency */, - 73BB4D628B68EB84F8104CDF8DAD4885 /* PBXTargetDependency */, - B8C84F5C4A933DB195E7A0452336B139 /* PBXTargetDependency */, - CF7E03F9070E9626BE305005651052D8 /* PBXTargetDependency */, - DD3C861DFB7FD6BD4DA3F6BADB386200 /* PBXTargetDependency */, - 287D584DD5DEC65ED674B5D71EE610DB /* PBXTargetDependency */, - AA77B04C810245DEA52CB35D62675463 /* PBXTargetDependency */, - B32A7180AEF451F152247623C6C6C09F /* PBXTargetDependency */, - C82CB8D608B713CF2FF5C2D9872A49F1 /* PBXTargetDependency */, - A7F7A208BB2C6B408383302F78A95358 /* PBXTargetDependency */, - A8FA06137A3979F26306EA7B5705149F /* PBXTargetDependency */, - 915FF2A3DB05B8409181BADA700A557A /* PBXTargetDependency */, - 27287E436AF07A6B7B698B85C294756F /* PBXTargetDependency */, - 531A52EA3E6E5264F0652FE93A9D27A1 /* PBXTargetDependency */, - CB36704C92AA83DEF7CB605BA40D3F93 /* PBXTargetDependency */, - 4C577579233BDF2A8E8683D78C61483D /* PBXTargetDependency */, - 31684301D25D5C14EA5878C08CBB6C46 /* PBXTargetDependency */, - 678F1C4A45C642EDDB9329E37DD3A62F /* PBXTargetDependency */, - B016D9DDE9413E195EE60377424498D9 /* PBXTargetDependency */, - A30EFA7AAE91AF79427C79BC2BF5FA03 /* PBXTargetDependency */, - EE25D6D7206B131C783BBA58768FD11F /* PBXTargetDependency */, - 1924AF25A084764A4F06D3E7BEE9D45A /* PBXTargetDependency */, ); - name = "Pods-Jasonette"; - productName = "Pods-Jasonette"; - productReference = BD188DCDA18CCDF1F7CDC866470603D6 /* Pods_Jasonette.framework */; + name = "DTCoreText-Resources"; + productName = "DTCoreText-Resources"; + productReference = F4E2B1AC73977F10254628C0B7EBE38F /* Resources.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 12066ADDDC81D6D9F1FECEAA97C55D82 /* RMActionController */ = { + isa = PBXNativeTarget; + buildConfigurationList = D703F9F1DD55F08F00F8F8EF3E06072B /* Build configuration list for PBXNativeTarget "RMActionController" */; + buildPhases = ( + FA741EC5CFB5A8F8C2A5647AD36C846C /* Headers */, + 76E9995F8E4DFA256F3EAB40C0A95720 /* Sources */, + B6DFF689CFC3D9D4B87CEEBB6FDBC593 /* Frameworks */, + 82057128EC76EA810372FF8DEB59D275 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RMActionController; + productName = RMActionController; + productReference = 8692149DF8625E0159B298B0B6B79756 /* RMActionController.framework */; productType = "com.apple.product-type.framework"; }; - 3C92F34A664B526FC676F4034F18925D /* INTULocationManager */ = { + 138527DFF3FD347B53F0B37BAF725E3D /* DAKeyboardControl */ = { isa = PBXNativeTarget; - buildConfigurationList = CDEF3A9B1DEBE102C09A66D5E1E25287 /* Build configuration list for PBXNativeTarget "INTULocationManager" */; + buildConfigurationList = 8D5FBEF5641B96C38E2BAED34E65F37E /* Build configuration list for PBXNativeTarget "DAKeyboardControl" */; buildPhases = ( - 0BD44572D89416E11E8FE15DB4A01390 /* Headers */, - CDA005F89F0B951415117DD991E249C1 /* Sources */, - 3342C6C79BF4799EB7CB5E3CED9DE1F8 /* Frameworks */, - FF362CF3764B64FED6938B87412D3CCE /* Resources */, + A03E2EFB59C5C7FDB25EC41831F1E03F /* Headers */, + 6965664CF720336AD83734E8EB7AEE48 /* Sources */, + 558788B301412ECD2E61A1BF7337302C /* Frameworks */, + B4258C26AAA278AC0D05D65C8F06DA2D /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = INTULocationManager; - productName = INTULocationManager; - productReference = 3F3238E8FB79C75517B2CCB9979005E0 /* INTULocationManager.framework */; + name = DAKeyboardControl; + productName = DAKeyboardControl; + productReference = 4E5A4B3F13E4FBE0F6A8902B4E4E733D /* DAKeyboardControl.framework */; productType = "com.apple.product-type.framework"; }; - 42FC5CF7AC172D642DA52EFCB8B8A9CD /* TWMessageBarManager */ = { + 18EBA128F21272535E33AD2077BE9EF9 /* PHFDelegateChain */ = { isa = PBXNativeTarget; - buildConfigurationList = 85E17298FBB84E24669E67B839676FE2 /* Build configuration list for PBXNativeTarget "TWMessageBarManager" */; + buildConfigurationList = 20A94BF05BA0F0AF2C0ACC77035D6078 /* Build configuration list for PBXNativeTarget "PHFDelegateChain" */; buildPhases = ( - E049F7021397D961B03A6BB51AD3023E /* Headers */, - DB69505E982DE6588BF22ECFF67539D5 /* Sources */, - 94A08817C027F5D4E6E569494CC82458 /* Frameworks */, - A017359923B3D56336F15ECB4EF849B4 /* Resources */, + 764820044465312B14B2AC1B6D9B3B0A /* Headers */, + C19DF5B0680AFF401AB9B188FBF4270E /* Sources */, + 17227FDDE4F84D1DEFE02809EE6A553F /* Frameworks */, + 0342A8EAE2A088AC68AD512AF1A1C042 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = TWMessageBarManager; - productName = TWMessageBarManager; - productReference = 8E6E39260F78D7879EC76E1A11A89244 /* TWMessageBarManager.framework */; + name = PHFDelegateChain; + productName = PHFDelegateChain; + productReference = 4A7CCF20E0E659C52C94FD33A3B54E2A /* PHFDelegateChain.framework */; productType = "com.apple.product-type.framework"; }; - 43ABF39E6EB521622728B65060463901 /* AFOAuth2Manager */ = { + 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */ = { isa = PBXNativeTarget; - buildConfigurationList = 2B87C468DED37377315748D3A02D3167 /* Build configuration list for PBXNativeTarget "AFOAuth2Manager" */; + buildConfigurationList = 251B2164B5887A6F83FAC0AAED5A792F /* Build configuration list for PBXNativeTarget "SocketRocket" */; buildPhases = ( - B7912A698A1503305DDD447B39982169 /* Headers */, - A8FBE0A744D29115317DFE2C33F28921 /* Sources */, - F644ADE2F355A5BB32D309DDA4F5B84D /* Frameworks */, - D62F5607494E995DFD8AD45D14C83DC5 /* Resources */, + 739549140641031961B232FC613CAB65 /* Headers */, + 3B776B20C6F493B78C24115EA6761A09 /* Sources */, + 267462C08BE46E2BDF10BC9D4B53CFA6 /* Frameworks */, + DB42D1E0723C25F17F7CAD20FEC59EDD /* Resources */, ); buildRules = ( ); dependencies = ( - 2C2D119D72E7F80304E568FC33D50E4B /* PBXTargetDependency */, ); - name = AFOAuth2Manager; - productName = AFOAuth2Manager; - productReference = E40BA757FB4E61D119A2C90C754F1A6A /* AFOAuth2Manager.framework */; + name = SocketRocket; + productName = SocketRocket; + productReference = 85A01882ED06DFEA2E0CE78BCDB204A7 /* SocketRocket.framework */; productType = "com.apple.product-type.framework"; }; - 4C88BE8B7ED20010F6B5442E1CE749C8 /* APAddressBook */ = { + 227BBE5BEC64BA0EAE27D2254B7BFAA8 /* SWFrameButton */ = { isa = PBXNativeTarget; - buildConfigurationList = AF2444225452756FBA9C5A7F34943E2D /* Build configuration list for PBXNativeTarget "APAddressBook" */; + buildConfigurationList = E5CFCB3D533D8C4D4DFB30DAD1BDD93D /* Build configuration list for PBXNativeTarget "SWFrameButton" */; buildPhases = ( - 71FD3F8F57E3F51051DE66D12475C19B /* Headers */, - 9FF5AF4845DDE8BFBCF5EBFDA4C04B1A /* Sources */, - BC0A07523312A0BB663CE3FAC10EF77F /* Frameworks */, - ECB4877CC323F7C5A3AD7B204C19AAF6 /* Resources */, + 11D76F145B7CD5127F084F34C3F2AB52 /* Headers */, + 7C6F50A469E5051BDB17E83CC0AB5E71 /* Sources */, + 0BD53748834DD954853FAC4847D55E6F /* Frameworks */, + E3033C87A8AC75471F0DF10EA9D98895 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = APAddressBook; - productName = APAddressBook; - productReference = 61D3B4C8E4F29B550C006455FC428B29 /* APAddressBook.framework */; + name = SWFrameButton; + productName = SWFrameButton; + productReference = 1544B54196F3ED808D4C0A9FA781A255 /* SWFrameButton.framework */; productType = "com.apple.product-type.framework"; }; - 557B87E4A5AC450B0AE08ACA6490028E /* PHFComposeBarView */ = { + 348B34D6B9B73E53B3B7E13F1934079C /* BBBadgeBarButtonItem */ = { isa = PBXNativeTarget; - buildConfigurationList = C6E1EF047D6D3337958F436EDA045AE7 /* Build configuration list for PBXNativeTarget "PHFComposeBarView" */; + buildConfigurationList = 194C54D779493A9A0AFD6A3D10B76648 /* Build configuration list for PBXNativeTarget "BBBadgeBarButtonItem" */; buildPhases = ( - F27E76FD1C293093AC899CEAEFEFCF91 /* Headers */, - 8144CAF83BB9281346218791500D0D0E /* Sources */, - A027CC1B5C0CA8ECBD8FE4E6A402A8D3 /* Frameworks */, - 45236C2BB99294C5BC874BE760F00A93 /* Resources */, + DF68A55017E8E3FA4B13460D90B09851 /* Headers */, + F8E5B4615D3A0BA43DE01D1EDDBFDFB6 /* Sources */, + C392029B034C6F78C993352D39DBEA1F /* Frameworks */, + 2C073718445A7D5C00A9777EF930DCEA /* Resources */, ); buildRules = ( ); dependencies = ( - 7A628A080ACC649E17711C6442730853 /* PBXTargetDependency */, ); - name = PHFComposeBarView; - productName = PHFComposeBarView; - productReference = CD263D52C7716C7F8E2ADE1C3E182FF4 /* PHFComposeBarView.framework */; + name = BBBadgeBarButtonItem; + productName = BBBadgeBarButtonItem; + productReference = 10185372742030059278DBCDC9172623 /* BBBadgeBarButtonItem.framework */; productType = "com.apple.product-type.framework"; }; - 5808033EF96F84CEC42633AA2D3F637D /* SDWebImage */ = { + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 63983F01646E0C0F83B5B1817AB5C400 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = 92BAA749E7582D8E6BFCAB44B286ADBE /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - C366F5FD6EC7EE24897F4AC4DAA5A94E /* Headers */, - F4DECA21A7BE3F26B8C0862A251B3404 /* Sources */, - AECC2AB55D3BEBE83A000F6AB5CAC62E /* Frameworks */, - 3E7352CCC1AB7DACAFE56B7DBC1B2BFC /* Resources */, + E6753BDFEBB07E8D02A324A3ED9DBD60 /* Headers */, + 8A2C6B24656F3B9044193975D4F94A3B /* Sources */, + 091D663DADB77D195EC501BA9F055BBF /* Frameworks */, + F8A2AD948690971B214DB045494FA3B4 /* Resources */, ); buildRules = ( ); @@ -5954,53 +6573,54 @@ ); name = SDWebImage; productName = SDWebImage; - productReference = E944E2995B037E934DDEEF9D9CD20314 /* SDWebImage.framework */; + productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; - 5E3BE6A21C2416E7EBD68B59281FCE02 /* NSGIF */ = { + 3AEC09E383B46D12E00628362EB86D67 /* FLEX */ = { isa = PBXNativeTarget; - buildConfigurationList = 893642D84FD276043BCE56682CDC839C /* Build configuration list for PBXNativeTarget "NSGIF" */; + buildConfigurationList = 727534AAADB77873F9481DB4DCB14006 /* Build configuration list for PBXNativeTarget "FLEX" */; buildPhases = ( - BFE295770908E2875377B13E98ACF058 /* Headers */, - 0183D24E99BE77838B12A67029BD1903 /* Sources */, - 9F69452588A17809CA2BF3D037852924 /* Frameworks */, - 0046D0286B337158AA3368D01A305657 /* Resources */, + 30511C47299238817595D346CEEF0AC0 /* Headers */, + 81AB54DA68D7A24C2BADE589B12DE34F /* Sources */, + F5F11F7984C421D78139C84E3E245887 /* Frameworks */, + 0B882AB190F95DD5CEF211F2739C2135 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = NSGIF; - productName = NSGIF; - productReference = 7CE96321B96B44AD12295012ED450F21 /* NSGIF.framework */; + name = FLEX; + productName = FLEX; + productReference = 4AC7180564FE35A293CD0DD977EE56A8 /* FLEX.framework */; productType = "com.apple.product-type.framework"; }; - 60C5D41946161054FD44CFAFAA3B4D14 /* HMSegmentedControl */ = { + 55A8712154E944BC7E33DE1D156E4BBC /* PHFComposeBarView */ = { isa = PBXNativeTarget; - buildConfigurationList = 85ADBB4B0AAB212B2635668CC5E42435 /* Build configuration list for PBXNativeTarget "HMSegmentedControl" */; + buildConfigurationList = 62F38A9821B3DCAAA192249EC8C3AC8A /* Build configuration list for PBXNativeTarget "PHFComposeBarView" */; buildPhases = ( - ADCDC1608ADA591EE7500E47D4FFB8C2 /* Headers */, - BDB0C9AFD63D591577C250B446FC6A65 /* Sources */, - 7EF7185704D14F71EC7B7584CE1937DE /* Frameworks */, - 8C684266D9F991B3C1098632C6BCB8A8 /* Resources */, + 497903E2829E9037047A942E7CFFA12D /* Headers */, + 60F3B22A11457FA55D0AD8369F751454 /* Sources */, + 2F88584D4E2C80529D7872E7E8F117B8 /* Frameworks */, + 2F43E5155727EA8EECADE2E57A411F65 /* Resources */, ); buildRules = ( ); dependencies = ( + B1D9A12ECBF43E10C47679B0139305EE /* PBXTargetDependency */, ); - name = HMSegmentedControl; - productName = HMSegmentedControl; - productReference = 2A4A5A9B446BD29C6F4B29FEAC51A7D9 /* HMSegmentedControl.framework */; + name = PHFComposeBarView; + productName = PHFComposeBarView; + productReference = A6413DDA236139B26117C3464491EA58 /* PHFComposeBarView.framework */; productType = "com.apple.product-type.framework"; }; - 7373AB0671FDF6D195D58D335D03C003 /* REMenu */ = { + 58947B832E91651A9900C44834D21B76 /* REMenu */ = { isa = PBXNativeTarget; - buildConfigurationList = 43813192AE5C8BF7C6D41B2D4B6BCDAC /* Build configuration list for PBXNativeTarget "REMenu" */; + buildConfigurationList = 98014B570AEBC730EAF55351AD3DC6CA /* Build configuration list for PBXNativeTarget "REMenu" */; buildPhases = ( - 29C02445A331EC795D9F72F181595429 /* Headers */, - 3611A4394D39A3C0541DA125E59058C4 /* Sources */, - 681A6DA4EF0B7123BA7D53B4C3C85C7D /* Frameworks */, - D033CC115278394F69877C060F346841 /* Resources */, + C2E2E2EA430B7397470104609C4C46AC /* Headers */, + 2D0F5A3FF61B58A30F190989F2DD4233 /* Sources */, + 2D7AC8CC3FAC6D7AE679D908E5292BF0 /* Frameworks */, + C897FE35A254C55361EBF0E9318332F3 /* Resources */, ); buildRules = ( ); @@ -6008,830 +6628,816 @@ ); name = REMenu; productName = REMenu; - productReference = B1F8DA5502AF0C76569E90285941F642 /* REMenu.framework */; + productReference = D480A2B043DA39A184507E18ABEF3FCC /* REMenu.framework */; productType = "com.apple.product-type.framework"; }; - 7AD7B519FB10D676CDBE9F4B3C65D6B7 /* UICKeyChainStore */ = { + 5E4069B2BCC908BD892C971DCD91EB8C /* AHKActionSheet */ = { isa = PBXNativeTarget; - buildConfigurationList = 9E569A7D7023EAE2BFD009E72DFC71F8 /* Build configuration list for PBXNativeTarget "UICKeyChainStore" */; + buildConfigurationList = EC78EAEEE7EC15DA36344AD3966945E5 /* Build configuration list for PBXNativeTarget "AHKActionSheet" */; buildPhases = ( - CC2E20462DBE5CBB391A7B1E36249F26 /* Headers */, - 3B346439A443CBC685AE40874ABC8228 /* Sources */, - 5AB9509FDC2673977F73857D58EA042E /* Frameworks */, - B7B1F0EC5ADBB1115D6D33F30BE95755 /* Resources */, + 45F46E7A7DDC340F8E5419779C99EBCF /* Headers */, + 08F934B8F7CAA46D1FD1005510CCA77C /* Sources */, + BA342760C9D43F76B14E6609D00D621B /* Frameworks */, + 8DC65F277DBEBBFAE01F52CD2833022D /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = UICKeyChainStore; - productName = UICKeyChainStore; - productReference = A9206F7ADB4184B73FC9E6328ADC5C45 /* UICKeyChainStore.framework */; + name = AHKActionSheet; + productName = AHKActionSheet; + productReference = 8EED9ECD939DA773D74243745941896D /* AHKActionSheet.framework */; productType = "com.apple.product-type.framework"; }; - 7D03E663BD4329BB02BEA5C4259A28AC /* SCSiriWaveformView */ = { + 62BDCEA95B58162F679294C9302CF231 /* INTULocationManager */ = { isa = PBXNativeTarget; - buildConfigurationList = 0BE8FB68970CF583E7425F403CC95415 /* Build configuration list for PBXNativeTarget "SCSiriWaveformView" */; + buildConfigurationList = B87626BECA2E12A4D862293B73044027 /* Build configuration list for PBXNativeTarget "INTULocationManager" */; buildPhases = ( - 1A658A9665D4E1FB23037881BE56705C /* Headers */, - A91AB827AF39A9E5A304B1829C6E9524 /* Sources */, - 0709DD6F849069DA909363DFF0DEF445 /* Frameworks */, - 439CB1E2997514791854FCF83D78354D /* Resources */, + 4A8A4DA98D2A555958C6E154384931D7 /* Headers */, + AB119DABEE70BA1D51D22AF45C5BA381 /* Sources */, + 1D4662290795AF9F9373BF970827AEEB /* Frameworks */, + 6B9FF15E197784901EB77BABB452A481 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SCSiriWaveformView; - productName = SCSiriWaveformView; - productReference = 91F17964D0D5F42EFCA6948E125C1190 /* SCSiriWaveformView.framework */; + name = INTULocationManager; + productName = INTULocationManager; + productReference = 8974F428B5D3819A4909FFB30E8F05F9 /* INTULocationManager.framework */; productType = "com.apple.product-type.framework"; }; - 82B26312EB7846033C795530DC0FD67F /* SocketRocket */ = { + 7406ECC476A62C8FA502AD0E8D1240BE /* UICKeyChainStore */ = { isa = PBXNativeTarget; - buildConfigurationList = 0BBEEB6F4DC120B9DB4962F5398F2447 /* Build configuration list for PBXNativeTarget "SocketRocket" */; + buildConfigurationList = 201D2C419E3F9C10FF265D440678C63D /* Build configuration list for PBXNativeTarget "UICKeyChainStore" */; buildPhases = ( - 3F4E66535CD0999395E95FEE41254F43 /* Headers */, - F9322F0DE1D0512C9CD02B561718B2F2 /* Sources */, - D9B0B444AC1B061111C1F2BFAFDF5041 /* Frameworks */, - 210CED25F87E552262C2A187D197C32B /* Resources */, + 82B5714A06F240438FE8EF9132F85730 /* Headers */, + A639F8AF7D571E7F4B0732FA599BB3D0 /* Sources */, + EBEFD44EE1AAB3782238DC92337CB858 /* Frameworks */, + 455317632AB2F71450F449FD39A0BBFC /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SocketRocket; - productName = SocketRocket; - productReference = FA5379F429CC269E964A272D7314B421 /* SocketRocket.framework */; + name = UICKeyChainStore; + productName = UICKeyChainStore; + productReference = A0A4D131DB063279AE8AF52001C682FE /* UICKeyChainStore.framework */; productType = "com.apple.product-type.framework"; }; - 82B7D0D24512027B92E1BCFB49F2FC1D /* FreeStreamer */ = { + 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */ = { isa = PBXNativeTarget; - buildConfigurationList = 65D6EA4425AEDBDA499365EAC0C7F1F6 /* Build configuration list for PBXNativeTarget "FreeStreamer" */; + buildConfigurationList = 70191416B9573C7ABB42333A08FA2DE4 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; buildPhases = ( - BA94C92B189F95EFC6AAA648C1D3C7D5 /* Headers */, - 018E189B4F3B222F93632E288CAAA71A /* Sources */, - 03448C12E106EA4ED2002C80E0518155 /* Frameworks */, - D5FBFE3BF788E441644239873B497824 /* Resources */, + 8F0EBAB2761523F18BB73EB4DC5CBEC3 /* Headers */, + A139D4C63A1E1EDD89903B9B6D93A3AC /* Sources */, + 1AA3C16B4B3AB40CA74BDDADEF5C143A /* Frameworks */, + 435BF4D16B2F9CAB6E7F883F30E32B74 /* Resources */, ); buildRules = ( ); dependencies = ( - EC4388DA06CBD97481D641B37DE663BE /* PBXTargetDependency */, ); - name = FreeStreamer; - productName = FreeStreamer; - productReference = AB60B629F159129D64DDD58FDB30192A /* FreeStreamer.framework */; - productType = "com.apple.product-type.framework"; - }; - 86F00601FD3BF53D97B8E68A538AF4F3 /* TTTAttributedLabel */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3299FF248C98FCBF39210DB329310EA9 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */; - buildPhases = ( - 254CEBFE54B8C89BD0A05788C7BA4466 /* Headers */, - 0EE3D374DC7F4877F6388B9B2AA825E8 /* Sources */, - 80F8B0A08CD915980443933A890813BC /* Frameworks */, - FFA7F152233B175EF95405EBEF6D4F9D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TTTAttributedLabel; - productName = TTTAttributedLabel; - productReference = C7B4684400DED67C5E1E6B259BBFF1A7 /* TTTAttributedLabel.framework */; + name = MBProgressHUD; + productName = MBProgressHUD; + productReference = 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */; productType = "com.apple.product-type.framework"; }; - 92DA820CD3CCA231F765AB9682FA766B /* Reachability */ = { + 8B9227BF2FD05182EAA381C73EB78441 /* NSGIF */ = { isa = PBXNativeTarget; - buildConfigurationList = 3C02EE5AF075539BF0A7766B0466A3BE /* Build configuration list for PBXNativeTarget "Reachability" */; + buildConfigurationList = ABA5B10C19842255EEDA4FBE22D94B5F /* Build configuration list for PBXNativeTarget "NSGIF" */; buildPhases = ( - 252FF00E33FC87557C75990024FD4126 /* Headers */, - CD3AD15ABAA7803365C57DA6EA0124ED /* Sources */, - 936735819B880FB975F69F5EEA07E30B /* Frameworks */, - 202793E5248811F3657749961FCC70D9 /* Resources */, + 9BE9BBEEC131B5524A7132A60A99082E /* Headers */, + 34EDEAECEF64773F44F1FE69B3A92584 /* Sources */, + 3069FD1742B15ABD93F8186A79E1846A /* Frameworks */, + EA6C67621E1DAAE8F859F52920D11B77 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = Reachability; - productName = Reachability; - productReference = 14741E32483AD7253EBC66C24EF99B7B /* Reachability.framework */; + name = NSGIF; + productName = NSGIF; + productReference = 3B447D48947836B83C98269D35855236 /* NSGIF.framework */; productType = "com.apple.product-type.framework"; }; - 977AA9FA7297E4D244CB03C53FDF1916 /* DAKeyboardControl */ = { + 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */ = { isa = PBXNativeTarget; - buildConfigurationList = 47690E3A4E51BA9F92314878B4030597 /* Build configuration list for PBXNativeTarget "DAKeyboardControl" */; + buildConfigurationList = 78CEC99C2DF7E6C6016412A4AAE499AD /* Build configuration list for PBXNativeTarget "DTFoundation" */; buildPhases = ( - EA2F372D37D644557993D438A8A5B241 /* Headers */, - 7A6BA73C75F0ED94D35D128E70F707B2 /* Sources */, - CA8ED5A48AC155A30F894C5A99CA4F83 /* Frameworks */, - 6FD9426FF7066B875693CE3213B25291 /* Resources */, + EC2DA2B5EADD5C3BCCC3BB7B25091174 /* Headers */, + 00D747E0088E51235CDD619C09A417C6 /* Sources */, + 32AC4FBF702DA2357C6E33678701CE7C /* Frameworks */, + 7EB7B2E293AA4DD954A9C6977F403333 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = DAKeyboardControl; - productName = DAKeyboardControl; - productReference = 8D4431198860DAA616545F1721451E35 /* DAKeyboardControl.framework */; + name = DTFoundation; + productName = DTFoundation; + productReference = D1E89A31867FF1FB44B4B999988F1B82 /* DTFoundation.framework */; productType = "com.apple.product-type.framework"; }; - 9840A7F641CB3A28ED681EAA23B3A070 /* AHKActionSheet */ = { + 9487B084D206F15C70584B251B79A311 /* RMDateSelectionViewController */ = { isa = PBXNativeTarget; - buildConfigurationList = 42C561356C9DF50BD8C65711F7CA85BC /* Build configuration list for PBXNativeTarget "AHKActionSheet" */; + buildConfigurationList = 9C0229B8CBE37997B0BCDDCBA18EFAFF /* Build configuration list for PBXNativeTarget "RMDateSelectionViewController" */; buildPhases = ( - E7F43D289BD424EC532AA2814D1BC516 /* Headers */, - EB0E95A386FACD9CAE79625AD126F53E /* Sources */, - 4396282138E8915AEAEBEB19D8C0158B /* Frameworks */, - 1E39881F21EA6D37F2E5D66967306E33 /* Resources */, + 3484467E152201526F2DE5C3A9138340 /* Headers */, + 00F892ABFFCB63EBA1E7DEDA1E543299 /* Sources */, + 0C8A7758DE25477AC84FD3EBC822446E /* Frameworks */, + B0ABFF40324B4E577F1443844FD17E26 /* Resources */, ); buildRules = ( ); dependencies = ( + 35C4D3B4341D3619A8A8C5C94013487A /* PBXTargetDependency */, ); - name = AHKActionSheet; - productName = AHKActionSheet; - productReference = BB41E1FC01246398E6649D720591B511 /* AHKActionSheet.framework */; + name = RMDateSelectionViewController; + productName = RMDateSelectionViewController; + productReference = DFA96C5BE21F66333FB92E0B7FA55A92 /* RMDateSelectionViewController.framework */; productType = "com.apple.product-type.framework"; }; - 9AD48931F9D7F36D3269DE407ACDE4DA /* RMActionController */ = { + 99A737B746331762ACD053E5EF1415F7 /* SBJson */ = { isa = PBXNativeTarget; - buildConfigurationList = 903E8FCE467310084C557E94245DB1D1 /* Build configuration list for PBXNativeTarget "RMActionController" */; + buildConfigurationList = F096D0E933E2DB8486A319E0B22A50C2 /* Build configuration list for PBXNativeTarget "SBJson" */; buildPhases = ( - E2600F0C3E344EBB6537A773FBBCEBCA /* Headers */, - 6CF9908DD7DA1373BB7EEBA6F9C32BA2 /* Sources */, - F4266527F331E9C11E8EECDA58676555 /* Frameworks */, - 93DD43FD372D7CA62CE9022690539927 /* Resources */, + 8620852B6C7B5D1297ECF75A90C1A9DC /* Headers */, + 04D098CE006B69CCEEBC555A71E9BE5F /* Sources */, + C1443CB51FE76F02357C66451D0EACFA /* Frameworks */, + FD39AD63F1943935C8C0ADA6C9A06E95 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = RMActionController; - productName = RMActionController; - productReference = F4391BA7A1CCD3B29EC5D094090870AE /* RMActionController.framework */; + name = SBJson; + productName = SBJson; + productReference = DDF6A31DFFDAE17F80A34E666AA79832 /* SBJson.framework */; productType = "com.apple.product-type.framework"; }; - A2B588A0B3DE0C5843F6866C2D3C96DD /* DHSmartScreenshot */ = { + AC337482C8CEE36C809E23FDC64FC799 /* APAddressBook */ = { isa = PBXNativeTarget; - buildConfigurationList = 8698BFF97EC90271CABA5150CB08475F /* Build configuration list for PBXNativeTarget "DHSmartScreenshot" */; + buildConfigurationList = AC963C14B45796E6FD689476CA989C8E /* Build configuration list for PBXNativeTarget "APAddressBook" */; buildPhases = ( - 040CF4C111B1DA6CCEBF03C9E166915D /* Headers */, - 75E8EE6A1D3BF71183E8DE0FC69E2E26 /* Sources */, - A7E0D8820C204F92C9B03B406E610090 /* Frameworks */, - 94AE0E88E6B2D2BDE69BDEAA36385877 /* Resources */, + 1C7421D55D5167EFF1DE93EDD4630293 /* Headers */, + 0A83F4456867A2F292DB23F37C1BB3D7 /* Sources */, + 102464C0F668304EE565714291C72893 /* Frameworks */, + 532E5A97CAE60B7E59FFC32F0077D926 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = DHSmartScreenshot; - productName = DHSmartScreenshot; - productReference = 318D529FBBACFB31C32B65B0E44D0EC1 /* DHSmartScreenshot.framework */; + name = APAddressBook; + productName = APAddressBook; + productReference = 6AB2FCE2F293A7B9D0BAC1972EC2E76B /* APAddressBook.framework */; productType = "com.apple.product-type.framework"; }; - A38CBBB392959A220AF6E1DC305E77B0 /* SWFrameButton */ = { + AC60DD87A4716856282507DFBBBE720C /* SWTableViewCell */ = { isa = PBXNativeTarget; - buildConfigurationList = 5A21F2E085EB553C9F81C677202202EB /* Build configuration list for PBXNativeTarget "SWFrameButton" */; + buildConfigurationList = B53698507ED0ADE637053680CF534324 /* Build configuration list for PBXNativeTarget "SWTableViewCell" */; buildPhases = ( - E526D088AF0216309CA564944C0406AD /* Headers */, - E00F2CD5DC171BDC08627E04B7C6CEB7 /* Sources */, - EBDE5327B079C5540B6DBF59B8FBF928 /* Frameworks */, - 4D431D569EBE09F69D350EBF6E6B9D00 /* Resources */, + 7969C7FE260E75B1ED3E2B719EE9AB69 /* Headers */, + 98AC0EFC4BEB8D5C0A9E65A0CDABFAF8 /* Sources */, + DD2D42FD6E3A9003801A0C01C73A7C7F /* Frameworks */, + 52A3B98B4C50E8D61948A9359C85F116 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SWFrameButton; - productName = SWFrameButton; - productReference = 8905056BE752C30914FE90B590213460 /* SWFrameButton.framework */; + name = SWTableViewCell; + productName = SWTableViewCell; + productReference = E01A22F240F2104F986828C36985F6A7 /* SWTableViewCell.framework */; productType = "com.apple.product-type.framework"; }; - AC877FA2DB24167FBA0E50094C7C9D23 /* PHFDelegateChain */ = { + B0F1C48D098B58DC43BBE0AE75933BA3 /* DHSmartScreenshot */ = { isa = PBXNativeTarget; - buildConfigurationList = 3CBD9309017BDC5BA35D13B0C93FC147 /* Build configuration list for PBXNativeTarget "PHFDelegateChain" */; + buildConfigurationList = 1BB0441AD843BD7F1E91099A8B187495 /* Build configuration list for PBXNativeTarget "DHSmartScreenshot" */; buildPhases = ( - BFB86164A83BA0FDC14F7D6158C5EFEF /* Headers */, - F285565AC0DF7A4D1C4D2C528A80149C /* Sources */, - D2CC1D11E4984401FC0C4185C5936C2A /* Frameworks */, - C8EA61E116836D723B27D87277520A46 /* Resources */, + ABF8FBC9DD230D6CD614A66FA1D80B03 /* Headers */, + 8C0C43350F6320EB0549302D9759EE70 /* Sources */, + 7DCDEE4CBBB30CA3598A0F17A2BA95A0 /* Frameworks */, + 1B2761843AC28F5EB46C4C0AA03AEE9D /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = PHFDelegateChain; - productName = PHFDelegateChain; - productReference = A1018895EDC769D307880CECA5D4B151 /* PHFDelegateChain.framework */; + name = DHSmartScreenshot; + productName = DHSmartScreenshot; + productReference = 552AEC4A0E655977AF81FBBC87E22706 /* DHSmartScreenshot.framework */; productType = "com.apple.product-type.framework"; }; - AD408BAB384B6DDA88A50A16FB158B66 /* MBProgressHUD */ = { + B4CEB0284B4209C3EB1D2921056254BE /* HMSegmentedControl */ = { isa = PBXNativeTarget; - buildConfigurationList = 09600571F63852ACA3B7A23B4729B6A4 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; + buildConfigurationList = F9207389B4B7BDDB7AB1FA9461384777 /* Build configuration list for PBXNativeTarget "HMSegmentedControl" */; buildPhases = ( - 5CE17C32A4504B751C3375AA3458D828 /* Headers */, - 88F228B332626246A6113EBE81AB9792 /* Sources */, - 35A398F6CC37A8D8E469498B848E286F /* Frameworks */, - 96C60439BF31F7D396AAA2AAD2622A98 /* Resources */, + 381B612C15080C85EE98EC156D812E90 /* Headers */, + 883FE44F3CF04FA82F99A6B915FF4A08 /* Sources */, + F94139468DCC7BBD2A5ECB767333784F /* Frameworks */, + 8E174FE42433A65583C9ABA9845CA935 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = MBProgressHUD; - productName = MBProgressHUD; - productReference = 2BB1C5C8FA8F8F787956B36994655165 /* MBProgressHUD.framework */; + name = HMSegmentedControl; + productName = HMSegmentedControl; + productReference = EAF47B8D3BA5B9248FB8BA7EFB248038 /* HMSegmentedControl.framework */; productType = "com.apple.product-type.framework"; }; - AE001715EDDB6DE052255F8C384E9F11 /* JSCoreBom */ = { + B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */ = { isa = PBXNativeTarget; - buildConfigurationList = B0B687EDDCCE0A59D6462A22E037201A /* Build configuration list for PBXNativeTarget "JSCoreBom" */; + buildConfigurationList = B521FD8BB22156CBDD2753426FDE7278 /* Build configuration list for PBXNativeTarget "DTCoreText" */; buildPhases = ( - 15B7E05ACE71636410D530D115C2BF6F /* Headers */, - 5DAC05C83068F33E86A81236C7E68CD2 /* Sources */, - 597872773FB445065BA005ECF18C67BA /* Frameworks */, - 27DB38B45C553E7A28FBB39645B6E6DC /* Resources */, + 0B80A5EB4E8551BE0D020690988B702B /* Headers */, + 9F3CC9F5549BC1F5794FCD124F9453C6 /* Sources */, + 5DCD7B0CC017B3AF6B46BD165237FAD9 /* Frameworks */, + E6D0F515CAD1A0AB27FC461B5A25E862 /* Resources */, ); buildRules = ( ); dependencies = ( + A40935B8F01591DC720CE1963B890D4B /* PBXTargetDependency */, + 5DF1B7A70A64C5232A12AC3C13FCC4B8 /* PBXTargetDependency */, ); - name = JSCoreBom; - productName = JSCoreBom; - productReference = 02D0F0E36078FE736418D3B81DEFB41B /* JSCoreBom.framework */; + name = DTCoreText; + productName = DTCoreText; + productReference = EDA6D5D7D0A04878EE78FAAE94F65068 /* DTCoreText.framework */; productType = "com.apple.product-type.framework"; }; - AE28BD5EEB0DF7799198DF9206AA8FBF /* OMGHTTPURLRQ */ = { + BECD36891A8DC297700F9296F5634B97 /* libPhoneNumber-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = D2F3D88AFC9300917E17B1E4C1F72C9E /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */; + buildConfigurationList = 4A3074F499FE83AAE9A127A708EE1B3A /* Build configuration list for PBXNativeTarget "libPhoneNumber-iOS" */; buildPhases = ( - FB1D28969747F926DA56C4BBDD32393E /* Headers */, - 6A8D83896B810F6BABEA0E76C657E706 /* Sources */, - 15154975EB333930F24BFF7972ED4D99 /* Frameworks */, - 63C37DD57CE2DBB1A411714FB292BA92 /* Resources */, + 0A10D1DB27DAA8D2CA5A242DD760D567 /* Headers */, + 0DBDB558A4E12F8A74262DA859BDADB2 /* Sources */, + 3396872C7153600DEC6BAE4171997AD0 /* Frameworks */, + 3C49CE47A7C7EBE4BCFEAF099E3EDB9C /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = OMGHTTPURLRQ; - productName = OMGHTTPURLRQ; - productReference = F4F94D4C37646D01BCCFCDEDF7802E32 /* OMGHTTPURLRQ.framework */; + name = "libPhoneNumber-iOS"; + productName = "libPhoneNumber-iOS"; + productReference = 421ABAD2F376C4185F388A387E2E4655 /* libPhoneNumber_iOS.framework */; productType = "com.apple.product-type.framework"; }; - B661F6B2A4D53F3A1F5A0925C752E388 /* libPhoneNumber-iOS */ = { + C3AAC0817EA4DC8BD9C0046F50078BF9 /* FreeStreamer */ = { isa = PBXNativeTarget; - buildConfigurationList = 540FBE61A3C6E83415E3F974F23BFCDF /* Build configuration list for PBXNativeTarget "libPhoneNumber-iOS" */; + buildConfigurationList = BEB72DB9A60947AE021B690419453511 /* Build configuration list for PBXNativeTarget "FreeStreamer" */; buildPhases = ( - E2E965A86508B0CD51ADC6903CBF4551 /* Headers */, - 86E09CAA18D62DAF750A42735C8212F9 /* Sources */, - FBBCE1259C4AC9AB8F63FC0CB14B6953 /* Frameworks */, - 17212735F51B2C40EE9341AC216D85FD /* Resources */, + 27BA20A09F45A7BE740A049D4135B725 /* Headers */, + F8181AC6B4FA4BA4C1FAB051DD97E543 /* Sources */, + C6B25CA2E4DDE998BD65EE34F11CECCF /* Frameworks */, + BE09AD0A5D54B92019710EFF0A549C9B /* Resources */, ); buildRules = ( ); dependencies = ( + 11941DD9D10DB64A7517B0F49D24F600 /* PBXTargetDependency */, ); - name = "libPhoneNumber-iOS"; - productName = "libPhoneNumber-iOS"; - productReference = 97F417414DF505A13065444BDC4975F5 /* libPhoneNumber_iOS.framework */; + name = FreeStreamer; + productName = FreeStreamer; + productReference = 359F20447DD6B2DABE3B77D75DA92F82 /* FreeStreamer.framework */; productType = "com.apple.product-type.framework"; }; - C4DDC75F9C182E9D3A72423E2B66B21F /* NSHash */ = { + CAA047C0F5E4106F3904E8497FA17F97 /* Reachability */ = { isa = PBXNativeTarget; - buildConfigurationList = 8B91DC036CB0FAE950422619B90FC1F9 /* Build configuration list for PBXNativeTarget "NSHash" */; + buildConfigurationList = 967D18D07FE64187100F3B94887CD56E /* Build configuration list for PBXNativeTarget "Reachability" */; buildPhases = ( - 06D740DD27FA07CC352FA98F916ABF3C /* Headers */, - EF50201A0074FEB7CAF8BDED9B1C11DE /* Sources */, - E9457A4DA91464A76E81E8564FD21CD6 /* Frameworks */, - C6DC2F78E584D0F60F896E234CF1981C /* Resources */, + CF7ECEEE2375848FB7EEE57CBB7D67B3 /* Headers */, + 84416D0B5E68795D45B837C8747089E6 /* Sources */, + 0675A331A334821C1D22FD359FF56BA2 /* Frameworks */, + 84BBD6D0404446B741CEE816B73D8F26 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = NSHash; - productName = NSHash; - productReference = FF0A5007253B5FE2982C91527BFDAC1F /* NSHash.framework */; + name = Reachability; + productName = Reachability; + productReference = 400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */; productType = "com.apple.product-type.framework"; }; - C5635985C9FCB8A3529BCB087A3B72B6 /* IQAudioRecorderController */ = { + CCA24ECF8C3E122E885F6912C0262B90 /* IQAudioRecorderController */ = { isa = PBXNativeTarget; - buildConfigurationList = 324120D8CA68C84CB87479B2423550C7 /* Build configuration list for PBXNativeTarget "IQAudioRecorderController" */; + buildConfigurationList = 6019C17940D6B360C34A2D3D79C1D2A1 /* Build configuration list for PBXNativeTarget "IQAudioRecorderController" */; buildPhases = ( - B633BCCC34F9CF262831217529277F96 /* Headers */, - 346F5981595298553A1EA154533A58C6 /* Sources */, - D514AF49CAD2E1B407687D5EBD659114 /* Frameworks */, - 68E34770ECB1C6327364C1B6BC29DE7A /* Resources */, + BAC41A9ED87EEB9E4006C8B82BA6BB83 /* Headers */, + F8B8CFB4C6C83A12EA5BC89DECACFDFE /* Sources */, + FE7B604E5DBC84EACCF1DF18FD8F4F0E /* Frameworks */, + 1E766B950D30B4D16E2DB2B062BFCC10 /* Resources */, ); buildRules = ( ); dependencies = ( - 2EE7C18586A7963ADE7E9D0C477B2756 /* PBXTargetDependency */, + FC4ADF939391FFBE0DB443E30A4A0F61 /* PBXTargetDependency */, ); name = IQAudioRecorderController; productName = IQAudioRecorderController; - productReference = 051E14F217E39785978192242DAF7155 /* IQAudioRecorderController.framework */; + productReference = F9F7F9600F36D94C0CBB424098A5E418 /* IQAudioRecorderController.framework */; productType = "com.apple.product-type.framework"; }; - C85BB5559C4F5CDE5F6B261B4EE0C54F /* BBBadgeBarButtonItem */ = { + D27AAB10D754F414F3D10804770A1567 /* AFOAuth2Manager */ = { isa = PBXNativeTarget; - buildConfigurationList = CD36BF5AC5B2EEBABCCD5DB361090C1F /* Build configuration list for PBXNativeTarget "BBBadgeBarButtonItem" */; + buildConfigurationList = 3C04466EECEEAF47528A0F3E83F0742B /* Build configuration list for PBXNativeTarget "AFOAuth2Manager" */; buildPhases = ( - 5BC6FB0555E0C04C04523F4AAD78D079 /* Headers */, - CDE35D9AD8F7D9F2C878BE39CF9D1A8C /* Sources */, - 699AF05FE430837D360357F3494DE79B /* Frameworks */, - B4F4D993B4CD6EFCC545B7B60262027A /* Resources */, + 20EE7B3BD0B81612909BD372D5AC7CE6 /* Headers */, + 78E0B7AF6BBF31BC54EE09F3CB3D57B9 /* Sources */, + BE694BF4D4EF1DC23A19202351E72285 /* Frameworks */, + 9DC788CC48E377FC63056B3B99966779 /* Resources */, ); buildRules = ( ); dependencies = ( + 89386A29F49D219124BE9D236A0E3573 /* PBXTargetDependency */, ); - name = BBBadgeBarButtonItem; - productName = BBBadgeBarButtonItem; - productReference = 6A705BB935FFD33E97659567904F3C2B /* BBBadgeBarButtonItem.framework */; + name = AFOAuth2Manager; + productName = AFOAuth2Manager; + productReference = D126097C2C01A62945DAB5FD692100F0 /* AFOAuth2Manager.framework */; productType = "com.apple.product-type.framework"; }; - C9AB71DF8DA2C131DC2C4DD93877A561 /* DTCoreText */ = { + D76BE29FE832155DDE00968858DCAB38 /* SCSiriWaveformView */ = { isa = PBXNativeTarget; - buildConfigurationList = 28A25595E91758A9E7E24C0A535925D6 /* Build configuration list for PBXNativeTarget "DTCoreText" */; + buildConfigurationList = A55FCF8F2E33243F12DFAB18B9F155A6 /* Build configuration list for PBXNativeTarget "SCSiriWaveformView" */; buildPhases = ( - 023678CA8FF639D9982309EA77DE1309 /* Headers */, - D0C6B7CD8BE9017CF72DDBCAE35F7AC6 /* Sources */, - 0DD5591E3D924F881048587FD255C531 /* Frameworks */, - 9ACE29322386981FBAE82B39F952AE71 /* Resources */, + 42F498431F462BDFF78D92E4770E91A2 /* Headers */, + E1807FFE0A9DAEB615BDEC6345A7D11A /* Sources */, + B6E79DF0300800B11BD3044161146A0A /* Frameworks */, + BE137A354E2583017BB981CCA5C8EA42 /* Resources */, ); buildRules = ( ); dependencies = ( - 7121857D79F1116D6D67FA68C9F7F0F1 /* PBXTargetDependency */, - 45DE2F313DCC55D45A536004275A1748 /* PBXTargetDependency */, ); - name = DTCoreText; - productName = DTCoreText; - productReference = 9E6C375AFDF60B24529C666180296602 /* DTCoreText.framework */; + name = SCSiriWaveformView; + productName = SCSiriWaveformView; + productReference = 830DC758CE89836B130B50F4DA7A0267 /* SCSiriWaveformView.framework */; productType = "com.apple.product-type.framework"; }; - D1CCA53310013DC011604B1B4236B9B9 /* DTCoreText-Resources */ = { + DA7C4D3C2DEFEAF833D56EE844ADC77A /* JSCoreBom */ = { isa = PBXNativeTarget; - buildConfigurationList = B5BCB1C0B3531D9245B141005CB7D743 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */; + buildConfigurationList = E77162C5311DA2B232589278827059AB /* Build configuration list for PBXNativeTarget "JSCoreBom" */; buildPhases = ( - ED256CEA9D882A995CB13531B6EBB93E /* Sources */, - 7DB36F4FE78DEE88D295047F82F70342 /* Frameworks */, - 74C7DA35918B275BE33C94AE237E653C /* Resources */, + D61E7CB8A6925C9C3318AC6DE314FD77 /* Headers */, + C0F31087860A8D8EE72FC047C98B1405 /* Sources */, + CABD2B40EAAFF98550BC088CF5906D04 /* Frameworks */, + 626782E26D38E824D2E9C4A35A01FB90 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "DTCoreText-Resources"; - productName = "DTCoreText-Resources"; - productReference = 39E155782CDCF4D13D17CC87E2D5A1A1 /* Resources.bundle */; - productType = "com.apple.product-type.bundle"; + name = JSCoreBom; + productName = JSCoreBom; + productReference = BF5B4B34263B35EECDD188E323B121C5 /* JSCoreBom.framework */; + productType = "com.apple.product-type.framework"; }; - D2A2DED5A53736DF6E0ED9F4A0877BB9 /* TDOAuth */ = { + DE59D3D21AECD5F399E953205FB55A86 /* OMGHTTPURLRQ */ = { isa = PBXNativeTarget; - buildConfigurationList = 6A2E2B4A26E7D85E10F26014EC47FD70 /* Build configuration list for PBXNativeTarget "TDOAuth" */; + buildConfigurationList = 988432AF8D4A33DD5623507EB911DAAB /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */; buildPhases = ( - AB1EF21EEEA8FEFDEDB24DC58CEBAC54 /* Headers */, - 840E68739B48818F9CB86AA8B26BF940 /* Sources */, - 1C50B0B85EF08345B6480B31FE5B0FD1 /* Frameworks */, - C6E4A5BF4865A01867F588417652B2D4 /* Resources */, + 1E2699BED3BA8C1420C1511EE7E8F325 /* Headers */, + F3E743F489EEECAF8E060624A20385CB /* Sources */, + 19A200470AA004C1F206A6BCA1062B11 /* Frameworks */, + 559991F87DC3CC55DB678F93DACB34A0 /* Resources */, ); buildRules = ( ); dependencies = ( - CFBD115A5D9E194282B17351C70D1215 /* PBXTargetDependency */, ); - name = TDOAuth; - productName = TDOAuth; - productReference = 8A83B62D116416D79AA16FE0D44BFE05 /* TDOAuth.framework */; + name = OMGHTTPURLRQ; + productName = OMGHTTPURLRQ; + productReference = 1A83E960361FE36341DE7B3438851568 /* OMGHTTPURLRQ.framework */; productType = "com.apple.product-type.framework"; }; - DB2558BC2636A026A53063CD7BE931B0 /* AFNetworking */ = { + E077C5049157367A707E75CFDAB49F84 /* TTTAttributedLabel */ = { isa = PBXNativeTarget; - buildConfigurationList = 658E06B6D71D736DB0366F4432481FE9 /* Build configuration list for PBXNativeTarget "AFNetworking" */; + buildConfigurationList = C02417645DD8D2ADC5C18E5D65150FE7 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */; buildPhases = ( - D19BF424495801C467341CF257170DD8 /* Headers */, - 1624591796728A53B1A7EC2B9F9EA45E /* Sources */, - B791F38653967D252EA9590093DD668B /* Frameworks */, - 85BE49610DCA0DAA65712A91363101F1 /* Resources */, + 49DD9354F69CB31AC8621E03553C14E1 /* Headers */, + 3A60957868991716E9072D2C002EDA9A /* Sources */, + F844269B4A9FE8E802184828C6C3B6A6 /* Frameworks */, + 35F22CA232A03C27DADEB9ABD364E7C3 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = AFNetworking; - productName = AFNetworking; - productReference = 553D68EA4E14EE1E8537DDA11EDFCB11 /* AFNetworking.framework */; + name = TTTAttributedLabel; + productName = TTTAttributedLabel; + productReference = 24906358D4472592AAB45254D975D5E2 /* TTTAttributedLabel.framework */; productType = "com.apple.product-type.framework"; }; - E09595D164AB76AD6D892B137D508E81 /* DTFoundation */ = { + E1C8C155FEE070887D779FD917378BA8 /* TWMessageBarManager */ = { isa = PBXNativeTarget; - buildConfigurationList = E5A1994B415CB28F736787F2C8134320 /* Build configuration list for PBXNativeTarget "DTFoundation" */; + buildConfigurationList = D4EDBAA25AE9AD7569319F915C2CBF2C /* Build configuration list for PBXNativeTarget "TWMessageBarManager" */; buildPhases = ( - 090278469DD032C97E1B6E35ED06E04D /* Headers */, - C661E1D17A969EE87FEC56C49781E7A1 /* Sources */, - CC34AE363BDFCC0494C248F7BCDC7401 /* Frameworks */, - CEDD3487AC32B5ADCCBA739E9E9FE138 /* Resources */, + 5387EFB3CA9F0137D71542D441F55657 /* Headers */, + BF990AB23645FB8B5A4C090ED110F30E /* Sources */, + C0314679ACF3FC997C9D6BFB76D26973 /* Frameworks */, + DA20BE816D32A35D6A5167025817E684 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = DTFoundation; - productName = DTFoundation; - productReference = 0BA95EB4697D3059990A109CB20E4678 /* DTFoundation.framework */; + name = TWMessageBarManager; + productName = TWMessageBarManager; + productReference = 018DA84275AC6E25C9571F2B6E74C5AC /* TWMessageBarManager.framework */; productType = "com.apple.product-type.framework"; }; - F5A071230F00E7E32386E8310A2DA6FB /* SZTextView */ = { + EB07D88E59040F928F73F9A46CA65C69 /* JDStatusBarNotification */ = { isa = PBXNativeTarget; - buildConfigurationList = 6B8942A1597BAF2500DB09E3E2AC4905 /* Build configuration list for PBXNativeTarget "SZTextView" */; + buildConfigurationList = 801CFFB944D9B8E195CB81F66932D41E /* Build configuration list for PBXNativeTarget "JDStatusBarNotification" */; buildPhases = ( - 69419FBDF8E90792E8BE207A8EA280F6 /* Headers */, - 541CB107DC4F9B3D2A590BC3296D745D /* Sources */, - 41B97CA0020808F069679A12BA8457A5 /* Frameworks */, - A8E567B386B39F33FA94F414039DB041 /* Resources */, + CF8CBA3939CE6AC3668B398365543F9E /* Headers */, + 89B361018E30DDD26C5A1F5268FD1ABD /* Sources */, + 1440C983D17C5C204111D0DB454F5532 /* Frameworks */, + 711B5888EBCE418A7796D4A48107F809 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SZTextView; - productName = SZTextView; - productReference = 116DC6A652F7C0E89D2169EA2EB69384 /* SZTextView.framework */; + name = JDStatusBarNotification; + productName = JDStatusBarNotification; + productReference = F2F51A76CEBA43C420F8F841CF2645DE /* JDStatusBarNotification.framework */; productType = "com.apple.product-type.framework"; }; - F704787946C680A43977C21E937624CF /* SWTableViewCell */ = { + EDD538E91ECEB947B84FB22FC7425180 /* SZTextView */ = { isa = PBXNativeTarget; - buildConfigurationList = 7D9B5935E0D878B5E0B4AADB8DDDD598 /* Build configuration list for PBXNativeTarget "SWTableViewCell" */; + buildConfigurationList = DB62BDD98FE07D315AAC325D8DFC8B0D /* Build configuration list for PBXNativeTarget "SZTextView" */; buildPhases = ( - E7EB1D534AFF224C872E805FF9B967DC /* Headers */, - 7E627EB3FB09873B7DD57557CBCB833D /* Sources */, - 27851FF8216AFA257B595CD58FBF9B66 /* Frameworks */, - 0661C1916214B845187D51A833F87F8A /* Resources */, + 7C8E7066377729586BD868305D8E856F /* Headers */, + 5119BA6236B8BF38CFD281EA04A87169 /* Sources */, + 7C5C6861FBE2C4DF9976AC9ACEB353C7 /* Frameworks */, + 7F11155C97A6C63E2C884BCD71473AA8 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = SWTableViewCell; - productName = SWTableViewCell; - productReference = 8303466B3D1668DDE02BA95031381AF6 /* SWTableViewCell.framework */; + name = SZTextView; + productName = SZTextView; + productReference = 6CB32DD4D074BCF496D34972EA157DFC /* SZTextView.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1240; }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 915818DAB85E7E0FB5E8E881C0776990 /* Products */; + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = C8539D7E3EA77FF160D52E7DB2F8A1A1 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - DB2558BC2636A026A53063CD7BE931B0 /* AFNetworking */, - 43ABF39E6EB521622728B65060463901 /* AFOAuth2Manager */, - 9840A7F641CB3A28ED681EAA23B3A070 /* AHKActionSheet */, - 4C88BE8B7ED20010F6B5442E1CE749C8 /* APAddressBook */, - C85BB5559C4F5CDE5F6B261B4EE0C54F /* BBBadgeBarButtonItem */, - 977AA9FA7297E4D244CB03C53FDF1916 /* DAKeyboardControl */, - A2B588A0B3DE0C5843F6866C2D3C96DD /* DHSmartScreenshot */, - C9AB71DF8DA2C131DC2C4DD93877A561 /* DTCoreText */, - D1CCA53310013DC011604B1B4236B9B9 /* DTCoreText-Resources */, - E09595D164AB76AD6D892B137D508E81 /* DTFoundation */, - 037435BA46F89806ED78BA9295251016 /* FLEX */, - 82B7D0D24512027B92E1BCFB49F2FC1D /* FreeStreamer */, - 60C5D41946161054FD44CFAFAA3B4D14 /* HMSegmentedControl */, - 3C92F34A664B526FC676F4034F18925D /* INTULocationManager */, - C5635985C9FCB8A3529BCB087A3B72B6 /* IQAudioRecorderController */, - 1B21AD41EA8EE760ABE8B62F4AB9A473 /* JDStatusBarNotification */, - AE001715EDDB6DE052255F8C384E9F11 /* JSCoreBom */, - B661F6B2A4D53F3A1F5A0925C752E388 /* libPhoneNumber-iOS */, - AD408BAB384B6DDA88A50A16FB158B66 /* MBProgressHUD */, - 5E3BE6A21C2416E7EBD68B59281FCE02 /* NSGIF */, - C4DDC75F9C182E9D3A72423E2B66B21F /* NSHash */, - AE28BD5EEB0DF7799198DF9206AA8FBF /* OMGHTTPURLRQ */, - 557B87E4A5AC450B0AE08ACA6490028E /* PHFComposeBarView */, - AC877FA2DB24167FBA0E50094C7C9D23 /* PHFDelegateChain */, - 3154D7D2C3DBF1DF06AF199D18F3DF59 /* Pods-Jasonette */, - 92DA820CD3CCA231F765AB9682FA766B /* Reachability */, - 7373AB0671FDF6D195D58D335D03C003 /* REMenu */, - 9AD48931F9D7F36D3269DE407ACDE4DA /* RMActionController */, - 1CDA796DD1DF09FEC12EF61E29A9E127 /* RMDateSelectionViewController */, - 190026D091222FA1C9C4F63F8A6EF3D1 /* SBJson */, - 7D03E663BD4329BB02BEA5C4259A28AC /* SCSiriWaveformView */, - 5808033EF96F84CEC42633AA2D3F637D /* SDWebImage */, - 82B26312EB7846033C795530DC0FD67F /* SocketRocket */, - A38CBBB392959A220AF6E1DC305E77B0 /* SWFrameButton */, - F704787946C680A43977C21E937624CF /* SWTableViewCell */, - F5A071230F00E7E32386E8310A2DA6FB /* SZTextView */, - D2A2DED5A53736DF6E0ED9F4A0877BB9 /* TDOAuth */, - 86F00601FD3BF53D97B8E68A538AF4F3 /* TTTAttributedLabel */, - 42FC5CF7AC172D642DA52EFCB8B8A9CD /* TWMessageBarManager */, - 7AD7B519FB10D676CDBE9F4B3C65D6B7 /* UICKeyChainStore */, + 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */, + D27AAB10D754F414F3D10804770A1567 /* AFOAuth2Manager */, + 5E4069B2BCC908BD892C971DCD91EB8C /* AHKActionSheet */, + AC337482C8CEE36C809E23FDC64FC799 /* APAddressBook */, + 348B34D6B9B73E53B3B7E13F1934079C /* BBBadgeBarButtonItem */, + EBAD01DD961D84E76900A33BE7FB2600 /* CYRTextView */, + 138527DFF3FD347B53F0B37BAF725E3D /* DAKeyboardControl */, + B0F1C48D098B58DC43BBE0AE75933BA3 /* DHSmartScreenshot */, + B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */, + 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */, + 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */, + 3AEC09E383B46D12E00628362EB86D67 /* FLEX */, + C3AAC0817EA4DC8BD9C0046F50078BF9 /* FreeStreamer */, + B4CEB0284B4209C3EB1D2921056254BE /* HMSegmentedControl */, + 62BDCEA95B58162F679294C9302CF231 /* INTULocationManager */, + CCA24ECF8C3E122E885F6912C0262B90 /* IQAudioRecorderController */, + EB07D88E59040F928F73F9A46CA65C69 /* JDStatusBarNotification */, + DA7C4D3C2DEFEAF833D56EE844ADC77A /* JSCoreBom */, + BECD36891A8DC297700F9296F5634B97 /* libPhoneNumber-iOS */, + 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */, + 8B9227BF2FD05182EAA381C73EB78441 /* NSGIF */, + 04D19091436A065548D73C175B077CA4 /* NSHash */, + DE59D3D21AECD5F399E953205FB55A86 /* OMGHTTPURLRQ */, + 55A8712154E944BC7E33DE1D156E4BBC /* PHFComposeBarView */, + 18EBA128F21272535E33AD2077BE9EF9 /* PHFDelegateChain */, + 029C271E190BFB05ECAEB5F1A29AC0AE /* Pods-Jasonette */, + CAA047C0F5E4106F3904E8497FA17F97 /* Reachability */, + 58947B832E91651A9900C44834D21B76 /* REMenu */, + 12066ADDDC81D6D9F1FECEAA97C55D82 /* RMActionController */, + 9487B084D206F15C70584B251B79A311 /* RMDateSelectionViewController */, + 99A737B746331762ACD053E5EF1415F7 /* SBJson */, + D76BE29FE832155DDE00968858DCAB38 /* SCSiriWaveformView */, + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */, + 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */, + 227BBE5BEC64BA0EAE27D2254B7BFAA8 /* SWFrameButton */, + AC60DD87A4716856282507DFBBBE720C /* SWTableViewCell */, + EDD538E91ECEB947B84FB22FC7425180 /* SZTextView */, + 0759FDF590D13F2CC841F8AFBEE34987 /* TDOAuth */, + E077C5049157367A707E75CFDAB49F84 /* TTTAttributedLabel */, + E1C8C155FEE070887D779FD917378BA8 /* TWMessageBarManager */, + 7406ECC476A62C8FA502AD0E8D1240BE /* UICKeyChainStore */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 0046D0286B337158AA3368D01A305657 /* Resources */ = { + 0342A8EAE2A088AC68AD512AF1A1C042 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 0661C1916214B845187D51A833F87F8A /* Resources */ = { + 0B882AB190F95DD5CEF211F2739C2135 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 17212735F51B2C40EE9341AC216D85FD /* Resources */ = { + 1B2761843AC28F5EB46C4C0AA03AEE9D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 1E39881F21EA6D37F2E5D66967306E33 /* Resources */ = { + 1E766B950D30B4D16E2DB2B062BFCC10 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1582EECEB29C9AAF44B2D590305A5B93 /* IQAudioRecorderController.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 202793E5248811F3657749961FCC70D9 /* Resources */ = { + 2429F179C0BE55F6AD78B9A4C4B8E96D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 94234D40C443D8A7126850AB6E484AAB /* default.css in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 210CED25F87E552262C2A187D197C32B /* Resources */ = { + 2C073718445A7D5C00A9777EF930DCEA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 27DB38B45C553E7A28FBB39645B6E6DC /* Resources */ = { + 2F43E5155727EA8EECADE2E57A411F65 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 2D77077AB0B3C4E06B8BF88170440111 /* Resources */ = { + 35F22CA232A03C27DADEB9ABD364E7C3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 2F05AF0E0044501E339AADB878246B42 /* Resources */ = { + 3C49CE47A7C7EBE4BCFEAF099E3EDB9C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 3E7352CCC1AB7DACAFE56B7DBC1B2BFC /* Resources */ = { + 41449730C6744F08787C405002711508 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 3EDC9912C379BD1229787F52CB06846A /* Resources */ = { + 435BF4D16B2F9CAB6E7F883F30E32B74 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 439CB1E2997514791854FCF83D78354D /* Resources */ = { + 455317632AB2F71450F449FD39A0BBFC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 45236C2BB99294C5BC874BE760F00A93 /* Resources */ = { + 52A3B98B4C50E8D61948A9359C85F116 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 4D431D569EBE09F69D350EBF6E6B9D00 /* Resources */ = { + 532E5A97CAE60B7E59FFC32F0077D926 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 63C37DD57CE2DBB1A411714FB292BA92 /* Resources */ = { + 559991F87DC3CC55DB678F93DACB34A0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 68E34770ECB1C6327364C1B6BC29DE7A /* Resources */ = { + 626782E26D38E824D2E9C4A35A01FB90 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 097E06672BAC08BD44EA64B02A6B3410 /* IQAudioRecorderController.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6FD9426FF7066B875693CE3213B25291 /* Resources */ = { + 6B9FF15E197784901EB77BABB452A481 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 74C7DA35918B275BE33C94AE237E653C /* Resources */ = { + 711B5888EBCE418A7796D4A48107F809 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 54FCCFEBC7BD87E8BE1A2A13C420CBAC /* default.css in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 85BE49610DCA0DAA65712A91363101F1 /* Resources */ = { + 7EB7B2E293AA4DD954A9C6977F403333 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 8C684266D9F991B3C1098632C6BCB8A8 /* Resources */ = { + 7F11155C97A6C63E2C884BCD71473AA8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 93DD43FD372D7CA62CE9022690539927 /* Resources */ = { + 82057128EC76EA810372FF8DEB59D275 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 94AE0E88E6B2D2BDE69BDEAA36385877 /* Resources */ = { + 84BBD6D0404446B741CEE816B73D8F26 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 96C60439BF31F7D396AAA2AAD2622A98 /* Resources */ = { + 8DC65F277DBEBBFAE01F52CD2833022D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9AC00667011A3B0318D9AD2C4A879234 /* Resources */ = { + 8E174FE42433A65583C9ABA9845CA935 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9ACE29322386981FBAE82B39F952AE71 /* Resources */ = { + 9DC788CC48E377FC63056B3B99966779 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 14B3AE683699EB775F9B342E0B914474 /* Resources.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9AE3407849C27D300C723191AD978513 /* Resources */ = { + A293C257C6DD98782DDA9F6A33144D67 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A017359923B3D56336F15ECB4EF849B4 /* Resources */ = { + B0ABFF40324B4E577F1443844FD17E26 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4371287A086ADDD3B5221EEC127C3802 /* icon-error.png in Resources */, - 8F60EC00B34B587DB3EE3FA44D8AED52 /* icon-error@2x.png in Resources */, - 8B4ED6D88FC49B2A35B652DA59AE72D2 /* icon-info.png in Resources */, - F82412AE0B5E5CF0ACADC4AA95D95A7E /* icon-info@2x.png in Resources */, - 6E2D75E024B47D353EAB71CD35477098 /* icon-success.png in Resources */, - 0D9929DBE3BEC5920FBC5CA109592CCF /* icon-success@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A8E567B386B39F33FA94F414039DB041 /* Resources */ = { + B4258C26AAA278AC0D05D65C8F06DA2D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B4F4D993B4CD6EFCC545B7B60262027A /* Resources */ = { + BE09AD0A5D54B92019710EFF0A549C9B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - B7B1F0EC5ADBB1115D6D33F30BE95755 /* Resources */ = { + BE137A354E2583017BB981CCA5C8EA42 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C6DC2F78E584D0F60F896E234CF1981C /* Resources */ = { + C897FE35A254C55361EBF0E9318332F3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C6E4A5BF4865A01867F588417652B2D4 /* Resources */ = { + DA20BE816D32A35D6A5167025817E684 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 35461402E93462A0DC305C77FCC5698B /* icon-error.png in Resources */, + 74D5EF09D8BB58205E021098EFE2DBD1 /* icon-error@2x.png in Resources */, + 8A80D50DC7CE62FA7B7581C03B36B19C /* icon-info.png in Resources */, + B801DA63C56C2E515C86F46715C1FE14 /* icon-info@2x.png in Resources */, + 9DE712D104DC47D81B6DD3F74E8243F1 /* icon-success.png in Resources */, + 591CD4A62927763EE248D63819576AF9 /* icon-success@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8EA61E116836D723B27D87277520A46 /* Resources */ = { + DB42D1E0723C25F17F7CAD20FEC59EDD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - CEDD3487AC32B5ADCCBA739E9E9FE138 /* Resources */ = { + DC459F935ACA73C21C1B5239DB38C90B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D033CC115278394F69877C060F346841 /* Resources */ = { + E3033C87A8AC75471F0DF10EA9D98895 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D5FBFE3BF788E441644239873B497824 /* Resources */ = { + E6D0F515CAD1A0AB27FC461B5A25E862 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7080AF5B266FD97972A85902F519615D /* Resources.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D62F5607494E995DFD8AD45D14C83DC5 /* Resources */ = { + EA6C67621E1DAAE8F859F52920D11B77 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - ECB4877CC323F7C5A3AD7B204C19AAF6 /* Resources */ = { + F1CAE55C81B9E4623193678C1C9666D7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - FF362CF3764B64FED6938B87412D3CCE /* Resources */ = { + F8A2AD948690971B214DB045494FA3B4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - FFA7F152233B175EF95405EBEF6D4F9D /* Resources */ = { + FD39AD63F1943935C8C0ADA6C9A06E95 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -6841,1002 +7447,1081 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0183D24E99BE77838B12A67029BD1903 /* Sources */ = { + 00D747E0088E51235CDD619C09A417C6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D7B4611B48B592EE8CED39DB74EFF636 /* NSGIF-dummy.m in Sources */, - 87F6E677CD73B6030A1584B2C8DB9F39 /* NSGIF.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 018E189B4F3B222F93632E288CAAA71A /* Sources */ = { + E4B8BA75A090AB392A76D14BC4BBE8A7 /* DTActionSheet.m in Sources */, + 25EF53728634D7D69565183FCB34C233 /* DTActivityTitleView.m in Sources */, + 7B68381B3F4BD1935E1A191264DC9215 /* DTAlertView.m in Sources */, + 658243958C57AF24E5267AA05F67EEE2 /* DTAnimatedGIF.m in Sources */, + F80559155CB1407277B67714B64EC18C /* DTASN1BitString.m in Sources */, + AB7E0B0E55F56C473E16741DA810F0D7 /* DTASN1Parser.m in Sources */, + D04EA1277BB20698AA9EA9DC54797EAF /* DTASN1Serialization.m in Sources */, + D2C8D2ACBB25ADADCFF379A7CDE18C09 /* DTAsyncFileDeleter.m in Sources */, + 29A21C6EBE917425C227AEF57ED528C9 /* DTBase64Coding.m in Sources */, + 41AE22D804A97190C48550FB683C575F /* DTBlockFunctions.m in Sources */, + 3F5144C410F91AC75C35997996688F25 /* DTCoreGraphicsUtils.m in Sources */, + 59BC5DC2F6BFB72631D485A4888B6AA0 /* DTCustomColoredAccessory.m in Sources */, + BA709ABE847FC5FE08A0DE04EC028158 /* DTExtendedFileAttributes.m in Sources */, + 631DB1B4A751FD40D8DA33552E060E09 /* DTFolderMonitor.m in Sources */, + AA9F95D96BF52099904C2223AFA5A8E2 /* DTFoundation-dummy.m in Sources */, + 5D30BF6B6A901A93C02BC6E050B41884 /* DTFoundationConstants.m in Sources */, + C2855D13A9EE0075D5F4E0683D48D1BF /* DTHTMLParser.m in Sources */, + C28E103FB49C2D4AC4FB3C47F91E91D1 /* DTLog.m in Sources */, + 828EF378DDB1F850D8ED8B685F3E6233 /* DTObjectBlockExecutor.m in Sources */, + AAAAE5B555C9687769E96C3B026E1F93 /* DTPieProgressIndicator.m in Sources */, + FA477D5A2901D2F029A0832B617F04BC /* DTProgressHUD.m in Sources */, + CC370FDF53DE8F74FA7F029ADC9E5A30 /* DTProgressHUDWindow.m in Sources */, + DD381B452ECDD51569CA47302E69D1AF /* DTReachability.m in Sources */, + 54E9931CF201DD8A5D6408E6C7D71851 /* DTScriptExpression.m in Sources */, + 93BF4E9AF819AB4DFE3957AB08EAE9D6 /* DTScriptVariable.m in Sources */, + 4C95C435C30C6F7BFEA777721A843C1A /* DTSidePanelController.m in Sources */, + 4EEA9D2BC65C1C48B2A659ED2E1CFF84 /* DTSidePanelControllerSegue.m in Sources */, + 71038296DC223D35D766651604AD7AA6 /* DTSidePanelPanGestureRecognizer.m in Sources */, + 572864AD5F5CF03A4190ADD9FE9F0AF5 /* DTSmartPagingScrollView.m in Sources */, + 8C86D485CE8C79E4FAEA058CA3357841 /* DTSQLiteDatabase.m in Sources */, + 07362F2248D79F150E4F9315CEBC82B7 /* DTSQLiteFunctions.m in Sources */, + 967BC3EDDDFB1A34700C98AFD52D50F4 /* DTTiledLayerWithoutFade.m in Sources */, + 62996C9CAA8E203DB7F6A9451BF94611 /* DTVersion.m in Sources */, + 4FE92369BC89072B862D5940CEF25106 /* DTZipArchive.m in Sources */, + 9B9BF9B1FCD7D86C5504AEEBB3B44751 /* DTZipArchiveGZip.m in Sources */, + 8FB8D2BC93C9F7E71FDDF705C8B60F1B /* DTZipArchiveNode.m in Sources */, + 9C7EDBF58ED1B4C3E330A6EA6619654B /* DTZipArchivePKZip.m in Sources */, + 3B5365B2B236413ED488D5F8C82C9F0E /* ioapi.c in Sources */, + 6FF006E5E2F4D75ADF9A02B58EAF2FC2 /* mztools.c in Sources */, + 1FD75CFA043C789BE438ACD698F19602 /* NSArray+DTError.m in Sources */, + C39F4C38E3A91D1E2172B1ABF825F378 /* NSData+DTCrypto.m in Sources */, + E36BBF2B20A7CC37A9910592454A8439 /* NSDictionary+DTError.m in Sources */, + C8D66B6B5594DA3AD3F9E934C0941807 /* NSFileWrapper+DTCopying.m in Sources */, + 007C2275E214CB4157F877C18A10C66C /* NSMutableArray+DTMoving.m in Sources */, + 45F6B47601C920D59FB030305297F245 /* NSObject+DTRuntime.m in Sources */, + 93816C1585130121F25408101C0B2F76 /* NSScanner+DTScripting.m in Sources */, + 386EB94B7251F047B054537A6664FB92 /* NSString+DTFormatNumbers.m in Sources */, + 9E92F4E8463AF797A559F388C26176EA /* NSString+DTPaths.m in Sources */, + B461B903E4663AFE97A8C0D3844A96F5 /* NSString+DTURLEncoding.m in Sources */, + 783F206BA87D204B95E3C1A615FC644B /* NSString+DTUTI.m in Sources */, + 082732132CAC9BA87FF4D3CA555503D7 /* NSString+DTUtilities.m in Sources */, + 285EEF47FE261554A5EC046C82E19FA6 /* NSURL+DTAppLinks.m in Sources */, + 6F3E8A9A598C423E876AD670A314909E /* NSURL+DTAWS.m in Sources */, + 48BC99499160D48686DC9A075C96B4F0 /* NSURL+DTComparing.m in Sources */, + 5AA4E7017696DECE6EFF00D85C20162A /* NSURL+DTUnshorten.m in Sources */, + A59D5D0C546245A247CEF4600273E355 /* UIApplication+DTNetworkActivity.m in Sources */, + 2FB9475A9EB11A8511A89F87697F5E7B /* UIColor+DTDebug.m in Sources */, + 734304BAC5E7DE72639C1CF2C21D70B8 /* UIImage+DTFoundation.m in Sources */, + EAE4F84171DB360DCAFB27C1D4EC0668 /* UIScreen+DTFoundation.m in Sources */, + 7338FA1C0EBCFED9E899A0B7730B3C59 /* UIView+DTActionHandlers.m in Sources */, + CCDE281E1F60E3673668036FF2417CE6 /* UIView+DTDebug.m in Sources */, + FA9CCAD049C30F6F07B48930F08D6E72 /* UIView+DTFoundation.m in Sources */, + CE733EA1720FFC6674810323A16702F3 /* UIViewController+DTSidePanelController.m in Sources */, + D8DC3D480ECA681AD57F788B2B0BA4DC /* unzip.c in Sources */, + FDDF0307D303A138B1E95A657C003FA2 /* zip.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 00F892ABFFCB63EBA1E7DEDA1E543299 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E4E2E9AF9CE190CD145A7FAF73E206CE /* audio_queue.cpp in Sources */, - 86280CFB47EF665162AF8731489714C2 /* audio_stream.cpp in Sources */, - D4B00E9A61B13849197E65901F23B03F /* caching_stream.cpp in Sources */, - 39FFCB54838C6A981821B6B11A9BB05C /* file_output.cpp in Sources */, - F4C9A629E6375F52F54A40E5CD87D56B /* file_stream.cpp in Sources */, - B9FBBD20F02AE2AE4E111D3300BDDB8B /* FreeStreamer-dummy.m in Sources */, - 637CA1D3C482F1028F28942F94C2ED85 /* FSAudioController.m in Sources */, - 03486BE0B043632C4ADD1EB5350B018F /* FSAudioStream.mm in Sources */, - 54238A0686EDCEE1F11E16788ECA89FE /* FSCheckContentTypeRequest.m in Sources */, - CAD946E1FB7EB2EAE5A452A7A7F5CBED /* FSParsePlaylistRequest.m in Sources */, - 94E7DCD32E75C77FA71791829362A3AD /* FSParseRssPodcastFeedRequest.m in Sources */, - A79BEE3798C34883B389B9ACAAAD6B39 /* FSPlaylistItem.m in Sources */, - 25F3633BA031755300DEC41D1D4959A2 /* FSXMLHttpRequest.m in Sources */, - 2472BF320B216DC484A70912CACD03A9 /* http_stream.cpp in Sources */, - 5DFE7903211960638F1847B6C3D0AF63 /* id3_parser.cpp in Sources */, - 2BFADADC8ADDC9E64CC4BF022DA9DDAB /* input_stream.cpp in Sources */, - 9C5591D807585832BC82565FA8783BC7 /* stream_configuration.cpp in Sources */, + D40484C12FE8F85A9C5917095BC7CA5A /* RMDateSelectionViewController-dummy.m in Sources */, + A4022AAC3FF3D1F9BDB07A4C0E7F7CD6 /* RMDateSelectionViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 0EE3D374DC7F4877F6388B9B2AA825E8 /* Sources */ = { + 04D098CE006B69CCEEBC555A71E9BE5F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6BA27EA141D3C7CE300B5695D2E9E49 /* TTTAttributedLabel-dummy.m in Sources */, - 1D44359E37B4C43F6B34A786548A5AE0 /* TTTAttributedLabel.m in Sources */, + 329D8AB0B9067AA6EB88332B8986B6B2 /* SBJson-dummy.m in Sources */, + 3A69549F45F19AD86AF8DB89FC063AA0 /* SBJson5Parser.m in Sources */, + E0C16899727D2F0B6A35D2354BD67FE4 /* SBJson5StreamParser.m in Sources */, + 41F82C0999EFCE07EFE6E508471F1F4A /* SBJson5StreamParserState.m in Sources */, + B74C34708359B205351351E79932F07B /* SBJson5StreamTokeniser.m in Sources */, + EA6E649A5F4A9C1AC0B2B3F1CDED5BAF /* SBJson5StreamWriter.m in Sources */, + 942F9590EB515AB63D195591DBA3DD35 /* SBJson5StreamWriterState.m in Sources */, + AE0341F59D50A626450DB954FC00C485 /* SBJson5Writer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1624591796728A53B1A7EC2B9F9EA45E /* Sources */ = { + 08F934B8F7CAA46D1FD1005510CCA77C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FC0998717144B227128A30BB492BB98C /* AFAutoPurgingImageCache.m in Sources */, - F339C6623B5A9027046C72A17BAD65AB /* AFHTTPSessionManager.m in Sources */, - C0399CFB4C299DA61C70AC4BE8E4DC46 /* AFImageDownloader.m in Sources */, - 20DCE3BF69A23CA9C83EBFF72D4E426D /* AFNetworkActivityIndicatorManager.m in Sources */, - 0AE4020B5F18697E7CA96F2991E681FA /* AFNetworking-dummy.m in Sources */, - 1F739D670CE052640DDD48A6FA0F24D7 /* AFNetworkReachabilityManager.m in Sources */, - ACA9FD60C92BF87E1EF6026846E5892C /* AFSecurityPolicy.m in Sources */, - 3E5270C1AF8C76F25178D4301AAD7DC1 /* AFURLRequestSerialization.m in Sources */, - DE50C379E313825F4AF5663ABF4B7E13 /* AFURLResponseSerialization.m in Sources */, - FC39073F884FFE45D27F605E9EBC6474 /* AFURLSessionManager.m in Sources */, - 13F03D3BE3F363CC3E495BEB88CFB98D /* UIActivityIndicatorView+AFNetworking.m in Sources */, - 0596718A490E787AA1C723E315BC3DB5 /* UIButton+AFNetworking.m in Sources */, - 0192D19019EA8B8412299334370CCFC2 /* UIImageView+AFNetworking.m in Sources */, - 986B31B87B7DC6B2AA698F475AA63BBC /* UIProgressView+AFNetworking.m in Sources */, - C547D3F4B73A787294DE95C1B7E81E21 /* UIRefreshControl+AFNetworking.m in Sources */, + F50E0776DA7C9D66D8D4BDBDBC4AB4A5 /* AHKActionSheet-dummy.m in Sources */, + 2FCE96ED6A51C6B2FF29E76B77F91D01 /* AHKActionSheet.m in Sources */, + 23C73A8409946D24703E133AFCFC2E99 /* AHKActionSheetViewController.m in Sources */, + B9626F1BFB4AEC7374D5854E7B512CF9 /* UIImage+AHKAdditions.m in Sources */, + 37F5C8B96A6CCEBA4BAB9F897B582225 /* UIWindow+AHKAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 346F5981595298553A1EA154533A58C6 /* Sources */ = { + 0A83F4456867A2F292DB23F37C1BB3D7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E91428CFA7B73438217251BA9C54544B /* IQ_FDWaveformView.m in Sources */, - D5743A2A3930FB0509F6DF040F9EA5D2 /* IQAudioCropperViewController.m in Sources */, - FF51FC0F2DFC80117A36A88240B83EA2 /* IQAudioRecorderConstants.m in Sources */, - 7947EBBCC21B29CE57A1B97C6C6217FC /* IQAudioRecorderController-dummy.m in Sources */, - 78A1D65A2B759F147EA6C3945105C7B7 /* IQAudioRecorderViewController.m in Sources */, - 71585F0B990D36F55D60D0ABEC8E46A4 /* IQCropSelectionBeginView.m in Sources */, - 8732F2BA7295BA7D68A7834749915104 /* IQCropSelectionEndView.m in Sources */, - 3AE08BC5C9694E72A56463A5333AF2F6 /* IQCropSelectionView.m in Sources */, - BA83832BE928C7E44C21FEEE7231133D /* IQMessageDisplayView.m in Sources */, - 03B88010DFDEA73362548E247BA233D0 /* IQPlaybackDurationView.m in Sources */, - A6282B829F5025F85331A67E834BD564 /* NSString+IQTimeIntervalFormatter.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3611A4394D39A3C0541DA125E59058C4 /* Sources */ = { + 8512001BF5B979F1711BB0AD6FF1194A /* APAddress.m in Sources */, + 09A713BF350378226C4B648C3E6EE1AA /* APAddressBook-dummy.m in Sources */, + A2B7DE05765D5A43482206EB2B8F1600 /* APAddressBook.m in Sources */, + 358E62FA1F55DDA42E42517DCD9CEF8A /* APAddressBookAccessRoutine.m in Sources */, + CEEDEB3808C0A1571B8E16B78BC2626D /* APAddressBookBaseRoutine.m in Sources */, + 8BBC0DD647B3E09935B791254115E55C /* APAddressBookContactsRoutine.m in Sources */, + E7E8B1A0B805373D62BF0B99FDD80AFB /* APAddressBookExternalChangeRoutine.m in Sources */, + BF92898E744A2C49960010ED31FF18CA /* APAddressBookRefWrapper.m in Sources */, + 2B55C6CA7E5B1416C72398FDD160024D /* APContact.m in Sources */, + A53FEE897D860F9A661F68F6B4619569 /* APContactBuilder.m in Sources */, + E125E01D1661AED61704E6D061C5A0F1 /* APContactDataExtractor.m in Sources */, + 4D7681F290E06F6A3AEBA671E84A1716 /* APContactDate.m in Sources */, + D1F74786EB653514EFD27BFF95FEAAA1 /* APContactListBuilder.m in Sources */, + 40551F0911AF35B9B66C05B0B61F8A32 /* APEmail.m in Sources */, + 730DCE616EE03FAE6FDC60F3C64E27C5 /* APImageExtractor.m in Sources */, + F3CEC8624D8CEAB38ABCEC333FE5030C /* APJob.m in Sources */, + 6A7B28103B14C5E1DB6067E274FAE184 /* APName.m in Sources */, + D380D2F3C0C2810C514F413FC65B13A7 /* APPhone.m in Sources */, + BEB1156366E50C7DFC49BB4B8DB83289 /* APRecordDate.m in Sources */, + 21BADDF6CEB496F05EDD4F41B9D8BD19 /* APRelatedPerson.m in Sources */, + 1109B45AD75319782CD0ACCCC2BD2D62 /* APSocialProfile.m in Sources */, + 65BCA9A99F3BAE94A5D760C82EB6AF7D /* APSocialServiceHelper.m in Sources */, + 29A8167DE1AA6DC694504E008F87C6D0 /* APSource.m in Sources */, + 6D0EB87A1A499AD6ABD45D4FCAA1ED10 /* APThread.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0DBDB558A4E12F8A74262DA859BDADB2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0DD2F20B75EDDDFA7A603C7402771C87 /* RECommonFunctions.m in Sources */, - 8184054C05BDA8823AF7364CED8112F6 /* REMenu-dummy.m in Sources */, - 9E8A61547D5BC1C17F91BCB7441873A7 /* REMenu.m in Sources */, - 3638B4ECC084A2DB07B17887E22129B2 /* REMenuContainerView.m in Sources */, - 7CE2BCD03449A98659945FBC63645EC3 /* REMenuItem.m in Sources */, - 1FDCBEB82C6371620C38144FB20796C1 /* REMenuItemView.m in Sources */, + 8C9F707632A76004B9ABB6A63456B732 /* libPhoneNumber-iOS-dummy.m in Sources */, + EB502D25ED1F2A6A1C993CB79CCCCF2B /* NBAsYouTypeFormatter.m in Sources */, + BFD17318B4B78F5F7859ABAD87DCBEB3 /* NBMetadataHelper.m in Sources */, + 328532FE3B5B2B907F47E72DD6DA12D4 /* NBNumberFormat.m in Sources */, + AFEC94B9D62C021E02B7E9DCD4BB429B /* NBPhoneMetaData.m in Sources */, + 9E9902B23BECAFE280F9C6F770440A8A /* NBPhoneNumber.m in Sources */, + 08061029BC836CAD4A78213EA51D8B98 /* NBPhoneNumberDefines.m in Sources */, + A951E8E774BE04ACD42A8EBBA57C3A1A /* NBPhoneNumberDesc.m in Sources */, + 79159467642F82839F5DE6C37363371D /* NBPhoneNumberUtil.m in Sources */, + 7A03CF7D14B268A6A9F5C96A34A59EDC /* NBRegExMatcher.m in Sources */, + CF37FCFE9D3E92A5821E59CD9740D1E7 /* NBRegularExpressionCache.m in Sources */, + FB2D7FEC424982D83FCE0195C57E2DCB /* NSArray+NBAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3B346439A443CBC685AE40874ABC8228 /* Sources */ = { + 28DFD5A7BC28AFBEA9EB714B51ED95A8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D5B1366570776B4A46947A2100A5924E /* UICKeyChainStore-dummy.m in Sources */, - 87A5253BD39184863B944731E9646697 /* UICKeyChainStore.m in Sources */, + 512738E798D864E94E1046F6BE9E7670 /* Pods-Jasonette-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 541CB107DC4F9B3D2A590BC3296D745D /* Sources */ = { + 2D0F5A3FF61B58A30F190989F2DD4233 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EE88D98656AABEABEA7373AFDDE3FCA3 /* SZTextView-dummy.m in Sources */, - 6ABDF6724108FF0AC7EC7B753E5D6F4F /* SZTextView.m in Sources */, + 3BDDBF7B4DAE13621479E9CFE2AE3F98 /* RECommonFunctions.m in Sources */, + 4E00C88EB14A595592D0CE1357679172 /* REMenu-dummy.m in Sources */, + 700B3231CD89946E9F6955CA46B8F6BA /* REMenu.m in Sources */, + A215DB4F956FBEAE70503B0C876C7118 /* REMenuContainerView.m in Sources */, + F4F6B01DEB438BFE858A995ADABB3EF3 /* REMenuItem.m in Sources */, + 5A4DBFBB5DFC60C19202F9E6C28D52A5 /* REMenuItemView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5DAC05C83068F33E86A81236C7E68CD2 /* Sources */ = { + 34EDEAECEF64773F44F1FE69B3A92584 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F08DD97AE1ED97D95A4B9E8CD0F40760 /* JSCoreBom-dummy.m in Sources */, - 923E89E4799BF2715858C6E00B05D746 /* JSCoreBom.m in Sources */, - 832CD6F61F1F1FCA28FA12813CC535FF /* ModuleConsole.m in Sources */, - F4BBE6C71FD806C3B99C45351E85EF69 /* ModuleXMLHttpRequest.m in Sources */, + F73838B27D61B4BAD67051A8E3C64F72 /* NSGIF-dummy.m in Sources */, + 4C5871062C8966510F3F7D6402357740 /* NSGIF.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 63A5FD2854858B1917316B5D8FBD7DA1 /* Sources */ = { + 3A60957868991716E9072D2C002EDA9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 405AA417129ED474CE88211C2AFD4D97 /* SBJson-dummy.m in Sources */, - 636A25E59296DF8F37E0D4B43CCC3251 /* SBJson5Parser.m in Sources */, - 1907B878826CCA9E2C519CE95C1ADE88 /* SBJson5StreamParser.m in Sources */, - BBC8ABF455247C40C6B2ABED99ED9B6B /* SBJson5StreamParserState.m in Sources */, - D9F1F05444ECF9C78E6C9306D2498115 /* SBJson5StreamTokeniser.m in Sources */, - 7B319151FDB8F84BC6156C7608E4B4F4 /* SBJson5StreamWriter.m in Sources */, - 22B05905A36F0F513DA117EDE3337E3D /* SBJson5StreamWriterState.m in Sources */, - 977B46E7ECBCF9949DDB240EE7E9F34A /* SBJson5Writer.m in Sources */, + 734EF3ECC80EC57DF88F681BB893A371 /* TTTAttributedLabel-dummy.m in Sources */, + C9C10E6E222942011C0205766E077762 /* TTTAttributedLabel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6A8D83896B810F6BABEA0E76C657E706 /* Sources */ = { + 3B776B20C6F493B78C24115EA6761A09 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 069D97019D3EA4D31A0E345DD43BAA5A /* OMGFormURLEncode.m in Sources */, - 3C88627ED24F23ACF01DF192650B8471 /* OMGHTTPURLRQ-dummy.m in Sources */, - F71AA4CA21ABDE71D9E728793A73DF7C /* OMGHTTPURLRQ.m in Sources */, - 1A5104712CB9E93761A2C47999FB5153 /* OMGUserAgent.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6CF9908DD7DA1373BB7EEBA6F9C32BA2 /* Sources */ = { + 6D02BA2C7070DAE97598560E07AD136C /* NSRunLoop+SRWebSocket.m in Sources */, + 7F468899A073AFE13FCBB0F788806E07 /* NSURLRequest+SRWebSocket.m in Sources */, + FCBFE8224ED3B4B52BA389BAB835821B /* SocketRocket-dummy.m in Sources */, + 392FF979484B7F1BEA80D3215340E7A1 /* SRConstants.m in Sources */, + D8736CD7086F020B48E0C3BDC4BC7CCB /* SRDelegateController.m in Sources */, + 5B96D63453D4CDF5C6E5AEC81ADFC410 /* SRError.m in Sources */, + D2997FED73DBE2D73A1FD8260E7FA157 /* SRHash.m in Sources */, + 9BC9150BAB3ACED9D3F305B02337F833 /* SRHTTPConnectMessage.m in Sources */, + EFA706291E1A6F2925CF8D2AB7E8A0F1 /* SRIOConsumer.m in Sources */, + 3C6986E982E7F914B1EF2D78E066E873 /* SRIOConsumerPool.m in Sources */, + CD5B58064467BAC26A3B90A965583301 /* SRLog.m in Sources */, + 84BC9FCCC511EE7C9A4B8CC13025BF77 /* SRMutex.m in Sources */, + 74DBAF94FBF5BE616319FEEC6F01D85F /* SRPinningSecurityPolicy.m in Sources */, + 7965FEBD9865CAE277D1BB0AD3F10199 /* SRProxyConnect.m in Sources */, + 5B4EB6A3C30401A577C48798646375FA /* SRRandom.m in Sources */, + DB2A6863D1AE62448F5B3E335387E872 /* SRRunLoopThread.m in Sources */, + 6B1C46E925D7CFE1A43165772B6946CC /* SRSecurityPolicy.m in Sources */, + 1AEE89214FBF27A61B8FF2EC18724DF7 /* SRSIMDHelpers.m in Sources */, + DCF5CA3FC203EA2C5BAAF8873277124B /* SRURLUtilities.m in Sources */, + 3E580858D3A6699F68018E1AB3173D5B /* SRWebSocket.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5119BA6236B8BF38CFD281EA04A87169 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D8DBA5A9393478393A55FD0ECA42F35F /* RMActionController-dummy.m in Sources */, - 47CF904CEA4138A497122591FEB2D3D1 /* RMActionController.m in Sources */, + 6404ED5F51B2477962B0991F70A25D4C /* SZTextView-dummy.m in Sources */, + 35AA81EF9121F04EDB63D1687A73A278 /* SZTextView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 75E8EE6A1D3BF71183E8DE0FC69E2E26 /* Sources */ = { + 60F3B22A11457FA55D0AD8369F751454 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5614048810B833822AC25807BC17DF27 /* DHSmartScreenshot-dummy.m in Sources */, - B8969F26949A5EDBA93057C37A76875F /* UIImage+DHImageAdditions.m in Sources */, - D701347D9EEEA422D48BDB807B3F8BFC /* UIScrollView+DHSmartScreenshot.m in Sources */, - E46B7763DD0DCFE1703DD55F83B2931D /* UITableView+DHSmartScreenshot.m in Sources */, - 4B9F41DC3DC1402F4C6E8649D24189B9 /* UIView+DHSmartScreenshot.m in Sources */, + 051080D7749288AD69E0D90616A328DF /* PHFComposeBarView-dummy.m in Sources */, + 143411EA9FC00B5B13724D82847C824D /* PHFComposeBarView.m in Sources */, + 2A3CB3FA17179AA5AC2FC01D06BA7F72 /* PHFComposeBarView_Button.m in Sources */, + 28E12120F746D66A159C890632CA6728 /* PHFComposeBarView_TextView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7A6BA73C75F0ED94D35D128E70F707B2 /* Sources */ = { + 6965664CF720336AD83734E8EB7AEE48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 975CDED7D86DB4230B747E1CA4677AC0 /* DAKeyboardControl-dummy.m in Sources */, - A9B9C9086B468C6DB3482C0E16304BC9 /* DAKeyboardControl.m in Sources */, + 858FE09FCFC88DD62DB1D2B817459C4E /* DAKeyboardControl-dummy.m in Sources */, + 3F138B106DA21CCC6945A8D2870A5F0E /* DAKeyboardControl.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7E627EB3FB09873B7DD57557CBCB833D /* Sources */ = { + 76E9995F8E4DFA256F3EAB40C0A95720 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6EE9E0E6F15D059462DB48AF69124B03 /* NSMutableArray+SWUtilityButtons.m in Sources */, - 20B0806758B4E5310521EC3611A895D8 /* SWCellScrollView.m in Sources */, - E69A3887609B19B1A8FF548BAE6C28B9 /* SWLongPressGestureRecognizer.m in Sources */, - D7054CDF7CB8AD19D3CF30FEA99AA182 /* SWTableViewCell-dummy.m in Sources */, - 24C17B6C221B8FD295F67DAFDAFAB3F2 /* SWTableViewCell.m in Sources */, - 780BC9FCC4D2A7678E1E81A2A2D52CB6 /* SWUtilityButtonTapGestureRecognizer.m in Sources */, - D2213A842394433EB872D72FD8EEC0F2 /* SWUtilityButtonView.m in Sources */, + 817B1FB6C0BE2BE533361FF44C915C1C /* NSProcessInfo+RMActionController.m in Sources */, + 690C8E336679DF63E6BC7DDF7BE24592 /* RMAction.m in Sources */, + 5AB0D1D8D270313D6858F46022188FF8 /* RMActionController-dummy.m in Sources */, + ECFC270848545655C87C22FEEC872E0A /* RMActionController.m in Sources */, + 0DA01D45497F9DF753D20352DF6EA85C /* RMActionControllerTransition.m in Sources */, + 7EEF83DD236E7D5CDF6B6CACA88DD064 /* RMGroupedAction.m in Sources */, + D67778C9A37822AF2EE359559757AD48 /* RMImageAction.m in Sources */, + 01C25E82122F6C27A4664D66FDE163F7 /* RMScrollableGroupedAction.m in Sources */, + FC3A2B9F42FD32BAEB7A6BBFC0952375 /* UIView+RMActionController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8144CAF83BB9281346218791500D0D0E /* Sources */ = { + 78E0B7AF6BBF31BC54EE09F3CB3D57B9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FABA93D487F5C1A60E95F63BAF82C5B6 /* PHFComposeBarView-dummy.m in Sources */, - F82DB8AA254102F9C71133C91ADE4D4A /* PHFComposeBarView.m in Sources */, - 2CFD202AAEF05BA800734E13B37AE1EB /* PHFComposeBarView_Button.m in Sources */, - 77EBE1B1A16742431949DA70ABA032AB /* PHFComposeBarView_TextView.m in Sources */, + B68212C425AE8095C884B89F763DBCCE /* AFHTTPRequestSerializer+OAuth2.m in Sources */, + 1436766B9E891712BC7DFBEDD08D6729 /* AFOAuth2Manager-dummy.m in Sources */, + DE5BFE2919D6A0167EF00C6EE5269697 /* AFOAuth2Manager.m in Sources */, + AA6C7C96D6AE4195A528511F9C7EACFF /* AFOAuthCredential.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8238A63FBB4B40A10B07725293CAA715 /* Sources */ = { + 7C6F50A469E5051BDB17E83CC0AB5E71 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B295FE29D5C484F69AD6826354A54FE9 /* JDStatusBarLayoutMarginHelper.m in Sources */, - 669D7449C8054D5FCEF6452719A0B83C /* JDStatusBarNotification-dummy.m in Sources */, - 963554A687F5205452BBA9372EE52A84 /* JDStatusBarNotification.m in Sources */, - 6EC22AF927A5E7F50CA62E7BEA74E9AB /* JDStatusBarStyle.m in Sources */, - EF1314AD3233BDB01E96969E355F8F8D /* JDStatusBarView.m in Sources */, + C2C00F28545ED36FF5B1487FBA40E105 /* SWFrameButton-dummy.m in Sources */, + 5DF925793E4C32F9BF13989ADFC766C4 /* SWFrameButton.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 840E68739B48818F9CB86AA8B26BF940 /* Sources */ = { + 7F78E8A27C193AA46754FFED22787010 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F259773E7A821FDFD873A3C1B387AEBC /* TDOAuth-dummy.m in Sources */, - 3A4B65597DE516A1F0C2620336758945 /* TDOAuth.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 86E09CAA18D62DAF750A42735C8212F9 /* Sources */ = { + 8163A21728F735939E7F4273416471C8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E096DB3E91E0AA3B04523B959B4A2CFA /* libPhoneNumber-iOS-dummy.m in Sources */, - B9517831CDE42F3EEBC29F41C6477986 /* NBAsYouTypeFormatter.m in Sources */, - 344D2F7FD7DFD293340F9B299E71D5D5 /* NBMetadataHelper.m in Sources */, - BB87A7B562B55EEF28DE34400A52DA60 /* NBNumberFormat.m in Sources */, - 9BA40D38A297E2601329C0C082D3BC02 /* NBPhoneMetaData.m in Sources */, - D8AB5AE0249E75CABD0ED6D728E11107 /* NBPhoneNumber.m in Sources */, - 01AF41452096B817C23CFBBD359B1671 /* NBPhoneNumberDefines.m in Sources */, - 75E142CA50129A87909B86B4183A69D8 /* NBPhoneNumberDesc.m in Sources */, - E8D74E0A27550735177E08E357693593 /* NBPhoneNumberUtil.m in Sources */, - 0B1C24A93116B3A4B4D96979D703A903 /* NBRegExMatcher.m in Sources */, - F6A54B8BE82BCC1E9CF43986F33710E4 /* NBRegularExpressionCache.m in Sources */, - EF7D6111D594CB4ABCEEF763CB1DF409 /* NSArray+NBAdditions.m in Sources */, + ACB170EEC2D4C7FD6D8D0E9368EFDE27 /* AFAutoPurgingImageCache.m in Sources */, + B41BDE27F362516D4530F5332AD81154 /* AFHTTPSessionManager.m in Sources */, + B7DFB68CCDE62FB71E6D7CE3EBB298F0 /* AFImageDownloader.m in Sources */, + 8138991EACEC30905708A7B7EC8FABA4 /* AFNetworkActivityIndicatorManager.m in Sources */, + 261CAC7E24852E652D4090555FB22991 /* AFNetworking-dummy.m in Sources */, + 6C14BCC2C6F4D58E8010E917B74B6B84 /* AFNetworkReachabilityManager.m in Sources */, + B8B02D1D315E348BE2382D8ED0B37B3E /* AFSecurityPolicy.m in Sources */, + 940167EF1F9C1F6069735566F73E440F /* AFURLRequestSerialization.m in Sources */, + 6BA168140752991D04EB4133E7D24F99 /* AFURLResponseSerialization.m in Sources */, + 4DD306D89A167B3D13034847553446C2 /* AFURLSessionManager.m in Sources */, + 79D22764454F041FCBD841325DF210F8 /* UIActivityIndicatorView+AFNetworking.m in Sources */, + FAAA7775E7C668F96FC32805D2316692 /* UIButton+AFNetworking.m in Sources */, + EB0C16CCB550AB69017B95CD0C18C256 /* UIImageView+AFNetworking.m in Sources */, + 2F79323455362B9C86F4059E36535F77 /* UIProgressView+AFNetworking.m in Sources */, + 537E018815EB5B672D17037975AC1853 /* UIRefreshControl+AFNetworking.m in Sources */, + 761B92E5B6C21B7785E8BF368726369D /* WKWebView+AFNetworking.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 88F228B332626246A6113EBE81AB9792 /* Sources */ = { + 81AB54DA68D7A24C2BADE589B12DE34F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EEB4A455551D7B917E1AD4B0A1A964FF /* MBProgressHUD-dummy.m in Sources */, - 4BD3B1D588017EA43F3E98563319DC19 /* MBProgressHUD.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 88FF8E4146F8EA45F07B2E964869ACE2 /* Sources */ = { + AF4445D042B5A7C067ECC400242B31BF /* CALayer+FLEX.m in Sources */, + 80113DFF2EF6EFA92359BEE5E43F828C /* FHSRangeSlider.m in Sources */, + 13CDA83FFE23084113CA6747402B69E7 /* FHSSnapshotNodes.m in Sources */, + ABFCA6506606812799687CB13277F103 /* FHSSnapshotView.m in Sources */, + C98B4996B3503F91653A439CA6A0916A /* FHSView.m in Sources */, + 618945A36725A41E746E8697944608E7 /* FHSViewController.m in Sources */, + 09A9BA230C9DF9E1541818C783DA81C8 /* FHSViewSnapshot.m in Sources */, + EF52EF90D701516E7C8178FE0191D01D /* FLEX-dummy.m in Sources */, + 0BA3B10AA9621036436CB04C1AB8F843 /* flex_fishhook.c in Sources */, + B20DD8C278CE8A49AB2463D917D71F0E /* FLEXAddressExplorerCoordinator.m in Sources */, + F981A748791E13654348FE8BB32FE555 /* FLEXAlert.m in Sources */, + 6F79F27517AA6D2B01D9F15CD10F768C /* FLEXArgumentInputColorView.m in Sources */, + E05B24AC697ED384C17BF64DB954A3FC /* FLEXArgumentInputDateView.m in Sources */, + 5132C39726DC10975050FD807A6CD64F /* FLEXArgumentInputFontsPickerView.m in Sources */, + A33678F98D94E985FC1370A020415AA1 /* FLEXArgumentInputFontView.m in Sources */, + AB89490772A34CBFFC0CCEC2C9CEEDAE /* FLEXArgumentInputNotSupportedView.m in Sources */, + A7F2AFAB2E5128E25651C257FA699386 /* FLEXArgumentInputNumberView.m in Sources */, + 050EA52FB47721856D475FD7BEBEE30C /* FLEXArgumentInputObjectView.m in Sources */, + A937FFB15FE679E1962E23759A055130 /* FLEXArgumentInputStringView.m in Sources */, + E95DD7EA06ACC5B6FE06A5902B9CA1FA /* FLEXArgumentInputStructView.m in Sources */, + A43396D2A838E8C7CDCB3A57700C23DF /* FLEXArgumentInputSwitchView.m in Sources */, + 6AF51BB20785DB542B1750879F7D460C /* FLEXArgumentInputTextView.m in Sources */, + B48438D63E936C3313D5CCAD2E92033B /* FLEXArgumentInputView.m in Sources */, + 03B1E0517A44E8092F17D4A7D36A2FFE /* FLEXArgumentInputViewFactory.m in Sources */, + E6D64FBA7848A78059F632C03E8A6395 /* FLEXASLLogController.m in Sources */, + D9D6C9CF19445F1A7C510F3F2FA8AF39 /* FLEXBlockDescription.m in Sources */, + 702663CD731D6C2396B5232A66B57494 /* FLEXBlockShortcuts.m in Sources */, + 12E59F7AC009B3D4E28FC253194FCD9E /* FLEXBookmarkManager.m in Sources */, + BC6A7673017C15F80EDF5E3B961F5178 /* FLEXBookmarksViewController.m in Sources */, + A992D7E7022B1189841CCACEFD6BA0D5 /* FLEXBundleShortcuts.m in Sources */, + 57C7F9DECD62BD1F9D635781A305156D /* FLEXCarouselCell.m in Sources */, + 6654A5AE75955EFF839423D73E962402 /* FLEXClassBuilder.m in Sources */, + A9D61DDB6D3EFE25C1CE626692E9E571 /* FLEXClassShortcuts.m in Sources */, + 90E1A564762D8C21C135A42D1DAE018D /* FLEXCodeFontCell.m in Sources */, + 4E91C46F41B383B04C6C4109B85AACE5 /* FLEXCollectionContentSection.m in Sources */, + FC968186280D8CBD7F1D2A12A6CAC885 /* FLEXColor.m in Sources */, + 551023644BFF66A5EB1298E390944A76 /* FLEXColorPreviewSection.m in Sources */, + D633E443284D5A6FFF82D0FFAA5CD55E /* FLEXCookiesViewController.m in Sources */, + 2867E9916D78302F3631EF788A02A30E /* FLEXDBQueryRowCell.m in Sources */, + 3C09618AC85C8A24A6F54C18219BB21F /* FLEXDefaultEditorViewController.m in Sources */, + F36AC4EF50DA3CF6CC6DB018227B1110 /* FLEXDefaultsContentSection.m in Sources */, + 064856B2133C18F2E5C23D8A43FCE9D7 /* FLEXExplorerToolbar.m in Sources */, + 02F5C7B3DE3EB6B435D44491480115B8 /* FLEXExplorerToolbarItem.m in Sources */, + B8BF73445FE3B3EFD774D35ACEDCCADB /* FLEXExplorerViewController.m in Sources */, + 774CA8A72257E8A19F24B9E608A77671 /* FLEXFieldEditorView.m in Sources */, + 37025BEABF9F89195CB8775E7DC74054 /* FLEXFieldEditorViewController.m in Sources */, + A75DE21C27297CA1EBEA5FF687DF3714 /* FLEXFileBrowserController.m in Sources */, + 68135DDF8455BC883D02FA432E833260 /* FLEXFileBrowserSearchOperation.m in Sources */, + DA7FA44C93FE0891B52102CC836440DE /* FLEXFilteringTableViewController.m in Sources */, + EA19ACA7DC067B16A346C6817011CA9A /* FLEXGlobalsEntry.m in Sources */, + 455F88C3EC1A4A4AF0F9644D0500309E /* FLEXGlobalsSection.m in Sources */, + B74E561B0BCAD05AE3E4C649A37BEED5 /* FLEXGlobalsViewController.m in Sources */, + CD24E6363A854BF2F3A1232B66A24BE7 /* FLEXHeapEnumerator.m in Sources */, + 80C2622BBC507DB84778F237C792EA5C /* FLEXHierarchyTableViewCell.m in Sources */, + 2D842E281197E01D6601F732662073D2 /* FLEXHierarchyTableViewController.m in Sources */, + 4A661D583D9950A3C33D38FD600CDB6A /* FLEXHierarchyViewController.m in Sources */, + 76CFA7063982BC708106415C0C9A89AF /* FLEXImagePreviewViewController.m in Sources */, + EE1AA175ACB4FBAAB7103EE6FBF01026 /* FLEXImageShortcuts.m in Sources */, + B2CD5836C16B8F5814072BF99A0DB01F /* FLEXIvar.m in Sources */, + 345CD3010E76159FFCDBB6FE244F4AD1 /* FLEXKBToolbarButton.m in Sources */, + FAE5610F3AA05CA88A3BB91CD4D9173F /* FLEXKeyboardHelpViewController.m in Sources */, + DC15319E34C50A21738F2106D707C140 /* FLEXKeyboardShortcutManager.m in Sources */, + 39C1F9C3F9BC37FBDAB87F03F8CD072B /* FLEXKeyboardToolbar.m in Sources */, + DC3CABD8B9FA244075656C930928F88F /* FLEXKeychain.m in Sources */, + D97D1A1D406F551D151035B7F7BC1EAF /* FLEXKeychainQuery.m in Sources */, + 1ECF48261E3607E16CB3952B2B57465F /* FLEXKeychainViewController.m in Sources */, + 8D68F48C1453A6D61B4A62E004CEF76A /* FLEXKeyPathSearchController.m in Sources */, + 3840E4F32A0E6A881E7BB698D5A15EED /* FLEXKeyValueTableViewCell.m in Sources */, + 3BD623BBD0FA46015EAE6D28FB6B7A13 /* FLEXLayerShortcuts.m in Sources */, + AF5521480B667D6CA26BC99C42A81948 /* FLEXLiveObjectsController.m in Sources */, + 2773EFF94A470875790130A091F13524 /* FLEXManager+Extensibility.m in Sources */, + E847A776128E8E1E8082D93171379E9B /* FLEXManager+Networking.m in Sources */, + 89ADCD5310344E26D010A8F12FB84416 /* FLEXManager.m in Sources */, + 6BB70FCEF9CEFC6A6D6180F94CED0FE3 /* FLEXMetadataSection.m in Sources */, + 6D4C5D94612B20893DB455907539A23E /* FLEXMethod.m in Sources */, + BEA2A10EEA3170403833F74C2DE5B8E3 /* FLEXMethodBase.m in Sources */, + A6CB45CFCD7C48969C47D51CD82A5633 /* FLEXMethodCallingViewController.m in Sources */, + 14A3DA719F9568EAAC5EA84595C19AEC /* FLEXMirror.m in Sources */, + 4CE2C6A4E9442451EF00F1C9588FB836 /* FLEXMultiColumnTableView.m in Sources */, + E03B0902A176920CF725462CC9D1F174 /* FLEXMultilineTableViewCell.m in Sources */, + 73A76339D17764EA0B69DDB78C67941D /* FLEXMutableListSection.m in Sources */, + 1C589D57EB3E700BCB915CA1C5714F19 /* FLEXNavigationController.m in Sources */, + E39C5104DA1AB5C9EC8C1AB1111922DA /* FLEXNetworkCurlLogger.m in Sources */, + 924817F2128925FB4086C215F672356D /* FLEXNetworkMITMViewController.m in Sources */, + 4B29D38EDDB75BCB365332D8A29BA70E /* FLEXNetworkObserver.m in Sources */, + 5EFA8ECB828AB410D970E5EFE0F85384 /* FLEXNetworkRecorder.m in Sources */, + 18E86CA6E9B4558ACD007C1B2BF92936 /* FLEXNetworkSettingsController.m in Sources */, + 77BD1BC48E9CBE22BEC4E364A4F50DA2 /* FLEXNetworkTransaction.m in Sources */, + 5B2F50AE3424EE8C2EBF0435DFC390AB /* FLEXNetworkTransactionCell.m in Sources */, + BF31361925C34717C1A51F9634A0C142 /* FLEXNetworkTransactionDetailController.m in Sources */, + 56372868284C8E34B7E01A31E061652B /* FLEXObjcInternal.mm in Sources */, + 38B71D764F89199136B1C805B2C6C330 /* FLEXObjcRuntimeViewController.m in Sources */, + 94FF409F4BFCEDCC9AA97BB273CD8105 /* FLEXObjectExplorer.m in Sources */, + C2A57077194D5C0B9A72136DEE421F51 /* FLEXObjectExplorerFactory.m in Sources */, + 20E6AE18BE91E5E9C3B5AD19E7C3CED0 /* FLEXObjectExplorerViewController.m in Sources */, + 7F620FF7D9B2E0D703F761662E698CD5 /* FLEXObjectListViewController.m in Sources */, + 594EB96E36D91FFCAB2313BF7CF62238 /* FLEXObjectRef.m in Sources */, + 39A239D72435E25B0C35C7C80297604C /* FLEXOSLogController.m in Sources */, + F03CB37D759505CC43B788D14D8CF60B /* FLEXProperty.m in Sources */, + F6AC8B45DC4C2FCC3B9214F9A1A6120E /* FLEXPropertyAttributes.m in Sources */, + E97CC067963C528C29BF64F9961052D9 /* FLEXProtocol.m in Sources */, + 4F46961954098FFCE0439BD15F875CE6 /* FLEXProtocolBuilder.m in Sources */, + 7C427C3A77DB575EACF5928FAA34B919 /* FLEXRealmDatabaseManager.m in Sources */, + C050D1E7E2461E706C58CAB600F8B51A /* FLEXResources.m in Sources */, + 8AC28F7DD47C4988060ECF815AFD0214 /* FLEXRuntime+Compare.m in Sources */, + C5DB2BA85606DBFB7CCF819B66F9A1D6 /* FLEXRuntime+UIKitHelpers.m in Sources */, + 30EE89E3FD8F62A95E9860FD1ECD9782 /* FLEXRuntimeBrowserToolbar.m in Sources */, + 8940FABD25C09A121D0E9EF781EB47B6 /* FLEXRuntimeClient.m in Sources */, + 413D120C0F2A3B23E47753A04FC09068 /* FLEXRuntimeConstants.m in Sources */, + 2DB3B4948FC22E6B32A3A84F743D07DC /* FLEXRuntimeController.m in Sources */, + E2D7A08BA1CF39E74DBA34EC8546F38E /* FLEXRuntimeExporter.m in Sources */, + 07B3AD876DAAB85823A263D3FC30F29A /* FLEXRuntimeKeyPath.m in Sources */, + C81DFB1E45C1BFB1D87C43FC9564BEAE /* FLEXRuntimeKeyPathTokenizer.m in Sources */, + 15A9EF1EDC0251416833C67F0766B949 /* FLEXRuntimeSafety.m in Sources */, + 1D43A97EBF24237F15F54BAD7DEB1DDE /* FLEXRuntimeUtility.m in Sources */, + 5B274B5D2F7C62913A0F6523BEFFA6B0 /* FLEXScopeCarousel.m in Sources */, + ABEB7435CEE72FFA9CDFF6539B811EC2 /* FLEXSearchToken.m in Sources */, + 3F4F63B3C63F06C6F3E22C30AA01E266 /* FLEXShortcut.m in Sources */, + 46D8A745CAEBDAC0238FCB5033C63015 /* FLEXShortcutsFactory+Defaults.m in Sources */, + 9C709497188DEFED3BE7041B0D125A13 /* FLEXShortcutsSection.m in Sources */, + A92D35654D41635D547A056DC0BCD817 /* FLEXSingleRowSection.m in Sources */, + 83C49CBA4D61DEE667B20EE3976CEBE0 /* FLEXSQLiteDatabaseManager.m in Sources */, + 50F301D4DD0754D972432FA968A8F8E5 /* FLEXSQLResult.m in Sources */, + 002DCBCBD4A1D8E605E62DC7D1446C80 /* FLEXSubtitleTableViewCell.m in Sources */, + 69CD05E489990F69F74C4C794DBD26E7 /* FLEXSystemLogCell.m in Sources */, + 88FCBB7BE6D06B1688FBD32B042B9DA1 /* FLEXSystemLogMessage.m in Sources */, + ECE37F0547581663D4C6FE41415F7BFC /* FLEXSystemLogViewController.m in Sources */, + 5571A4204B0496B43B0E07ED9B57865E /* FLEXTableColumnHeader.m in Sources */, + DF5054AB72C38268F2E208FCCFB5719B /* FLEXTableContentViewController.m in Sources */, + 0659AE8AA5D7117777CBE18ADCEC7304 /* FLEXTableLeftCell.m in Sources */, + E0B8FEA9C4A127E1ADA1AB5959ADB1D0 /* FLEXTableListViewController.m in Sources */, + B95D690B09E499A634A8A88EF6826938 /* FLEXTableView.m in Sources */, + 625715E8ABEF8A01992E0BE1CACABD3D /* FLEXTableViewCell.m in Sources */, + E75D0CD5CAAEC1FF40DFA8AFA0B630E6 /* FLEXTableViewController.m in Sources */, + 01D7676292444CBE1920DCDA3A4634A7 /* FLEXTableViewSection.m in Sources */, + 583ABB804A510125490C604A1D54296C /* FLEXTabList.m in Sources */, + 9E57560B6C13539373236890661D6362 /* FLEXTabsViewController.m in Sources */, + D377CC18F71A2A0EDAAFC283DCC57E78 /* FLEXTypeEncodingParser.m in Sources */, + 9AD6CD07D6290389199AD46D0FE28B4C /* FLEXUtility.m in Sources */, + 6BA6FB2CA5A89DCF1B35E9C87182A26C /* FLEXVariableEditorViewController.m in Sources */, + 4AAC806DED611214571D777F0777A93D /* FLEXViewControllerShortcuts.m in Sources */, + 2B84F0340B6EA49505DE62033ED980D1 /* FLEXViewControllersViewController.m in Sources */, + 350B3A1B339CC203465190FD3CA2C89F /* FLEXViewShortcuts.m in Sources */, + B3A717D646F2230D14454CA10758A2CF /* FLEXWebViewController.m in Sources */, + 349698F09B4CADC161E0383613CE5A68 /* FLEXWindow.m in Sources */, + E929DF568762CC27E3ADADDDF4C75D2A /* FLEXWindowManagerController.m in Sources */, + 07EA2CB23F75926A64D2F7D8733E3C4B /* NSArray+FLEX.m in Sources */, + BB6F139DFF0DCFD174EC8A1FA4BF561E /* NSDictionary+ObjcRuntime.m in Sources */, + 4A31D32B34A7E18C0D63831C6C016D44 /* NSMapTable+FLEX_Subscripting.m in Sources */, + 75A0BC5C5A57E73D050711A90D41C8A3 /* NSObject+FLEX_Reflection.m in Sources */, + F8BB42CD924EACEAADC628130C5E90BB /* NSString+FLEX.m in Sources */, + 416067B3796E5C09CC41AA7DC236A0D0 /* NSString+ObjcRuntime.m in Sources */, + C862FD8E27BAA0383F75869E318273F7 /* NSTimer+FLEX.m in Sources */, + 0C7EFE7FBFB06733EAD35B47C17C37B6 /* NSUserDefaults+FLEX.m in Sources */, + 683725345A0582312D8B691076CF5070 /* SceneKit+Snapshot.m in Sources */, + A02D5BF0D24A54C57829B0F54225269C /* UIBarButtonItem+FLEX.m in Sources */, + FD501D71B259275D6420686F2DE4E04A /* UIFont+FLEX.m in Sources */, + 069835E7FB01401D297AF7261C174CC6 /* UIGestureRecognizer+Blocks.m in Sources */, + F1E040D72F87CE5C0C31662B8717EF20 /* UIMenu+FLEX.m in Sources */, + 271A981A272B88A242204504A9231B8A /* UIPasteboard+FLEX.m in Sources */, + 9B0CA241C1D90372A5320B31557D67A3 /* UITextField+Range.m in Sources */, + 8B8EFF6F38071843AF1A0619EF98E6BE /* UIView+FLEX_Layout.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 84416D0B5E68795D45B837C8747089E6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5B3486D14E248043159CCBC559CA94A6 /* FLEX-dummy.m in Sources */, - F7E3DCFB6E8FBED871DE9D297CD3B686 /* FLEXAddressExplorerCoordinator.m in Sources */, - 667FBC9492CC792ECDC22D778E8D4D49 /* FLEXAlert.m in Sources */, - F051156A6284FF7423391B9FE3DDBE5F /* FLEXArgumentInputColorView.m in Sources */, - EEFB76EB483ECEB97B55D95F678DA915 /* FLEXArgumentInputDateView.m in Sources */, - 08584D6E4A3D9E22BC7F017BF2943894 /* FLEXArgumentInputFontsPickerView.m in Sources */, - AF18178C4D1E7B23E55F2DB5319F1D10 /* FLEXArgumentInputFontView.m in Sources */, - E7F869C81DF85E7211463741D283ABD1 /* FLEXArgumentInputNotSupportedView.m in Sources */, - 0502BA4DDA76CC4C4BCF72FD6E95B40D /* FLEXArgumentInputNumberView.m in Sources */, - D839F9B6CC90BDA7100B37D308C55D94 /* FLEXArgumentInputObjectView.m in Sources */, - F3F1CD5C7E65A923259E16433F4ADBF3 /* FLEXArgumentInputStringView.m in Sources */, - 626F3416758DEBD1FB6EAD134D843949 /* FLEXArgumentInputStructView.m in Sources */, - 1D6F19030F80318D39A2113DD124C619 /* FLEXArgumentInputSwitchView.m in Sources */, - 4AFA4AF24AA294A0F194A43270339F85 /* FLEXArgumentInputTextView.m in Sources */, - 84B11076CA2998486B455AF09CD1D27C /* FLEXArgumentInputView.m in Sources */, - A9BA1272EB8A90CD5317FEE2120167F1 /* FLEXArgumentInputViewFactory.m in Sources */, - FFD8148FC8961F14226D6595212D488F /* FLEXArrayExplorerViewController.m in Sources */, - 131A55FB873E86A972C811E6CB3DD116 /* FLEXASLLogController.m in Sources */, - A6ED1EDDEDCD7CB31ACB54B20AC3F076 /* FLEXBundleExplorerViewController.m in Sources */, - 953EBB2A5FBEE22B43EED2A0880F204D /* FLEXCarouselCell.m in Sources */, - 82367C2BD8A964B96A9EB0311A3E433D /* FLEXClassesTableViewController.m in Sources */, - 779BFC6B1826455B5D1CABCA214C611B /* FLEXClassExplorerViewController.m in Sources */, - 1574C28EACB1C12A4AF9E61D67BC1D5A /* FLEXClassTreeViewController.m in Sources */, - F62773EADEEDF1003EF7D8B38DAD21EE /* FLEXColor.m in Sources */, - 1756E23E965E58A9819CDD4057843F26 /* FLEXColorExplorerViewController.m in Sources */, - 9AB99422D642D3A6B1F0DB87E53EDCF5 /* FLEXCookiesTableViewController.m in Sources */, - 420BAEB6D860B4567D4762DE5C09C7AE /* FLEXDefaultEditorViewController.m in Sources */, - BBC265A5F9F741579C7D31C5C8248C94 /* FLEXDefaultsExplorerViewController.m in Sources */, - 06407609364E90308F626DA560EB52B4 /* FLEXDictionaryExplorerViewController.m in Sources */, - A20E5E0A83818D0920AE959D76519ABA /* FLEXExplorerToolbar.m in Sources */, - 2473DA2D20D5E5A4D34E1319E11D3A21 /* FLEXExplorerViewController.m in Sources */, - 80E75DBD3762A8C04047DFD52FE9B2D8 /* FLEXFieldEditorView.m in Sources */, - 5863583E21B3BA593B3D64CDF9D25EC0 /* FLEXFieldEditorViewController.m in Sources */, - A8A3636A01BE0995470BCFE1D51B7B55 /* FLEXFileBrowserSearchOperation.m in Sources */, - B140200A6DF4E2FADC54E636789F99C4 /* FLEXFileBrowserTableViewController.m in Sources */, - 6C18EFACF60A8019C9C54C8AC59C260F /* FLEXGlobalsEntry.m in Sources */, - 88949655E8CFFED9A32189E4E4D0D680 /* FLEXGlobalsTableViewController.m in Sources */, - 55002EF42ED90A8CF76900FC532485F0 /* FLEXHeapEnumerator.m in Sources */, - C8C63782147EFC88AE5E53DC410C6D3A /* FLEXHierarchyTableViewCell.m in Sources */, - 3CF26534C4333D57DC26497D758F85F0 /* FLEXHierarchyTableViewController.m in Sources */, - 0C24A57C81CD78ACF88B0A47F283BBB6 /* FLEXImageExplorerViewController.m in Sources */, - 0724FEEE4D812A26F87E2E38673AFF8F /* FLEXImagePreviewViewController.m in Sources */, - 7A84967FE3EB1F723F9CFBCA93181D84 /* FLEXInstancesTableViewController.m in Sources */, - 11DDCB1538265964A845F29E32A9B597 /* FLEXIvarEditorViewController.m in Sources */, - 1CFBE99AEB488F612B6EFD36C1BCC346 /* FLEXKeyboardHelpViewController.m in Sources */, - F5EFE353A6373FDE7C295199CE8C985E /* FLEXKeyboardShortcutManager.m in Sources */, - A01B043DEFFED0BF0A5C6EA308762FB6 /* FLEXKeychain.m in Sources */, - 8F61416489108D91A862B72F46DA9EAA /* FLEXKeychainQuery.m in Sources */, - 974389C74D696B6BA3BB431E92004DF8 /* FLEXKeychainTableViewController.m in Sources */, - C8A892292A373037A19B8526E9529436 /* FLEXLayerExplorerViewController.m in Sources */, - 49CD9E8C33273C128D1BB511FF77557C /* FLEXLibrariesTableViewController.m in Sources */, - 6F5088A027F8E260775497703C490CD8 /* FLEXLiveObjectsTableViewController.m in Sources */, - DC0494CDD6ACDEF38685DF6A4D1CD019 /* FLEXManager.m in Sources */, - D8FA17C481CE88FCC012BAB9751B8851 /* FLEXMethodCallingViewController.m in Sources */, - C40CC61A9A198147936E8C9FF5F63326 /* FLEXMultiColumnTableView.m in Sources */, - 5C8E38275088BF38197FB752B9C00A95 /* FLEXMultilineTableViewCell.m in Sources */, - 19C5C05536863346706D643989A6007C /* FLEXMutableFieldEditorViewController.m in Sources */, - 6E6F49826E3B3AD3618FADD8C33B1D3C /* FLEXNetworkCurlLogger.m in Sources */, - 3D76081CA4771514D7C87EF320EA5409 /* FLEXNetworkHistoryTableViewController.m in Sources */, - 359281FED5F98A543A01217E7DCE4323 /* FLEXNetworkObserver.m in Sources */, - 4BB508941A64D8CE06621C2594D2E240 /* FLEXNetworkRecorder.m in Sources */, - DE8C46CFC7D5E8EF44729383BE9B0A19 /* FLEXNetworkSettingsTableViewController.m in Sources */, - 9B33E1C7881139D7265559F956496CA6 /* FLEXNetworkTransaction.m in Sources */, - B51B7AD982B71317490785F06FF41234 /* FLEXNetworkTransactionDetailTableViewController.m in Sources */, - 82E27D4608ED2F80A9B415B1D2C68791 /* FLEXNetworkTransactionTableViewCell.m in Sources */, - D2BF60A87CB1F9147996E509F2FD17E0 /* FLEXObjcInternal.mm in Sources */, - 758FCF51D205040A37CED74B48ACFBF6 /* FLEXObjectExplorerFactory.m in Sources */, - 7A1876553EFE40A7A32977205091A3E3 /* FLEXObjectExplorerViewController.m in Sources */, - F06948DA520026F4C658FB5CCF585F22 /* FLEXObjectRef.m in Sources */, - 5C6538603E1C413B1A815A26A23CE319 /* FLEXOSLogController.m in Sources */, - F4256074A263683008AB224BF78B78C5 /* FLEXPropertyEditorViewController.m in Sources */, - 2E7BDF48655F7AB9AC2F5BEEAFE813BB /* FLEXRealmDatabaseManager.m in Sources */, - 46E346BCA4B30A02CE439DC19EF95BB2 /* FLEXResources.m in Sources */, - E60C925C50888D3B0CBCC41E4BB6B82B /* FLEXRuntimeUtility.m in Sources */, - 8185032137E62DA6E172447A94F3936A /* FLEXScopeCarousel.m in Sources */, - F6AAD8D1D97ABF065ADED6768D0D30BE /* FLEXSetExplorerViewController.m in Sources */, - C7FC0432CB5A1FE687E47C067AF5F7B1 /* FLEXSQLiteDatabaseManager.m in Sources */, - 1A4F1533B168DCFEA29A1F231BE02220 /* FLEXSubtitleTableViewCell.m in Sources */, - 152AB8DE428B22E030ACE7915FE1A321 /* FLEXSystemLogMessage.m in Sources */, - AA51FF4DA51668EB6CE0C8AD2D6E75CD /* FLEXSystemLogTableViewCell.m in Sources */, - 2AF6390371D9D7B176C6A6133087610E /* FLEXSystemLogTableViewController.m in Sources */, - 9B8FAF2DC010F69325E089948A897766 /* FLEXTableColumnHeader.m in Sources */, - F5B49D3C10CEB7FE38A205BECC6218EB /* FLEXTableContentCell.m in Sources */, - 58CD4788B22DC3CDD9C38F82B495EE19 /* FLEXTableContentViewController.m in Sources */, - 786D308376439613AEBBDA29CD7C0A6E /* FLEXTableLeftCell.m in Sources */, - DB7B983E0584556598473DBC20023C3A /* FLEXTableListViewController.m in Sources */, - D952E6DDF14902ADB86E94706B7038E1 /* FLEXTableView.m in Sources */, - C6A09303127102325C51A22B430ACE6E /* FLEXTableViewCell.m in Sources */, - 799039448763A97DE6272F90DDA0A360 /* FLEXTableViewController.m in Sources */, - 928011B145E880A322B27E02BBA4D447 /* FLEXTableViewSection.m in Sources */, - 3152768F726804B734E07A8BBC356FF6 /* FLEXToolbarItem.m in Sources */, - F983642384410111AA15A25C765212FF /* FLEXUtility.m in Sources */, - 5F468135453E10758CD11ACAA673C6AF /* FLEXViewControllerExplorerViewController.m in Sources */, - E28F6DDCCC020ED0C741FF29877A5988 /* FLEXViewExplorerViewController.m in Sources */, - AE990711FA570FB052637A2611C9B4EA /* FLEXWebViewController.m in Sources */, - DE36CC1F61A505DA1007858E82DEB96E /* FLEXWindow.m in Sources */, - 8BC3DEF71F710F76EE5238A3510AFDCF /* UIView+Layout.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9BEE94FCF5C8BD958F691ACC5191E62C /* Sources */ = { + B6CCE1E29AA9791F4BB96F298D9267CD /* Reachability-dummy.m in Sources */, + 5CF1B9177A5660758B9CEE62C94CB113 /* Reachability.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 883FE44F3CF04FA82F99A6B915FF4A08 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6C503937CE1EA20989396D580D95B490 /* RMDateSelectionViewController-dummy.m in Sources */, - A64D3F0F31DBB8D702B507DE8D5B324E /* RMDateSelectionViewController.m in Sources */, + 6D3EFB81141B39BC8C2C62D8B87C1D70 /* HMSegmentedControl-dummy.m in Sources */, + F64C1EAB224243616BD75341A699DCD3 /* HMSegmentedControl.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9FF5AF4845DDE8BFBCF5EBFDA4C04B1A /* Sources */ = { + 89B361018E30DDD26C5A1F5268FD1ABD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BFB5FDDD51DF49EAE59093508615CF57 /* APAddress.m in Sources */, - 5BB6A9A55E75C8D590F757506448562C /* APAddressBook-dummy.m in Sources */, - EB1EE91DAAC67B346D8C24FE16F17198 /* APAddressBook.m in Sources */, - D767F718B729C7558399521C5E5390F5 /* APAddressBookAccessRoutine.m in Sources */, - BFD6F31DD2752A46DD70751A1F701148 /* APAddressBookBaseRoutine.m in Sources */, - E5692DF1DEB6B63DA2B17F36FC8399B1 /* APAddressBookContactsRoutine.m in Sources */, - 16278854C75F10642A60937D35005BDA /* APAddressBookExternalChangeRoutine.m in Sources */, - 80BA9911F6CBF78D25843A862AF4F578 /* APAddressBookRefWrapper.m in Sources */, - 40C882B0B81702AEBFFDFBB953C168C8 /* APContact.m in Sources */, - 0B8B550C83B6FE3CFEC9D0C53E49F136 /* APContactBuilder.m in Sources */, - B334910D2993AB9CCC5CFCBF17B69714 /* APContactDataExtractor.m in Sources */, - FCA1A4AC0CCBA7AB0AE3C65BCD8A8779 /* APContactDate.m in Sources */, - 36DD5E1A36A48AE80F273B2259F1CE98 /* APContactListBuilder.m in Sources */, - 45AAE948FA6D8DE6F20B698A91DD2073 /* APEmail.m in Sources */, - ACA8FF93A4B9A5A5674AD1BD6493A3E4 /* APImageExtractor.m in Sources */, - 05B26F8C3063601CA5DB66667A150CB5 /* APJob.m in Sources */, - 2440F7454F6DE235EBCE64D397DFA753 /* APName.m in Sources */, - E41B84D8699648F19C2EA547DCFC7749 /* APPhone.m in Sources */, - C06EB12DEE4E73F62B2409A7733F8485 /* APRecordDate.m in Sources */, - ABD0E5C5CA7C10F3466BBE10A8DFA108 /* APRelatedPerson.m in Sources */, - 0210AF756C9F104B51260E043076BC75 /* APSocialProfile.m in Sources */, - 9C69CD930769DE3273F894A9DCF4567E /* APSocialServiceHelper.m in Sources */, - AA8532E63F7A291FD31C5975994B03A7 /* APSource.m in Sources */, - DF37D32B03986B341AC8C5E0E07E8597 /* APThread.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A8FBE0A744D29115317DFE2C33F28921 /* Sources */ = { + 59AF40E68708A58BC0190BD7550BFAE0 /* JDStatusBarLayoutMarginHelper.m in Sources */, + 207D5BA045D41335592B27EBF0D232B5 /* JDStatusBarNotification-dummy.m in Sources */, + F85624370A667BAD52A46736ABF00106 /* JDStatusBarNotification.m in Sources */, + 3F86CF5DE3BFE69A5C2C61FCE66A23CF /* JDStatusBarStyle.m in Sources */, + E95ABE58605C8FC5A0B5CBA69885BF88 /* JDStatusBarView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8A2C6B24656F3B9044193975D4F94A3B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1BAEF329383159674051C715AB8DAB11 /* AFHTTPRequestSerializer+OAuth2.m in Sources */, - 460AF388F8170135AF9F5DC74E818D52 /* AFOAuth2Manager-dummy.m in Sources */, - BD608ADAAAB87292B7F80FD55BD5A4E3 /* AFOAuth2Manager.m in Sources */, - 1D86324E0C7E40E04BC1E80680C8E896 /* AFOAuthCredential.m in Sources */, + A40D856F38CC6B469A6E2AF199ED290A /* NSData+ImageContentType.m in Sources */, + 8ECEB67C1417C8FC84AE458510BCCAE0 /* SDImageCache.m in Sources */, + 303990F1DF20F36519E14A1E269028D0 /* SDWebImage-dummy.m in Sources */, + 68E411E21692D1A916EC46C7F6A9DCBA /* SDWebImageCompat.m in Sources */, + 3F56A77F4F70D09C62242508FC38B43D /* SDWebImageDecoder.m in Sources */, + 6C0178FA2A156177E74E9CD081F7BAEB /* SDWebImageDownloader.m in Sources */, + 796CB3098A2D5AA13AC0840113261B62 /* SDWebImageDownloaderOperation.m in Sources */, + 1AEA99F4D6D07F71877E6957F8340472 /* SDWebImageManager.m in Sources */, + 6D98B82C049D3C156F695D956691BBBB /* SDWebImagePrefetcher.m in Sources */, + 84A74089372EF9ABDCA466F625ED51EF /* UIButton+WebCache.m in Sources */, + A4454C51287FF7F675DD1A6CF5C489EE /* UIImage+GIF.m in Sources */, + C1FC9A6D39B4FB73EE957931FDCE8040 /* UIImage+MultiFormat.m in Sources */, + C71E399CB15FD91171EFDAE164736090 /* UIImageView+HighlightedWebCache.m in Sources */, + 3F407D7E5B43A57B04244F198F3CD546 /* UIImageView+WebCache.m in Sources */, + 04B3DFCC54719FE7BEE4592800A5AB7C /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A91AB827AF39A9E5A304B1829C6E9524 /* Sources */ = { + 8C0C43350F6320EB0549302D9759EE70 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 72C531265120C3B7548B06E481EDCE9C /* SCSiriWaveformView-dummy.m in Sources */, - 1E5EEC226E2DFB85A55A29E49FF824D1 /* SCSiriWaveformView.m in Sources */, + BB290C910E1C3798731575AAD89F22CD /* DHSmartScreenshot-dummy.m in Sources */, + A963839D24FFA7A463CC3BB21342B374 /* UIImage+DHImageAdditions.m in Sources */, + D5CA730881C2861C591F6C291A6907ED /* UIScrollView+DHSmartScreenshot.m in Sources */, + 1DD50B12185BB9036795CF5F99102DDD /* UITableView+DHSmartScreenshot.m in Sources */, + 486BB429C102B4E0EA7655D2A416283B /* UIView+DHSmartScreenshot.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BDB0C9AFD63D591577C250B446FC6A65 /* Sources */ = { + 98AC0EFC4BEB8D5C0A9E65A0CDABFAF8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C5D3700F1B1A76A4645685F286D27DB2 /* HMSegmentedControl-dummy.m in Sources */, - CD824AC5EB0B67904E1AD99F9621E7C6 /* HMSegmentedControl.m in Sources */, + 0862FDC3375EE40C73FF659AA6625869 /* NSMutableArray+SWUtilityButtons.m in Sources */, + 51B7886AA817D8CB8E290964D37C49FD /* SWCellScrollView.m in Sources */, + D65A932DA7AF267412F35B661CE80518 /* SWLongPressGestureRecognizer.m in Sources */, + E54C99E4F01D95A4272385AA495C0D4B /* SWTableViewCell-dummy.m in Sources */, + 859C73A3B5B887C8D7E02C8A8C3EC453 /* SWTableViewCell.m in Sources */, + 69B456834488C3D781F7088100BC49B9 /* SWUtilityButtonTapGestureRecognizer.m in Sources */, + 870A8C0F5E1F7CA18B1A3EAA9E2C3984 /* SWUtilityButtonView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C661E1D17A969EE87FEC56C49781E7A1 /* Sources */ = { + 9F3CC9F5549BC1F5794FCD124F9453C6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 95506003D3E2FCF2DD5BD9760B57F708 /* DTActionSheet.m in Sources */, - 55748191A9944E5992663F2F0D2D1CBB /* DTActivityTitleView.m in Sources */, - 8F28CEC926968854DB6A6185DC5203B6 /* DTAlertView.m in Sources */, - AF055FF5877770738E75606AB98EB934 /* DTAnimatedGIF.m in Sources */, - B834E5675F8576A55C8DDB3745C625CA /* DTASN1BitString.m in Sources */, - 3990E6C95E839BBE67CBBD8B7DC0B2CE /* DTASN1Parser.m in Sources */, - F51A694339FC6AAC64260FD67E9DED5B /* DTASN1Serialization.m in Sources */, - 6F02BDB8C0F3BC4749825E74258B8619 /* DTAsyncFileDeleter.m in Sources */, - 6FB86AE896353AB4FB1C0288D5F25292 /* DTBase64Coding.m in Sources */, - 60896007B2998F181BA032ADD7821C35 /* DTBlockFunctions.m in Sources */, - 8D33147A3609543194CBA319250CBDD1 /* DTCoreGraphicsUtils.m in Sources */, - 4BA152C2BEC8E291D515205938E87ADF /* DTCustomColoredAccessory.m in Sources */, - 26F87ECA3CEFD44AEEA961F3C7D6F06A /* DTExtendedFileAttributes.m in Sources */, - AA363FB9417F413CF043C82A3656536C /* DTFolderMonitor.m in Sources */, - D73821706685403BDF24333CC4E24B92 /* DTFoundation-dummy.m in Sources */, - CB920DDD4BFB283CCB5C632FAA7EB8D4 /* DTFoundationConstants.m in Sources */, - 1C8C1924549F73FD4A2BD5A483B26F1A /* DTHTMLParser.m in Sources */, - 3C1560F8C4E32147E8DB3B24984B0A36 /* DTLog.m in Sources */, - 35E99F9A66137EC4DE6ACF4E9474413C /* DTObjectBlockExecutor.m in Sources */, - F98745623050A4EA4A7A3D3FADE409FD /* DTPieProgressIndicator.m in Sources */, - 51FB7928C0D09FB5B05AB9550779BB4F /* DTProgressHUD.m in Sources */, - 22C673F437EDAAF027F8648465C4554F /* DTProgressHUDWindow.m in Sources */, - 462BF59FC95AB8E81020602849B0A6C2 /* DTReachability.m in Sources */, - 59CD0648B94EE81DF07D406D7373282F /* DTScriptExpression.m in Sources */, - 221EB7D98A5FAE4FFAFB88293D173DDA /* DTScriptVariable.m in Sources */, - 1C3600EB5FF4A6218261AF9E794EC094 /* DTSidePanelController.m in Sources */, - F8D5DEC8ED67D8BFCB142AC6ECF8B032 /* DTSidePanelControllerSegue.m in Sources */, - AB7A45D71F1F2D293508BE159A3D7494 /* DTSidePanelPanGestureRecognizer.m in Sources */, - 5E0EF04B4966E8E0843467E28377B404 /* DTSmartPagingScrollView.m in Sources */, - 7D169838A1716663C30CE9707E21D059 /* DTSQLiteDatabase.m in Sources */, - ECE6B23D52C9C2C79F4296887B24D1B2 /* DTSQLiteFunctions.m in Sources */, - 23E92826BBCB98617E406CC734373724 /* DTTiledLayerWithoutFade.m in Sources */, - E607DF11B1B79EB7861EAAFCC787A44D /* DTVersion.m in Sources */, - 70EC792A81D5EF4F5EFA1B645EEF5BAD /* DTZipArchive.m in Sources */, - 705C1634BBBE731E156D758BF4870306 /* DTZipArchiveGZip.m in Sources */, - BDDC7E368DB6EA6985D052BAC62DE0B7 /* DTZipArchiveNode.m in Sources */, - EF9085911E46AFF8CE6A3112F72072C6 /* DTZipArchivePKZip.m in Sources */, - 789AD9D80A26BE87D801F54680FCDE02 /* ioapi.c in Sources */, - 6DD636F8BB8107BE5579406743AFBB48 /* mztools.c in Sources */, - CEAC8772819F074F99EF37BDAF0EFDBD /* NSArray+DTError.m in Sources */, - 4A35F649F24DB92F1BAAE95ADC5DECF3 /* NSData+DTCrypto.m in Sources */, - CC4300D336A6FECD1FBCD7089852ADF7 /* NSDictionary+DTError.m in Sources */, - 9ADDB9826DBB38D2320458FAB0871564 /* NSFileWrapper+DTCopying.m in Sources */, - 86411CC407934478B47A6ED9EA802006 /* NSMutableArray+DTMoving.m in Sources */, - D9C0CB9DD710B70DD3D97E5BDF8C3FE7 /* NSObject+DTRuntime.m in Sources */, - DD11487B7451719729E30D5A8B4BB2E4 /* NSScanner+DTScripting.m in Sources */, - BE3E541F9C54B855E73B3AF5A7D3DB8F /* NSString+DTFormatNumbers.m in Sources */, - 202FD9F7FC82013C683E989CE4CA34AE /* NSString+DTPaths.m in Sources */, - 44A259CE1FCF6A086713D43517FF3C65 /* NSString+DTURLEncoding.m in Sources */, - 6CE2B3916B7E17A6CB1C93929253F64A /* NSString+DTUTI.m in Sources */, - 158CEB67F6A928F5F0D273BEC7E77AA5 /* NSString+DTUtilities.m in Sources */, - 2787E914021C9AFABC4551BD64EC110E /* NSURL+DTAppLinks.m in Sources */, - 809261040A9C9370CD8A85B65DEC658A /* NSURL+DTAWS.m in Sources */, - 4A6ED759CF874BF0AB65A36485E73145 /* NSURL+DTComparing.m in Sources */, - 8F329DBBA6D8BB20E2F3B1727B2D60FE /* NSURL+DTUnshorten.m in Sources */, - 43B9DF83245BD67B3D479FCB7E830342 /* UIApplication+DTNetworkActivity.m in Sources */, - 78AE390A48C8558CAAA4070D9EA341D7 /* UIColor+DTDebug.m in Sources */, - 0F8A3845EE2479E25950E9F05E5C37B4 /* UIImage+DTFoundation.m in Sources */, - 0D36C51F412556CB75C4141E7EC7C092 /* UIScreen+DTFoundation.m in Sources */, - 7D270F2ECC8C45EC5EBA4C32D7F12637 /* UIView+DTActionHandlers.m in Sources */, - 085156D19B644A05D79E5B2A02E4D7D1 /* UIView+DTDebug.m in Sources */, - 09180BB821C5AA314D37C344D0A2E14D /* UIView+DTFoundation.m in Sources */, - DFBCC547C3E4BD7DB1B28F0751CC9C88 /* UIViewController+DTSidePanelController.m in Sources */, - E5B08A17ED2A445F397F883CA09BB372 /* unzip.c in Sources */, - D4CBCC035A12321B0539AED034102012 /* zip.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CD3AD15ABAA7803365C57DA6EA0124ED /* Sources */ = { + FC51E9CFC9C500F8606A697A931C525C /* CTLineUtils.m in Sources */, + D629BE81814AED22D94513D355A34212 /* DTAccessibilityElement.m in Sources */, + 58E326D7581F4A8F75EAB800D6BD9BB8 /* DTAccessibilityViewProxy.m in Sources */, + 309ED4F59EBEE68A3EA745E2F71A0940 /* DTAnchorHTMLElement.m in Sources */, + 4A18FBB5B44EB3C50E6811C1F9D48E17 /* DTAttributedLabel.m in Sources */, + 187B7F6B0B4AC91FE2ADD1CCEEACCE4C /* DTAttributedTextCell.m in Sources */, + EA17BBE030929397EA4550BBCC4B4437 /* DTAttributedTextContentView.m in Sources */, + B2E2C5CAB08A2B611F2F7338C42D3692 /* DTAttributedTextView.m in Sources */, + 28FC7A4A4AFA341C710EB2077A870481 /* DTBreakHTMLElement.m in Sources */, + 4B48FEC0E7F0B0DACCDD9AE9977E5309 /* DTColor+Compatibility.m in Sources */, + 1D5061CA8E21466E67F95BF538729776 /* DTColorFunctions.m in Sources */, + 74CABE0DD96960B4FAF7F68A0E721E0F /* DTCoreText-dummy.m in Sources */, + 7CF529BEA59674951373DBEA5B85345F /* DTCoreTextConstants.m in Sources */, + 647551509AECBA92D91C34585EA308F9 /* DTCoreTextFontCollection.m in Sources */, + A29F871234D8852DE7C6B62CED70F9BD /* DTCoreTextFontDescriptor.m in Sources */, + 72C06A5FFF77F781E097520E1732818E /* DTCoreTextFunctions.m in Sources */, + 041F986B33FBBB4F14696F4DAE441679 /* DTCoreTextGlyphRun.m in Sources */, + 2B513AD57D7355C38ECFBB63A59A4074 /* DTCoreTextLayouter.m in Sources */, + 54CFC998F03C5D57D822C4BBDD28124A /* DTCoreTextLayoutFrame+Cursor.m in Sources */, + F157869CC61946CD19689CF39CBACC3F /* DTCoreTextLayoutFrame.m in Sources */, + 53E402CD331B33A1AD993AD6CFD5501F /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */, + 1B47481658FD4748FA6AADC4295F2A6E /* DTCoreTextLayoutLine.m in Sources */, + CF299D1A5344D716813CBE48DE170597 /* DTCoreTextParagraphStyle.m in Sources */, + B2AC59DA93D8EB36A8C4A6829E5FA55B /* DTCSSListStyle.m in Sources */, + AB50D0DAB71846554F599F10556CA03C /* DTCSSStylesheet.m in Sources */, + 46A14C0AA1DBD912F3546C9CECC520E3 /* DTDictationPlaceholderTextAttachment.m in Sources */, + 917511E2BA9FA5A30116FC0B8C3D696C /* DTDictationPlaceholderView.m in Sources */, + 07D5D6B9EEBA46E79D02E2A8459899EC /* DTHorizontalRuleHTMLElement.m in Sources */, + 02B2B5C98DC19C5C870B23F6533C0ECC /* DTHTMLAttributedStringBuilder.m in Sources */, + 9800440261F73D144D3F3A4EAE669581 /* DTHTMLElement.m in Sources */, + D4A075BF4BC73F86A71D8462A6E2A55A /* DTHTMLParserNode.m in Sources */, + 06B0C429BEDB8D4734E26116ACEF7C63 /* DTHTMLParserTextNode.m in Sources */, + 873D84089C07D426E1BBC0EC67BE1D28 /* DTHTMLWriter.m in Sources */, + B6CE07ABFCF196CD3D4C4F46110B9029 /* DTIframeTextAttachment.m in Sources */, + 3C7F3BBA13F2EF5EE9DA553BD3E938FB /* DTImage+HTML.m in Sources */, + 875D6DE94137D81E62FD8E8FA124B3A1 /* DTImageTextAttachment.m in Sources */, + 28782A4DC7B575BDB816D926C430DA19 /* DTLazyImageView.m in Sources */, + 54C7D158210F01F8A6B5E670657B3B50 /* DTLinkButton.m in Sources */, + 2EA9E8C111FDA0F7051746C133E189B9 /* DTListItemHTMLElement.m in Sources */, + EFD9C1CDE35F03D16FF9699B7E620ED1 /* DTObjectTextAttachment.m in Sources */, + 1DABC29EA4EFE0E5F411C53781895E76 /* DTStylesheetHTMLElement.m in Sources */, + 219B79C7B052A12DEFCDEE249415EDF6 /* DTTextAttachment.m in Sources */, + 04A68587BE50B1628E11EEE3078B9BF3 /* DTTextAttachmentHTMLElement.m in Sources */, + 9BE65B0C034DA58A2CFA7D21DBF5878A /* DTTextBlock.m in Sources */, + 9E10D372C484381BBB01EB22148B80D7 /* DTTextHTMLElement.m in Sources */, + 793C6E3AFE8C4D36D7473C3442F76E2C /* DTVideoTextAttachment.m in Sources */, + 22C92B6A033981388F94BCC120DE7C84 /* NSAttributedString+DTCoreText.m in Sources */, + 389CDFD752E2017C6FD7312FE66DFB6F /* NSAttributedString+DTDebug.m in Sources */, + 83D41360F05130C3C1A1DCC4428EB090 /* NSAttributedString+HTML.m in Sources */, + 9D78D6CC03FFE458D4DC6DB7F99308C7 /* NSAttributedString+SmallCaps.m in Sources */, + 2C37B355C8BC8C2D451C5F93FB35F2E7 /* NSAttributedStringRunDelegates.m in Sources */, + C0226A7C2D5D2A5A1FA75B87DD373252 /* NSCharacterSet+HTML.m in Sources */, + 79F803AFF8893089C3E72E9E4AFC7D47 /* NSCoder+DTCompatibility.m in Sources */, + C6C84AB4551062187688DB459D4129F6 /* NSDictionary+DTCoreText.m in Sources */, + 738D799967110A59881CC5CE1A96A999 /* NSMutableAttributedString+HTML.m in Sources */, + 338C94714913D825FE0CC27FC666B5DB /* NSMutableString+HTML.m in Sources */, + D2590DF40A895DB23D605173E3208081 /* NSNumber+RomanNumerals.m in Sources */, + D03EF5432ECD342931E274E1EAB4869D /* NSScanner+HTML.m in Sources */, + B771FE345C3E13E5389E2762946FDB99 /* NSString+CSS.m in Sources */, + 8C9D39DEDA1858729DF60249E9906CC8 /* NSString+HTML.m in Sources */, + 70C22AA1CB9521BEEEF637AEFCF4A25E /* NSString+Paragraphs.m in Sources */, + F225735542DCC27B8AE57E9D39295D66 /* UIFont+DTCoreText.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A139D4C63A1E1EDD89903B9B6D93A3AC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3FBA47A4E26699A3FBF50BD8181A53C6 /* Reachability-dummy.m in Sources */, - 299489A9E87D4DB6532FF0275950BAC2 /* Reachability.m in Sources */, + D2E47E0488FA37A14E6CB2A8C402902A /* MBProgressHUD-dummy.m in Sources */, + CB27A06C7EAFBFA04873E499B2030BA3 /* MBProgressHUD.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CDA005F89F0B951415117DD991E249C1 /* Sources */ = { + A639F8AF7D571E7F4B0732FA599BB3D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A47F231DB905C8961E79D7EC497AB566 /* INTUHeadingRequest.m in Sources */, - ACBC02FB49CD343081856A8874C370E6 /* INTULocationManager-dummy.m in Sources */, - 0A1E896C6D2A1684FB9ECAF1EADC4B90 /* INTULocationManager.m in Sources */, - 0F913DC06AA2123B6A512C7D049E8A29 /* INTULocationRequest.m in Sources */, - C2CBF3E1D378718F5A7629C735AF1892 /* INTURequestIDGenerator.m in Sources */, + 6A7BAE543EA7BB90BD836A2462E0E614 /* UICKeyChainStore-dummy.m in Sources */, + 5AA5C84B790D617B82762DF146D788C4 /* UICKeyChainStore.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CDE35D9AD8F7D9F2C878BE39CF9D1A8C /* Sources */ = { + AB119DABEE70BA1D51D22AF45C5BA381 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A6CECF76CF837D6628C41B7DEDD619B7 /* BBBadgeBarButtonItem-dummy.m in Sources */, - C126AF4FFE6F641A41B3DA6F18010F95 /* BBBadgeBarButtonItem.m in Sources */, + 5619A62349BB722895F6721126E85151 /* INTUHeadingRequest.m in Sources */, + 4C39F8E7E4260023E123BDEFADBC5AF2 /* INTULocationManager-dummy.m in Sources */, + BC051A384DD14360CE23651D5D250DA2 /* INTULocationManager.m in Sources */, + D72C3DE9FFB20FB1367D64A030C19C3E /* INTULocationRequest.m in Sources */, + 273E9B53026C539C49EEFACE11347CC1 /* INTURequestIDGenerator.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D0C6B7CD8BE9017CF72DDBCAE35F7AC6 /* Sources */ = { + BF1462504A3AAB07913C868CBDDB6169 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7430C96582020A7EE8C7DA894921B22F /* CTLineUtils.m in Sources */, - A6A1A3E41D1985D2133FB7FD58A5D652 /* DTAccessibilityElement.m in Sources */, - EEA3D612B7DAF76202681D47ABBB77AD /* DTAccessibilityViewProxy.m in Sources */, - B91F35A31912B2C86B21106C31D4EAD4 /* DTAnchorHTMLElement.m in Sources */, - E0CEE0F92A9ED7420514B631164B58E4 /* DTAttributedLabel.m in Sources */, - 51BE895E825BD58EB7DCAFD602A32844 /* DTAttributedTextCell.m in Sources */, - DB3EBF85F999FA492AC1606CD522A7FE /* DTAttributedTextContentView.m in Sources */, - C85CBA28364D5375435CE2673E0A5C6E /* DTAttributedTextView.m in Sources */, - 97DD76459093FC1FA5E98B194547187E /* DTBreakHTMLElement.m in Sources */, - 985FD2F8A23B6D093B7EFB318B1FE74B /* DTColor+Compatibility.m in Sources */, - D3F203B678B8886A4E9360DFFC721163 /* DTColorFunctions.m in Sources */, - 0B41A79F208B2DF6127D430F3B977621 /* DTCoreText-dummy.m in Sources */, - 3E436129FA07B710F8E5DE2934652130 /* DTCoreTextConstants.m in Sources */, - E2138AAEE16B13E812C0158BF8E07595 /* DTCoreTextFontCollection.m in Sources */, - 3AE775C11F7C103A3C9202CEC274D386 /* DTCoreTextFontDescriptor.m in Sources */, - 9B9990EE474D71AAA3428DB0B4A38C86 /* DTCoreTextFunctions.m in Sources */, - 56E0DB3F1E39FEBB487C79B8994D24C4 /* DTCoreTextGlyphRun.m in Sources */, - 65F68AABA4185DE385864EE8BB2EA84B /* DTCoreTextLayouter.m in Sources */, - ACD08AED56C2B2EA144705C5A843D7F8 /* DTCoreTextLayoutFrame+Cursor.m in Sources */, - A56C7011FE70AFED6D917B7139F49992 /* DTCoreTextLayoutFrame.m in Sources */, - 9CAE1C5F113747D4628F048FCEC2D1AD /* DTCoreTextLayoutFrameAccessibilityElementGenerator.m in Sources */, - B101C1FA2541492905341463851EB72F /* DTCoreTextLayoutLine.m in Sources */, - ED7D9B273331D578F6DDF96B4C0CABE2 /* DTCoreTextParagraphStyle.m in Sources */, - 1610EA184BFD0028C7B588A42556689B /* DTCSSListStyle.m in Sources */, - E1FFE1EF0C9766DC61A3DE31ACD8B019 /* DTCSSStylesheet.m in Sources */, - C3F6FD906DDD821855600D36B71B0754 /* DTDictationPlaceholderTextAttachment.m in Sources */, - 71C12B1FC74DFF5F66761B7719209DFA /* DTDictationPlaceholderView.m in Sources */, - 69B831C1949A92E2ED30F1DBDBADF3E0 /* DTHorizontalRuleHTMLElement.m in Sources */, - 2B95ED8189B3DCF50BDE318F8A3412E8 /* DTHTMLAttributedStringBuilder.m in Sources */, - 7D94A85201EF2820570D470AF283FD89 /* DTHTMLElement.m in Sources */, - 6E501E4F731EC7E6CCC57FCE4EF81168 /* DTHTMLParserNode.m in Sources */, - 51819693BBAF67CAB6940B432DE8CC33 /* DTHTMLParserTextNode.m in Sources */, - C7C3115E62946C21D75AEC772E7A2501 /* DTHTMLWriter.m in Sources */, - 79E9F1F1FA9FE18DD1B64FFBD1B049A9 /* DTIframeTextAttachment.m in Sources */, - 0657957FBCD3913DE0F9D3FE62359370 /* DTImage+HTML.m in Sources */, - 3381E38347F711E8E4995E4BF00CE690 /* DTImageTextAttachment.m in Sources */, - 6D71326F5B6C7FD8D31B7220FEC62B56 /* DTLazyImageView.m in Sources */, - 08B1A4AEE282C65DA9F0FAED30176417 /* DTLinkButton.m in Sources */, - 4A501A3D727D725D918E364C6DE92D42 /* DTListItemHTMLElement.m in Sources */, - D4A2E29951EF2DC6A40BC22D97FA681D /* DTObjectTextAttachment.m in Sources */, - 3EAF0A7F7C7FDF4AAF8B832B552582C1 /* DTStylesheetHTMLElement.m in Sources */, - CB3A3F71574AF235BA3CF6B113C225DC /* DTTextAttachment.m in Sources */, - 6F651194A917449DAD75245B48A88F8B /* DTTextAttachmentHTMLElement.m in Sources */, - 6D96367BD7622AEDDDE2C730AF32C678 /* DTTextBlock.m in Sources */, - 8605A6C0028F16A4B07C2F715E2563D9 /* DTTextHTMLElement.m in Sources */, - 33B6313DB3640191FA2AFFCEA747F727 /* DTVideoTextAttachment.m in Sources */, - C9E071E0A0827F34CB239ACE9BE7918C /* NSAttributedString+DTCoreText.m in Sources */, - 679418F0D617BBEE9EE7866A56B157AF /* NSAttributedString+DTDebug.m in Sources */, - 1A432A8BAD9B4D4494A2F5F0E97032C4 /* NSAttributedString+HTML.m in Sources */, - 66BFC5787AEF9F8FAF854D8CB81B4FB6 /* NSAttributedString+SmallCaps.m in Sources */, - 88992566AF34D262D04E91E523550A18 /* NSAttributedStringRunDelegates.m in Sources */, - 0C412094A0621AA7F353CE75C40970FC /* NSCharacterSet+HTML.m in Sources */, - 3020217AA9BF168A69637766645A83A3 /* NSCoder+DTCompatibility.m in Sources */, - 17008DA80800BFB01CC9D7CE39FA9DF4 /* NSDictionary+DTCoreText.m in Sources */, - 0E36BA7451E3CF5D05A539EF2850EF87 /* NSMutableAttributedString+HTML.m in Sources */, - CE475F16E39363068F5E4C77F2681DA3 /* NSMutableString+HTML.m in Sources */, - 3B0CF9CDA733AD6D4B817752DB33051E /* NSNumber+RomanNumerals.m in Sources */, - 69DEB3EC3110AB7084B99A06754AC6AB /* NSScanner+HTML.m in Sources */, - 08D14A0FAB686FC9689664BABEF5D711 /* NSString+CSS.m in Sources */, - 176DF2BBC81580F956AF10360743AACF /* NSString+HTML.m in Sources */, - 3603CE66E1122CF45C38AC806CBA3B57 /* NSString+Paragraphs.m in Sources */, - 3B1C452CD0E8C8876C95F4C03BA43B76 /* UIFont+DTCoreText.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D0D6E09D3D0CBBDA2C3D4EFE43FDC8BB /* Sources */ = { + 738FA1A18993801D81C1FE8A41A3B92C /* NSData+NSHash.m in Sources */, + 9974F45C517475C7D8806F9FDB998FEC /* NSHash-dummy.m in Sources */, + 8D818DE43EEC978F4F754E34A0FBB927 /* NSString+NSHash.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BF990AB23645FB8B5A4C090ED110F30E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C47F47C91C6759396F990926E60CA721 /* Pods-Jasonette-dummy.m in Sources */, + 9630B8291C821D4A3CD7A3947829CE99 /* TWMessageBarManager-dummy.m in Sources */, + FAC19B1FD31D034EE11211DAC5AB5564 /* TWMessageBarManager.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DB69505E982DE6588BF22ECFF67539D5 /* Sources */ = { + C0F31087860A8D8EE72FC047C98B1405 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AE0F5E279894BD79A3069E1A79F61450 /* TWMessageBarManager-dummy.m in Sources */, - 2C04F5710FE00A28339699CD35286387 /* TWMessageBarManager.m in Sources */, + 5B2469A667FE6076C9A72128924E2237 /* JSCoreBom-dummy.m in Sources */, + 05C4A8C9B05627DE7B082E9D264ECA02 /* JSCoreBom.m in Sources */, + A97377280227909E4EC3F19E59C71068 /* ModuleConsole.m in Sources */, + 9D5FA563EA66569424F650DCC1B622A2 /* ModuleXMLHttpRequest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E00F2CD5DC171BDC08627E04B7C6CEB7 /* Sources */ = { + C19DF5B0680AFF401AB9B188FBF4270E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D6B6364C317411822F4FC9B32E4A0567 /* SWFrameButton-dummy.m in Sources */, - E7AF9CDC516727EA5E94DCB179C6A5D0 /* SWFrameButton.m in Sources */, + 8B86690A0BC1D9355876CF78B1CA0344 /* PHFDelegateChain-dummy.m in Sources */, + 56AF85E073455825C99506599442BA4B /* PHFDelegateChain.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EB0E95A386FACD9CAE79625AD126F53E /* Sources */ = { + D7F0F3C6F06D11AB1C2CB956F15DE20A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B1CF4F887DEA415E4B1314355FB41DE2 /* AHKActionSheet-dummy.m in Sources */, - 6FD423063DF5049B83757892707C8ABA /* AHKActionSheet.m in Sources */, - 2E121FD5F79B2001AE8AAA1CA61C53FE /* AHKActionSheetViewController.m in Sources */, - 60D22F2AA16DCC9DF66FA94EE8AE142F /* UIImage+AHKAdditions.m in Sources */, - 73AF15F97517FA5A40BC657837F30E02 /* UIWindow+AHKAdditions.m in Sources */, + 2E9479ACFAA65EDBA31E9D4465BF3931 /* TDOAuth-dummy.m in Sources */, + 405FDAA110BBAF59F69E472CF949D5DC /* TDOAuth.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - ED256CEA9D882A995CB13531B6EBB93E /* Sources */ = { + E1807FFE0A9DAEB615BDEC6345A7D11A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E4997A4CB748BE6920B86ECAA899247A /* SCSiriWaveformView-dummy.m in Sources */, + 379A5B86EE2EA93646B3493BEF8B85C1 /* SCSiriWaveformView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EF50201A0074FEB7CAF8BDED9B1C11DE /* Sources */ = { + F3E743F489EEECAF8E060624A20385CB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2A99B5EECFBAFA128D4931CA6DF8998C /* NSData+NSHash.m in Sources */, - EF0A5EF1F5861CCB9C24DCE96A0F16CB /* NSHash-dummy.m in Sources */, - CA2C0D52F8C71DC27ED4F4AD47709375 /* NSString+NSHash.m in Sources */, + 62F1105D10BD170BD203A54608CEF446 /* OMGFormURLEncode.m in Sources */, + 576600D5F3B7A3F263696EC9FF7179FD /* OMGHTTPURLRQ-dummy.m in Sources */, + 4290F85C697AB05BE401546F6F85175C /* OMGHTTPURLRQ.m in Sources */, + B6459E49627FF45147D31ECAC66C73DC /* OMGUserAgent.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F285565AC0DF7A4D1C4D2C528A80149C /* Sources */ = { + F8181AC6B4FA4BA4C1FAB051DD97E543 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2646DFFA6C1A584CA8E5B063BE0DDEE9 /* PHFDelegateChain-dummy.m in Sources */, - 9847EDE58535412BA04A0EA5F10D4030 /* PHFDelegateChain.m in Sources */, + C630EC37DAFFFE619DAE7DC7DB3FE86F /* audio_queue.cpp in Sources */, + 4E7FA447279DD45B1C226211095B1B4D /* audio_stream.cpp in Sources */, + C1AF32DE6F5A58837991375FC227CCF8 /* caching_stream.cpp in Sources */, + B021DC2E022C70F75436D95DB612FC47 /* file_output.cpp in Sources */, + 4B1CBDD4DB5849E10C1FFC82669CB86F /* file_stream.cpp in Sources */, + D881CD79DF22F3C179339C6A55824004 /* FreeStreamer-dummy.m in Sources */, + 469F9C9E66C59CFC896080E9AD0A78C3 /* FSAudioController.m in Sources */, + B2EF37FCF8B331DEE5EB27C8CB61F288 /* FSAudioStream.mm in Sources */, + 254FFECEBCCA092EAF13EB68F2D46626 /* FSCheckContentTypeRequest.m in Sources */, + 43BAF4E17937E4FF73BE6F4F0843C960 /* FSParsePlaylistRequest.m in Sources */, + 68A06A438826C3743B86A10400FF23A8 /* FSParseRssPodcastFeedRequest.m in Sources */, + BA61B5E60217F0E813A6AFB0F2F0AA71 /* FSPlaylistItem.m in Sources */, + 10DE997CB96B5DDC60562881193E8D20 /* FSXMLHttpRequest.m in Sources */, + 87888D161E30316867F771EC0CF19EDB /* http_stream.cpp in Sources */, + 619882208725A95064B3CC4F90A2EAE8 /* id3_parser.cpp in Sources */, + CA8538BCE87715AEE04C97D6D7E73981 /* input_stream.cpp in Sources */, + F096EBF518469AF9906745668F7D3330 /* stream_configuration.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4DECA21A7BE3F26B8C0862A251B3404 /* Sources */ = { + F8B8CFB4C6C83A12EA5BC89DECACFDFE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D766B62EDB05392EDC6E294C7D570152 /* NSData+ImageContentType.m in Sources */, - A52FD90994E62A35685967B2838F1BE5 /* SDImageCache.m in Sources */, - A28D961C0CBB8660BAD8733507016ECC /* SDWebImage-dummy.m in Sources */, - 48AF069FA5549CDDD6E7281FDAFE8042 /* SDWebImageCompat.m in Sources */, - FB2DE88657E25565676DC33467F7BCFE /* SDWebImageDecoder.m in Sources */, - 5AF536E29F8E629450D035CBDD15108F /* SDWebImageDownloader.m in Sources */, - 0703360F49B6D5B904EC8040E9B4FDE1 /* SDWebImageDownloaderOperation.m in Sources */, - 9E1130D30027E9614C05ED02AAD13806 /* SDWebImageManager.m in Sources */, - 0F23D716C056A3BD7E38FA552CDDF0FE /* SDWebImagePrefetcher.m in Sources */, - 316B9E7807289F2E5CE97C9C40987576 /* UIButton+WebCache.m in Sources */, - E85C713BA866D2C540A02AE736AB5D7D /* UIImage+GIF.m in Sources */, - AD271A90871B26983DC68168763FD845 /* UIImage+MultiFormat.m in Sources */, - DC2BFC3B22944FB4EDB6FCAAFD05C4AE /* UIImageView+HighlightedWebCache.m in Sources */, - A42B6E61195FD96E8EDCB3A2850D218E /* UIImageView+WebCache.m in Sources */, - DEEB08F5B6BC2D06B076D5255170F871 /* UIView+WebCacheOperation.m in Sources */, + 9CCAF91E57FB73A5BDAEF9555F06609B /* IQ_FDWaveformView.m in Sources */, + 093DA77810BB424068E5CC42CC718A35 /* IQAudioCropperViewController.m in Sources */, + 3FBDFBD157D8615F8D9A47ECA32B2212 /* IQAudioRecorderConstants.m in Sources */, + 13F3EBB6B89DC54618D420D6D80DB737 /* IQAudioRecorderController-dummy.m in Sources */, + A16384A8E29213041024816D19787327 /* IQAudioRecorderViewController.m in Sources */, + DCB554A5FCF3B6DA1092467BE0F4D935 /* IQCropSelectionBeginView.m in Sources */, + BC552AE89D79C80DBB745E140FCBD6AC /* IQCropSelectionEndView.m in Sources */, + C36EE88964D3040330740C8BE6FC97FF /* IQCropSelectionView.m in Sources */, + 545BA30CC22F705F74417706E67C0F38 /* IQMessageDisplayView.m in Sources */, + 47CA52C97BF7A3CBA669E908CF1D0A09 /* IQPlaybackDurationView.m in Sources */, + 9E4B70BF4DEE17FB6482C8245A881855 /* NSString+IQTimeIntervalFormatter.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F9322F0DE1D0512C9CD02B561718B2F2 /* Sources */ = { + F8E5B4615D3A0BA43DE01D1EDDBFDFB6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6A12405EF45980A3146A9B6C750FC12F /* NSRunLoop+SRWebSocket.m in Sources */, - E5139ADF7A58FECEA0C7D9874FF24F73 /* NSURLRequest+SRWebSocket.m in Sources */, - 455170EAEFDF6BD336352C69C7508BF7 /* SocketRocket-dummy.m in Sources */, - 0992D258F33B203CA2E117D88F2BA94F /* SRConstants.m in Sources */, - 120C85B0ABFB3A53F19BC6ED7D6A0AC1 /* SRDelegateController.m in Sources */, - A107C61505A75B2A0F0E830E35CC008B /* SRError.m in Sources */, - 7F61E14C5474B2472DAB73DBDE2B904D /* SRHash.m in Sources */, - E5DFBF48AD1A79ACA2AF4D67A38D7025 /* SRHTTPConnectMessage.m in Sources */, - 88143054344D1A28AAA46CCD3D88811C /* SRIOConsumer.m in Sources */, - 963723F5049B347BD5456643EFC7BF36 /* SRIOConsumerPool.m in Sources */, - BD2734E51850EF94EBC72957A359AC94 /* SRLog.m in Sources */, - 7F76F1F36F89009369D3262D902637F7 /* SRMutex.m in Sources */, - 939F07D9FFEC30A3F3AE5D0F2DE85B7C /* SRPinningSecurityPolicy.m in Sources */, - 7CEBDA9AFE4777FD3326CAD39AD7D60F /* SRProxyConnect.m in Sources */, - 225FB12237EBB09E8DC3A9960EB7B18A /* SRRandom.m in Sources */, - 97C77EF5362BF137BF689E20A2686FDE /* SRRunLoopThread.m in Sources */, - BB73A29C066919830C233175E0A54AE5 /* SRSecurityPolicy.m in Sources */, - C3B178E89295EC3A4B889CAB0FD26154 /* SRSIMDHelpers.m in Sources */, - 768B3A37CB91D1DC3AE3B6A0E88F87B0 /* SRURLUtilities.m in Sources */, - 670D0C175035735503FC791211B7991C /* SRWebSocket.m in Sources */, + 9CA83E234DF9005B1F4DFEE913AD0514 /* BBBadgeBarButtonItem-dummy.m in Sources */, + FEAE7E78BE971DBBF872AEC487B689C2 /* BBBadgeBarButtonItem.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0B8017B1C25DEF0D2BF85342B97656E1 /* PBXTargetDependency */ = { + 07B901B47ADA5B056C9B855BA3FDA029 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DAKeyboardControl; - target = 977AA9FA7297E4D244CB03C53FDF1916 /* DAKeyboardControl */; - targetProxy = 995850A5042C98423989EEB51E52FEF9 /* PBXContainerItemProxy */; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 1C7C7547CAB40B6C4969D1D18337E938 /* PBXContainerItemProxy */; }; - 1924AF25A084764A4F06D3E7BEE9D45A /* PBXTargetDependency */ = { + 0BDA473A8AD89441D8C166B9FC780942 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "libPhoneNumber-iOS"; - target = B661F6B2A4D53F3A1F5A0925C752E388 /* libPhoneNumber-iOS */; - targetProxy = 0619528A7B15E6830BBDBE517FAE8C75 /* PBXContainerItemProxy */; + name = SocketRocket; + target = 1948D0B63D2CF6A48E18B0B292BC6091 /* SocketRocket */; + targetProxy = 371AB377703FA7448421D23FB6E26AD6 /* PBXContainerItemProxy */; }; - 27287E436AF07A6B7B698B85C294756F /* PBXTargetDependency */ = { + 11941DD9D10DB64A7517B0F49D24F600 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = 5808033EF96F84CEC42633AA2D3F637D /* SDWebImage */; - targetProxy = 3293E59C1E602E5BEEBB510D475724C0 /* PBXContainerItemProxy */; + name = Reachability; + target = CAA047C0F5E4106F3904E8497FA17F97 /* Reachability */; + targetProxy = 503636D1AF31E17D8B51A0A6AC0CC3BC /* PBXContainerItemProxy */; }; - 287D584DD5DEC65ED674B5D71EE610DB /* PBXTargetDependency */ = { + 13BD0C57DB3B5E679BB539E5BEB34D17 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PHFDelegateChain; - target = AC877FA2DB24167FBA0E50094C7C9D23 /* PHFDelegateChain */; - targetProxy = 7538EE9CE8553B8892FFDB1B05270BF2 /* PBXContainerItemProxy */; + name = HMSegmentedControl; + target = B4CEB0284B4209C3EB1D2921056254BE /* HMSegmentedControl */; + targetProxy = C53E27423AC012BB8D38BAE77AF74726 /* PBXContainerItemProxy */; }; - 2C2D119D72E7F80304E568FC33D50E4B /* PBXTargetDependency */ = { + 1CE9F96A9B9168D3FF11999BF2D82CF1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = DB2558BC2636A026A53063CD7BE931B0 /* AFNetworking */; - targetProxy = D3EE8B6B03B7EC3333B231111FDDADA0 /* PBXContainerItemProxy */; + name = JDStatusBarNotification; + target = EB07D88E59040F928F73F9A46CA65C69 /* JDStatusBarNotification */; + targetProxy = DD5A5E933FC2AC021F64CD6D6085E706 /* PBXContainerItemProxy */; }; - 2CE219C4AF76BC02AE9F06752F9198B7 /* PBXTargetDependency */ = { + 1E5108F9923E6EA8DA87FE1C9EF56308 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FreeStreamer; - target = 82B7D0D24512027B92E1BCFB49F2FC1D /* FreeStreamer */; - targetProxy = 0CC083056A64B080DEBE525FA9C7873C /* PBXContainerItemProxy */; + name = REMenu; + target = 58947B832E91651A9900C44834D21B76 /* REMenu */; + targetProxy = AD129238917F45EA5B0D083F96DFA207 /* PBXContainerItemProxy */; }; - 2EE7C18586A7963ADE7E9D0C477B2756 /* PBXTargetDependency */ = { + 20DFDB7903B42B5C1222270FB32BC143 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SCSiriWaveformView; - target = 7D03E663BD4329BB02BEA5C4259A28AC /* SCSiriWaveformView */; - targetProxy = 035222BDF9A414CF372D1EFB482719EE /* PBXContainerItemProxy */; + name = AFNetworking; + target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; + targetProxy = 64D746FBE8FFE3709705C0AAAD6B5F55 /* PBXContainerItemProxy */; }; - 31684301D25D5C14EA5878C08CBB6C46 /* PBXTargetDependency */ = { + 22351C9125B1F07965A663129BE34DBA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SocketRocket; - target = 82B26312EB7846033C795530DC0FD67F /* SocketRocket */; - targetProxy = 2A32FE6FE2EBB8387DBF5C664F4C2C68 /* PBXContainerItemProxy */; + name = OMGHTTPURLRQ; + target = DE59D3D21AECD5F399E953205FB55A86 /* OMGHTTPURLRQ */; + targetProxy = 8E5A06CC080A0C7B09CA89B3CF7A09BC /* PBXContainerItemProxy */; }; - 36977B006B72BD8DDA479CE2E0FA84B3 /* PBXTargetDependency */ = { + 2CBD3160DF4CAE28FDB3A0810DA8CBC8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FLEX; - target = 037435BA46F89806ED78BA9295251016 /* FLEX */; - targetProxy = 9A84DD4D544FEF5FE3FF708FE64F9FB7 /* PBXContainerItemProxy */; + name = SWTableViewCell; + target = AC60DD87A4716856282507DFBBBE720C /* SWTableViewCell */; + targetProxy = EE791FD4C0CFC61CD701BBD30D293DB2 /* PBXContainerItemProxy */; }; - 42228839846F610626A2FAF0893AE79F /* PBXTargetDependency */ = { + 35C4D3B4341D3619A8A8C5C94013487A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RMActionController; - target = 9AD48931F9D7F36D3269DE407ACDE4DA /* RMActionController */; - targetProxy = D1725947DD5851E6425C50417D8F4F43 /* PBXContainerItemProxy */; + target = 12066ADDDC81D6D9F1FECEAA97C55D82 /* RMActionController */; + targetProxy = A5CDD748D454E82EEFE7F73CC6A120BE /* PBXContainerItemProxy */; }; - 45DE2F313DCC55D45A536004275A1748 /* PBXTargetDependency */ = { + 363BD221919A288C4741D14AF9D16115 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DTFoundation; - target = E09595D164AB76AD6D892B137D508E81 /* DTFoundation */; - targetProxy = 98DE71253D648B624ECA307292F190B3 /* PBXContainerItemProxy */; + name = SWFrameButton; + target = 227BBE5BEC64BA0EAE27D2254B7BFAA8 /* SWFrameButton */; + targetProxy = 095C8FF706CF7A9BD68A3C5AB196C280 /* PBXContainerItemProxy */; }; - 4C577579233BDF2A8E8683D78C61483D /* PBXTargetDependency */ = { + 3A9F02761E6A7C7550F5CDE999B39755 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SZTextView; - target = F5A071230F00E7E32386E8310A2DA6FB /* SZTextView */; - targetProxy = 34FCFEA3C8CC92D25F9B1412257A5298 /* PBXContainerItemProxy */; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 8F7A3C60FDE95A088F0B518DE4E78DD6 /* PBXContainerItemProxy */; }; - 531A52EA3E6E5264F0652FE93A9D27A1 /* PBXTargetDependency */ = { + 3AE104DD72145B418F03E64A986881DF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SWFrameButton; - target = A38CBBB392959A220AF6E1DC305E77B0 /* SWFrameButton */; - targetProxy = A096E5FDFAFD8D93A8B16EA82D7D3686 /* PBXContainerItemProxy */; + name = NSHash; + target = 04D19091436A065548D73C175B077CA4 /* NSHash */; + targetProxy = 56E7551416085C4A1EA189FF15796E4B /* PBXContainerItemProxy */; }; - 5C2A758AA2F0F71E9CA7CFE42A5BBE0C /* PBXTargetDependency */ = { + 3E378147B1B8B30E9244C7A7F95578F0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFOAuth2Manager; - target = 43ABF39E6EB521622728B65060463901 /* AFOAuth2Manager */; - targetProxy = 656E234E527CDED576EF950FC699C4F4 /* PBXContainerItemProxy */; + name = UICKeyChainStore; + target = 7406ECC476A62C8FA502AD0E8D1240BE /* UICKeyChainStore */; + targetProxy = 03CADFE3CA693343B86E2D3E9D693FB6 /* PBXContainerItemProxy */; }; - 5D861C8B79BAA19A543A3ADA9BD52FC0 /* PBXTargetDependency */ = { + 49FEDB3ACCEEC4A895D07FB9E3524D4A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = JSCoreBom; - target = AE001715EDDB6DE052255F8C384E9F11 /* JSCoreBom */; - targetProxy = F05086C82E9D8BEC960E9C03E164467C /* PBXContainerItemProxy */; + name = FLEX; + target = 3AEC09E383B46D12E00628362EB86D67 /* FLEX */; + targetProxy = 1A9AD09F21E465AF68D79F6B9643002C /* PBXContainerItemProxy */; }; - 678F1C4A45C642EDDB9329E37DD3A62F /* PBXTargetDependency */ = { + 4DA37DF42E06148D3F792976E5FAF80E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = TDOAuth; - target = D2A2DED5A53736DF6E0ED9F4A0877BB9 /* TDOAuth */; - targetProxy = E9C35AEBDEF3F8A4A59237DAA9ED1712 /* PBXContainerItemProxy */; + name = NSGIF; + target = 8B9227BF2FD05182EAA381C73EB78441 /* NSGIF */; + targetProxy = 8275920CA27D3BE48CCA54E9AF3BFED1 /* PBXContainerItemProxy */; }; - 6E9363DC921EE70C2BAD769C9AD05FC8 /* PBXTargetDependency */ = { + 50CFA01454337A6E2FF8F1B8A7960201 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = BBBadgeBarButtonItem; - target = C85BB5559C4F5CDE5F6B261B4EE0C54F /* BBBadgeBarButtonItem */; - targetProxy = 35572F843F10080A206B9FEC220BC708 /* PBXContainerItemProxy */; + name = MBProgressHUD; + target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; + targetProxy = F29DCAFC02FCE973CE452F51306228AF /* PBXContainerItemProxy */; }; - 7121857D79F1116D6D67FA68C9F7F0F1 /* PBXTargetDependency */ = { + 54F77AA7FF02047A9B31B5E5058B6979 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "DTCoreText-Resources"; - target = D1CCA53310013DC011604B1B4236B9B9 /* DTCoreText-Resources */; - targetProxy = 12157FECF15F2745D7AA62DD2071957A /* PBXContainerItemProxy */; + name = CYRTextView; + target = EBAD01DD961D84E76900A33BE7FB2600 /* CYRTextView */; + targetProxy = E45E3944D49B954992A86480CB4142DB /* PBXContainerItemProxy */; }; - 73BB4D628B68EB84F8104CDF8DAD4885 /* PBXTargetDependency */ = { + 5975F0A0C182F1E6002AACCAFBC3D088 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = NSGIF; - target = 5E3BE6A21C2416E7EBD68B59281FCE02 /* NSGIF */; - targetProxy = 2EA7D6656A029C3AAAE17B4DB51026E5 /* PBXContainerItemProxy */; + name = RMActionController; + target = 12066ADDDC81D6D9F1FECEAA97C55D82 /* RMActionController */; + targetProxy = 72C208DBE29590811A3217D14BA21162 /* PBXContainerItemProxy */; }; - 757E448C460A597E0BC20926E899DB3A /* PBXTargetDependency */ = { + 5DA6A77F5852F74F5A71BC17EF9F17BE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = HMSegmentedControl; - target = 60C5D41946161054FD44CFAFAA3B4D14 /* HMSegmentedControl */; - targetProxy = 16A9C2CF4D87F8D1699469A956944EA1 /* PBXContainerItemProxy */; + name = AFOAuth2Manager; + target = D27AAB10D754F414F3D10804770A1567 /* AFOAuth2Manager */; + targetProxy = F64DE4E692F422CF62FA165D532328F3 /* PBXContainerItemProxy */; }; - 7A628A080ACC649E17711C6442730853 /* PBXTargetDependency */ = { + 5DF1B7A70A64C5232A12AC3C13FCC4B8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PHFDelegateChain; - target = AC877FA2DB24167FBA0E50094C7C9D23 /* PHFDelegateChain */; - targetProxy = 7AA2B17FD03618DE73A737722FDE187C /* PBXContainerItemProxy */; + name = DTFoundation; + target = 8F6E5A5BF72D62CDFD25F91A7CFA3309 /* DTFoundation */; + targetProxy = 0C2D0E87DB8F80D0B38DAB5B52160731 /* PBXContainerItemProxy */; }; - 7E17BCA4898DF60C16AD4B04CD8F1EA8 /* PBXTargetDependency */ = { + 63AF562C1C2CB445CF240F6F75541519 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AHKActionSheet; - target = 9840A7F641CB3A28ED681EAA23B3A070 /* AHKActionSheet */; - targetProxy = 47F820A7F6B7C481C747E2152B96D464 /* PBXContainerItemProxy */; + name = SBJson; + target = 99A737B746331762ACD053E5EF1415F7 /* SBJson */; + targetProxy = FCBF22B777B7249474BB405BA61DC6FC /* PBXContainerItemProxy */; }; - 8A0AE143FA85F72C536B346F3BCCE794 /* PBXTargetDependency */ = { + 67F286CDCF68B5BA6F4906E0AF21A0AC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = JDStatusBarNotification; - target = 1B21AD41EA8EE760ABE8B62F4AB9A473 /* JDStatusBarNotification */; - targetProxy = B3A6D9B340F980EE1CF403FF71C2446A /* PBXContainerItemProxy */; + name = APAddressBook; + target = AC337482C8CEE36C809E23FDC64FC799 /* APAddressBook */; + targetProxy = 1829A0C51C2519D28259E5DA39093F82 /* PBXContainerItemProxy */; }; - 90A531E4009A78D358EC1B758BE51828 /* PBXTargetDependency */ = { + 6A3E4EE78CBACDE067FEA36707A0A92B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = APAddressBook; - target = 4C88BE8B7ED20010F6B5442E1CE749C8 /* APAddressBook */; - targetProxy = EEADBF2E49B061616CCDCFEBE80464A2 /* PBXContainerItemProxy */; + name = TWMessageBarManager; + target = E1C8C155FEE070887D779FD917378BA8 /* TWMessageBarManager */; + targetProxy = 85FA80B19E6E3DAB8D0A316B97341057 /* PBXContainerItemProxy */; }; - 915FF2A3DB05B8409181BADA700A557A /* PBXTargetDependency */ = { + 6F6143A368E95AE972BE5317D71CA43D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SCSiriWaveformView; - target = 7D03E663BD4329BB02BEA5C4259A28AC /* SCSiriWaveformView */; - targetProxy = D110D8FE17AD7B236CFC4B3223069AB1 /* PBXContainerItemProxy */; + name = TDOAuth; + target = 0759FDF590D13F2CC841F8AFBEE34987 /* TDOAuth */; + targetProxy = 8026AF13F5FCE1321C30AA3E5B6413B1 /* PBXContainerItemProxy */; }; - 9731CFAFCE8D9866FBA052CC29FA6B49 /* PBXTargetDependency */ = { + 6FECD198C269C1C0430AC7E14E1D328A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = MBProgressHUD; - target = AD408BAB384B6DDA88A50A16FB158B66 /* MBProgressHUD */; - targetProxy = BD77160D9958EB39AF470CEEF594E834 /* PBXContainerItemProxy */; + name = PHFDelegateChain; + target = 18EBA128F21272535E33AD2077BE9EF9 /* PHFDelegateChain */; + targetProxy = EDA4545B8D3591C05A58A3F259D3BB63 /* PBXContainerItemProxy */; }; - A30EFA7AAE91AF79427C79BC2BF5FA03 /* PBXTargetDependency */ = { + 80AD6011D5AD9D6C2572D37639505312 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = TWMessageBarManager; - target = 42FC5CF7AC172D642DA52EFCB8B8A9CD /* TWMessageBarManager */; - targetProxy = B506FE3ACB1FE79E3C5CB86FAA1144C9 /* PBXContainerItemProxy */; + name = SCSiriWaveformView; + target = D76BE29FE832155DDE00968858DCAB38 /* SCSiriWaveformView */; + targetProxy = B76C94C055D90A33606922ECE7AA0E3C /* PBXContainerItemProxy */; }; - A7D3287B46CBEFFAB8BF298B9BF0538D /* PBXTargetDependency */ = { + 89386A29F49D219124BE9D236A0E3573 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = INTULocationManager; - target = 3C92F34A664B526FC676F4034F18925D /* INTULocationManager */; - targetProxy = 67DA6361A7A4DFDE4EBF6AC8FF994642 /* PBXContainerItemProxy */; + name = AFNetworking; + target = 0130B3724283586C0E9D2A112D4F2AA1 /* AFNetworking */; + targetProxy = 285ACE224F8DEF09AD5AE4150FF30B70 /* PBXContainerItemProxy */; }; - A7F7A208BB2C6B408383302F78A95358 /* PBXTargetDependency */ = { + 8B67556E11FC3FEEC1252DA44F1BAE6A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Reachability; - target = 92DA820CD3CCA231F765AB9682FA766B /* Reachability */; - targetProxy = 5A77C18F0D7C662BC64F0DB641FF06CC /* PBXContainerItemProxy */; + name = RMDateSelectionViewController; + target = 9487B084D206F15C70584B251B79A311 /* RMDateSelectionViewController */; + targetProxy = 17A9CB45706220D34F9F36034D63641D /* PBXContainerItemProxy */; }; - A8FA06137A3979F26306EA7B5705149F /* PBXTargetDependency */ = { + 903B4A4CB495C6DD8526715291024C94 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SBJson; - target = 190026D091222FA1C9C4F63F8A6EF3D1 /* SBJson */; - targetProxy = 2A09D17C4D0CB48D0354C5125E10376B /* PBXContainerItemProxy */; + name = SZTextView; + target = EDD538E91ECEB947B84FB22FC7425180 /* SZTextView */; + targetProxy = E6E9FFEE8EEDC6C1DFE7C0EB8183B95B /* PBXContainerItemProxy */; }; - AA77B04C810245DEA52CB35D62675463 /* PBXTargetDependency */ = { + 9CBC9743867F8E76948AF47B7D644A89 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = REMenu; - target = 7373AB0671FDF6D195D58D335D03C003 /* REMenu */; - targetProxy = 62FCF8A376A59CA81B418AB0750E45BA /* PBXContainerItemProxy */; + name = PHFComposeBarView; + target = 55A8712154E944BC7E33DE1D156E4BBC /* PHFComposeBarView */; + targetProxy = A39223333C95CF87A45B49CDA1DAB2E4 /* PBXContainerItemProxy */; }; - AE1A1153FE496D847F16CE8E93A7D788 /* PBXTargetDependency */ = { + 9F67C8412C9D114D7BB4586C9E71EB8C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DHSmartScreenshot; - target = A2B588A0B3DE0C5843F6866C2D3C96DD /* DHSmartScreenshot */; - targetProxy = 401335F08B23D215C8ACC2FF73F1285F /* PBXContainerItemProxy */; + name = IQAudioRecorderController; + target = CCA24ECF8C3E122E885F6912C0262B90 /* IQAudioRecorderController */; + targetProxy = FE3F4C342D58B05CE6B491FD2DFA07D3 /* PBXContainerItemProxy */; }; - B016D9DDE9413E195EE60377424498D9 /* PBXTargetDependency */ = { + 9F76CD7B854DB4E7D9BB12DA064C7F0D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = TTTAttributedLabel; - target = 86F00601FD3BF53D97B8E68A538AF4F3 /* TTTAttributedLabel */; - targetProxy = 483DDE2871B6864D762E426142D3182E /* PBXContainerItemProxy */; + name = INTULocationManager; + target = 62BDCEA95B58162F679294C9302CF231 /* INTULocationManager */; + targetProxy = E28F17235F0D4F1A0F00EB4E630FC697 /* PBXContainerItemProxy */; }; - B32A7180AEF451F152247623C6C6C09F /* PBXTargetDependency */ = { + A21323A5B055A599CC644C1D82FF01CE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RMActionController; - target = 9AD48931F9D7F36D3269DE407ACDE4DA /* RMActionController */; - targetProxy = 0A44F718D07E3F6A40AF716C8ADC6139 /* PBXContainerItemProxy */; + name = DTCoreText; + target = B88F4EA0695B6B3165C64594850D72C7 /* DTCoreText */; + targetProxy = DD6B0CB15F78D72F6F2C74D9DE3B3FD2 /* PBXContainerItemProxy */; }; - B8C84F5C4A933DB195E7A0452336B139 /* PBXTargetDependency */ = { + A36DD0284589DD78AB2A502BF715DCD1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = NSHash; - target = C4DDC75F9C182E9D3A72423E2B66B21F /* NSHash */; - targetProxy = 6029830B3395EE0984179EBA1AEAB523 /* PBXContainerItemProxy */; + name = BBBadgeBarButtonItem; + target = 348B34D6B9B73E53B3B7E13F1934079C /* BBBadgeBarButtonItem */; + targetProxy = 6B20F68FF139B32E0778008CF57C5B9A /* PBXContainerItemProxy */; }; - C032D407A41AAB1E12DEA2C1900F1483 /* PBXTargetDependency */ = { + A40935B8F01591DC720CE1963B890D4B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AFNetworking; - target = DB2558BC2636A026A53063CD7BE931B0 /* AFNetworking */; - targetProxy = BE9B24F166528106ADBB9BC7DEB335BD /* PBXContainerItemProxy */; + name = "DTCoreText-Resources"; + target = 0C24CB0E87A728A11AA1124CB360D6A1 /* DTCoreText-Resources */; + targetProxy = 0FDA8728CD50F6BF72B6DE1B525C0BBF /* PBXContainerItemProxy */; }; - C82CB8D608B713CF2FF5C2D9872A49F1 /* PBXTargetDependency */ = { + AE8CFC3E6F4E7FE83945570BD51EF041 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RMDateSelectionViewController; - target = 1CDA796DD1DF09FEC12EF61E29A9E127 /* RMDateSelectionViewController */; - targetProxy = C84CE9909B4547AB84F0685931450606 /* PBXContainerItemProxy */; + name = Reachability; + target = CAA047C0F5E4106F3904E8497FA17F97 /* Reachability */; + targetProxy = B8B12EA969520EC29CE7D02B005A2BBA /* PBXContainerItemProxy */; }; - CB36704C92AA83DEF7CB605BA40D3F93 /* PBXTargetDependency */ = { + B1D9A12ECBF43E10C47679B0139305EE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SWTableViewCell; - target = F704787946C680A43977C21E937624CF /* SWTableViewCell */; - targetProxy = 42007C698A09E649C83A444EEF2A2FD8 /* PBXContainerItemProxy */; + name = PHFDelegateChain; + target = 18EBA128F21272535E33AD2077BE9EF9 /* PHFDelegateChain */; + targetProxy = C8028261AC644FF6C038578D5F92D36F /* PBXContainerItemProxy */; }; - CF7E03F9070E9626BE305005651052D8 /* PBXTargetDependency */ = { + B69E32677F9474049CFAAEF8D07151DF /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = OMGHTTPURLRQ; - target = AE28BD5EEB0DF7799198DF9206AA8FBF /* OMGHTTPURLRQ */; - targetProxy = B18FF5A77660DD97F17947E0900B79E2 /* PBXContainerItemProxy */; + name = AHKActionSheet; + target = 5E4069B2BCC908BD892C971DCD91EB8C /* AHKActionSheet */; + targetProxy = 4192BF24832AD579F89BF361E03AE572 /* PBXContainerItemProxy */; }; - CFBD115A5D9E194282B17351C70D1215 /* PBXTargetDependency */ = { + BCEFBB3044CCB5C6E353DC87ED66F56F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = OMGHTTPURLRQ; - target = AE28BD5EEB0DF7799198DF9206AA8FBF /* OMGHTTPURLRQ */; - targetProxy = B79C4C739DA00791FE6E117EEB0C8BD4 /* PBXContainerItemProxy */; + name = "libPhoneNumber-iOS"; + target = BECD36891A8DC297700F9296F5634B97 /* libPhoneNumber-iOS */; + targetProxy = 898460057A525C3A5DB6F5C78A9F6E10 /* PBXContainerItemProxy */; }; - DAA6D38179C7610946FB8DD08EE2284A /* PBXTargetDependency */ = { + BF75AE9B0497FE9AFAD06DADF41CB005 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DTFoundation; - target = E09595D164AB76AD6D892B137D508E81 /* DTFoundation */; - targetProxy = 67680AE6716CFE56076D6D1E4E4EC3B1 /* PBXContainerItemProxy */; + name = DHSmartScreenshot; + target = B0F1C48D098B58DC43BBE0AE75933BA3 /* DHSmartScreenshot */; + targetProxy = F836C9B09599ED720E715E945807F8D3 /* PBXContainerItemProxy */; }; - DD3C861DFB7FD6BD4DA3F6BADB386200 /* PBXTargetDependency */ = { + D1B87704F70D6DB97A93A809F914FC5C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PHFComposeBarView; - target = 557B87E4A5AC450B0AE08ACA6490028E /* PHFComposeBarView */; - targetProxy = B6FB5A1325D31F599B8E064A08CFF004 /* PBXContainerItemProxy */; + name = FreeStreamer; + target = C3AAC0817EA4DC8BD9C0046F50078BF9 /* FreeStreamer */; + targetProxy = 4E494F5CA787496FC5F9AD9CA316A18F /* PBXContainerItemProxy */; }; - E3583987FFA759CE06EB78A06BFCC1E4 /* PBXTargetDependency */ = { + DB4D229CA149B796C2B85412D217BF14 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DTCoreText; - target = C9AB71DF8DA2C131DC2C4DD93877A561 /* DTCoreText */; - targetProxy = 5FAAF476CA9574417A79D68AC78C634B /* PBXContainerItemProxy */; + name = JSCoreBom; + target = DA7C4D3C2DEFEAF833D56EE844ADC77A /* JSCoreBom */; + targetProxy = 79041FA7904F5D2821D89322C28BA1BA /* PBXContainerItemProxy */; }; - E460A12D0E0B10C6345DB1C6B8461EB6 /* PBXTargetDependency */ = { + DE5429B493CDFDA360C8500936705DBA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQAudioRecorderController; - target = C5635985C9FCB8A3529BCB087A3B72B6 /* IQAudioRecorderController */; - targetProxy = 9A338808E5EB89BC5E2132A8B83288E8 /* PBXContainerItemProxy */; + name = DAKeyboardControl; + target = 138527DFF3FD347B53F0B37BAF725E3D /* DAKeyboardControl */; + targetProxy = E1B50E88E0C917F44DBA990E8130A1D6 /* PBXContainerItemProxy */; }; - EC4388DA06CBD97481D641B37DE663BE /* PBXTargetDependency */ = { + EED2ACFC0CDF5C1DDA8035C7A87B295A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Reachability; - target = 92DA820CD3CCA231F765AB9682FA766B /* Reachability */; - targetProxy = A075188AC22091AF8D216288D4DEEBE4 /* PBXContainerItemProxy */; + name = TTTAttributedLabel; + target = E077C5049157367A707E75CFDAB49F84 /* TTTAttributedLabel */; + targetProxy = 63E1029E4C81F1CF4A2C1BFEDFDCBDB4 /* PBXContainerItemProxy */; }; - EE25D6D7206B131C783BBA58768FD11F /* PBXTargetDependency */ = { + F661155E534BCD8AFDB0CC91790A538E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = UICKeyChainStore; - target = 7AD7B519FB10D676CDBE9F4B3C65D6B7 /* UICKeyChainStore */; - targetProxy = 86B3B27D3A6B29772B517E27CC293DA9 /* PBXContainerItemProxy */; + name = OMGHTTPURLRQ; + target = DE59D3D21AECD5F399E953205FB55A86 /* OMGHTTPURLRQ */; + targetProxy = 536C7D31C32C4F7D99B7DFC0CF6F9062 /* PBXContainerItemProxy */; + }; + FC4ADF939391FFBE0DB443E30A4A0F61 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SCSiriWaveformView; + target = D76BE29FE832155DDE00968858DCAB38 /* SCSiriWaveformView */; + targetProxy = C7FB3FC0B95D1FCCF7ECA7943889491E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 002EF82B534D2F9405AFDD60F77D0682 /* Release */ = { + 00A620EFA0626DECA300CC7FCD4990E3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 64AE86A4174ECE589CE404811E6BEA63 /* AHKActionSheet.xcconfig */; + baseConfigurationReference = 3907E6A8C3EA21F3F650146CA0682A1B /* FLEX.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -7850,27 +8535,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AHKActionSheet/AHKActionSheet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AHKActionSheet/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet.modulemap"; - PRODUCT_MODULE_NAME = AHKActionSheet; - PRODUCT_NAME = AHKActionSheet; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 0081A56B9AF981B509805ECF131D5408 /* Debug */ = { + 03DA2332C6EB05BE50BCD3935EA6B4C6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81A9C82D345662D1D35B4EF3472FDF76 /* NSGIF.xcconfig */; + baseConfigurationReference = 6B3AA4F6764D605B35C53E75E78A33DC /* AHKActionSheet.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -7884,26 +8568,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/NSGIF/NSGIF-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/NSGIF/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AHKActionSheet/AHKActionSheet-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/NSGIF/NSGIF.modulemap"; - PRODUCT_MODULE_NAME = NSGIF; - PRODUCT_NAME = NSGIF; + MODULEMAP_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet.modulemap"; + PRODUCT_MODULE_NAME = AHKActionSheet; + PRODUCT_NAME = AHKActionSheet; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 028E9766D10B7586BDC641D43A16F3C9 /* Debug */ = { + 04DF73CEDD9954E9AA336698439CBBAA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A8E64B438CA0224D41F48F7243BC98E /* PHFComposeBarView.xcconfig */; + baseConfigurationReference = BE15839BC2D5EAD9116C869010B668CB /* PHFComposeBarView.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -7918,9 +8603,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; GCC_PREFIX_HEADER = "Target Support Files/PHFComposeBarView/PHFComposeBarView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PHFComposeBarView/Info.plist"; + INFOPLIST_FILE = "Target Support Files/PHFComposeBarView/PHFComposeBarView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/PHFComposeBarView/PHFComposeBarView.modulemap"; PRODUCT_MODULE_NAME = PHFComposeBarView; @@ -7934,9 +8619,9 @@ }; name = Debug; }; - 056A3F73F4B507EFB9A4CEF31E096756 /* Debug */ = { + 07163977F3F445322D686B6C67175496 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7E9E46D4CAD54597D6F9FF1103050A45 /* PHFDelegateChain.xcconfig */; + baseConfigurationReference = 5184A2C9984FC8F57FC15881A39DE76A /* REMenu.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -7950,14 +8635,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/PHFDelegateChain/PHFDelegateChain-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PHFDelegateChain/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/REMenu/REMenu-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/REMenu/REMenu-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain.modulemap"; - PRODUCT_MODULE_NAME = PHFDelegateChain; - PRODUCT_NAME = PHFDelegateChain; + MODULEMAP_FILE = "Target Support Files/REMenu/REMenu.modulemap"; + PRODUCT_MODULE_NAME = REMenu; + PRODUCT_NAME = REMenu; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -7967,9 +8652,9 @@ }; name = Debug; }; - 0AA0A9108E9BB29D5B611D96909D84BD /* Debug */ = { + 0A8AFFFBBCDCBF00AD4904A9619CC2B9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7752026FB3648064F723FE5B910A5B18 /* APAddressBook.xcconfig */; + baseConfigurationReference = 39D141B9292A8EA3015D515AB0973F6F /* JSCoreBom.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -7983,26 +8668,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/APAddressBook/APAddressBook-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/APAddressBook/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/JSCoreBom/JSCoreBom-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JSCoreBom/JSCoreBom-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/APAddressBook/APAddressBook.modulemap"; - PRODUCT_MODULE_NAME = APAddressBook; - PRODUCT_NAME = APAddressBook; + MODULEMAP_FILE = "Target Support Files/JSCoreBom/JSCoreBom.modulemap"; + PRODUCT_MODULE_NAME = JSCoreBom; + PRODUCT_NAME = JSCoreBom; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 0D984333C0427A78F29FE1514EF3B4EF /* Release */ = { + 0E92E18B3BF7F0EB339A77F1ADAAE793 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B4AC9C8B37DE25E08BC1A02C78C34ED /* JDStatusBarNotification.xcconfig */; + baseConfigurationReference = D2C1F4554D039B132F8A326693D9B776 /* DHSmartScreenshot.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8016,27 +8702,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JDStatusBarNotification/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification.modulemap"; - PRODUCT_MODULE_NAME = JDStatusBarNotification; - PRODUCT_NAME = JDStatusBarNotification; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot.modulemap"; + PRODUCT_MODULE_NAME = DHSmartScreenshot; + PRODUCT_NAME = DHSmartScreenshot; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 0F37E28A67A4D769AC275897EE93C996 /* Release */ = { + 112B3B58CEAE8F51EBFF4744B88D2F4A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 81A9C82D345662D1D35B4EF3472FDF76 /* NSGIF.xcconfig */; + baseConfigurationReference = DAD31DE454D4089BD767D4B462458EDD /* OMGHTTPURLRQ.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8050,27 +8735,90 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/NSGIF/NSGIF-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/NSGIF/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/NSGIF/NSGIF.modulemap"; - PRODUCT_MODULE_NAME = NSGIF; - PRODUCT_NAME = NSGIF; + MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; + PRODUCT_MODULE_NAME = OMGHTTPURLRQ; + PRODUCT_NAME = OMGHTTPURLRQ; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; + }; + 131356BE54884448CA49C07BEDF4BB2A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; }; - 109856EBA9F4725B10C766054E983DCE /* Debug */ = { + 14D417ADB03177163D25A1C1E85DC999 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D37F9BAD36742F897F8BF28710DBF8C5 /* SZTextView.xcconfig */; + baseConfigurationReference = 812DF966F90296419775F6ABA5298A33 /* BBBadgeBarButtonItem.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8084,27 +8832,30 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SZTextView/SZTextView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SZTextView/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SZTextView/SZTextView.modulemap"; - PRODUCT_MODULE_NAME = SZTextView; - PRODUCT_NAME = SZTextView; + MODULEMAP_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.modulemap"; + PRODUCT_MODULE_NAME = BBBadgeBarButtonItem; + PRODUCT_NAME = BBBadgeBarButtonItem; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 11E90A42B5A1E6D06ACCE2370379C55E /* Release */ = { + 14D91F3C05643DB1CAF8C2A8E6949379 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D4BE391535025401C4C1502442DA2CD2 /* TDOAuth.xcconfig */; + baseConfigurationReference = 77B0DC6E71DCE4BD962131E7862F6990 /* Pods-Jasonette.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; @@ -8117,17 +8868,19 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/TDOAuth/TDOAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TDOAuth/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TDOAuth/TDOAuth.modulemap"; - PRODUCT_MODULE_NAME = TDOAuth; - PRODUCT_NAME = TDOAuth; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -8135,9 +8888,9 @@ }; name = Release; }; - 1554D9E1AE5AF023E67A2A65945F605A /* Release */ = { + 153059790EE111F808F8FACD2515FD39 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E12866C1EDA1E6E8EE1DED2CFC18A4 /* Reachability.xcconfig */; + baseConfigurationReference = D600794335416E75E059ACC663C167F4 /* DTCoreText.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8151,18 +8904,17 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/Reachability/Reachability-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Reachability/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DTCoreText/DTCoreText-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Reachability/Reachability.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; + MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; + PRODUCT_MODULE_NAME = DTCoreText; + PRODUCT_NAME = DTCoreText; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -8170,9 +8922,9 @@ }; name = Release; }; - 16A0D3ABE8A1B23E0B0E58A54647418E /* Release */ = { + 1A2FCAD9161A66D8F88E2472EEB886D6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4A25842526BC58F6FE5B9E88768A9F15 /* AFNetworking.xcconfig */; + baseConfigurationReference = 0F585109AA06E33BA58D4E8364A3C50C /* NSGIF.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8186,27 +8938,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/NSGIF/NSGIF-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NSGIF/NSGIF-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/NSGIF/NSGIF.modulemap"; + PRODUCT_MODULE_NAME = NSGIF; + PRODUCT_NAME = NSGIF; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 1DD2A9A29FC0B1519E32AB560E65562C /* Release */ = { + 1DCDF3FE2388A6F3101FEC32AB944C86 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BE35672DD104DBE042C0A2A3CA7A44FD /* RMDateSelectionViewController.xcconfig */; + baseConfigurationReference = E1D4A20DF072E367910A7536CB17BDC0 /* DAKeyboardControl.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8220,29 +8971,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RMDateSelectionViewController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DAKeyboardControl/DAKeyboardControl-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.modulemap"; - PRODUCT_MODULE_NAME = RMDateSelectionViewController; - PRODUCT_NAME = RMDateSelectionViewController; + MODULEMAP_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl.modulemap"; + PRODUCT_MODULE_NAME = DAKeyboardControl; + PRODUCT_NAME = DAKeyboardControl; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 1E66B7AD71129C017C5C59F526AF92E5 /* Release */ = { + 21F70F5738CB08471DC1DCB28598E143 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3CB738349A50190EC83EB5B47BA08FF4 /* Pods-Jasonette.release.xcconfig */; + baseConfigurationReference = 6BA8A9FD82840CCD5528231B06B4E8EA /* TTTAttributedLabel.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; @@ -8255,29 +9004,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - INFOPLIST_FILE = "Target Support Files/Pods-Jasonette/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; + PRODUCT_MODULE_NAME = TTTAttributedLabel; + PRODUCT_NAME = TTTAttributedLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 1FA7F58420DAB717DDCB98C1DA4F9E94 /* Release */ = { + 230F0AAFD33DC2DFD53644252E758BE8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2014FD1A3A666B475076CD94D5FC8ECA /* AFOAuth2Manager.xcconfig */; + baseConfigurationReference = 33D4D74BDC98E0F4E5A713F45A309A97 /* TDOAuth.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8291,14 +9037,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFOAuth2Manager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TDOAuth/TDOAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TDOAuth/TDOAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager.modulemap"; - PRODUCT_MODULE_NAME = AFOAuth2Manager; - PRODUCT_NAME = AFOAuth2Manager; + MODULEMAP_FILE = "Target Support Files/TDOAuth/TDOAuth.modulemap"; + PRODUCT_MODULE_NAME = TDOAuth; + PRODUCT_NAME = TDOAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8309,28 +9055,9 @@ }; name = Release; }; - 206F55BDB8F42E859A8632954E5C13D1 /* Release */ = { + 23291E5CD2309A2A6870A06C6895D270 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; - EXPANDED_CODE_SIGN_IDENTITY = ""; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = Resources; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - 215ACDEA1A07349CB3CFD4227A7AAC42 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9D8603FB811E53B89A4E4403B5DE40A0 /* SWTableViewCell.xcconfig */; + baseConfigurationReference = 473F8389B0AB3EE9DD514534867E4D1F /* SWFrameButton.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8344,14 +9071,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SWTableViewCell/SWTableViewCell-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SWTableViewCell/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SWFrameButton/SWFrameButton-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SWFrameButton/SWFrameButton-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell.modulemap"; - PRODUCT_MODULE_NAME = SWTableViewCell; - PRODUCT_NAME = SWTableViewCell; + MODULEMAP_FILE = "Target Support Files/SWFrameButton/SWFrameButton.modulemap"; + PRODUCT_MODULE_NAME = SWFrameButton; + PRODUCT_NAME = SWFrameButton; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8362,9 +9089,9 @@ }; name = Release; }; - 21D2B2FE501488D0D7D6A5D26202807D /* Debug */ = { + 23B66CD3CC03D6CECF3F723A0F7B64BF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 053CC07010598A11A9CA0312DFB643D3 /* FLEX.xcconfig */; + baseConfigurationReference = 0C47600F56FD9EE7F286AA1D84C882A6 /* MBProgressHUD.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8378,14 +9105,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8395,9 +9122,9 @@ }; name = Debug; }; - 257BBFE3A64878412CB9E01C2E9F558B /* Debug */ = { + 2A9A3E4A6FB343E1575F2D510A883528 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDE845AC1984184025BC117B0AC5846 /* REMenu.xcconfig */; + baseConfigurationReference = 000D731D5B3B011041F2455F9FCB2D3A /* DTFoundation.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8411,26 +9138,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/REMenu/REMenu-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/REMenu/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/REMenu/REMenu.modulemap"; - PRODUCT_MODULE_NAME = REMenu; - PRODUCT_NAME = REMenu; + MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; + PRODUCT_MODULE_NAME = DTFoundation; + PRODUCT_NAME = DTFoundation; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 2E6586BCA757EE1C983564DE7F6A14CB /* Release */ = { + 3BD15F83D653E4982A6550A951B206F5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7E9E46D4CAD54597D6F9FF1103050A45 /* PHFDelegateChain.xcconfig */; + baseConfigurationReference = AFE307446BA40FAA8D232062503641EE /* RMActionController.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8444,27 +9172,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/PHFDelegateChain/PHFDelegateChain-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PHFDelegateChain/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RMActionController/RMActionController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RMActionController/RMActionController-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain.modulemap"; - PRODUCT_MODULE_NAME = PHFDelegateChain; - PRODUCT_NAME = PHFDelegateChain; + MODULEMAP_FILE = "Target Support Files/RMActionController/RMActionController.modulemap"; + PRODUCT_MODULE_NAME = RMActionController; + PRODUCT_NAME = RMActionController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 30D0B34A4DACE03E067371E9C131E922 /* Release */ = { + 420F76A089E229EF63A2E0BA25D4E393 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54050775A4C3864DEDC51400E3DC21AC /* INTULocationManager.xcconfig */; + baseConfigurationReference = 21099CAB11D4385B610CC9CE0369AE32 /* OMGHTTPURLRQ.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8478,14 +9205,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/INTULocationManager/INTULocationManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/INTULocationManager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/INTULocationManager/INTULocationManager.modulemap"; - PRODUCT_MODULE_NAME = INTULocationManager; - PRODUCT_NAME = INTULocationManager; + MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; + PRODUCT_MODULE_NAME = OMGHTTPURLRQ; + PRODUCT_NAME = OMGHTTPURLRQ; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8496,9 +9223,9 @@ }; name = Release; }; - 32D77886F0456470D02AE8D245CD5C16 /* Debug */ = { + 431F9306744D8083284FAEF3DA71495F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5F4DBEF4E966F988F41F694AA15F3EA /* HMSegmentedControl.xcconfig */; + baseConfigurationReference = 0A0B2D28679E26682B7606F5558DDBC7 /* UICKeyChainStore.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8512,14 +9239,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/HMSegmentedControl/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UICKeyChainStore/UICKeyChainStore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl.modulemap"; - PRODUCT_MODULE_NAME = HMSegmentedControl; - PRODUCT_NAME = HMSegmentedControl; + MODULEMAP_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore.modulemap"; + PRODUCT_MODULE_NAME = UICKeyChainStore; + PRODUCT_NAME = UICKeyChainStore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8529,9 +9256,9 @@ }; name = Debug; }; - 35D763D971A36262BA8A75FFD3DEB2B0 /* Debug */ = { + 4460989AF16DC06AD74AFA3E2D41D56E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 68D3E8836D2BFCAF9ACE69CAFB685927 /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 59B26A39B3370072CEB866A76B8E2708 /* AHKActionSheet.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8545,14 +9272,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AHKActionSheet/AHKActionSheet-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet.modulemap"; + PRODUCT_MODULE_NAME = AHKActionSheet; + PRODUCT_NAME = AHKActionSheet; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8562,9 +9289,9 @@ }; name = Debug; }; - 3C5EE99509E54CB4B9969493134DA63D /* Debug */ = { + 45BB2033269958942C4A4FC967D55B89 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BAED06F7C8DB1A5196A9B89B6031E2F /* SDWebImage.xcconfig */; + baseConfigurationReference = 53212642DF8826F802F2497D6E4DC6E7 /* libPhoneNumber-iOS.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8578,14 +9305,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.modulemap"; + PRODUCT_MODULE_NAME = libPhoneNumber_iOS; + PRODUCT_NAME = libPhoneNumber_iOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8595,9 +9322,9 @@ }; name = Debug; }; - 3F7B801714F8F3FDDB8CCA6DCBFA74A2 /* Debug */ = { + 4778D167540371FB4CD0957A41BC9F24 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CAA81CDE1525BDE3A7761A2F9C9491 /* JSCoreBom.xcconfig */; + baseConfigurationReference = 01593660F2D9248A7F4058E72E35265E /* HMSegmentedControl.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8611,26 +9338,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/JSCoreBom/JSCoreBom-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JSCoreBom/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JSCoreBom/JSCoreBom.modulemap"; - PRODUCT_MODULE_NAME = JSCoreBom; - PRODUCT_NAME = JSCoreBom; + MODULEMAP_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl.modulemap"; + PRODUCT_MODULE_NAME = HMSegmentedControl; + PRODUCT_NAME = HMSegmentedControl; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 412CB780599B4BF3E7CB9B39BE532C2E /* Debug */ = { + 4B2DD348904D2DF6389E920C587B28D8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9D8603FB811E53B89A4E4403B5DE40A0 /* SWTableViewCell.xcconfig */; + baseConfigurationReference = 6223D78759BC4CC8E5B9C194E3F6C07A /* FreeStreamer.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8644,14 +9372,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SWTableViewCell/SWTableViewCell-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SWTableViewCell/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FreeStreamer/FreeStreamer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FreeStreamer/FreeStreamer-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell.modulemap"; - PRODUCT_MODULE_NAME = SWTableViewCell; - PRODUCT_NAME = SWTableViewCell; + MODULEMAP_FILE = "Target Support Files/FreeStreamer/FreeStreamer.modulemap"; + PRODUCT_MODULE_NAME = FreeStreamer; + PRODUCT_NAME = FreeStreamer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8661,9 +9389,9 @@ }; name = Debug; }; - 48BA89437052E32B8C8B79FC0E5DBEFC /* Release */ = { + 4C7474600A979CCAEF2B812CD6F32A46 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6BAED06F7C8DB1A5196A9B89B6031E2F /* SDWebImage.xcconfig */; + baseConfigurationReference = F38FE4D3CD3B0DA24EB4D5806CA75772 /* INTULocationManager.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8677,27 +9405,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/INTULocationManager/INTULocationManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/INTULocationManager/INTULocationManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/INTULocationManager/INTULocationManager.modulemap"; + PRODUCT_MODULE_NAME = INTULocationManager; + PRODUCT_NAME = INTULocationManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 4C721F70578231D122524A1CDF3ADB25 /* Release */ = { + 4DAA906A0FCDAE18E0480B8E80E886ED /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1CAA81CDE1525BDE3A7761A2F9C9491 /* JSCoreBom.xcconfig */; + baseConfigurationReference = 3BFEFC4EA245589BECF3A1686E783C67 /* INTULocationManager.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8711,14 +9438,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/JSCoreBom/JSCoreBom-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JSCoreBom/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/INTULocationManager/INTULocationManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/INTULocationManager/INTULocationManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JSCoreBom/JSCoreBom.modulemap"; - PRODUCT_MODULE_NAME = JSCoreBom; - PRODUCT_NAME = JSCoreBom; + MODULEMAP_FILE = "Target Support Files/INTULocationManager/INTULocationManager.modulemap"; + PRODUCT_MODULE_NAME = INTULocationManager; + PRODUCT_NAME = INTULocationManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8729,9 +9456,9 @@ }; name = Release; }; - 534DE399BD1ED2FDE1A8D6BD6CBDAF81 /* Release */ = { + 5140C232E30B4DAAED22847D051BBAB4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5610F1552C37FE6905EB2FD119C55DE5 /* IQAudioRecorderController.xcconfig */; + baseConfigurationReference = A86819D678568015DBBC8176970DB65E /* TTTAttributedLabel.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8745,14 +9472,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQAudioRecorderController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController.modulemap"; - PRODUCT_MODULE_NAME = IQAudioRecorderController; - PRODUCT_NAME = IQAudioRecorderController; + MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; + PRODUCT_MODULE_NAME = TTTAttributedLabel; + PRODUCT_NAME = TTTAttributedLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8763,9 +9490,9 @@ }; name = Release; }; - 56C72D6C5B1BCC41C815B789BEA716A0 /* Debug */ = { + 5140E2B1B0A06937E4CC9D61755C0CF5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3EA2A54CF2A0A743D21B89E262F21CCF /* BBBadgeBarButtonItem.xcconfig */; + baseConfigurationReference = 166AE55C4378FB5225F33BCF665A5EB6 /* Reachability.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8779,26 +9506,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/BBBadgeBarButtonItem/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Reachability/Reachability-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Reachability/Reachability-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.modulemap"; - PRODUCT_MODULE_NAME = BBBadgeBarButtonItem; - PRODUCT_NAME = BBBadgeBarButtonItem; + MODULEMAP_FILE = "Target Support Files/Reachability/Reachability.modulemap"; + PRODUCT_MODULE_NAME = Reachability; + PRODUCT_NAME = Reachability; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 5C955666D3E45328A51692E1FC348E93 /* Debug */ = { + 518DBEBC097E63198FEC6375EE88D399 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 05E47B5CE4905C23D5BBA83A356BF8B5 /* libPhoneNumber-iOS.xcconfig */; + baseConfigurationReference = 86D8DDF2B354917508BD6EDDF22FA74C /* HMSegmentedControl.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8812,14 +9540,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/libPhoneNumber-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.modulemap"; - PRODUCT_MODULE_NAME = libPhoneNumber_iOS; - PRODUCT_NAME = libPhoneNumber_iOS; + MODULEMAP_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl.modulemap"; + PRODUCT_MODULE_NAME = HMSegmentedControl; + PRODUCT_NAME = HMSegmentedControl; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8829,9 +9557,9 @@ }; name = Debug; }; - 5CA25B3709377015ED6809CE28EDB244 /* Debug */ = { + 527B04ADB743048E42021514789045F4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D4BE391535025401C4C1502442DA2CD2 /* TDOAuth.xcconfig */; + baseConfigurationReference = BBBDF2B5A3F8830A7188D58FB5A3AC71 /* DHSmartScreenshot.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8845,109 +9573,61 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/TDOAuth/TDOAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TDOAuth/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TDOAuth/TDOAuth.modulemap"; - PRODUCT_MODULE_NAME = TDOAuth; - PRODUCT_NAME = TDOAuth; + MODULEMAP_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot.modulemap"; + PRODUCT_MODULE_NAME = DHSmartScreenshot; + PRODUCT_NAME = DHSmartScreenshot; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 60DAF49CA7A9F362148D49C3C3123B2A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; + name = Release; }; - 663464A02C0AE04DFF8650BFF80E9ABA /* Debug */ = { + 55923E254F7B6726568E60B6CF1C91E0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */; + baseConfigurationReference = 1993EA6497488CE23ECB674A7401838A /* RMActionController.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = Resources; + GCC_PREFIX_HEADER = "Target Support Files/RMActionController/RMActionController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RMActionController/RMActionController-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RMActionController/RMActionController.modulemap"; + PRODUCT_MODULE_NAME = RMActionController; + PRODUCT_NAME = RMActionController; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 6B1B3286700EDFCA74C483867C9CD503 /* Debug */ = { + 5CBC90CA5AD0019ACB290BA49A151FB2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 50A78E85A5C5E9F7A794C625FF34352D /* DHSmartScreenshot.xcconfig */; + baseConfigurationReference = 4247DFE516BDBE711FDE1C44CE82E7C9 /* IQAudioRecorderController.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8961,14 +9641,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DHSmartScreenshot/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot.modulemap"; - PRODUCT_MODULE_NAME = DHSmartScreenshot; - PRODUCT_NAME = DHSmartScreenshot; + MODULEMAP_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController.modulemap"; + PRODUCT_MODULE_NAME = IQAudioRecorderController; + PRODUCT_NAME = IQAudioRecorderController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -8978,9 +9658,9 @@ }; name = Debug; }; - 6B569D33CFF1FEEE6785A396B90C8090 /* Debug */ = { + 63A422EFC96F7F9407F0EA623ABD4773 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F94ABD383E84FCC39829A73AF91CC707 /* RMActionController.xcconfig */; + baseConfigurationReference = 4BAB966413ACAB6C18666063705D404F /* TDOAuth.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -8994,14 +9674,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/RMActionController/RMActionController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RMActionController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TDOAuth/TDOAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TDOAuth/TDOAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RMActionController/RMActionController.modulemap"; - PRODUCT_MODULE_NAME = RMActionController; - PRODUCT_NAME = RMActionController; + MODULEMAP_FILE = "Target Support Files/TDOAuth/TDOAuth.modulemap"; + PRODUCT_MODULE_NAME = TDOAuth; + PRODUCT_NAME = TDOAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9011,9 +9691,9 @@ }; name = Debug; }; - 6B9B625D7718E03D0581702BF9E58E34 /* Debug */ = { + 64593A70464C91521689D2BB705CD4B1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 64AE86A4174ECE589CE404811E6BEA63 /* AHKActionSheet.xcconfig */; + baseConfigurationReference = 15E68503618D4422AAC905A5A8A2EC73 /* BBBadgeBarButtonItem.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9027,14 +9707,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AHKActionSheet/AHKActionSheet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AHKActionSheet/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AHKActionSheet/AHKActionSheet.modulemap"; - PRODUCT_MODULE_NAME = AHKActionSheet; - PRODUCT_NAME = AHKActionSheet; + MODULEMAP_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.modulemap"; + PRODUCT_MODULE_NAME = BBBadgeBarButtonItem; + PRODUCT_NAME = BBBadgeBarButtonItem; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9044,9 +9724,29 @@ }; name = Debug; }; - 6D6AA66866C077A0555A0F30A1D7D89F /* Debug */ = { + 65D1FADE3CF62E3A5EF4A6F7E4A8E389 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E290D4767429B0FE33C80A84BD7B178B /* DTCoreText.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + EXPANDED_CODE_SIGN_IDENTITY = ""; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = Resources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 6A21000D891B539A14A4996B40A22982 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD35C76D54BF9BF6B0F081BAE9B52A7E /* DTFoundation.xcconfig */; + baseConfigurationReference = EDB83083A31D85CA445F0685ED09F293 /* SDWebImage.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9060,14 +9760,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DTFoundation/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9077,9 +9777,25 @@ }; name = Debug; }; - 6EEAFCC6D0B6843B116EC2F5CEA45D57 /* Release */ = { + 6AA57BF825B9B26A38DFE09C855EB035 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1EE7B53BA9C50E7AAD1F2F946E1A4149 /* CYRTextView.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + EXPANDED_CODE_SIGN_IDENTITY = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 738E0155FB36198B4CE66D71B4A63DE2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD35C76D54BF9BF6B0F081BAE9B52A7E /* DTFoundation.xcconfig */; + baseConfigurationReference = 6C7E01AA17B875EE3E0A0430F4E0799A /* SZTextView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9093,14 +9809,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DTFoundation/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SZTextView/SZTextView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SZTextView/SZTextView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; - PRODUCT_MODULE_NAME = DTFoundation; - PRODUCT_NAME = DTFoundation; + MODULEMAP_FILE = "Target Support Files/SZTextView/SZTextView.modulemap"; + PRODUCT_MODULE_NAME = SZTextView; + PRODUCT_NAME = SZTextView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9111,9 +9827,9 @@ }; name = Release; }; - 7A42E992F9D9C87C69B1323F44658CE0 /* Debug */ = { + 7820867DF22DE7797B06B39CF4EBCCAC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4A25842526BC58F6FE5B9E88768A9F15 /* AFNetworking.xcconfig */; + baseConfigurationReference = 2B447A8DF8D38848DCB11692D3FCFAFE /* JSCoreBom.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9127,14 +9843,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFNetworking/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/JSCoreBom/JSCoreBom-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JSCoreBom/JSCoreBom-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; - PRODUCT_MODULE_NAME = AFNetworking; - PRODUCT_NAME = AFNetworking; + MODULEMAP_FILE = "Target Support Files/JSCoreBom/JSCoreBom.modulemap"; + PRODUCT_MODULE_NAME = JSCoreBom; + PRODUCT_NAME = JSCoreBom; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9144,9 +9860,9 @@ }; name = Debug; }; - 816F928FAB418765A78233533AB56589 /* Release */ = { + 785D41AAB9BCF22C8195EB3FAB57FA15 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7752026FB3648064F723FE5B910A5B18 /* APAddressBook.xcconfig */; + baseConfigurationReference = 3FD24C6B406C455D1A72D03B730C3A52 /* DAKeyboardControl.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9160,14 +9876,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/APAddressBook/APAddressBook-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/APAddressBook/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DAKeyboardControl/DAKeyboardControl-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/APAddressBook/APAddressBook.modulemap"; - PRODUCT_MODULE_NAME = APAddressBook; - PRODUCT_NAME = APAddressBook; + MODULEMAP_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl.modulemap"; + PRODUCT_MODULE_NAME = DAKeyboardControl; + PRODUCT_NAME = DAKeyboardControl; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9178,9 +9894,9 @@ }; name = Release; }; - 8F6DC26F766779C7CC0AE276A40395E3 /* Debug */ = { + 7F16DB6BB2DF2B466A3FB67C44FF5BAA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFB63C800897AC8E13F95F70B98A2CDE /* TTTAttributedLabel.xcconfig */; + baseConfigurationReference = 92F00B26565FCEF251890B333F11F31B /* SBJson.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9194,26 +9910,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SBJson/SBJson-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SBJson/SBJson-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; - PRODUCT_MODULE_NAME = TTTAttributedLabel; - PRODUCT_NAME = TTTAttributedLabel; + MODULEMAP_FILE = "Target Support Files/SBJson/SBJson.modulemap"; + PRODUCT_MODULE_NAME = SBJson; + PRODUCT_NAME = SBJson; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 8FAB278B85A688B6DAAEDDB6B722BA41 /* Release */ = { + 7F9BB39BD01778D4283EFEA9177485CE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CCDE845AC1984184025BC117B0AC5846 /* REMenu.xcconfig */; + baseConfigurationReference = 48095194E2942D6DB2712647A93EF567 /* MBProgressHUD.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9227,14 +9944,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/REMenu/REMenu-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/REMenu/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/REMenu/REMenu.modulemap"; - PRODUCT_MODULE_NAME = REMenu; - PRODUCT_NAME = REMenu; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9245,11 +9962,10 @@ }; name = Release; }; - 9175452AEA8CD59E858DB4BC21C9B5D3 /* Debug */ = { + 828E57CF8A609DB0521DEBE20487BE10 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A43658F5311EF31402DCDEAD5F3162E4 /* Pods-Jasonette.debug.xcconfig */; + baseConfigurationReference = 7E4940731BF9FB14C8753FCA75096C96 /* JDStatusBarNotification.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; @@ -9262,28 +9978,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - INFOPLIST_FILE = "Target Support Files/Pods-Jasonette/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification.modulemap"; + PRODUCT_MODULE_NAME = JDStatusBarNotification; + PRODUCT_NAME = JDStatusBarNotification; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 91DEA7B36D206D6C6D5FCD739376985A /* Debug */ = { + 8534BEB5C513A9FAFB8611E9FF36831B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63E12866C1EDA1E6E8EE1DED2CFC18A4 /* Reachability.xcconfig */; + baseConfigurationReference = 5DB4748045B8DCFC52AFB37C600FA4F2 /* Reachability.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9298,9 +10012,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; GCC_PREFIX_HEADER = "Target Support Files/Reachability/Reachability-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Reachability/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Reachability/Reachability-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/Reachability/Reachability.modulemap"; PRODUCT_MODULE_NAME = Reachability; @@ -9310,14 +10024,15 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.1; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 9983C267ABAC50081914E8D7C0913BA0 /* Debug */ = { + 87DA6FD5F31DF624C0E3D569D4AFB586 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 497DACA09B1AF0C7C6F056D5EC4F3AEE /* OMGHTTPURLRQ.xcconfig */; + baseConfigurationReference = 44AD7A8592FCFBFF645E45AEE925B10F /* TWMessageBarManager.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9331,26 +10046,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/TWMessageBarManager/TWMessageBarManager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TWMessageBarManager/TWMessageBarManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; - PRODUCT_MODULE_NAME = OMGHTTPURLRQ; - PRODUCT_NAME = OMGHTTPURLRQ; + MODULEMAP_FILE = "Target Support Files/TWMessageBarManager/TWMessageBarManager.modulemap"; + PRODUCT_MODULE_NAME = TWMessageBarManager; + PRODUCT_NAME = TWMessageBarManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 9E75A7D655FA280FECFB247612F3B80C /* Release */ = { + 88AF3235CA85B1D73C72C2E0546A8732 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 011A958F97F8F94B4225695A5C858C89 /* SocketRocket.xcconfig */; + baseConfigurationReference = 6D962564751BFA369B17397883A390F3 /* NSHash.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9364,14 +10080,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/NSHash/NSHash-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NSHash/NSHash-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + MODULEMAP_FILE = "Target Support Files/NSHash/NSHash.modulemap"; + PRODUCT_MODULE_NAME = NSHash; + PRODUCT_NAME = NSHash; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9382,9 +10098,9 @@ }; name = Release; }; - A611E651993741DA55FF052DB343F6CF /* Release */ = { + 910A1287A53C2E9A3A0A01AE671978CD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F94ABD383E84FCC39829A73AF91CC707 /* RMActionController.xcconfig */; + baseConfigurationReference = 2C736EDD966B965B1F81E1E98017A08B /* PHFDelegateChain.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9398,27 +10114,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/RMActionController/RMActionController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RMActionController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/PHFDelegateChain/PHFDelegateChain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RMActionController/RMActionController.modulemap"; - PRODUCT_MODULE_NAME = RMActionController; - PRODUCT_NAME = RMActionController; + MODULEMAP_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain.modulemap"; + PRODUCT_MODULE_NAME = PHFDelegateChain; + PRODUCT_NAME = PHFDelegateChain; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - A720E730F924B9C61DBB27BF304172C9 /* Debug */ = { + 94D9FB25943DA42507ABAA1AE74E5699 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */; + baseConfigurationReference = FFD82A49945F0210C13D3759E9F4E1DC /* SCSiriWaveformView.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9432,14 +10147,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DTCoreText/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; - PRODUCT_MODULE_NAME = DTCoreText; - PRODUCT_NAME = DTCoreText; + MODULEMAP_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView.modulemap"; + PRODUCT_MODULE_NAME = SCSiriWaveformView; + PRODUCT_NAME = SCSiriWaveformView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9449,9 +10164,9 @@ }; name = Debug; }; - AC85E9F32FF0C1E98BFB1CA5EC8CC159 /* Release */ = { + 961B502D5BE13909058EE1A881881D7C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 05E47B5CE4905C23D5BBA83A356BF8B5 /* libPhoneNumber-iOS.xcconfig */; + baseConfigurationReference = 824311AA91F3CAB809D3E6FD3DD5A007 /* APAddressBook.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9465,27 +10180,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/libPhoneNumber-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/APAddressBook/APAddressBook-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/APAddressBook/APAddressBook-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.modulemap"; - PRODUCT_MODULE_NAME = libPhoneNumber_iOS; - PRODUCT_NAME = libPhoneNumber_iOS; + MODULEMAP_FILE = "Target Support Files/APAddressBook/APAddressBook.modulemap"; + PRODUCT_MODULE_NAME = APAddressBook; + PRODUCT_NAME = APAddressBook; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - AE535E2B2A9FB112B38D082A8ED70C55 /* Release */ = { + 98BC6DB0519E5C3F732E906DF10567C5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC7F53B821E09BDA82E601DA99B8523B /* DTCoreText.xcconfig */; + baseConfigurationReference = E7ADF6F6F9BD889C27EE61BB769A35CB /* UICKeyChainStore.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9499,14 +10213,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DTCoreText/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/UICKeyChainStore/UICKeyChainStore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; - PRODUCT_MODULE_NAME = DTCoreText; - PRODUCT_NAME = DTCoreText; + MODULEMAP_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore.modulemap"; + PRODUCT_MODULE_NAME = UICKeyChainStore; + PRODUCT_NAME = UICKeyChainStore; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9517,9 +10231,9 @@ }; name = Release; }; - AEEE8824C65E124FE03DC6C2788B402E /* Debug */ = { + A4B2D2E9158427BA4EF044D9BBEB0517 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C45D75BF5700BF9176D1A909E359257F /* DAKeyboardControl.xcconfig */; + baseConfigurationReference = A5D5F07971654DADC7EF3BD193544E28 /* SZTextView.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9533,14 +10247,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DAKeyboardControl/DAKeyboardControl-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DAKeyboardControl/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SZTextView/SZTextView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SZTextView/SZTextView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl.modulemap"; - PRODUCT_MODULE_NAME = DAKeyboardControl; - PRODUCT_NAME = DAKeyboardControl; + MODULEMAP_FILE = "Target Support Files/SZTextView/SZTextView.modulemap"; + PRODUCT_MODULE_NAME = SZTextView; + PRODUCT_NAME = SZTextView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9550,9 +10264,9 @@ }; name = Debug; }; - B775D02BEFADDC42749DBFBC22E7B103 /* Debug */ = { + A61751DEADE104FEEB6E2D1CF4A987EF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 35346BACF0AF2C3DC53C066FC3AF5DCA /* SCSiriWaveformView.xcconfig */; + baseConfigurationReference = 508E8DC778DF854B9F71AFC308142699 /* SWFrameButton.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9566,14 +10280,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SCSiriWaveformView/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SWFrameButton/SWFrameButton-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SWFrameButton/SWFrameButton-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView.modulemap"; - PRODUCT_MODULE_NAME = SCSiriWaveformView; - PRODUCT_NAME = SCSiriWaveformView; + MODULEMAP_FILE = "Target Support Files/SWFrameButton/SWFrameButton.modulemap"; + PRODUCT_MODULE_NAME = SWFrameButton; + PRODUCT_NAME = SWFrameButton; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9583,9 +10297,9 @@ }; name = Debug; }; - B9180A7E74B4972E24382E368B38B190 /* Debug */ = { + A6EB2C897234F72F874B42A547AEFECB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB58FAD47423BFD1EF0D50F4D558528C /* SBJson.xcconfig */; + baseConfigurationReference = 1018A74779596E7AC8AE548066209342 /* PHFComposeBarView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9599,26 +10313,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SBJson/SBJson-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SBJson/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/PHFComposeBarView/PHFComposeBarView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PHFComposeBarView/PHFComposeBarView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SBJson/SBJson.modulemap"; - PRODUCT_MODULE_NAME = SBJson; - PRODUCT_NAME = SBJson; + MODULEMAP_FILE = "Target Support Files/PHFComposeBarView/PHFComposeBarView.modulemap"; + PRODUCT_MODULE_NAME = PHFComposeBarView; + PRODUCT_NAME = PHFComposeBarView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - C1DF77DCA48793273C7E8CC3ECD377FB /* Release */ = { + A82CDE0C9A50AA1CDE8559F9A60E5C02 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D37F9BAD36742F897F8BF28710DBF8C5 /* SZTextView.xcconfig */; + baseConfigurationReference = D63E6DFF04A9AE0573843399421C8AF7 /* AFOAuth2Manager.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9632,14 +10347,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SZTextView/SZTextView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SZTextView/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SZTextView/SZTextView.modulemap"; - PRODUCT_MODULE_NAME = SZTextView; - PRODUCT_NAME = SZTextView; + MODULEMAP_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager.modulemap"; + PRODUCT_MODULE_NAME = AFOAuth2Manager; + PRODUCT_NAME = AFOAuth2Manager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9650,68 +10365,9 @@ }; name = Release; }; - C4EAA84F44D044E108500A81C635F21E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - C8E3213996BF88154F895DCF4DC8ABB4 /* Release */ = { + A96ECE0C59F305D46EBA5406D4E3FE73 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3EA2A54CF2A0A743D21B89E262F21CCF /* BBBadgeBarButtonItem.xcconfig */; + baseConfigurationReference = 3A39B3C1D89D279139A7D0D2D2BB5739 /* SCSiriWaveformView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9725,14 +10381,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/BBBadgeBarButtonItem/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.modulemap"; - PRODUCT_MODULE_NAME = BBBadgeBarButtonItem; - PRODUCT_NAME = BBBadgeBarButtonItem; + MODULEMAP_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView.modulemap"; + PRODUCT_MODULE_NAME = SCSiriWaveformView; + PRODUCT_NAME = SCSiriWaveformView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9743,43 +10399,26 @@ }; name = Release; }; - CB7E381150D2E05BA04BEA749E810758 /* Release */ = { + A9B3971883E37F09078B10076D21F721 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 053CC07010598A11A9CA0312DFB643D3 /* FLEX.xcconfig */; + baseConfigurationReference = A6F6EE6682BBFEC5FC96F35E654180D4 /* CYRTextView.release.xcconfig */; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; + CODE_SIGN_IDENTITY = "iPhone Developer"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FLEX/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; - PRODUCT_MODULE_NAME = FLEX; - PRODUCT_NAME = FLEX; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; - CB96D22AA0B82A3EB4D63F2D8BE40B1F /* Debug */ = { + ABC0569F9BB222EECCD627253BA64790 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AB70943FA59BD85DBC6833220500C1EB /* UICKeyChainStore.xcconfig */; + baseConfigurationReference = C51567D6FEE88FFF0AFC4A967243CDAB /* JDStatusBarNotification.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9793,26 +10432,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/UICKeyChainStore/UICKeyChainStore-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICKeyChainStore/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore.modulemap"; - PRODUCT_MODULE_NAME = UICKeyChainStore; - PRODUCT_NAME = UICKeyChainStore; + MODULEMAP_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification.modulemap"; + PRODUCT_MODULE_NAME = JDStatusBarNotification; + PRODUCT_NAME = JDStatusBarNotification; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - D1AF99AE710E267F273F0E9649B57C60 /* Release */ = { + B0BFEB0B7B0BFB54AEB45D3DD1BFD947 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3CC96D99A5FF4AB5E81B37EF291511BC /* NSHash.xcconfig */; + baseConfigurationReference = 9459A1A91C896AC1A13FB9858F251D13 /* IQAudioRecorderController.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9826,14 +10466,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/NSHash/NSHash-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/NSHash/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/NSHash/NSHash.modulemap"; - PRODUCT_MODULE_NAME = NSHash; - PRODUCT_NAME = NSHash; + MODULEMAP_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController.modulemap"; + PRODUCT_MODULE_NAME = IQAudioRecorderController; + PRODUCT_NAME = IQAudioRecorderController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -9844,9 +10484,9 @@ }; name = Release; }; - D29CE9AE9DB9F992FCE3BB2C2FB0C117 /* Release */ = { + B40811642FA5976E251793B131DF2C2C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A8E64B438CA0224D41F48F7243BC98E /* PHFComposeBarView.xcconfig */; + baseConfigurationReference = 6A3C02F7987A57370C1BBB832F3E5353 /* NSHash.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9860,27 +10500,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/PHFComposeBarView/PHFComposeBarView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PHFComposeBarView/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/NSHash/NSHash-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NSHash/NSHash-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PHFComposeBarView/PHFComposeBarView.modulemap"; - PRODUCT_MODULE_NAME = PHFComposeBarView; - PRODUCT_NAME = PHFComposeBarView; + MODULEMAP_FILE = "Target Support Files/NSHash/NSHash.modulemap"; + PRODUCT_MODULE_NAME = NSHash; + PRODUCT_NAME = NSHash; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - D33EEF69836F9BEA744D1CAB2C5BD034 /* Debug */ = { + B6A2675EEE82A5C4E7F50D2C2679505C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6099BDE6CEEAFD3FE824CA5730777F3E /* FreeStreamer.xcconfig */; + baseConfigurationReference = C7703B254C1B1B74DF8050DEAEF8520C /* REMenu.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9894,26 +10533,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/FreeStreamer/FreeStreamer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FreeStreamer/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/REMenu/REMenu-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/REMenu/REMenu-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FreeStreamer/FreeStreamer.modulemap"; - PRODUCT_MODULE_NAME = FreeStreamer; - PRODUCT_NAME = FreeStreamer; + MODULEMAP_FILE = "Target Support Files/REMenu/REMenu.modulemap"; + PRODUCT_MODULE_NAME = REMenu; + PRODUCT_NAME = REMenu; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - D8CEF8B6082842E72B752769CC98F47E /* Debug */ = { + BA38E8BEA5D722DA5D3F2B512B9A3871 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5610F1552C37FE6905EB2FD119C55DE5 /* IQAudioRecorderController.xcconfig */; + baseConfigurationReference = 9D792A72AA43D32D354C2882BF4B3991 /* AFNetworking.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9927,26 +10567,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/IQAudioRecorderController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/IQAudioRecorderController/IQAudioRecorderController.modulemap"; - PRODUCT_MODULE_NAME = IQAudioRecorderController; - PRODUCT_NAME = IQAudioRecorderController; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - D973CB6D59CD25096343A15D8EF455D8 /* Release */ = { + C009E0B2D53838713B640E72FE57731C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6ADB996FEC5B74B4261B8585942AF90 /* TWMessageBarManager.xcconfig */; + baseConfigurationReference = 4A10EDFAA7E661E4AD438A6F04D5BE30 /* AFNetworking.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9960,27 +10601,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/TWMessageBarManager/TWMessageBarManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TWMessageBarManager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFNetworking/AFNetworking-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFNetworking/AFNetworking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TWMessageBarManager/TWMessageBarManager.modulemap"; - PRODUCT_MODULE_NAME = TWMessageBarManager; - PRODUCT_NAME = TWMessageBarManager; + MODULEMAP_FILE = "Target Support Files/AFNetworking/AFNetworking.modulemap"; + PRODUCT_MODULE_NAME = AFNetworking; + PRODUCT_NAME = AFNetworking; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - DADEE04313655E03E5A591DDEE9C0FDF /* Release */ = { + C23312D3D86313ACD343EE640412098D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3351A3AC463F5C91DB7817F666907990 /* SWFrameButton.xcconfig */; + baseConfigurationReference = 6F2F36E99E2947A6A3AE2BCCB62622CA /* RMDateSelectionViewController.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -9994,14 +10634,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SWFrameButton/SWFrameButton-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SWFrameButton/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SWFrameButton/SWFrameButton.modulemap"; - PRODUCT_MODULE_NAME = SWFrameButton; - PRODUCT_NAME = SWFrameButton; + MODULEMAP_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.modulemap"; + PRODUCT_MODULE_NAME = RMDateSelectionViewController; + PRODUCT_NAME = RMDateSelectionViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10012,9 +10652,9 @@ }; name = Release; }; - DE73D9C3FE70FC63B736A88C35DA7786 /* Release */ = { + C5BDCD80172270E50D2AC34FF1B7A672 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 497DACA09B1AF0C7C6F056D5EC4F3AEE /* OMGHTTPURLRQ.xcconfig */; + baseConfigurationReference = C770563EB2DC08C78FCB30DDA92152F3 /* SDWebImage.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10028,14 +10668,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OMGHTTPURLRQ/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.modulemap"; - PRODUCT_MODULE_NAME = OMGHTTPURLRQ; - PRODUCT_NAME = OMGHTTPURLRQ; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10046,9 +10686,9 @@ }; name = Release; }; - DF467487C2A6746E06ECCF7F15ADE5B9 /* Debug */ = { + C81BE1F3E7BED7D62A67877C8CCFB0AC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2014FD1A3A666B475076CD94D5FC8ECA /* AFOAuth2Manager.xcconfig */; + baseConfigurationReference = 3626A99BA881B21FF7E0124FC7576124 /* FreeStreamer.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10062,26 +10702,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AFOAuth2Manager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FreeStreamer/FreeStreamer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FreeStreamer/FreeStreamer-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager.modulemap"; - PRODUCT_MODULE_NAME = AFOAuth2Manager; - PRODUCT_NAME = AFOAuth2Manager; + MODULEMAP_FILE = "Target Support Files/FreeStreamer/FreeStreamer.modulemap"; + PRODUCT_MODULE_NAME = FreeStreamer; + PRODUCT_NAME = FreeStreamer; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - DFCBC3281EF5E89A823FEB2CC6BFBF21 /* Debug */ = { + C9911D42F5A5A1FE0D622098EB1D3AC4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3351A3AC463F5C91DB7817F666907990 /* SWFrameButton.xcconfig */; + baseConfigurationReference = CE3405355F40ABFFBE76ED58DA6C203A /* SWTableViewCell.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10095,14 +10736,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SWFrameButton/SWFrameButton-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SWFrameButton/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SWTableViewCell/SWTableViewCell-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SWFrameButton/SWFrameButton.modulemap"; - PRODUCT_MODULE_NAME = SWFrameButton; - PRODUCT_NAME = SWFrameButton; + MODULEMAP_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell.modulemap"; + PRODUCT_MODULE_NAME = SWTableViewCell; + PRODUCT_NAME = SWTableViewCell; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10112,9 +10753,9 @@ }; name = Debug; }; - DFFE7412A646449D698CC23339E4DFBB /* Release */ = { + C9914B02C1A15416D05784795E6EC9E7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 35346BACF0AF2C3DC53C066FC3AF5DCA /* SCSiriWaveformView.xcconfig */; + baseConfigurationReference = 7279D7887CE25544AC486836129DED02 /* SocketRocket.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10128,14 +10769,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SCSiriWaveformView/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SocketRocket/SocketRocket-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SCSiriWaveformView/SCSiriWaveformView.modulemap"; - PRODUCT_MODULE_NAME = SCSiriWaveformView; - PRODUCT_NAME = SCSiriWaveformView; + MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10146,9 +10787,9 @@ }; name = Release; }; - E1A27A99F18E41CAC714A67C8F5A42DE /* Release */ = { + CA1E6FEE11D5EE8A0938D296377A970C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5F4DBEF4E966F988F41F694AA15F3EA /* HMSegmentedControl.xcconfig */; + baseConfigurationReference = 3F8635373AC7F80231B23E0CF3A35012 /* SocketRocket.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10162,27 +10803,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/HMSegmentedControl/HMSegmentedControl-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/HMSegmentedControl/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SocketRocket/SocketRocket-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/HMSegmentedControl/HMSegmentedControl.modulemap"; - PRODUCT_MODULE_NAME = HMSegmentedControl; - PRODUCT_NAME = HMSegmentedControl; + MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - E1E83D42E128DA879E787E5D0741AE2D /* Debug */ = { + CC4BB59D9682FB94A1ECA59E5F44BCC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BE35672DD104DBE042C0A2A3CA7A44FD /* RMDateSelectionViewController.xcconfig */; + baseConfigurationReference = B8A3ACBB108276AE48D8FAC4E5FB7DEC /* SWTableViewCell.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10196,26 +10836,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RMDateSelectionViewController/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SWTableViewCell/SWTableViewCell-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.modulemap"; - PRODUCT_MODULE_NAME = RMDateSelectionViewController; - PRODUCT_NAME = RMDateSelectionViewController; + MODULEMAP_FILE = "Target Support Files/SWTableViewCell/SWTableViewCell.modulemap"; + PRODUCT_MODULE_NAME = SWTableViewCell; + PRODUCT_NAME = SWTableViewCell; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - E400D4BE65DB04C8A1FA275834B65CC6 /* Release */ = { + CE4B25A39D2EE68A83D4C25999A6BFBE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6099BDE6CEEAFD3FE824CA5730777F3E /* FreeStreamer.xcconfig */; + baseConfigurationReference = 06C294331D65E40A01B93E0469C0B0DA /* FLEX.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10229,14 +10870,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/FreeStreamer/FreeStreamer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FreeStreamer/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/FLEX/FLEX-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FLEX/FLEX-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FreeStreamer/FreeStreamer.modulemap"; - PRODUCT_MODULE_NAME = FreeStreamer; - PRODUCT_NAME = FreeStreamer; + MODULEMAP_FILE = "Target Support Files/FLEX/FLEX.modulemap"; + PRODUCT_MODULE_NAME = FLEX; + PRODUCT_NAME = FLEX; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10247,9 +10888,9 @@ }; name = Release; }; - E43FC021A645546A1C7201A5D71694BA /* Debug */ = { + CF6397D3710F54FB7FC7E1056F19875C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6ADB996FEC5B74B4261B8585942AF90 /* TWMessageBarManager.xcconfig */; + baseConfigurationReference = 9616EF631EAC59CC373E6CB2D8118245 /* TWMessageBarManager.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10264,9 +10905,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; GCC_PREFIX_HEADER = "Target Support Files/TWMessageBarManager/TWMessageBarManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TWMessageBarManager/Info.plist"; + INFOPLIST_FILE = "Target Support Files/TWMessageBarManager/TWMessageBarManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/TWMessageBarManager/TWMessageBarManager.modulemap"; PRODUCT_MODULE_NAME = TWMessageBarManager; @@ -10280,9 +10921,9 @@ }; name = Debug; }; - E7463809EB975304BABA6FD3CD15F10F /* Release */ = { + D0ECB79A1DEB508EEDCD8EE832B3BF08 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 50A78E85A5C5E9F7A794C625FF34352D /* DHSmartScreenshot.xcconfig */; + baseConfigurationReference = 840AE85581A20188CA6E4094FFECE5F6 /* APAddressBook.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10296,14 +10937,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DHSmartScreenshot/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/APAddressBook/APAddressBook-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/APAddressBook/APAddressBook-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DHSmartScreenshot/DHSmartScreenshot.modulemap"; - PRODUCT_MODULE_NAME = DHSmartScreenshot; - PRODUCT_NAME = DHSmartScreenshot; + MODULEMAP_FILE = "Target Support Files/APAddressBook/APAddressBook.modulemap"; + PRODUCT_MODULE_NAME = APAddressBook; + PRODUCT_NAME = APAddressBook; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10314,9 +10955,9 @@ }; name = Release; }; - E7B5E3E8A4A7456598A4F1271E5FF9F2 /* Debug */ = { + D2EC4BDC3413266807B4CC22C7BE7A23 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 011A958F97F8F94B4225695A5C858C89 /* SocketRocket.xcconfig */; + baseConfigurationReference = B057F4C41EBAFA9B42881A17F2DD3774 /* libPhoneNumber-iOS.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10330,26 +10971,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + MODULEMAP_FILE = "Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.modulemap"; + PRODUCT_MODULE_NAME = libPhoneNumber_iOS; + PRODUCT_NAME = libPhoneNumber_iOS; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - EE4E3A4EDEC09ABFBA481A5EE3DC8CB3 /* Debug */ = { + D34532F8590B49CF690168282FCBD550 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3CC96D99A5FF4AB5E81B37EF291511BC /* NSHash.xcconfig */; + baseConfigurationReference = 757222D86BAF229194032925BC0104B2 /* SBJson.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10363,14 +11005,14 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/NSHash/NSHash-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/NSHash/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SBJson/SBJson-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SBJson/SBJson-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/NSHash/NSHash.modulemap"; - PRODUCT_MODULE_NAME = NSHash; - PRODUCT_NAME = NSHash; + MODULEMAP_FILE = "Target Support Files/SBJson/SBJson.modulemap"; + PRODUCT_MODULE_NAME = SBJson; + PRODUCT_NAME = SBJson; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -10380,9 +11022,9 @@ }; name = Debug; }; - EF7A512B361EC2A9D6D816331359445D /* Release */ = { + D45DA006F8799229DF3DB60292E027A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB58FAD47423BFD1EF0D50F4D558528C /* SBJson.xcconfig */; + baseConfigurationReference = E290D4767429B0FE33C80A84BD7B178B /* DTCoreText.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10396,27 +11038,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/SBJson/SBJson-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SBJson/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DTCoreText/DTCoreText-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DTCoreText/DTCoreText-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SBJson/SBJson.modulemap"; - PRODUCT_MODULE_NAME = SBJson; - PRODUCT_NAME = SBJson; + MODULEMAP_FILE = "Target Support Files/DTCoreText/DTCoreText.modulemap"; + PRODUCT_MODULE_NAME = DTCoreText; + PRODUCT_NAME = DTCoreText; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F429F6E067F0A095C46B761443C7D375 /* Debug */ = { + DA8E0D146008F3B7E59BB4DF312C519A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54050775A4C3864DEDC51400E3DC21AC /* INTULocationManager.xcconfig */; + baseConfigurationReference = BA4E1B1555ADEC788BABEE8D174CA5BC /* NSGIF.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10430,26 +11071,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/INTULocationManager/INTULocationManager-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/INTULocationManager/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/NSGIF/NSGIF-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NSGIF/NSGIF-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/INTULocationManager/INTULocationManager.modulemap"; - PRODUCT_MODULE_NAME = INTULocationManager; - PRODUCT_NAME = INTULocationManager; + MODULEMAP_FILE = "Target Support Files/NSGIF/NSGIF.modulemap"; + PRODUCT_MODULE_NAME = NSGIF; + PRODUCT_NAME = NSGIF; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - F50E32AC8431350CD663D9A8927BDF64 /* Release */ = { + E533A339409FF8246307588F3615CD50 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C45D75BF5700BF9176D1A909E359257F /* DAKeyboardControl.xcconfig */; + baseConfigurationReference = 170CD3CA5772B1EF7F1E937AB798CA48 /* AFOAuth2Manager.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10463,28 +11105,108 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/DAKeyboardControl/DAKeyboardControl-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/DAKeyboardControl/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/DAKeyboardControl/DAKeyboardControl.modulemap"; - PRODUCT_MODULE_NAME = DAKeyboardControl; - PRODUCT_NAME = DAKeyboardControl; + MODULEMAP_FILE = "Target Support Files/AFOAuth2Manager/AFOAuth2Manager.modulemap"; + PRODUCT_MODULE_NAME = AFOAuth2Manager; + PRODUCT_NAME = AFOAuth2Manager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + E57FCFBA2B9F06917329B6B80951755D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D600794335416E75E059ACC663C167F4 /* DTCoreText.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DTCoreText"; + EXPANDED_CODE_SIGN_IDENTITY = ""; + IBSC_MODULE = DTCoreText; + INFOPLIST_FILE = "Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = Resources; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + F090CD07A80273D5A73C8EA19224ADDB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; name = Release; }; - F72C07F57C460FDDED1CD213C107CE5C /* Release */ = { + F331ECDC8D9E9BF81D7A4064E80D40D8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFB63C800897AC8E13F95F70B98A2CDE /* TTTAttributedLabel.xcconfig */; + baseConfigurationReference = 4AD50BE5ADA00A53553039E1614751A6 /* Pods-Jasonette.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_IDENTITY = ""; @@ -10497,27 +11219,28 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; - PRODUCT_MODULE_NAME = TTTAttributedLabel; - PRODUCT_NAME = TTTAttributedLabel; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Jasonette/Pods-Jasonette.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F7379697E96B6E71AF8413D182AACCD0 /* Release */ = { + F3BB16A4BB8E232AE39C520223E0AC75 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 68D3E8836D2BFCAF9ACE69CAFB685927 /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 855E7F6EB9BB43EB04EF1FC9BE3022AA /* RMDateSelectionViewController.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10531,27 +11254,26 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; - PRODUCT_MODULE_NAME = MBProgressHUD; - PRODUCT_NAME = MBProgressHUD; + MODULEMAP_FILE = "Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.modulemap"; + PRODUCT_MODULE_NAME = RMDateSelectionViewController; + PRODUCT_NAME = RMDateSelectionViewController; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F7BDF8FA0208C5F42748710D31F0BB5B /* Debug */ = { + F52A70911BFCD76F9454B1113BF82F10 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2B4AC9C8B37DE25E08BC1A02C78C34ED /* JDStatusBarNotification.xcconfig */; + baseConfigurationReference = 62430FEF119CB4084273453913BB4A18 /* PHFDelegateChain.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10565,26 +11287,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/JDStatusBarNotification/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/PHFDelegateChain/PHFDelegateChain-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/JDStatusBarNotification/JDStatusBarNotification.modulemap"; - PRODUCT_MODULE_NAME = JDStatusBarNotification; - PRODUCT_NAME = JDStatusBarNotification; + MODULEMAP_FILE = "Target Support Files/PHFDelegateChain/PHFDelegateChain.modulemap"; + PRODUCT_MODULE_NAME = PHFDelegateChain; + PRODUCT_NAME = PHFDelegateChain; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - F7C6091F771CBA5D5F57C675BD345B43 /* Release */ = { + F98A6EBCBB4DED2E0C423CA23DB36B9B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AB70943FA59BD85DBC6833220500C1EB /* UICKeyChainStore.xcconfig */; + baseConfigurationReference = 1BAE50CEB46B9992E15C43727F081F48 /* DTFoundation.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; @@ -10598,397 +11321,405 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; EXPANDED_CODE_SIGN_IDENTITY = ""; - GCC_PREFIX_HEADER = "Target Support Files/UICKeyChainStore/UICKeyChainStore-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UICKeyChainStore/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/DTFoundation/DTFoundation-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/DTFoundation/DTFoundation-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/UICKeyChainStore/UICKeyChainStore.modulemap"; - PRODUCT_MODULE_NAME = UICKeyChainStore; - PRODUCT_NAME = UICKeyChainStore; + MODULEMAP_FILE = "Target Support Files/DTFoundation/DTFoundation.modulemap"; + PRODUCT_MODULE_NAME = DTFoundation; + PRODUCT_NAME = DTFoundation; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 09600571F63852ACA3B7A23B4729B6A4 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { + 10208D914FA75F86D9EC8FE636974170 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C009E0B2D53838713B640E72FE57731C /* Debug */, + BA38E8BEA5D722DA5D3F2B512B9A3871 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 194C54D779493A9A0AFD6A3D10B76648 /* Build configuration list for PBXNativeTarget "BBBadgeBarButtonItem" */ = { isa = XCConfigurationList; buildConfigurations = ( - 35D763D971A36262BA8A75FFD3DEB2B0 /* Debug */, - F7379697E96B6E71AF8413D182AACCD0 /* Release */, + 64593A70464C91521689D2BB705CD4B1 /* Debug */, + 14D417ADB03177163D25A1C1E85DC999 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0BBEEB6F4DC120B9DB4962F5398F2447 /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { + 1B1289DD3986AFEC328C3BC2A1D241D9 /* Build configuration list for PBXAggregateTarget "CYRTextView" */ = { isa = XCConfigurationList; buildConfigurations = ( - E7B5E3E8A4A7456598A4F1271E5FF9F2 /* Debug */, - 9E75A7D655FA280FECFB247612F3B80C /* Release */, + 6AA57BF825B9B26A38DFE09C855EB035 /* Debug */, + A9B3971883E37F09078B10076D21F721 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 0BE8FB68970CF583E7425F403CC95415 /* Build configuration list for PBXNativeTarget "SCSiriWaveformView" */ = { + 1BB0441AD843BD7F1E91099A8B187495 /* Build configuration list for PBXNativeTarget "DHSmartScreenshot" */ = { isa = XCConfigurationList; buildConfigurations = ( - B775D02BEFADDC42749DBFBC22E7B103 /* Debug */, - DFFE7412A646449D698CC23339E4DFBB /* Release */, + 0E92E18B3BF7F0EB339A77F1ADAAE793 /* Debug */, + 527B04ADB743048E42021514789045F4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 28A25595E91758A9E7E24C0A535925D6 /* Build configuration list for PBXNativeTarget "DTCoreText" */ = { + 201D2C419E3F9C10FF265D440678C63D /* Build configuration list for PBXNativeTarget "UICKeyChainStore" */ = { isa = XCConfigurationList; buildConfigurations = ( - A720E730F924B9C61DBB27BF304172C9 /* Debug */, - AE535E2B2A9FB112B38D082A8ED70C55 /* Release */, + 431F9306744D8083284FAEF3DA71495F /* Debug */, + 98BC6DB0519E5C3F732E906DF10567C5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2B87C468DED37377315748D3A02D3167 /* Build configuration list for PBXNativeTarget "AFOAuth2Manager" */ = { + 20A94BF05BA0F0AF2C0ACC77035D6078 /* Build configuration list for PBXNativeTarget "PHFDelegateChain" */ = { isa = XCConfigurationList; buildConfigurations = ( - DF467487C2A6746E06ECCF7F15ADE5B9 /* Debug */, - 1FA7F58420DAB717DDCB98C1DA4F9E94 /* Release */, + 910A1287A53C2E9A3A0A01AE671978CD /* Debug */, + F52A70911BFCD76F9454B1113BF82F10 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 251B2164B5887A6F83FAC0AAED5A792F /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { isa = XCConfigurationList; buildConfigurations = ( - 60DAF49CA7A9F362148D49C3C3123B2A /* Debug */, - C4EAA84F44D044E108500A81C635F21E /* Release */, + CA1E6FEE11D5EE8A0938D296377A970C /* Debug */, + C9914B02C1A15416D05784795E6EC9E7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 324120D8CA68C84CB87479B2423550C7 /* Build configuration list for PBXNativeTarget "IQAudioRecorderController" */ = { + 3C04466EECEEAF47528A0F3E83F0742B /* Build configuration list for PBXNativeTarget "AFOAuth2Manager" */ = { isa = XCConfigurationList; buildConfigurations = ( - D8CEF8B6082842E72B752769CC98F47E /* Debug */, - 534DE399BD1ED2FDE1A8D6BD6CBDAF81 /* Release */, + E533A339409FF8246307588F3615CD50 /* Debug */, + A82CDE0C9A50AA1CDE8559F9A60E5C02 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3299FF248C98FCBF39210DB329310EA9 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */ = { + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8F6DC26F766779C7CC0AE276A40395E3 /* Debug */, - F72C07F57C460FDDED1CD213C107CE5C /* Release */, + 131356BE54884448CA49C07BEDF4BB2A /* Debug */, + F090CD07A80273D5A73C8EA19224ADDB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 376527BD97EB794CE07174A0CB24E239 /* Build configuration list for PBXNativeTarget "SBJson" */ = { + 4A3074F499FE83AAE9A127A708EE1B3A /* Build configuration list for PBXNativeTarget "libPhoneNumber-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B9180A7E74B4972E24382E368B38B190 /* Debug */, - EF7A512B361EC2A9D6D816331359445D /* Release */, + 45BB2033269958942C4A4FC967D55B89 /* Debug */, + D2EC4BDC3413266807B4CC22C7BE7A23 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3C02EE5AF075539BF0A7766B0466A3BE /* Build configuration list for PBXNativeTarget "Reachability" */ = { + 56DA60E82A556A04B907FDDC7C774235 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { isa = XCConfigurationList; buildConfigurations = ( - 91DEA7B36D206D6C6D5FCD739376985A /* Debug */, - 1554D9E1AE5AF023E67A2A65945F605A /* Release */, + 65D1FADE3CF62E3A5EF4A6F7E4A8E389 /* Debug */, + E57FCFBA2B9F06917329B6B80951755D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3CBD9309017BDC5BA35D13B0C93FC147 /* Build configuration list for PBXNativeTarget "PHFDelegateChain" */ = { + 6019C17940D6B360C34A2D3D79C1D2A1 /* Build configuration list for PBXNativeTarget "IQAudioRecorderController" */ = { isa = XCConfigurationList; buildConfigurations = ( - 056A3F73F4B507EFB9A4CEF31E096756 /* Debug */, - 2E6586BCA757EE1C983564DE7F6A14CB /* Release */, + 5CBC90CA5AD0019ACB290BA49A151FB2 /* Debug */, + B0BFEB0B7B0BFB54AEB45D3DD1BFD947 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 42C561356C9DF50BD8C65711F7CA85BC /* Build configuration list for PBXNativeTarget "AHKActionSheet" */ = { + 62F38A9821B3DCAAA192249EC8C3AC8A /* Build configuration list for PBXNativeTarget "PHFComposeBarView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6B9B625D7718E03D0581702BF9E58E34 /* Debug */, - 002EF82B534D2F9405AFDD60F77D0682 /* Release */, + 04DF73CEDD9954E9AA336698439CBBAA /* Debug */, + A6EB2C897234F72F874B42A547AEFECB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 43813192AE5C8BF7C6D41B2D4B6BCDAC /* Build configuration list for PBXNativeTarget "REMenu" */ = { + 6B7F68864CD62750B8546A62BACD6647 /* Build configuration list for PBXNativeTarget "TDOAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( - 257BBFE3A64878412CB9E01C2E9F558B /* Debug */, - 8FAB278B85A688B6DAAEDDB6B722BA41 /* Release */, + 63A422EFC96F7F9407F0EA623ABD4773 /* Debug */, + 230F0AAFD33DC2DFD53644252E758BE8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 47690E3A4E51BA9F92314878B4030597 /* Build configuration list for PBXNativeTarget "DAKeyboardControl" */ = { + 70191416B9573C7ABB42333A08FA2DE4 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( - AEEE8824C65E124FE03DC6C2788B402E /* Debug */, - F50E32AC8431350CD663D9A8927BDF64 /* Release */, + 23B66CD3CC03D6CECF3F723A0F7B64BF /* Debug */, + 7F9BB39BD01778D4283EFEA9177485CE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 540FBE61A3C6E83415E3F974F23BFCDF /* Build configuration list for PBXNativeTarget "libPhoneNumber-iOS" */ = { + 727534AAADB77873F9481DB4DCB14006 /* Build configuration list for PBXNativeTarget "FLEX" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5C955666D3E45328A51692E1FC348E93 /* Debug */, - AC85E9F32FF0C1E98BFB1CA5EC8CC159 /* Release */, + 00A620EFA0626DECA300CC7FCD4990E3 /* Debug */, + CE4B25A39D2EE68A83D4C25999A6BFBE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5A21F2E085EB553C9F81C677202202EB /* Build configuration list for PBXNativeTarget "SWFrameButton" */ = { + 78CEC99C2DF7E6C6016412A4AAE499AD /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - DFCBC3281EF5E89A823FEB2CC6BFBF21 /* Debug */, - DADEE04313655E03E5A591DDEE9C0FDF /* Release */, + F98A6EBCBB4DED2E0C423CA23DB36B9B /* Debug */, + 2A9A3E4A6FB343E1575F2D510A883528 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5FCA8239D88AC2F7A590C47A3171D297 /* Build configuration list for PBXNativeTarget "Pods-Jasonette" */ = { + 7B58A14930CBD745939D93C5D7D7C9D0 /* Build configuration list for PBXNativeTarget "Pods-Jasonette" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9175452AEA8CD59E858DB4BC21C9B5D3 /* Debug */, - 1E66B7AD71129C017C5C59F526AF92E5 /* Release */, + F331ECDC8D9E9BF81D7A4064E80D40D8 /* Debug */, + 14D91F3C05643DB1CAF8C2A8E6949379 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 63983F01646E0C0F83B5B1817AB5C400 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 801CFFB944D9B8E195CB81F66932D41E /* Build configuration list for PBXNativeTarget "JDStatusBarNotification" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3C5EE99509E54CB4B9969493134DA63D /* Debug */, - 48BA89437052E32B8C8B79FC0E5DBEFC /* Release */, + 828E57CF8A609DB0521DEBE20487BE10 /* Debug */, + ABC0569F9BB222EECCD627253BA64790 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 658E06B6D71D736DB0366F4432481FE9 /* Build configuration list for PBXNativeTarget "AFNetworking" */ = { + 8D5FBEF5641B96C38E2BAED34E65F37E /* Build configuration list for PBXNativeTarget "DAKeyboardControl" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7A42E992F9D9C87C69B1323F44658CE0 /* Debug */, - 16A0D3ABE8A1B23E0B0E58A54647418E /* Release */, + 1DCDF3FE2388A6F3101FEC32AB944C86 /* Debug */, + 785D41AAB9BCF22C8195EB3FAB57FA15 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 65D6EA4425AEDBDA499365EAC0C7F1F6 /* Build configuration list for PBXNativeTarget "FreeStreamer" */ = { + 92BAA749E7582D8E6BFCAB44B286ADBE /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - D33EEF69836F9BEA744D1CAB2C5BD034 /* Debug */, - E400D4BE65DB04C8A1FA275834B65CC6 /* Release */, + 6A21000D891B539A14A4996B40A22982 /* Debug */, + C5BDCD80172270E50D2AC34FF1B7A672 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6A2E2B4A26E7D85E10F26014EC47FD70 /* Build configuration list for PBXNativeTarget "TDOAuth" */ = { + 967D18D07FE64187100F3B94887CD56E /* Build configuration list for PBXNativeTarget "Reachability" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5CA25B3709377015ED6809CE28EDB244 /* Debug */, - 11E90A42B5A1E6D06ACCE2370379C55E /* Release */, + 5140E2B1B0A06937E4CC9D61755C0CF5 /* Debug */, + 8534BEB5C513A9FAFB8611E9FF36831B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6B2C6A03A372EE8EADCBDF9F481E8845 /* Build configuration list for PBXNativeTarget "FLEX" */ = { + 98014B570AEBC730EAF55351AD3DC6CA /* Build configuration list for PBXNativeTarget "REMenu" */ = { isa = XCConfigurationList; buildConfigurations = ( - 21D2B2FE501488D0D7D6A5D26202807D /* Debug */, - CB7E381150D2E05BA04BEA749E810758 /* Release */, + 07163977F3F445322D686B6C67175496 /* Debug */, + B6A2675EEE82A5C4E7F50D2C2679505C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6B8942A1597BAF2500DB09E3E2AC4905 /* Build configuration list for PBXNativeTarget "SZTextView" */ = { + 988432AF8D4A33DD5623507EB911DAAB /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */ = { isa = XCConfigurationList; buildConfigurations = ( - 109856EBA9F4725B10C766054E983DCE /* Debug */, - C1DF77DCA48793273C7E8CC3ECD377FB /* Release */, + 112B3B58CEAE8F51EBFF4744B88D2F4A /* Debug */, + 420F76A089E229EF63A2E0BA25D4E393 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7D9B5935E0D878B5E0B4AADB8DDDD598 /* Build configuration list for PBXNativeTarget "SWTableViewCell" */ = { + 9C0229B8CBE37997B0BCDDCBA18EFAFF /* Build configuration list for PBXNativeTarget "RMDateSelectionViewController" */ = { isa = XCConfigurationList; buildConfigurations = ( - 412CB780599B4BF3E7CB9B39BE532C2E /* Debug */, - 215ACDEA1A07349CB3CFD4227A7AAC42 /* Release */, + F3BB16A4BB8E232AE39C520223E0AC75 /* Debug */, + C23312D3D86313ACD343EE640412098D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85ADBB4B0AAB212B2635668CC5E42435 /* Build configuration list for PBXNativeTarget "HMSegmentedControl" */ = { + A55FCF8F2E33243F12DFAB18B9F155A6 /* Build configuration list for PBXNativeTarget "SCSiriWaveformView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 32D77886F0456470D02AE8D245CD5C16 /* Debug */, - E1A27A99F18E41CAC714A67C8F5A42DE /* Release */, + 94D9FB25943DA42507ABAA1AE74E5699 /* Debug */, + A96ECE0C59F305D46EBA5406D4E3FE73 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85E17298FBB84E24669E67B839676FE2 /* Build configuration list for PBXNativeTarget "TWMessageBarManager" */ = { + ABA5B10C19842255EEDA4FBE22D94B5F /* Build configuration list for PBXNativeTarget "NSGIF" */ = { isa = XCConfigurationList; buildConfigurations = ( - E43FC021A645546A1C7201A5D71694BA /* Debug */, - D973CB6D59CD25096343A15D8EF455D8 /* Release */, + 1A2FCAD9161A66D8F88E2472EEB886D6 /* Debug */, + DA8E0D146008F3B7E59BB4DF312C519A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8698BFF97EC90271CABA5150CB08475F /* Build configuration list for PBXNativeTarget "DHSmartScreenshot" */ = { + AC963C14B45796E6FD689476CA989C8E /* Build configuration list for PBXNativeTarget "APAddressBook" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6B1B3286700EDFCA74C483867C9CD503 /* Debug */, - E7463809EB975304BABA6FD3CD15F10F /* Release */, + 961B502D5BE13909058EE1A881881D7C /* Debug */, + D0ECB79A1DEB508EEDCD8EE832B3BF08 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 893642D84FD276043BCE56682CDC839C /* Build configuration list for PBXNativeTarget "NSGIF" */ = { + AF5E5A48B34550F8F14832E312FC5D46 /* Build configuration list for PBXNativeTarget "NSHash" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0081A56B9AF981B509805ECF131D5408 /* Debug */, - 0F37E28A67A4D769AC275897EE93C996 /* Release */, + B40811642FA5976E251793B131DF2C2C /* Debug */, + 88AF3235CA85B1D73C72C2E0546A8732 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8B91DC036CB0FAE950422619B90FC1F9 /* Build configuration list for PBXNativeTarget "NSHash" */ = { + B521FD8BB22156CBDD2753426FDE7278 /* Build configuration list for PBXNativeTarget "DTCoreText" */ = { isa = XCConfigurationList; buildConfigurations = ( - EE4E3A4EDEC09ABFBA481A5EE3DC8CB3 /* Debug */, - D1AF99AE710E267F273F0E9649B57C60 /* Release */, + D45DA006F8799229DF3DB60292E027A3 /* Debug */, + 153059790EE111F808F8FACD2515FD39 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 903E8FCE467310084C557E94245DB1D1 /* Build configuration list for PBXNativeTarget "RMActionController" */ = { + B53698507ED0ADE637053680CF534324 /* Build configuration list for PBXNativeTarget "SWTableViewCell" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6B569D33CFF1FEEE6785A396B90C8090 /* Debug */, - A611E651993741DA55FF052DB343F6CF /* Release */, + C9911D42F5A5A1FE0D622098EB1D3AC4 /* Debug */, + CC4BB59D9682FB94A1ECA59E5F44BCC0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9E569A7D7023EAE2BFD009E72DFC71F8 /* Build configuration list for PBXNativeTarget "UICKeyChainStore" */ = { + B87626BECA2E12A4D862293B73044027 /* Build configuration list for PBXNativeTarget "INTULocationManager" */ = { isa = XCConfigurationList; buildConfigurations = ( - CB96D22AA0B82A3EB4D63F2D8BE40B1F /* Debug */, - F7C6091F771CBA5D5F57C675BD345B43 /* Release */, + 4C7474600A979CCAEF2B812CD6F32A46 /* Debug */, + 4DAA906A0FCDAE18E0480B8E80E886ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AF2444225452756FBA9C5A7F34943E2D /* Build configuration list for PBXNativeTarget "APAddressBook" */ = { + BEB72DB9A60947AE021B690419453511 /* Build configuration list for PBXNativeTarget "FreeStreamer" */ = { isa = XCConfigurationList; buildConfigurations = ( - 0AA0A9108E9BB29D5B611D96909D84BD /* Debug */, - 816F928FAB418765A78233533AB56589 /* Release */, + 4B2DD348904D2DF6389E920C587B28D8 /* Debug */, + C81BE1F3E7BED7D62A67877C8CCFB0AC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B0B687EDDCCE0A59D6462A22E037201A /* Build configuration list for PBXNativeTarget "JSCoreBom" */ = { + C02417645DD8D2ADC5C18E5D65150FE7 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3F7B801714F8F3FDDB8CCA6DCBFA74A2 /* Debug */, - 4C721F70578231D122524A1CDF3ADB25 /* Release */, + 21F70F5738CB08471DC1DCB28598E143 /* Debug */, + 5140C232E30B4DAAED22847D051BBAB4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B5BCB1C0B3531D9245B141005CB7D743 /* Build configuration list for PBXNativeTarget "DTCoreText-Resources" */ = { + D4EDBAA25AE9AD7569319F915C2CBF2C /* Build configuration list for PBXNativeTarget "TWMessageBarManager" */ = { isa = XCConfigurationList; buildConfigurations = ( - 663464A02C0AE04DFF8650BFF80E9ABA /* Debug */, - 206F55BDB8F42E859A8632954E5C13D1 /* Release */, + CF6397D3710F54FB7FC7E1056F19875C /* Debug */, + 87DA6FD5F31DF624C0E3D569D4AFB586 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C6E1EF047D6D3337958F436EDA045AE7 /* Build configuration list for PBXNativeTarget "PHFComposeBarView" */ = { + D703F9F1DD55F08F00F8F8EF3E06072B /* Build configuration list for PBXNativeTarget "RMActionController" */ = { isa = XCConfigurationList; buildConfigurations = ( - 028E9766D10B7586BDC641D43A16F3C9 /* Debug */, - D29CE9AE9DB9F992FCE3BB2C2FB0C117 /* Release */, + 3BD15F83D653E4982A6550A951B206F5 /* Debug */, + 55923E254F7B6726568E60B6CF1C91E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C9E9A932F036A45513797E60692A31EA /* Build configuration list for PBXNativeTarget "RMDateSelectionViewController" */ = { + DB62BDD98FE07D315AAC325D8DFC8B0D /* Build configuration list for PBXNativeTarget "SZTextView" */ = { isa = XCConfigurationList; buildConfigurations = ( - E1E83D42E128DA879E787E5D0741AE2D /* Debug */, - 1DD2A9A29FC0B1519E32AB560E65562C /* Release */, + A4B2D2E9158427BA4EF044D9BBEB0517 /* Debug */, + 738E0155FB36198B4CE66D71B4A63DE2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CD36BF5AC5B2EEBABCCD5DB361090C1F /* Build configuration list for PBXNativeTarget "BBBadgeBarButtonItem" */ = { + E5CFCB3D533D8C4D4DFB30DAD1BDD93D /* Build configuration list for PBXNativeTarget "SWFrameButton" */ = { isa = XCConfigurationList; buildConfigurations = ( - 56C72D6C5B1BCC41C815B789BEA716A0 /* Debug */, - C8E3213996BF88154F895DCF4DC8ABB4 /* Release */, + A61751DEADE104FEEB6E2D1CF4A987EF /* Debug */, + 23291E5CD2309A2A6870A06C6895D270 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CDEF3A9B1DEBE102C09A66D5E1E25287 /* Build configuration list for PBXNativeTarget "INTULocationManager" */ = { + E77162C5311DA2B232589278827059AB /* Build configuration list for PBXNativeTarget "JSCoreBom" */ = { isa = XCConfigurationList; buildConfigurations = ( - F429F6E067F0A095C46B761443C7D375 /* Debug */, - 30D0B34A4DACE03E067371E9C131E922 /* Release */, + 7820867DF22DE7797B06B39CF4EBCCAC /* Debug */, + 0A8AFFFBBCDCBF00AD4904A9619CC2B9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D2F3D88AFC9300917E17B1E4C1F72C9E /* Build configuration list for PBXNativeTarget "OMGHTTPURLRQ" */ = { + EC78EAEEE7EC15DA36344AD3966945E5 /* Build configuration list for PBXNativeTarget "AHKActionSheet" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9983C267ABAC50081914E8D7C0913BA0 /* Debug */, - DE73D9C3FE70FC63B736A88C35DA7786 /* Release */, + 4460989AF16DC06AD74AFA3E2D41D56E /* Debug */, + 03DA2332C6EB05BE50BCD3935EA6B4C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E5A1994B415CB28F736787F2C8134320 /* Build configuration list for PBXNativeTarget "DTFoundation" */ = { + F096D0E933E2DB8486A319E0B22A50C2 /* Build configuration list for PBXNativeTarget "SBJson" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6D6AA66866C077A0555A0F30A1D7D89F /* Debug */, - 6EEAFCC6D0B6843B116EC2F5CEA45D57 /* Release */, + D34532F8590B49CF690168282FCBD550 /* Debug */, + 7F16DB6BB2DF2B466A3FB67C44FF5BAA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E71993FDFBA445C6298B0E41C794327F /* Build configuration list for PBXNativeTarget "JDStatusBarNotification" */ = { + F9207389B4B7BDDB7AB1FA9461384777 /* Build configuration list for PBXNativeTarget "HMSegmentedControl" */ = { isa = XCConfigurationList; buildConfigurations = ( - F7BDF8FA0208C5F42748710D31F0BB5B /* Debug */, - 0D984333C0427A78F29FE1514EF3B4EF /* Release */, + 518DBEBC097E63198FEC6375EE88D399 /* Debug */, + 4778D167540371FB4CD0957A41BC9F24 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/xcode/Pods/RMActionController/LICENSE b/xcode/Pods/RMActionController/LICENSE index 326baf25..1ef07495 100644 --- a/xcode/Pods/RMActionController/LICENSE +++ b/xcode/Pods/RMActionController/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Roland Moers +Copyright (c) 2015-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/xcode/Pods/RMActionController/README.md b/xcode/Pods/RMActionController/README.md index 68c8eeb8..5b8d142c 100644 --- a/xcode/Pods/RMActionController/README.md +++ b/xcode/Pods/RMActionController/README.md @@ -1,105 +1,100 @@ -# RMActionViewController ![Build Status](https://travis-ci.org/CooperRS/RMActionController.svg?branch=master) -This is an iOS control for presenting any UIView in an UIActionSheet/UIAlertController like manner. +RMActionController [![Build Status](https://travis-ci.org/CooperRS/RMActionController.svg?branch=master)](https://travis-ci.org/CooperRS/RMActionController/) [![Pod Version](https://img.shields.io/cocoapods/v/RMActionController.svg)](https://cocoapods.org/pods/RMActionController) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +==================== + +This framework allows you to present just any view as an action sheet. In addition, it allows you to add actions arround the presented view which behave like a button and can be tapped by the user. The result looks very much like an `UIActionSheet` or `UIAlertController` with a special `UIView` and some `UIActions` attached. + +`RMActionController` also contains two special actions (`RMImageAction` and `RMScrollableGroupedAction`) which allow to build a share sheet which looks very much like the `UIActivityViewController`. In addition, `RMActionController` can be configured to look like the new buy sheet which can be found in the iOS 11 App Store. ## Screenshots -### Portrait -![Portrait](http://cooperrs.github.io/RMActionController/Images/Blur-Screen-Portrait.png) + +### White + +| Custom View | Image Actions | Map | Sheet | +|:-----------:|:-------------:|:---:|:-----:| +|![Custom](http://cooperrs.github.io/RMActionController/Images/Custom-White.png)|![Image](http://cooperrs.github.io/RMActionController/Images/Image-White.png)|![Map](http://cooperrs.github.io/RMActionController/Images/Map-White.png)|![Sheet](http://cooperrs.github.io/RMActionController/Images/Sheet-White.png) + +### Black + +| Custom View | Image Actions | Map | Sheet | +|:-----------:|:-------------:|:---:|:-----:| +|![Custom](http://cooperrs.github.io/RMActionController/Images/Custom-Black.png)|![Image](http://cooperrs.github.io/RMActionController/Images/Image-Black.png)|![Map](http://cooperrs.github.io/RMActionController/Images/Map-Black.png)|![Sheet](http://cooperrs.github.io/RMActionController/Images/Sheet-Black.png) ### Landscape -![Landscape](http://cooperrs.github.com/RMActionController/Images/Blur-Screen-Landscape.png) -### Black version -![Colors](http://cooperrs.github.io/RMActionController/Images/Blur-Screen-Portrait-Black.png) +`RMActionController` supports automatic rotation between portrait and landscape. ## Installation (CocoaPods) ```ruby platform :ios, '8.0' -pod "RMActionController", "~> 1.0.4" +pod "RMActionController", "~> 1.3.1" ``` ## Usage -### Basic - -The default RMActionController does not contain any content view. This means presenting an RMActionController only presents a set of buttons added to the RMActionController. For this task an UIAlertController can be used. +For a detailed description on how to use `RMActionController` take a look at the [Wiki Pages](https://github.com/CooperRS/RMActionController/wiki). The following four steps are a very short intro: -To add a content view RMActionController usually is subclassed. This project contains two subclasses of RMActionController (RMCustomViewActionController and RMMapActionController) which give two examples for a subclass of RMActionController. +* Create your own subclass of `RMActionController`. Let's create one for presenting a map and let's call it `RMMapActionController`: -#### Subclassing +```objc +@interface RMMapActionController : RMActionController +@end +``` -When subclassing RMActionController you only have to overwrite one method. This method is called `actionControllerWithStyle:title:message:selectAction:andCancelAction:`. +* In this subclass overwrite the initializer to add your own content view (for example to add a map as content view): ```objc -+ (instancetype)actionControllerWithStyle:(RMActionControllerStyle)style title:(NSString *)aTitle message:(NSString *)aMessage selectAction:(RMAction *)selectAction andCancelAction:(RMAction *)cancelAction { - //Create an instance of your RMActionController subclass - RMMapActionController *controller = [super actionControllerWithStyle:style title:aTitle message:aMessage selectAction:selectAction andCancelAction:cancelAction]; - - controller.contentView = [[MKMapView alloc] initWithFrame:CGRectZero]; - controller.contentView.translatesAutoresizingMaskIntoConstraints = NO; - controller.contentView.accessibilityLabel = @"MapView"; - - NSDictionary *bindings = @{@"contentView": controller.contentView}; - [controller.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[contentView(200)]" options:0 metrics:nil views:bindings]]; - - return controller; +@implementation RMMapActionController + +- (instancetype)initWithStyle:(RMActionControllerStyle)aStyle title:(NSString *)aTitle message:(NSString *)aMessage selectAction:(RMAction *)selectAction andCancelAction:(RMAction *)cancelAction { + self = [super initWithStyle:aStyle title:aTitle message:aMessage selectAction:selectAction andCancelAction:cancelAction]; + if(self) { + self.contentView = [[MKMapView alloc] initWithFrame:CGRectZero]; + self.contentView.translatesAutoresizingMaskIntoConstraints = NO; + + NSDictionary *bindings = @{@"mapView": self.contentView}; + [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[mapView(>=300)]" options:0 metrics:nil views:bindings]]; + [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[mapView(200)]" options:0 metrics:nil views:bindings]]; + } + return self; } -``` -#### Presenting +@end +``` -Presenting any RMActionController works by using standard Apple API. +* Present your custom `RMActionController`: ```objc - (IBAction)openActionController:(id)sender { - //Create select action - RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { - NSLog(@"Action controller finished successfully"); + RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { + NSLog(@"Action controller selected location: %f, %f", controller.contentView.centerCoordinate.latitude, controller.contentView.centerCoordinate.longitude); }]; - - //Create cancel action - RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { + + RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { NSLog(@"Action controller was canceled"); }]; - - //Create action controller and (optionally) set title and message - RMMapActionController *actionController = [RMMapActionController actionControllerWithStyle:RMActionControllerStyleWhite selectAction:selectAction andCancelAction:cancelAction]; - actionController.title = @"Test"; - actionController.message = @"This is a test action controller.\nPlease tap 'Select' or 'Cancel'."; - //Now just present the date selection controller using the standard iOS presentation method + RMMapActionController *actionController = [RMMapActionController actionControllerWithStyle:RMActionControllerStyleWhite title:@"Test" message:@"This is a map action controller.\nPlease select a location and tap 'Select' or 'Cancel'." selectAction:selectAction andCancelAction:cancelAction]; + + //Now just present the action controller using the standard iOS presentation method [self presentViewController:actionController animated:YES completion:nil]; } ``` -### Advanced - -#### Presentation Style -You can use the property `modalPresentationStyle` to control how the action controller is shown. By default, it is set to `UIModalPresentationOverCurrentContext`. But on the iPad you could use `UIModalPresentationPopover` to present the action controller within a popover. See the following example on how this works: +* In case you really want to present a map you may want to disable blur effects for the map (as otherwise it will show as black): ```objc -- (IBAction)openActionController:(id)sender { - //Create select and cancel action - ... - - RMMapActionController *actionController = [RMMapActionController actionControllerWithStyle:RMActionControllerStyleWhite selectAction:selectAction andCancelAction:cancelAction]; - - //On the iPad we want to show the date selection view controller within a popover. - if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { - //First we set the modal presentation style to the popover style - actionController.modalPresentationStyle = UIModalPresentationPopover; - - //Then we tell the popover presentation controller, where the popover should appear - actionController.popoverPresentationController.sourceView = self.view; - actionController.popoverPresentationController.sourceRect = CGRectMake(...); - } +@implementation RMMapActionController - //Now just present the date selection controller using the standard iOS presentation method - [self presentViewController:actionController animated:YES completion:nil]; +- (BOOL)disableBlurEffectsForContentView { + return YES; } + +@end ``` -#### Others -Finially, RMActionController can be used in both your main application and an action extension showing UI. +## Migration + +See [Migration](https://github.com/CooperRS/RMActionController/wiki/Migration) on how to migrate to the latest version of RMActionController. ## Documentation There is an additional documentation available provided by the CocoaPods team. Take a look at [cocoadocs.org](http://cocoadocs.org/docsets/RMActionController/). @@ -108,8 +103,8 @@ There is an additional documentation available provided by the CocoaPods team. T | Compile Time | Runtime | | :------------ | :------------ | -| Xcode 6 | iOS 8 | -| iOS 8 SDK | | +| Xcode 9 | iOS 8 | +| iOS 11 SDK | | | ARC | | Note: ARC can be turned on and off on a per file basis. @@ -119,7 +114,7 @@ Using this control in your app or know anyone who does? Feel free to add the app to this list: [Apps using RMActionController](https://github.com/CooperRS/RMActionController/wiki/Apps-using-RMActionController) -##Credits +## Credits * Hannes Tribus (Bugfixes) * normKei (Destructive button type) @@ -127,7 +122,9 @@ Feel free to add the app to this list: [Apps using RMActionController](https://g I want to thank everyone who has contributed code and/or time to this project! ## License (MIT License) -Copyright (c) 2015 Roland Moers + +``` +Copyright (c) 2015-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -146,3 +143,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.h b/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.h new file mode 100644 index 00000000..232b7bcb --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.h @@ -0,0 +1,117 @@ +// +// RMAction.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import + +@class RMActionController; + +/** + * RMActionStyle is used to determine the display style of RMAction and where it is positioned. There are 4 styles available: Done, cancel, additional and the default style, which is the done style. + */ +typedef NS_ENUM(NSInteger, RMActionStyle) { + /** The button is displayed with a regular font and positioned right below the content view. */ + RMActionStyleDone, + /** The button is displayed with a bold font and positioned below all done buttons (or the content view if there are no done buttons). */ + RMActionStyleCancel, + /** The button is displayed with a standard destructive and positioned right below the content view. Currently only supported when blur effects are disabled.*/ + RMActionStyleDestructive, + /** The button is displayed with a regular font and positioned above the content view. */ + RMActionStyleAdditional, + /** The button is displayed and positioned like a done button. */ + RMActionStyleDefault = RMActionStyleDone +}; + +/** + * A RMAction instance represents an action that can be tapped by the use when a RMActionController is presented. It has a title or image for identifying the action and a handler which is calledwhen the action has been tapped by the user. + * + * If both title and image are given, the title is displayed. + */ +@interface RMAction : NSObject + +/// @name Getting an Instance +#pragma mark - Getting an Instance + +/** + * Returns a new instance of RMAction with the given properties set. + * + * @param title The title of the action. + * @param style The style of the action. + * @param handler A block that is called when the action has been tapped. + * + * @return The new instance of RMAction. + */ ++ (nullable instancetype)actionWithTitle:(nonnull NSString *)title style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull controller))handler; + +/** + * Returns a new instance of RMAction with the given properties set. + * + * @param image The image of the action. + * @param style The style of the action. + * @param handler A block that is called when the action has been tapped. + * + * @return The new instance of RMAction. + */ ++ (nullable instancetype)actionWithImage:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull controller))handler; + +/** + * Returns a new instance of RMAction with the given properties set. + * + * @param title The title of the action. + * @param image The image of the action. + * @param style The style of the action. + * @param handler A block that is called when the action has been tapped. + * + * @return The new instance of RMAction. + */ ++ (nullable instancetype)actionWithTitle:(nonnull NSString *)title image:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull controller))handler; + +/// @name Properties +#pragma mark - Properties + +/** + * The controller your action is added to. + */ +@property (nullable, nonatomic, weak, readonly) RMActionController *controller; + +/** + * The title of the action. + */ +@property (nullable, nonatomic, readonly) NSString *title; + +/** + * The image of the action. + */ +@property (nullable, nonatomic, readonly) UIImage *image; + +/** + * The style of the action. + */ +@property (nonatomic, readonly) RMActionStyle style; + +/** + * Control whether or not the RMActionController to whom the RMAction has been added is dismissed when the RMAction has been tapped. + */ +@property (nonatomic, assign) BOOL dismissesActionController; + +/** + * Gives you access to the actual view of the RMAction. + */ +@property (nonnull, nonatomic, readonly) UIView *view; + +/** + * Called when the RMAction is expected to load it's view. In subclasses return your custom content view here. Do not call manually. + */ +- (nonnull UIView *)loadView; + +/** + * Call this method when you want to indicate, that this action has been tapped by the user. For example, this method can be used as the selector for an UIButton. + */ +- (void)actionTapped:(nullable id)sender; + +@end + diff --git a/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.m b/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.m new file mode 100644 index 00000000..8d2baa67 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Actions/RMAction.m @@ -0,0 +1,162 @@ +// +// RMAction.m +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMAction+Private.h" + +#import "RMActionController+Private.h" +#import "NSProcessInfo+RMActionController.h" + +@interface RMAction () + +@property (nonatomic, strong, readwrite) UIView *view; + +@property (nonatomic, strong, readwrite) NSString *title; +@property (nonatomic, strong, readwrite) UIImage *image; + +@end + +@implementation RMAction + +#pragma mark - Class ++ (instancetype)actionWithTitle:(NSString *)title style:(RMActionStyle)style andHandler:(void (^)(RMActionController * _Nonnull))handler { + RMAction *action = [[self class] actionWithStyle:style andHandler:handler]; + action.title = title; + + return action; +} + ++ (instancetype)actionWithImage:(UIImage *)image style:(RMActionStyle)style andHandler:(void (^)(RMActionController * _Nonnull controller))handler { + RMAction *action = [[self class] actionWithStyle:style andHandler:handler]; + action.image = image; + + return action; +} + ++ (instancetype)actionWithTitle:(NSString *)title image:(UIImage *)image style:(RMActionStyle)style andHandler:(void (^)(RMActionController * _Nonnull controller))handler { + RMAction *action = [[self class] actionWithStyle:style andHandler:handler]; + action.title = title; + action.image = image; + + return action; +} + ++ (instancetype)actionWithStyle:(RMActionStyle)style andHandler:(void (^)(RMActionController *controller))handler { + RMAction *action = [[[self class] alloc] init]; + action.style = style; + + __weak RMAction *weakAction = action; + [action setHandler:^(RMActionController *controller) { + if(handler) { + handler(controller); + } + + if(weakAction.dismissesActionController) { + if(controller.modalPresentationStyle == UIModalPresentationPopover || controller.yConstraint != nil) { + [controller dismissViewControllerAnimated:YES completion:nil]; + } else { + [controller dismissViewControllerAnimated:NO completion:nil]; + } + } + }]; + + return action; +} + +#pragma mark - Init and Dealloc +- (instancetype)init { + self = [super init]; + if(self) { + self.dismissesActionController = YES; + } + return self; +} + +#pragma mark - Cancel Helper +- (BOOL)containsCancelAction { + return self.style == RMActionStyleCancel; +} + +- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller { + if(self.style == RMActionStyleCancel) { + self.handler(controller); + } +} + +#pragma mark - Other Helper +- (UIImage *)imageWithColor:(UIColor *)color { + CGRect rect = CGRectMake(0, 0, 1, 1); + + UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); + [color setFill]; + UIRectFill(rect); + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +#pragma mark - View +- (UIView *)view { + if(!_view) { + _view = [self loadView]; + _view.translatesAutoresizingMaskIntoConstraints = NO; + } + + return _view; +} + +- (UIView *)loadView { + UIButtonType buttonType = UIButtonTypeCustom; + if(self.controller.disableBlurEffectsForActions) { + buttonType = UIButtonTypeSystem; + } + + UIButton *actionButton = [UIButton buttonWithType:buttonType]; + [actionButton addTarget:self action:@selector(actionTapped:) forControlEvents:UIControlEventTouchUpInside]; + + if(self.style == RMActionStyleCancel) { + actionButton.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont buttonFontSize]]; + } else { + actionButton.titleLabel.font = [UIFont systemFontOfSize:[UIFont buttonFontSize]]; + } + + if(!self.controller.disableBlurEffectsForActions) { + [actionButton setBackgroundImage:[self imageWithColor:[[UIColor whiteColor] colorWithAlphaComponent:0.3]] forState:UIControlStateHighlighted]; + } else { + switch (self.controller.style) { + case RMActionControllerStyleWhite: + case RMActionControllerStyleSheetWhite: + [actionButton setBackgroundImage:[self imageWithColor:[UIColor colorWithWhite:0.2 alpha:1]] forState:UIControlStateHighlighted]; + break; + case RMActionControllerStyleBlack: + case RMActionControllerStyleSheetBlack: + [actionButton setBackgroundImage:[self imageWithColor:[UIColor colorWithWhite:0.8 alpha:1]] forState:UIControlStateHighlighted]; + break; + } + } + + if(self.title) { + [actionButton setTitle:self.title forState:UIControlStateNormal]; + } else if(self.image) { + [actionButton setImage:self.image forState:UIControlStateNormal]; + } + + [actionButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[actionButton(height)]" options:0 metrics:@{@"height": @([NSProcessInfo runningAtLeastiOS9] ? 55 : 44)} views:NSDictionaryOfVariableBindings(actionButton)]]; + + if(self.style == RMActionStyleDestructive) { + [actionButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; + } + + return actionButton; +} + +- (void)actionTapped:(id)sender { + self.handler(self.controller); +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.h b/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.h new file mode 100644 index 00000000..b6979390 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.h @@ -0,0 +1,18 @@ +// +// RMImageAction.h +// RMImageAction-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMAction.h" + +/** + * Like RMAction, RMImageAction represents an action that can be tapped by the use when a RMActionController is presented. + * + * In contrast to RMAction, it show an image with a title below the image (very much like the Apple share sheet). + */ +@interface RMImageAction : RMAction + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.m b/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.m new file mode 100644 index 00000000..28eba535 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Actions/RMImageAction.m @@ -0,0 +1,57 @@ +// +// RMImageAction.m +// RMImageAction-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMImageAction.h" + +#import "RMActionController.h" + +@interface RMImageAction () + +@end + +@implementation RMImageAction + +#pragma mark - View +- (UIView *)loadView { + UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero]; + imageView.translatesAutoresizingMaskIntoConstraints = NO; + imageView.userInteractionEnabled = NO; + imageView.image = self.image; + + UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + titleLabel.userInteractionEnabled = NO; + titleLabel.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; + titleLabel.text = self.title; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + + UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; + button.translatesAutoresizingMaskIntoConstraints = NO; + [button addTarget:self action:@selector(actionTapped:) forControlEvents:UIControlEventTouchUpInside]; + + UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; + [view addSubview:button]; + [view addSubview:imageView]; + [view addSubview:titleLabel]; + + [view addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; + [view addConstraint:[NSLayoutConstraint constraintWithItem:titleLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; + + NSDictionary *bindings = NSDictionaryOfVariableBindings(view, button, imageView, titleLabel); + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(10)-[imageView]-(10)-[titleLabel]-(10)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=10)-[imageView]-(>=10)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=10)-[titleLabel]-(>=10)-|" options:0 metrics:nil views:bindings]]; + + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[button]-(0)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[button]-(0)-|" options:0 metrics:nil views:bindings]]; + + return view; +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.h b/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.h new file mode 100644 index 00000000..101a8893 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.h @@ -0,0 +1,20 @@ +// +// RMActionControllerTransition.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, RMActionControllerTransitionStyle) { + RMActionControllerTransitionStylePresenting, + RMActionControllerTransitionStyleDismissing +}; + +@interface RMActionControllerTransition : NSObject + +@property (nonatomic, assign) RMActionControllerTransitionStyle animationStyle; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.m b/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.m new file mode 100644 index 00000000..0f1e914d --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Animations/RMActionControllerTransition.m @@ -0,0 +1,109 @@ +// +// RMActionControllerTransition.m +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMActionControllerTransition.h" + +#import "RMActionController+Private.h" + +@implementation RMActionControllerTransition + +- (NSTimeInterval)transitionDuration:(id)transitionContext { + if(self.animationStyle == RMActionControllerTransitionStylePresenting) { + UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; + if([toVC isKindOfClass:[RMActionController class]]) { + RMActionController *actionController = (RMActionController *)toVC; + + if(actionController.disableBouncingEffects) { + return 0.3f; + } else { + return 1.0f; + } + } + } else if(self.animationStyle == RMActionControllerTransitionStyleDismissing) { + return 0.3f; + } + + return 1.0f; +} + +- (void)animateTransition:(id)transitionContext { + UIView *containerView = [transitionContext containerView]; + + if(self.animationStyle == RMActionControllerTransitionStylePresenting) { + UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; + if([toVC isKindOfClass:[RMActionController class]]) { + RMActionController *actionController = (RMActionController *)toVC; + + [actionController setupTopContainersTopMarginConstraint]; + + actionController.backgroundView.alpha = 0; + [containerView addSubview:actionController.backgroundView]; + [containerView addSubview:actionController.view]; + + NSDictionary *bindingsDict = @{@"BGView": actionController.backgroundView}; + + [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:bindingsDict]]; + [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:bindingsDict]]; + + [containerView addConstraint:[NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; + [containerView addConstraint:[NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; + + actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + [containerView addConstraint:actionController.yConstraint]; + + [containerView setNeedsUpdateConstraints]; + [containerView layoutIfNeeded]; + + [containerView removeConstraint:actionController.yConstraint]; + actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + [containerView addConstraint:actionController.yConstraint]; + + [containerView setNeedsUpdateConstraints]; + + CGFloat damping = 1.0f; + CGFloat duration = 0.3f; + if(!actionController.disableBouncingEffects) { + damping = 0.6f; + duration = 1.0f; + } + + [UIView animateWithDuration:duration delay:0 usingSpringWithDamping:damping initialSpringVelocity:1 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^{ + actionController.backgroundView.alpha = 1; + + [containerView layoutIfNeeded]; + } completion:^(BOOL finished) { + [transitionContext completeTransition:YES]; + }]; + } + } else if(self.animationStyle == RMActionControllerTransitionStyleDismissing) { + UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; + if([fromVC isKindOfClass:[RMActionController class]]) { + RMActionController *actionController = (RMActionController *)fromVC; + + [containerView removeConstraint:actionController.yConstraint]; + actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + [containerView addConstraint:actionController.yConstraint]; + + [containerView setNeedsUpdateConstraints]; + + [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ + actionController.backgroundView.alpha = 0; + + [containerView layoutIfNeeded]; + } completion:^(BOOL finished) { + [actionController.view removeFromSuperview]; + [actionController.backgroundView removeFromSuperview]; + + actionController.hasBeenDismissed = NO; + [transitionContext completeTransition:YES]; + }]; + } + } +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.h b/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.h new file mode 100644 index 00000000..6f23608d --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.h @@ -0,0 +1,15 @@ +// +// NSProcessInfo+RMActionController.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import + +@interface NSProcessInfo (RMActionController) + ++ (BOOL)runningAtLeastiOS9; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.m b/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.m new file mode 100644 index 00000000..04b56e95 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Categories/NSProcessInfo+RMActionController.m @@ -0,0 +1,17 @@ +// +// NSProcessInfo+RMActionController.m +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "NSProcessInfo+RMActionController.h" + +@implementation NSProcessInfo (RMActionController) + ++ (BOOL)runningAtLeastiOS9 { + return [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){9, 0, 0}]; +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.h b/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.h new file mode 100644 index 00000000..cad5561a --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.h @@ -0,0 +1,15 @@ +// +// UIView+RMActionController.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import + +@interface UIView (RMActionController) + ++ (UIView *)seperatorView; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.m b/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.m new file mode 100644 index 00000000..d12f3cf2 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Categories/UIView+RMActionController.m @@ -0,0 +1,21 @@ +// +// UIView+RMActionController.m +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "UIView+RMActionController.h" + +@implementation UIView (RMActionController) + ++ (UIView *)seperatorView { + UIView *seperatorView = [[UIView alloc] initWithFrame:CGRectZero]; + seperatorView.backgroundColor = [UIColor grayColor]; + seperatorView.translatesAutoresizingMaskIntoConstraints = NO; + + return seperatorView; +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.h b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.h new file mode 100644 index 00000000..4388a73b --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.h @@ -0,0 +1,36 @@ +// +// RMGroupedAction.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMAction.h" + +/** + * A RMGroupedAction instance represents a number of actions that can be grouped. + * + * Normally, a RMActionController uses one row for every action that has been added. RMGroupedActions offers the possibility to show multiple RMActions in one row. + */ +@interface RMGroupedAction : RMAction + +/// @name Getting an Instance +#pragma mark - Getting an Instance + +/** + * Returns a new instance of RMGroupedAction. + * + * @param style The style of the action. + * @param actions The actions that are contained in the grouped action. + * + * @return The new instance of RMGroupedAction + */ ++ (nullable instancetype)actionWithStyle:(RMActionStyle)style andActions:(nonnull NSArray *> *)actions; + +/** + * An array of actions the RMGroupedAction consists of. + */ +@property (nonnull, nonatomic, strong, readonly) NSArray *> *actions; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.m b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.m new file mode 100644 index 00000000..8063f718 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMGroupedAction.m @@ -0,0 +1,128 @@ +// +// RMGroupedAction.m +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMGroupedAction.h" + +#import "RMAction+Private.h" +#import "UIView+RMActionController.h" + +@interface RMGroupedAction () + +@property (nonatomic, strong, readwrite) NSArray *actions; + +@end + +@implementation RMGroupedAction + +#pragma mark - Class ++ (nullable instancetype)actionWithTitle:(nonnull NSString *)title style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull))handler { + [NSException raise:@"RMIllegalCallException" format:@"Tried to initialize a grouped action with +[%@ %@]. Please use +[%@ %@] instead.", NSStringFromClass(self), NSStringFromSelector(_cmd), NSStringFromClass(self), NSStringFromSelector(@selector(actionWithStyle:andActions:))]; + return nil; +} + ++ (nullable instancetype)actionWithImage:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull))handler { + [NSException raise:@"RMIllegalCallException" format:@"Tried to initialize a grouped action with +[%@ %@]. Please use +[%@ %@] instead.", NSStringFromClass(self), NSStringFromSelector(_cmd), NSStringFromClass(self), NSStringFromSelector(@selector(actionWithStyle:andActions:))]; + return nil; +} + ++ (instancetype)actionWithTitle:(NSString *)title image:(UIImage *)image style:(RMActionStyle)style andHandler:(void (^)(RMActionController * _Nonnull))handler { + [NSException raise:@"RMIllegalCallException" format:@"Tried to initialize a grouped action with +[%@ %@]. Please use +[%@ %@] instead.", NSStringFromClass(self), NSStringFromSelector(_cmd), NSStringFromClass(self), NSStringFromSelector(@selector(actionWithStyle:andActions:))]; + return nil; +} + ++ (nullable instancetype)actionWithStyle:(RMActionStyle)style andActions:(nonnull NSArray *> *)actions { + NSAssert([actions count] > 0, @"Tried to initialize RMGroupedAction with less than one action."); + NSAssert([actions count] > 1, @"Tried to initialize RMGroupedAction with one action. Use RMAction in this case."); + + [actions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + NSAssert([obj isKindOfClass:[RMAction class]], @"Tried to initialize RMGroupedAction with objects of types other than RMAction."); + }]; + + RMGroupedAction *groupedAction = [[[self class] alloc] init]; + groupedAction.style = style; + groupedAction.actions = actions; + + [groupedAction setHandler:^(RMActionController *controller) { + [NSException raise:@"RMInconsistencyException" format:@"The handler of a grouped action has been called."]; + }]; + + return groupedAction; +} + +#pragma mark - Cancel Helper +- (BOOL)containsCancelAction { + for(RMAction *anAction in self.actions) { + if([anAction containsCancelAction]) { + return YES; + } + } + + return NO; +} + +- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller { + for(RMAction *anAction in self.actions) { + if([anAction containsCancelAction]) { + [anAction executeHandlerOfCancelActionWithController:controller]; + return; + } + } +} + +#pragma mark - Properties +- (RMActionController *)controller { + return [[self.actions firstObject] controller]; + +} + +- (void)setController:(RMActionController *)controller { + for(RMAction *anAction in self.actions) { + anAction.controller = controller; + } +} + +#pragma mark - View +- (UIView *)loadView { + UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; + view.translatesAutoresizingMaskIntoConstraints = NO; + view.backgroundColor = [UIColor clearColor]; + + NSDictionary *metrics = @{@"seperatorHeight": @(1.f / [[UIScreen mainScreen] scale])}; + + __block UIView *currentLeft = nil; + [self.actions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { + [action.view setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal]; + [view addSubview:action.view]; + + if(index == 0) { + NSDictionary *bindings = @{@"actionView": action.view}; + + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]" options:0 metrics:nil views:bindings]]; + } else { + UIView *seperatorView = [UIView seperatorView]; + [view addSubview:seperatorView]; + + NSDictionary *bindings = @{@"actionView": action.view, @"seperator": seperatorView, @"currentLeft": currentLeft}; + + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[seperator]-(0)-|" options:0 metrics:nil views:bindings]]; + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft(==actionView)]-(0)-[seperator(seperatorHeight)]-(0)-[actionView(==currentLeft)]" options:0 metrics:metrics views:bindings]]; + } + + currentLeft = action.view; + }]; + + NSDictionary *bindings = @{@"currentLeft": currentLeft}; + + [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft]-(0)-|" options:0 metrics:nil views:bindings]]; + + return view; +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.h b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.h new file mode 100644 index 00000000..5a6f464b --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.h @@ -0,0 +1,29 @@ +// +// RMScrollableGroupedAction.h +// RMImageAction-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMGroupedAction.h" + +/** + * Like RMGroupedActions allows to show multiple RMActions in a row. However, instead to equally divide the available width, RMScrollableGroupedAction uses a fix width for each RMAction and allows the user to scroll when the available width is not sufficient. + * + * When combined with RMImageAction, the result looks very much like the Apple share sheet. + */ +@interface RMScrollableGroupedAction : RMGroupedAction + +/** + * Returns a new instance of RMScrollableGroupedAction. + * + * @param style The style of the action. + * @param actionWidth The width available to each action. + * @param actions The actions that are contained in the grouped action. + * + * @return The new instance of RMScrollableGroupedAction + */ ++ (nullable instancetype)actionWithStyle:(RMActionStyle)style actionWidth:(CGFloat)actionWidth andActions:(nonnull NSArray *)actions; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.m b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.m new file mode 100644 index 00000000..d884384d --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Grouping Actions/RMScrollableGroupedAction.m @@ -0,0 +1,71 @@ +// +// RMScrollableGroupedAction.m +// RMImageAction-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMScrollableGroupedAction.h" + +@interface RMScrollableGroupedAction () + +@property (nonatomic, assign) CGFloat actionWidth; + +@end + +@implementation RMScrollableGroupedAction + +#pragma mark - Class ++ (instancetype)actionWithStyle:(RMActionStyle)style andActions:(NSArray *)actions { + RMScrollableGroupedAction *action = [super actionWithStyle:style andActions:actions]; + action.actionWidth = 50; + + return action; +} + ++ (instancetype)actionWithStyle:(RMActionStyle)style actionWidth:(CGFloat)actionWidth andActions:(NSArray *)actions { + RMScrollableGroupedAction *action = [[self class] actionWithStyle:style andActions:actions]; + action.actionWidth = actionWidth; + + return action; +} + +#pragma mark - View +- (UIView *)loadView { + UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; + scrollView.translatesAutoresizingMaskIntoConstraints = NO; + scrollView.showsVerticalScrollIndicator = NO; + scrollView.showsHorizontalScrollIndicator = NO; + + __block CGFloat maxHeight = 0; + __block UIView *currentLeft = nil; + [self.actions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { + [scrollView addSubview:action.view]; + maxHeight = MAX(maxHeight, [action.view systemLayoutSizeFittingSize:CGSizeMake(self.actionWidth, 999999) withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel].height); + + if(index == 0) { + NSDictionary *bindings = @{@"actionView": action.view}; + + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(>=0)-|" options:0 metrics:nil views:bindings]]; + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]" options:0 metrics:nil views:bindings]]; + } else { + NSDictionary *bindings = @{@"actionView": action.view, @"currentLeft": currentLeft}; + NSDictionary *metrics = @{@"width": @(self.actionWidth)}; + + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(>=0)-|" options:0 metrics:nil views:bindings]]; + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft(width)]-(0)-[actionView(width)]" options:0 metrics:metrics views:bindings]]; + } + + currentLeft = action.view; + }]; + + NSDictionary *bindings = @{@"currentLeft": currentLeft, @"scrollView": scrollView}; + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft]-(0)-|" options:0 metrics:nil views:bindings]]; + + [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[scrollView(height)]" options:0 metrics:@{@"height": @(maxHeight)} views:bindings]]; + + return scrollView; +} + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Private/RMAction+Private.h b/xcode/Pods/RMActionController/RMActionController/Private/RMAction+Private.h new file mode 100644 index 00000000..4b074cf8 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Private/RMAction+Private.h @@ -0,0 +1,22 @@ +// +// RMAction+Private.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMAction.h" + +@interface RMAction () + +@property (nonatomic, weak, readwrite) RMActionController *controller; + +@property (nonatomic, assign, readwrite) RMActionStyle style; + +@property (nonatomic, copy) void (^handler)(RMActionController *controller); + +- (BOOL)containsCancelAction; +- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/Private/RMActionController+Private.h b/xcode/Pods/RMActionController/RMActionController/Private/RMActionController+Private.h new file mode 100644 index 00000000..7b9585d9 --- /dev/null +++ b/xcode/Pods/RMActionController/RMActionController/Private/RMActionController+Private.h @@ -0,0 +1,20 @@ +// +// RMActionController+Private.h +// RMActionController-Demo +// +// Created by Roland Moers on 19.11.16. +// Copyright © 2016 Roland Moers. All rights reserved. +// + +#import "RMActionController.h" + +@interface RMActionController () + +@property (nonatomic, strong) UIView *backgroundView; +@property (nonatomic, assign) BOOL hasBeenDismissed; + +@property (nonatomic, weak) NSLayoutConstraint *yConstraint; + +- (void)setupTopContainersTopMarginConstraint; + +@end diff --git a/xcode/Pods/RMActionController/RMActionController/RMActionController.h b/xcode/Pods/RMActionController/RMActionController/RMActionController.h index b6814e4d..4f5dbb22 100644 --- a/xcode/Pods/RMActionController/RMActionController/RMActionController.h +++ b/xcode/Pods/RMActionController/RMActionController/RMActionController.h @@ -26,8 +26,10 @@ #import -@class RMActionController; -@class RMAction; +#import "RMAction.h" +#import "RMImageAction.h" +#import "RMGroupedAction.h" +#import "RMScrollableGroupedAction.h" /** * RMActionControllerStyle is used to determine the display style of RMActionController. There are three styles available: White, black and the default style, which is white. @@ -37,6 +39,10 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { RMActionControllerStyleWhite, /** Displays a RMActionController with a dark background. */ RMActionControllerStyleBlack, + /** Displays a RMActionController with a light background and without padding and corner radius. This looks very much like the new iOS 11 App Store sheet. */ + RMActionControllerStyleSheetWhite, + /** Displays a RMActionController with a dark background and without padding and corner radius. This looks very much like the new iOS 11 App Store sheet. */ + RMActionControllerStyleSheetBlack, /** Displays a RMActionController with the default background (which is currently light). */ RMActionControllerStyleDefault = RMActionControllerStyleWhite }; @@ -69,7 +75,7 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { * * @return A new instance of RMActionController. */ -+ (nullable instancetype)actionControllerWithStyle:(RMActionControllerStyle)aStyle selectAction:(nullable RMAction *> *)selectAction andCancelAction:(nullable RMAction *> *)cancelAction; ++ (nullable instancetype)actionControllerWithStyle:(RMActionControllerStyle)aStyle selectAction:(nullable RMAction *)selectAction andCancelAction:(nullable RMAction *)cancelAction; /** * Returns a new instance of RMActionController. @@ -82,7 +88,7 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { * * @return A new instance of RMActionController. */ -+ (nullable instancetype)actionControllerWithStyle:(RMActionControllerStyle)aStyle title:(nullable NSString *)aTitle message:(nullable NSString *)aMessage selectAction:(nullable RMAction *> *)selectAction andCancelAction:(nullable RMAction *> *)cancelAction; ++ (nullable instancetype)actionControllerWithStyle:(RMActionControllerStyle)aStyle title:(nullable NSString *)aTitle message:(nullable NSString *)aMessage selectAction:(nullable RMAction *)selectAction andCancelAction:(nullable RMAction *)cancelAction; /** * Initializes a new instance of RMActionController. @@ -97,7 +103,7 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { * * @return An initialized of RMActionController. */ -- (nullable instancetype)initWithStyle:(RMActionControllerStyle)aStyle title:(nullable NSString *)aTitle message:(nullable NSString *)aMessage selectAction:(nullable RMAction *> *)selectAction andCancelAction:(nullable RMAction *> *)cancelAction NS_DESIGNATED_INITIALIZER; +- (nullable instancetype)initWithStyle:(RMActionControllerStyle)aStyle title:(nullable NSString *)aTitle message:(nullable NSString *)aMessage selectAction:(nullable RMAction *)selectAction andCancelAction:(nullable RMAction *)cancelAction NS_DESIGNATED_INITIALIZER; /// @name User Interface #pragma mark - User Interface @@ -128,14 +134,14 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { /** * An array of actions that has been added to the RMActionController */ -@property (nonnull, nonatomic, readonly) NSArray *> *> *actions; +@property (nonnull, nonatomic, readonly) NSArray *> *actions; /** * Use this method to add further actions to the RMActionController. * * @param action The instance of RMAction to add. */ -- (void)addAction:(nonnull RMAction *> *)action; +- (void)addAction:(nonnull RMAction *)action; /// @name Content View #pragma mark - Content View @@ -183,110 +189,19 @@ typedef NS_ENUM(NSInteger, RMActionControllerStyle) { /** * Used to enable or disable blurring the background of RMActionController. * + * The default value is YES. + * * @warning This property always returns YES, if disableBlurEffects returns YES. */ @property (assign, nonatomic) BOOL disableBlurEffectsForBackgroundView; -@end - -#pragma mark - - -/** - * RMActionStyle is used to determine the display style of RMAction and where it is positioned. There are 4 styles available: Done, cancel, additional and the default style, which is the done style. - */ -typedef NS_ENUM(NSInteger, RMActionStyle) { - /** The button is displayed with a regular font and positioned right below the content view. */ - RMActionStyleDone, - /** The button is displayed with a bold font and positioned below all done buttons (or the content view if there are no done buttons). */ - RMActionStyleCancel, - /** The button is displayed with a standard destructive and positioned right below the content view. Currently only supported when blur effects are disabled.*/ - RMActionStyleDestructive, - /** The button is displayed with a regular font and positioned above the content view. */ - RMActionStyleAdditional, - /** The button is displayed and positioned like a done button. */ - RMActionStyleDefault = RMActionStyleDone -}; - -/** - * A RMAction instance represents an action that can be tapped by the use when a RMActionController is presented. It has a title or image for identifying the action and a handler which is calledwhen the action has been tapped by the user. - */ -@interface RMAction : NSObject - -/// @name Getting an Instance -#pragma mark - Getting an Instance - /** - * Returns a new instance of RMAction. + * Used to enable or disable blurring actions. If you want the title of your action to appear in your tint color, set this to YES. Same for image actions: If the image should appear in its original colors, set this to YES. Otherwise NO. * - * @param title The title of the action. - * @param style The style of the action. - * @param handler A block that is called when the action has been tapped. + * The default value is NO. * - * @return The new instance of RMAction. - */ -+ (nullable instancetype)actionWithTitle:(nonnull NSString *)title style:(RMActionStyle)style andHandler:(nullable void (^)(T __nonnull controller))handler; - -/** - * Returns a new instance of RMAction. - * - * @param image The image of the action. - * @param style The style of the action. - * @param handler A block that is called when the action has been tapped. - * - * @return The new instance of RMAction. - */ -+ (nullable instancetype)actionWithImage:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)(T __nonnull controller))handler; - -/// @name Properties -#pragma mark - Properties - -/** - * The title of the action. - */ -@property (nullable, nonatomic, readonly) NSString *title; - -/** - * The image of the action. - */ -@property (nullable, nonatomic, readonly) UIImage *image; - -/** - * The style of the action. - */ -@property (nonatomic, readonly) RMActionStyle style; - -/** - * Control whether or not the RMActionController to whom the RMAction has been added is dismissed when the RMAction has been tapped. - */ -@property (nonatomic, assign) BOOL dismissesActionController; - -@end - -#pragma mark - - -/** - * A RMGroupedAction instance represents a number of actions that can be grouped. - * - * Normally, a RMActionController uses one row for every action that has been added. RMGroupedActions offers the possibility to show multiple RMActions in one row. - */ -@interface RMGroupedAction : RMAction - -/// @name Getting an Instance -#pragma mark - Getting an Instance - -/** - * Returns a new instance of RMGroupedAction. - * - * @param style The style of the action. - * @param actions The actions that are contained in the grouped action. - * - * @return The new instance of RMGroupedAction - */ -+ (nullable instancetype)actionWithStyle:(RMActionStyle)style andActions:(nonnull NSArray *> *)actions; - -/** - * An array of actions the RMGroupedAction consists of. + * @warning This property always returns YES, if disableBlurEffects returns YES. */ -@property (nonnull, nonatomic, strong, readonly) NSArray *> *actions; +@property (assign, nonatomic) BOOL disableBlurEffectsForActions; @end diff --git a/xcode/Pods/RMActionController/RMActionController/RMActionController.m b/xcode/Pods/RMActionController/RMActionController/RMActionController.m index 9c2ec58e..9b247bc4 100644 --- a/xcode/Pods/RMActionController/RMActionController/RMActionController.m +++ b/xcode/Pods/RMActionController/RMActionController/RMActionController.m @@ -24,9 +24,14 @@ // THE SOFTWARE. // -#import "RMActionController.h" +#import "RMActionController+Private.h" #import +#import "RMAction+Private.h" +#import "RMActionControllerTransition.h" +#import "NSProcessInfo+RMActionController.h" +#import "UIView+RMActionController.h" + #pragma mark - Defines #if !__has_feature(attribute_availability_app_extension) @@ -37,87 +42,27 @@ #define RM_CURRENT_ORIENTATION_IS_LANDSCAPE_PREDICATE [UIScreen mainScreen].bounds.size.height < [UIScreen mainScreen].bounds.size.width #endif -typedef NS_ENUM(NSInteger, RMActionControllerAnimationStyle) { - RMActionControllerAnimationStylePresenting, - RMActionControllerAnimationStyleDismissing -}; - #pragma mark - Interfaces @interface RMActionController () @property (nonatomic, assign, readwrite) RMActionControllerStyle style; -@property (nonatomic, strong) UIView *topContainer; -@property (nonatomic, strong) UIView *bottomContainer; - -@property (nonatomic, strong) UILabel *headerTitleLabel; -@property (nonatomic, strong) UILabel *headerMessageLabel; - @property (nonatomic, strong) NSMutableArray *additionalActions; @property (nonatomic, strong) NSMutableArray *doneActions; @property (nonatomic, strong) NSMutableArray *cancelActions; -@property (nonatomic, strong) UIView *backgroundView; -@property (nonatomic, assign) BOOL hasBeenDismissed; +@property (nonatomic, strong) UIView *topContainer; +@property (nonatomic, strong) UIView *bottomContainer; -@property (nonatomic, weak) NSLayoutConstraint *yConstraint; +@property (nonatomic, strong) UILabel *headerTitleLabel; +@property (nonatomic, strong) UILabel *headerMessageLabel; - (nonnull instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER; - (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; @end -@interface RMActionControllerAnimationController : NSObject - -@property (nonatomic, assign) RMActionControllerAnimationStyle animationStyle; - -@end - -@interface RMAction () - -@property (nonatomic, weak) RMActionController *controller; - -@property (nonatomic, strong, readwrite) NSString *title; -@property (nonatomic, strong, readwrite) UIImage *image; -@property (nonatomic, assign, readwrite) RMActionStyle style; - -@property (nonatomic, copy) void (^handler)(RMActionController *controller); - -@property (nonatomic, strong) UIView *view; -- (UIView *)loadView; - -- (BOOL)containsCancelAction; -- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller; - -@end - -@interface RMGroupedAction () - -@property (nonatomic, strong, readwrite) NSArray *actions; - -@end - -#pragma mark - Categories - -@interface UIView (RMActionViewSeperators) - -+ (UIView *)seperatorView; - -@end - -@implementation UIView (RMActionViewSeperators) - -+ (UIView *)seperatorView { - UIView *seperatorView = [[UIView alloc] initWithFrame:CGRectZero]; - seperatorView.backgroundColor = [UIColor grayColor]; - seperatorView.translatesAutoresizingMaskIntoConstraints = NO; - - return seperatorView; -} - -@end - #pragma mark - Implementations @implementation RMActionController @@ -191,15 +136,78 @@ - (void)setup { } self.transitioningDelegate = self; - + + self.disableBlurEffectsForBackgroundView = YES; [self setupUIElements]; } +- (void)viewDidLoad { + NSAssert(self.contentView != nil, @"Error: The view of an RMActionController has been loaded before a contentView has been set. You have to set the contentView before presenting a RMActionController."); + + [super viewDidLoad]; + +#ifdef DEBUG + self.view.accessibilityLabel = @"ActionControllerView"; +#endif + + self.view.translatesAutoresizingMaskIntoConstraints = YES; + self.view.backgroundColor = [UIColor clearColor]; + self.view.layer.masksToBounds = YES; + + [self setupContainerElements]; + + if(self.modalPresentationStyle != UIModalPresentationPopover) { + [self.view addSubview:self.backgroundView]; + + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:@{@"BGView": self.backgroundView}]]; + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:@{@"BGView": self.backgroundView}]]; + } + + [self.view addSubview:self.topContainer]; + if([self.cancelActions count] > 0) { + [self.view addSubview:self.bottomContainer]; + } + + [self setupConstraints]; + if(self.modalPresentationStyle == UIModalPresentationPopover) { + [self setupTopContainersTopMarginConstraint]; + } + + if(!self.disableMotionEffects) { + UIInterpolatingMotionEffect *verticalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; + verticalMotionEffect.minimumRelativeValue = @(-10); + verticalMotionEffect.maximumRelativeValue = @(10); + + UIInterpolatingMotionEffect *horizontalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; + horizontalMotionEffect.minimumRelativeValue = @(-10); + horizontalMotionEffect.maximumRelativeValue = @(10); + + UIMotionEffectGroup *motionEffectGroup = [UIMotionEffectGroup new]; + motionEffectGroup.motionEffects = @[horizontalMotionEffect, verticalMotionEffect]; + + [self.view addMotionEffect:motionEffectGroup]; + } + + CGSize minimalSize = [self.view systemLayoutSizeFittingSize:CGSizeMake(999, 999)]; + self.preferredContentSize = CGSizeMake(minimalSize.width, minimalSize.height+10); + + if([self respondsToSelector:@selector(popoverPresentationController)]) { + self.popoverPresentationController.delegate = self; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + self.hasBeenDismissed = NO; +} + +#pragma mark - UI Element Setup - (void)setupUIElements { //Instantiate elements self.headerTitleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; self.headerMessageLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - + //Setup properties of elements self.headerTitleLabel.backgroundColor = [UIColor clearColor]; self.headerTitleLabel.textColor = [UIColor grayColor]; @@ -207,7 +215,7 @@ - (void)setupUIElements { self.headerTitleLabel.translatesAutoresizingMaskIntoConstraints = NO; self.headerTitleLabel.textAlignment = NSTextAlignmentCenter; self.headerTitleLabel.numberOfLines = 0; - + self.headerMessageLabel.backgroundColor = [UIColor clearColor]; self.headerMessageLabel.textColor = [UIColor grayColor]; self.headerMessageLabel.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; @@ -217,258 +225,286 @@ - (void)setupUIElements { } - (void)setupContainerElements { - //Top container + [self setupTopContainerElements]; + [self setupBottomContainerElements]; +} + +- (void)setupTopContainerElements { + self.topContainer = [[UIView alloc] initWithFrame:CGRectZero]; + + UIView *viewForAddingSubviews = nil; if(self.disableBlurEffects) { - self.topContainer = [[UIView alloc] initWithFrame:CGRectZero]; - - [self.topContainer addSubview:self.contentView]; - - if([self.headerTitleLabel.text length] > 0) { - [self.topContainer addSubview:self.headerTitleLabel]; - } - - if([self.headerMessageLabel.text length] > 0) { - [self.topContainer addSubview:self.headerMessageLabel]; - } - - for(RMAction *anAction in self.additionalActions) { - [self.topContainer addSubview:anAction.view]; - } - - for(RMAction *anAction in self.doneActions) { - [self.topContainer addSubview:anAction.view]; - } + viewForAddingSubviews = self.topContainer; } else { UIBlurEffect *blur = [UIBlurEffect effectWithStyle:[self containerBlurEffectStyleForCurrentStyle]]; UIVibrancyEffect *vibrancy = [UIVibrancyEffect effectForBlurEffect:blur]; - + UIVisualEffectView *vibrancyView = [[UIVisualEffectView alloc] initWithEffect:vibrancy]; vibrancyView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - if(!self.disableBlurEffectsForContentView) { - [vibrancyView.contentView addSubview:self.contentView]; - } - - if([self.headerTitleLabel.text length] > 0) { - [vibrancyView.contentView addSubview:self.headerTitleLabel]; - } - - if([self.headerMessageLabel.text length] > 0) { - [vibrancyView.contentView addSubview:self.headerMessageLabel]; - } - - for(RMAction *anAction in self.additionalActions) { - [vibrancyView.contentView addSubview:anAction.view]; - } - - for(RMAction *anAction in self.doneActions) { - [vibrancyView.contentView addSubview:anAction.view]; - } - - UIVisualEffectView *container = [[UIVisualEffectView alloc] initWithEffect:blur]; - [container.contentView addSubview:vibrancyView]; - - self.topContainer = container; - - if(self.disableBlurEffectsForContentView) { - [self.topContainer addSubview:self.contentView]; - } + + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur]; + effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [effectView.contentView addSubview:vibrancyView]; + + [self.topContainer addSubview:effectView]; + viewForAddingSubviews = vibrancyView.contentView; } - - //Botoom container - if(self.disableBlurEffects) { - self.bottomContainer = [[UIView alloc] initWithFrame:CGRectZero]; - - for(RMAction *anAction in self.cancelActions) { - [self.bottomContainer addSubview:anAction.view]; - } + + if(!self.disableBlurEffectsForContentView) { + [viewForAddingSubviews addSubview:self.contentView]; } else { - UIBlurEffect *blur = [UIBlurEffect effectWithStyle:[self containerBlurEffectStyleForCurrentStyle]]; - UIVibrancyEffect *vibrancy = [UIVibrancyEffect effectForBlurEffect:blur]; - - UIVisualEffectView *vibrancyView = [[UIVisualEffectView alloc] initWithEffect:vibrancy]; - vibrancyView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - for(RMAction *anAction in self.cancelActions) { - [vibrancyView.contentView addSubview:anAction.view]; - } - - UIVisualEffectView *container = [[UIVisualEffectView alloc] initWithEffect:blur]; - [container.contentView addSubview:vibrancyView]; - - self.bottomContainer = container; + [self.topContainer addSubview:self.contentView]; } - + + if([self.headerTitleLabel.text length] > 0) { + [viewForAddingSubviews addSubview:self.headerTitleLabel]; + } + + if([self.headerMessageLabel.text length] > 0) { + [viewForAddingSubviews addSubview:self.headerMessageLabel]; + } + + for(RMAction *anAction in self.additionalActions) { + UIView *view = self.disableBlurEffectsForActions ? self.topContainer : viewForAddingSubviews; + [view addSubview:anAction.view]; + } + + for(RMAction *anAction in self.doneActions) { + UIView *view = self.disableBlurEffectsForActions ? self.topContainer : viewForAddingSubviews; + [view addSubview:anAction.view]; + } + //Container properties - self.topContainer.layer.cornerRadius = 4; + self.topContainer.layer.cornerRadius = [self cornerRadiusForCurrentStyle]; self.topContainer.clipsToBounds = YES; self.topContainer.translatesAutoresizingMaskIntoConstraints = NO; - + if(!self.disableBlurEffects) { self.topContainer.backgroundColor = [UIColor clearColor]; } else { self.topContainer.backgroundColor = [UIColor whiteColor]; } - - self.bottomContainer.layer.cornerRadius = 4; + + //Debugging Accessibility Labels +#ifdef DEBUG + self.topContainer.accessibilityLabel = @"TopContainer"; +#endif +} + +- (void)setupBottomContainerElements { + self.bottomContainer = [[UIView alloc] initWithFrame:CGRectZero]; + + UIView *viewForAddingSubviews = nil; + if(self.disableBlurEffects) { + viewForAddingSubviews = self.bottomContainer; + } else { + UIBlurEffect *blur = [UIBlurEffect effectWithStyle:[self containerBlurEffectStyleForCurrentStyle]]; + UIVibrancyEffect *vibrancy = [UIVibrancyEffect effectForBlurEffect:blur]; + + UIVisualEffectView *vibrancyView = [[UIVisualEffectView alloc] initWithEffect:vibrancy]; + vibrancyView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur]; + effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [effectView.contentView addSubview:vibrancyView]; + + [self.bottomContainer addSubview:effectView]; + viewForAddingSubviews = vibrancyView.contentView; + } + + for(RMAction *anAction in self.cancelActions) { + UIView *view = self.disableBlurEffectsForActions ? self.bottomContainer : viewForAddingSubviews; + [view addSubview:anAction.view]; + } + + //Container properties + self.bottomContainer.layer.cornerRadius = [self cornerRadiusForCurrentStyle]; self.bottomContainer.clipsToBounds = YES; self.bottomContainer.translatesAutoresizingMaskIntoConstraints = NO; - + if(!self.disableBlurEffects) { self.bottomContainer.backgroundColor = [UIColor clearColor]; } else { self.bottomContainer.backgroundColor = [UIColor whiteColor]; } - + //Debugging Accessibility Labels #ifdef DEBUG - self.topContainer.accessibilityLabel = @"TopContainer"; self.bottomContainer.accessibilityLabel = @"BottomContainer"; #endif } +#pragma mark - Constraint Setup - (void)setupConstraints { - NSDictionary *metrics = @{@"seperatorHeight": @(1.f / [[UIScreen mainScreen] scale])}; - + NSDictionary *metrics = @{@"seperatorHeight": @(1.f / [[UIScreen mainScreen] scale]), @"Margin": @([self marginForCurrentStyle])}; + UIView *topContainer = self.topContainer; UIView *bottomContainer = self.bottomContainer; - UILabel *headerTitleLabel = self.headerTitleLabel; UILabel *headerMessageLabel = self.headerMessageLabel; - + NSDictionary *bindingsDict = NSDictionaryOfVariableBindings(topContainer, bottomContainer, headerTitleLabel, headerMessageLabel); - - //Container constraints - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(10)-[topContainer]-(10)-|" options:0 metrics:nil views:bindingsDict]]; - + + [self setupContainerConstraintWithBindings:bindingsDict metrics:metrics]; + [self setupTopContainerContentConstraintsWithMetrics:metrics]; + [self setupBottomContainerContentConstraintsWithMetrics:metrics]; +} + +- (void)setupContainerConstraintWithBindings:(NSDictionary *)bindingsDict metrics:(NSDictionary *)metrics { + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(Margin)-[topContainer]-(Margin)-|" options:0 metrics:metrics views:bindingsDict]]; + + id item; if([self.cancelActions count] <= 0) { - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topContainer]-(10)-|" options:0 metrics:nil views:bindingsDict]]; + item = self.topContainer; } else { - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(10)-[bottomContainer]-(10)-|" options:0 metrics:nil views:bindingsDict]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topContainer]-(10)-[bottomContainer]-(10)-|" options:0 metrics:nil views:bindingsDict]]; + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(Margin)-[bottomContainer]-(Margin)-|" options:0 metrics:metrics views:bindingsDict]]; + [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topContainer]-(Margin)-[bottomContainer]" options:0 metrics:metrics views:bindingsDict]]; + + item = self.bottomContainer; } - - //Top container content constraints + + NSInteger bottomMargin = [self currentStyleIsSheet] ? 0 : [self marginForCurrentStyle]; + id bottomItem; + if(@available(iOS 11, *)) { + bottomItem = [self currentStyleIsSheet] ? self.view : self.view.safeAreaLayoutGuide; + } else { + bottomItem = self.view; + } + + [self.view addConstraint:[NSLayoutConstraint constraintWithItem:item attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bottomItem attribute:NSLayoutAttributeBottom multiplier:1 constant:-bottomMargin]]; +} + +- (void)setupTopContainerContentConstraintsWithMetrics:(NSDictionary *)metrics { __block UIView *currentTopView = nil; __weak RMActionController *blockself = self; [self.doneActions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { UIView *seperator = [UIView seperatorView]; [self addSubview:seperator toContainer:self.topContainer]; - + if(!currentTopView) { NSDictionary *bindings = @{@"actionView": action.view, @"seperator": seperator}; - + [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[seperator]-(0)-|" options:0 metrics:nil views:bindings]]; - [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[seperator(seperatorHeight)]-(0)-[actionView]-(0)-|" options:0 metrics:metrics views:bindings]]; + [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[seperator(seperatorHeight)]-(0)-[actionView]" options:0 metrics:metrics views:bindings]]; + + id bottomItem; + if(@available(iOS 11, *)) { + bottomItem = [self currentStyleIsSheet] ? self.topContainer.safeAreaLayoutGuide : self.topContainer; + } else { + bottomItem = self.topContainer; + } + + [blockself.topContainer addConstraint:[NSLayoutConstraint constraintWithItem:action.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bottomItem attribute:NSLayoutAttributeBottom multiplier:1 constant:0]]; } else { NSDictionary *bindings = @{@"actionView": action.view, @"seperator": seperator, @"currentTopView": currentTopView}; - + [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[seperator]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[seperator(seperatorHeight)]-(0)-[actionView]-(0)-[currentTopView]" options:0 metrics:metrics views:bindings]]; } - + currentTopView = seperator; }]; - + [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[contentView]-(0)-|" options:0 metrics:nil views:@{@"contentView": self.contentView}]]; - + if(currentTopView) { [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[contentView]-(0)-[currentTopView]" options:0 metrics:nil views:@{@"contentView": self.contentView, @"currentTopView": currentTopView}]]; } else { [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[contentView]-(0)-|" options:0 metrics:nil views:@{@"contentView": self.contentView}]]; } - + if([self.additionalActions count] > 0 || [self.headerMessageLabel.text length] > 0 || [self.headerTitleLabel.text length] > 0) { __weak RMActionController *blockself = self; __block UIView *currentTopView = self.contentView; - + [self.additionalActions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { UIView *actionView = action.view; - + UIView *seperatorView = [UIView seperatorView]; [self addSubview:seperatorView toContainer:blockself.topContainer]; - + NSDictionary *actionBindingsDict = NSDictionaryOfVariableBindings(currentTopView, seperatorView, actionView); - + [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[seperatorView]-(0)-|" options:0 metrics:nil views:actionBindingsDict]]; [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:actionBindingsDict]]; [blockself.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[actionView]-(0)-[seperatorView(seperatorHeight)]-(0)-[currentTopView]" options:0 metrics:metrics views:actionBindingsDict]]; - + currentTopView = actionView; }]; - + if([self.headerMessageLabel.text length] > 0 || [self.headerTitleLabel.text length] > 0) { UIView *seperatorView = [UIView seperatorView]; [self addSubview:seperatorView toContainer:self.topContainer]; - + NSDictionary *bindings = NSDictionaryOfVariableBindings(seperatorView, currentTopView); - + [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[seperatorView]-(0)-|" options:0 metrics:nil views:bindings]]; [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[seperatorView(seperatorHeight)]-(0)-[currentTopView]" options:0 metrics:metrics views:bindings]]; - + currentTopView = seperatorView; - + if([self.headerMessageLabel.text length] > 0) { bindings = @{@"messageLabel": self.headerMessageLabel, @"currentTopView": currentTopView}; - + [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(5)-[messageLabel]-(5)-|" options:0 metrics:nil views:bindings]]; [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[messageLabel]-(10)-[currentTopView]" options:0 metrics:nil views:bindings]]; - + currentTopView = self.headerMessageLabel; } - + if([self.headerTitleLabel.text length] > 0) { bindings = @{@"titleLabel": self.headerTitleLabel, @"currentTopView": currentTopView}; NSDictionary *metrics = @{@"Margin": [currentTopView isKindOfClass:[UILabel class]] ? @(2) : @(10)}; - + [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(5)-[titleLabel]-(5)-|" options:0 metrics:nil views:bindings]]; [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[titleLabel]-(Margin)-[currentTopView]" options:0 metrics:metrics views:bindings]]; - + currentTopView = self.headerTitleLabel; } } - + NSDictionary *metrics = @{@"Margin": (currentTopView == self.headerMessageLabel || currentTopView == self.headerTitleLabel) ? @(10) : @(0)}; NSDictionary *bindings = NSDictionaryOfVariableBindings(currentTopView); - + [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(Margin)-[currentTopView]" options:0 metrics:metrics views:bindings]]; } else { [self.topContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[contentView]" options:0 metrics:nil views:@{@"contentView": self.contentView}]]; } - - //Bottom container content constraints +} + +- (void)setupBottomContainerContentConstraintsWithMetrics:(NSDictionary *)metrics { if([self.cancelActions count] == 1) { RMAction *action = [self.cancelActions lastObject]; NSDictionary *bindings = @{@"actionView": action.view}; - + [self.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; [self.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; } else if([self.cancelActions count] > 1) { __weak RMActionController *blockself = self; __block UIView *currentTopView = nil; - + [self.cancelActions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { if(!currentTopView) { NSDictionary *bindings = @{@"actionView": action.view}; - + [blockself.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; } else { UIView *seperatorView = [UIView seperatorView]; [self addSubview:seperatorView toContainer:self.bottomContainer]; - + NSDictionary *bindings = @{@"actionView": action.view, @"currentTopView": currentTopView, @"seperator": seperatorView}; - + [blockself.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[seperator]-(0)-|" options:0 metrics:nil views:bindings]]; [blockself.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[actionView]-(0)-[seperator(seperatorHeight)]-(0)-[currentTopView]" options:0 metrics:metrics views:bindings]]; } - + currentTopView = action.view; }]; - + [self.bottomContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[currentTopView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(currentTopView)]]; } } @@ -478,73 +514,36 @@ - (void)setupTopContainersTopMarginConstraint { [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(10)-[topContainer]" options:0 metrics:nil views:@{@"topContainer": self.topContainer}]]; } -- (void)viewDidLoad { - NSAssert(self.contentView != nil, @"Error: The view of an RMActionController has been loaded before a contentView has been set. You have to set the contentView before presenting a RMActionController."); - - [super viewDidLoad]; - -#ifdef DEBUG - self.view.accessibilityLabel = @"ActionControllerView"; -#endif - - self.view.translatesAutoresizingMaskIntoConstraints = YES; - self.view.backgroundColor = [UIColor clearColor]; - self.view.layer.masksToBounds = YES; - - [self setupContainerElements]; - - if(self.modalPresentationStyle != UIModalPresentationPopover) { - [self.view addSubview:self.backgroundView]; - - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:@{@"BGView": self.backgroundView}]]; - [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:@{@"BGView": self.backgroundView}]]; - } - - [self.view addSubview:self.topContainer]; - if([self.cancelActions count] > 0) { - [self.view addSubview:self.bottomContainer]; - } - - [self setupConstraints]; - if(self.modalPresentationStyle == UIModalPresentationPopover) { - [self setupTopContainersTopMarginConstraint]; - } - - if(!self.disableMotionEffects) { - UIInterpolatingMotionEffect *verticalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; - verticalMotionEffect.minimumRelativeValue = @(-10); - verticalMotionEffect.maximumRelativeValue = @(10); - - UIInterpolatingMotionEffect *horizontalMotionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; - horizontalMotionEffect.minimumRelativeValue = @(-10); - horizontalMotionEffect.maximumRelativeValue = @(10); - - UIMotionEffectGroup *motionEffectGroup = [UIMotionEffectGroup new]; - motionEffectGroup.motionEffects = @[horizontalMotionEffect, verticalMotionEffect]; - - [self.view addMotionEffect:motionEffectGroup]; - } - - CGSize minimalSize = [self.view systemLayoutSizeFittingSize:CGSizeMake(999, 999)]; - self.preferredContentSize = CGSizeMake(minimalSize.width, minimalSize.height+10); - - if([self respondsToSelector:@selector(popoverPresentationController)]) { - self.popoverPresentationController.delegate = self; +#pragma mark - Helper +- (NSInteger)cornerRadiusForCurrentStyle { + switch (self.style) { + case RMActionControllerStyleWhite: + case RMActionControllerStyleBlack: + return [NSProcessInfo runningAtLeastiOS9] ? 12 : 4; + case RMActionControllerStyleSheetWhite: + case RMActionControllerStyleSheetBlack: + return 0; } } -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - self.hasBeenDismissed = NO; +- (NSInteger)marginForCurrentStyle { + switch (self.style) { + case RMActionControllerStyleWhite: + case RMActionControllerStyleBlack: + return 10; + case RMActionControllerStyleSheetWhite: + case RMActionControllerStyleSheetBlack: + return 0; + } } -#pragma mark - Helper - (UIBlurEffectStyle)containerBlurEffectStyleForCurrentStyle { switch (self.style) { case RMActionControllerStyleWhite: + case RMActionControllerStyleSheetWhite: return UIBlurEffectStyleExtraLight; case RMActionControllerStyleBlack: + case RMActionControllerStyleSheetBlack: return UIBlurEffectStyleDark; default: return UIBlurEffectStyleExtraLight; @@ -554,8 +553,10 @@ - (UIBlurEffectStyle)containerBlurEffectStyleForCurrentStyle { - (UIBlurEffectStyle)backgroundBlurEffectStyleForCurrentStyle { switch (self.style) { case RMActionControllerStyleWhite: + case RMActionControllerStyleSheetWhite: return UIBlurEffectStyleDark; case RMActionControllerStyleBlack: + case RMActionControllerStyleSheetBlack: return UIBlurEffectStyleLight; default: return UIBlurEffectStyleDark; @@ -586,12 +587,18 @@ - (void)addSubview:(UIView *)subview toContainer:(UIView *)container { } } +- (BOOL)currentStyleIsSheet { + return self.style == RMActionControllerStyleSheetWhite || self.style == RMActionControllerStyleSheetBlack; +} + #pragma mark - iOS Properties - (UIStatusBarStyle)preferredStatusBarStyle { switch (self.style) { case RMActionControllerStyleWhite: + case RMActionControllerStyleSheetWhite: return UIStatusBarStyleLightContent; case RMActionControllerStyleBlack: + case RMActionControllerStyleSheetBlack: return UIStatusBarStyleDefault; default: return UIStatusBarStyleLightContent; @@ -625,11 +632,23 @@ - (BOOL)disableBlurEffectsForContentView { return _disableBlurEffectsForContentView; } +- (BOOL)disableBlurEffectsForActions { + if(self.disableBlurEffects) { + return YES; + } + + return _disableBlurEffectsForActions; +} + - (BOOL)disableBouncingEffects { if(&UIAccessibilityIsReduceMotionEnabled && UIAccessibilityIsReduceMotionEnabled()) { return YES; } + if(self.style == RMActionControllerStyleSheetWhite || self.style == RMActionControllerStyleSheetBlack) { + return YES; + } + return _disableBouncingEffects; } @@ -638,6 +657,10 @@ - (BOOL)disableMotionEffects { return YES; } + if(self.style == RMActionControllerStyleSheetWhite || self.style == RMActionControllerStyleSheetBlack) { + return YES; + } + return _disableMotionEffects; } @@ -678,15 +701,15 @@ - (void)setMessage:(NSString *)message { #pragma mark - Custom Transitions - (id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { - RMActionControllerAnimationController *animationController = [[RMActionControllerAnimationController alloc] init]; - animationController.animationStyle = RMActionControllerAnimationStylePresenting; + RMActionControllerTransition *animationController = [[RMActionControllerTransition alloc] init]; + animationController.animationStyle = RMActionControllerTransitionStylePresenting; return animationController; } - (id)animationControllerForDismissedController:(UIViewController *)dismissed { - RMActionControllerAnimationController *animationController = [[RMActionControllerAnimationController alloc] init]; - animationController.animationStyle = RMActionControllerAnimationStyleDismissing; + RMActionControllerTransition *animationController = [[RMActionControllerTransition alloc] init]; + animationController.animationStyle = RMActionControllerTransitionStyleDismissing; return animationController; } @@ -704,9 +727,16 @@ - (void)addAction:(RMAction *)action { case RMActionStyleDone: [self.doneActions addObject:action]; break; - case RMActionStyleCancel: - [self.cancelActions addObject:action]; + case RMActionStyleCancel: { + NSMutableArray *arrayForAdding; + if([self currentStyleIsSheet]) { + arrayForAdding = self.doneActions; + } else { + arrayForAdding = self.cancelActions; + } + [arrayForAdding addObject:action]; break; + } case RMActionStyleDestructive: [self.doneActions addObject:action]; break; @@ -725,342 +755,3 @@ - (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationCon } @end - -@implementation RMActionControllerAnimationController - -- (NSTimeInterval)transitionDuration:(id)transitionContext { - if(self.animationStyle == RMActionControllerAnimationStylePresenting) { - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - if([toVC isKindOfClass:[RMActionController class]]) { - RMActionController *actionController = (RMActionController *)toVC; - - if(actionController.disableBouncingEffects) { - return 0.3f; - } else { - return 1.0f; - } - } - } else if(self.animationStyle == RMActionControllerAnimationStyleDismissing) { - return 0.3f; - } - - return 1.0f; -} - -- (void)animateTransition:(id)transitionContext { - UIView *containerView = [transitionContext containerView]; - - if(self.animationStyle == RMActionControllerAnimationStylePresenting) { - UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; - if([toVC isKindOfClass:[RMActionController class]]) { - RMActionController *actionController = (RMActionController *)toVC; - - [actionController setupTopContainersTopMarginConstraint]; - - actionController.backgroundView.alpha = 0; - [containerView addSubview:actionController.backgroundView]; - [containerView addSubview:actionController.view]; - - NSDictionary *bindingsDict = @{@"BGView": actionController.backgroundView}; - - [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:bindingsDict]]; - [containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[BGView]-(0)-|" options:0 metrics:nil views:bindingsDict]]; - - [containerView addConstraint:[NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; - [containerView addConstraint:[NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]]; - - actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; - [containerView addConstraint:actionController.yConstraint]; - - [containerView setNeedsUpdateConstraints]; - [containerView layoutIfNeeded]; - - [containerView removeConstraint:actionController.yConstraint]; - actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; - [containerView addConstraint:actionController.yConstraint]; - - [containerView setNeedsUpdateConstraints]; - - CGFloat damping = 1.0f; - CGFloat duration = 0.3f; - if(!actionController.disableBouncingEffects) { - damping = 0.6f; - duration = 1.0f; - } - - [UIView animateWithDuration:duration delay:0 usingSpringWithDamping:damping initialSpringVelocity:1 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^{ - actionController.backgroundView.alpha = 1; - - [containerView layoutIfNeeded]; - } completion:^(BOOL finished) { - [transitionContext completeTransition:YES]; - }]; - } - } else if(self.animationStyle == RMActionControllerAnimationStyleDismissing) { - UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; - if([fromVC isKindOfClass:[RMActionController class]]) { - RMActionController *actionController = (RMActionController *)fromVC; - - [containerView removeConstraint:actionController.yConstraint]; - actionController.yConstraint = [NSLayoutConstraint constraintWithItem:actionController.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; - [containerView addConstraint:actionController.yConstraint]; - - [containerView setNeedsUpdateConstraints]; - - [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ - actionController.backgroundView.alpha = 0; - - [containerView layoutIfNeeded]; - } completion:^(BOOL finished) { - [actionController.view removeFromSuperview]; - [actionController.backgroundView removeFromSuperview]; - - actionController.hasBeenDismissed = NO; - [transitionContext completeTransition:YES]; - }]; - } - } -} - -@end - -@implementation RMAction - -#pragma mark - Class -+ (nullable instancetype)actionWithTitle:(nonnull NSString *)title style:(RMActionStyle)style andHandler:(nullable void (^)( RMActionController * _Nonnull controller))handler { - RMAction *action = [RMAction actionWithStyle:style andHandler:handler]; - action.title = title; - - return action; -} - -+ (nullable instancetype)actionWithImage:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)( RMActionController * _Nonnull controller))handler { - RMAction *action = [RMAction actionWithStyle:style andHandler:handler]; - action.image = image; - - return action; -} - -+ (instancetype)actionWithStyle:(RMActionStyle)style andHandler:(void (^)(RMActionController *controller))handler { - RMAction *action = [[RMAction alloc] init]; - action.style = style; - - __weak RMAction *weakAction = action; - [action setHandler:^(RMActionController *controller) { - if(handler) { - handler(controller); - } - - if(weakAction.dismissesActionController) { - if(controller.modalPresentationStyle == UIModalPresentationPopover || controller.yConstraint != nil) { - [controller dismissViewControllerAnimated:YES completion:nil]; - } else { - [controller dismissViewControllerAnimated:NO completion:nil]; - } - } - }]; - - return action; -} - -#pragma mark - Init and Dealloc -- (instancetype)init { - self = [super init]; - if(self) { - self.dismissesActionController = YES; - } - return self; -} - -#pragma mark - Cancel Helper -- (BOOL)containsCancelAction { - return self.style == RMActionStyleCancel; -} - -- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller { - if(self.style == RMActionStyleCancel) { - self.handler(controller); - } -} - -#pragma mark - Other Helper -- (UIImage *)imageWithColor:(UIColor *)color { - CGRect rect = CGRectMake(0, 0, 1, 1); - - UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); - [color setFill]; - UIRectFill(rect); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -#pragma mark - View -- (UIView *)view { - if(!_view) { - _view = [self loadView]; - } - - return _view; -} - -- (UIView *)loadView { - UIButton *actionButton = [UIButton buttonWithType:UIButtonTypeCustom]; - actionButton.translatesAutoresizingMaskIntoConstraints = NO; - [actionButton addTarget:self action:@selector(viewTapped:) forControlEvents:UIControlEventTouchUpInside]; - - if(self.style == RMActionStyleCancel) { - actionButton.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont buttonFontSize]]; - } else { - actionButton.titleLabel.font = [UIFont systemFontOfSize:[UIFont buttonFontSize]]; - } - - if(!self.controller.disableBlurEffects) { - [actionButton setBackgroundImage:[self imageWithColor:[[UIColor whiteColor] colorWithAlphaComponent:0.3]] forState:UIControlStateHighlighted]; - } else { - switch (self.controller.style) { - case RMActionControllerStyleWhite: - [actionButton setBackgroundImage:[self imageWithColor:[UIColor colorWithWhite:230./255. alpha:1]] forState:UIControlStateHighlighted]; - break; - case RMActionControllerStyleBlack: - [actionButton setBackgroundImage:[self imageWithColor:[UIColor colorWithWhite:0.2 alpha:1]] forState:UIControlStateHighlighted]; - break; - } - } - - if(self.title) { - [actionButton setTitle:self.title forState:UIControlStateNormal]; - } else if(self.image) { - [actionButton setImage:self.image forState:UIControlStateNormal]; - } else { - [actionButton setTitle:@"Unknown title" forState:UIControlStateNormal]; - } - - [actionButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[actionButton(44)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(actionButton)]]; - - if(self.controller.disableBlurEffects) { - if(self.style == RMActionStyleDestructive) { - [actionButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; - } else { - [actionButton setTitleColor:[UIColor colorWithRed:0 green:0.478431 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; - } - } else { - if(self.style == RMActionStyleDestructive) { - [actionButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; - } - } - - return actionButton; -} - -- (void)viewTapped:(id)sender { - self.handler(self.controller); -} - -@end - -@implementation RMGroupedAction - -#pragma mark - Class -+ (nullable instancetype)actionWithTitle:(nonnull NSString *)title style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull))handler { - [NSException raise:@"RMIllegalCallException" format:@"Tried to initialize a grouped action with +[%@ %@]. Please use +[%@ %@] instead.", NSStringFromClass(self), NSStringFromSelector(_cmd), NSStringFromClass(self), NSStringFromSelector(@selector(actionWithStyle:andActions:))]; - return nil; -} - -+ (nullable instancetype)actionWithImage:(nonnull UIImage *)image style:(RMActionStyle)style andHandler:(nullable void (^)(RMActionController * __nonnull))handler { - [NSException raise:@"RMIllegalCallException" format:@"Tried to initialize a grouped action with +[%@ %@]. Please use +[%@ %@] instead.", NSStringFromClass(self), NSStringFromSelector(_cmd), NSStringFromClass(self), NSStringFromSelector(@selector(actionWithStyle:andActions:))]; - return nil; -} - -+ (nullable instancetype)actionWithStyle:(RMActionStyle)style andActions:(nonnull NSArray *> *)actions { - NSAssert([actions count] > 0, @"Tried to initialize RMGroupedAction with less than one action."); - NSAssert([actions count] > 1, @"Tried to initialize RMGroupedAction with one action. Use RMAction in this case."); - - [actions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSAssert([obj isKindOfClass:[RMAction class]], @"Tried to initialize RMGroupedAction with objects of types other than RMAction."); - }]; - - RMGroupedAction *groupedAction = [[RMGroupedAction alloc] init]; - groupedAction.style = style; - groupedAction.actions = actions; - - [groupedAction setHandler:^(RMActionController *controller) { - [NSException raise:@"RMInconsistencyException" format:@"The handler of a grouped action has been called."]; - }]; - - return groupedAction; -} - -#pragma mark - Cancel Helper -- (BOOL)containsCancelAction { - for(RMAction *anAction in self.actions) { - if([anAction containsCancelAction]) { - return YES; - } - } - - return NO; -} - -- (void)executeHandlerOfCancelActionWithController:(RMActionController *)controller { - for(RMAction *anAction in self.actions) { - if([anAction containsCancelAction]) { - [anAction executeHandlerOfCancelActionWithController:controller]; - return; - } - } -} - -#pragma mark - Properties -- (RMActionController *)controller { - return [[self.actions firstObject] controller]; - -} - -- (void)setController:(RMActionController *)controller { - for(RMAction *anAction in self.actions) { - anAction.controller = controller; - } -} - -#pragma mark - View -- (UIView *)loadView { - UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - view.translatesAutoresizingMaskIntoConstraints = NO; - view.backgroundColor = [UIColor clearColor]; - - NSDictionary *metrics = @{@"seperatorHeight": @(1.f / [[UIScreen mainScreen] scale])}; - - __block UIView *currentLeft = nil; - [self.actions enumerateObjectsUsingBlock:^(RMAction *action, NSUInteger index, BOOL *stop) { - [action.view setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal]; - [view addSubview:action.view]; - - if(index == 0) { - NSDictionary *bindings = @{@"actionView": action.view}; - - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(0)-[actionView]" options:0 metrics:nil views:bindings]]; - } else { - UIView *seperatorView = [UIView seperatorView]; - [view addSubview:seperatorView]; - - NSDictionary *bindings = @{@"actionView": action.view, @"seperator": seperatorView, @"currentLeft": currentLeft}; - - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[actionView]-(0)-|" options:0 metrics:nil views:bindings]]; - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(0)-[seperator]-(0)-|" options:0 metrics:nil views:bindings]]; - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft(==actionView)]-(0)-[seperator(seperatorHeight)]-(0)-[actionView(==currentLeft)]" options:0 metrics:metrics views:bindings]]; - } - - currentLeft = action.view; - }]; - - NSDictionary *bindings = @{@"currentLeft": currentLeft}; - - [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[currentLeft]-(0)-|" options:0 metrics:nil views:bindings]]; - - return view; -} - -@end diff --git a/xcode/Pods/RMDateSelectionViewController/LICENSE b/xcode/Pods/RMDateSelectionViewController/LICENSE index bb22ec2d..03690bf7 100644 --- a/xcode/Pods/RMDateSelectionViewController/LICENSE +++ b/xcode/Pods/RMDateSelectionViewController/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2015 Roland Moers +Copyright (c) 2013-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -16,4 +16,4 @@ 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. \ No newline at end of file +THE SOFTWARE. diff --git a/xcode/Pods/RMDateSelectionViewController/README.md b/xcode/Pods/RMDateSelectionViewController/README.md index a2f44f12..57860858 100644 --- a/xcode/Pods/RMDateSelectionViewController/README.md +++ b/xcode/Pods/RMDateSelectionViewController/README.md @@ -1,115 +1,81 @@ -RMDateSelectionViewController ![Build Status](https://travis-ci.org/CooperRS/RMDateSelectionViewController.svg?branch=master) +RMDateSelectionViewController [![Build Status](https://travis-ci.org/CooperRS/RMDateSelectionViewController.svg?branch=master)](https://travis-ci.org/CooperRS/RMDateSelectionViewController/) [![Pod Version](https://img.shields.io/cocoapods/v/RMDateSelectionViewController.svg)](https://cocoapods.org/pods/RMDateSelectionViewController) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ============================= -This is an iOS control for selecting a date using UIDatePicker in a UIActionSheet like fashion +This framework allows you to select a date by presenting an action sheet. In addition, it allows you to add actions arround the presented date picker which behave like a button and can be tapped by the user. The result looks very much like an UIActionSheet or UIAlertController with a UIDatePicker and some UIActions attached. + +Besides being a fully-usable project, RMDateSelectionViewController also is an example for an use case of [RMActionController](https://github.com/CooperRS/RMActionController). You can use it to learn how to present a date picker other than UIDatePicker. ## Screenshots + ### Portrait -![Portrait](http://cooperrs.github.io/RMDateSelectionViewController/Images/Blur-Screen-Portrait.png) + +| White | Black | +|:-----:|:-----:| +|![Portrait](http://cooperrs.github.io/RMDateSelectionViewController/Images/Blur-Screen-Portrait.png)|![Colors](http://cooperrs.github.io/RMDateSelectionViewController/Images/Blur-Screen-Portrait-Black.png)| ### Landscape ![Landscape](http://cooperrs.github.com/RMDateSelectionViewController/Images/Blur-Screen-Landscape.png) -### Black version -![Colors](http://cooperrs.github.io/RMDateSelectionViewController/Images/Blur-Screen-Portrait-Black.png) - ## Demo Project -If you want to run the demo project you first need to run `pod install` to install the dependencies of RMDateSelectionViewController. +If you want to run the demo project do not forget to initialize submodules. ## Installation (CocoaPods) ```ruby platform :ios, '8.0' -pod "RMDateSelectionViewController", "~> 2.0.3" +pod "RMDateSelectionViewController", "~> 2.3.1" ``` ## Usage -### Basic -1. Import `RMDateSelectionViewController.h` in your view controller - - ```objc - #import "RMDateSelectionViewController.h" - ``` -2. Create a date selection view controller, set select and cancel block and present the view controller - - ```objc - - (IBAction)openDateSelectionController:(id)sender { - //Create select action - RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { - NSLog(@"Successfully selected date: %@", ((UIDatePicker *)controller.contentView).date); - }]; - - //Create cancel action - RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { - NSLog(@"Date selection was canceled"); - }]; - - //Create date selection view controller - RMDateSelectionViewController *dateSelectionController = [RMDateSelectionViewController actionControllerWithStyle:style selectAction:selectAction andCancelAction:cancelAction]; - dateSelectionController.title = @"Test"; - dateSelectionController.message = @"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'."; - - //Now just present the date selection controller using the standard iOS presentation method - [self presentViewController:dateSelectionController animated:YES completion:nil]; - } - ``` - -### Advanced - -#### Accessing the Date Picker -Every RMDateSelectionViewController has a property `datePicker`. With this property you have total control over the UIDatePicker that is shown on the screen. - -#### Presentation Style -Additionally, you can use the property `modalPresentationStyle` to control how the date selection controller is shown. By default, it is set to `UIModalPresentationOverCurrentContext`. But on the iPad you could use `UIModalPresentationPopover` to present the date selection controller within a popover. See the following example on how this works: + +For a detailed description on how to use RMDateSelectionViewController take a look at the [Wiki Pages](https://github.com/CooperRS/RMDateSelectionViewController/wiki). The following four steps are a very short intro: + +* Import RMDateSelectionViewController: ```objc -- (IBAction)openDateSelectionController:(id)sender { - //Create select and cancel action - ... - - RMDateSelectionViewController *dateSelectionVC = [RMDateSelectionViewController actionControllerWithStyle:style selectAction:selectAction andCancelAction:cancelAction]; - - //On the iPad we want to show the date selection view controller within a popover. - if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { - //First we set the modal presentation style to the popover style - dateSelectionVC.modalPresentationStyle = UIModalPresentationPopover; - - //Then we tell the popover presentation controller, where the popover should appear - dateSelectionVC.popoverPresentationController.sourceView = self.view; - dateSelectionVC.popoverPresentationController.sourceRect = CGRectMake(...); - } - - //Now just present the date selection controller using the standard iOS presentation method - [self presentViewController:dateSelectionVC animated:YES completion:nil]; -} +#import +``` + +* Create select and cancel actions: + +```objc +RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { + NSLog(@"Successfully selected date: %@", controller.contentView.date); +}]; + +RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { + NSLog(@"Date selection was canceled"); +}]; +``` + +* Create and instance of RMDateSelectionViewController and present it: + +```objc +RMDateSelectionViewController *dateSelectionController = [RMDateSelectionViewController actionControllerWithStyle:RMActionControllerStyleWhite title:@"Test" message:@"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'." selectAction:selectAction andCancelAction:cancelAction]; + +[self presentViewController:dateSelectionController animated:YES completion:nil]; ``` -#### Adding Additional Buttons -You can add an arbitrary number of custom buttons to a RMDateSelectionViewController. Each button has it's own block that is executed when tapping the button. See the following example on how to add buttons. +* The following code block shows you a complete method: ```objc - (IBAction)openDateSelectionController:(id)sender { - //Create select action - ... - - //Create date selection view controller - RMDateSelectionViewController *dateSelectionController = [RMDateSelectionViewController actionControllerWithStyle:style selectAction:selectAction andCancelAction:cancelAction]; + RMAction *selectAction = [RMAction actionWithTitle:@"Select" style:RMActionStyleDone andHandler:^(RMActionController *controller) { + NSLog(@"Successfully selected date: %@", controller.contentView.date); + }]; - //Create now action and add it to date selection view controller - RMAction *nowAction = [RMAction actionWithTitle:@"Now" style:RMActionStyleAdditional andHandler:^(RMActionController *controller) { - ((UIDatePicker *)controller.contentView).date = [NSDate date]; - NSLog(@"Now button tapped"); + RMAction *cancelAction = [RMAction actionWithTitle:@"Cancel" style:RMActionStyleCancel andHandler:^(RMActionController *controller) { + NSLog(@"Date selection was canceled"); }]; - nowAction.dismissesActionController = NO; - [dateSelectionController addAction:nowAction]; + RMDateSelectionViewController *dateSelectionController = [RMDateSelectionViewController actionControllerWithStyle:RMActionControllerStyleWhite title:@"Test" message:@"This is a test message.\nPlease choose a date and press 'Select' or 'Cancel'." selectAction:selectAction andCancelAction:cancelAction]; - //Now just present the date selection controller using the standard iOS presentation method [self presentViewController:dateSelectionController animated:YES completion:nil]; } ``` -#### Others -RMDateSelectionViewController does not use APIs that are only available for applications. Therefore, it can be used in both your main application and an action extension showing UI. +## Migration + +See [Migration](https://github.com/CooperRS/RMDateSelectionViewController/wiki/Migration) on how to migrate to the latest version of RMDateSelectionViewController. ## Documentation There is an additional documentation available provided by the CocoaPods team. Take a look at [cocoadocs.org](http://cocoadocs.org/docsets/RMDateSelectionViewController/). @@ -136,7 +102,7 @@ If you want to show an UIPickerView instead of an UIDatePicker, you may take a l If you want to show any other control you may want to take a look at [RMActionController](https://github.com/CooperRS/RMActionController). -##Credits +## Credits Code contributions: * AnthonyMDev * Cancel delegate method should be optional @@ -167,7 +133,9 @@ Localizations: I want to thank everyone who has contributed code and/or time to this project! ## License (MIT License) -Copyright (c) 2013-2015 Roland Moers + +``` +Copyright (c) 2013-2016 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -186,3 +154,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m index ca703033..71ada192 100644 --- a/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m +++ b/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m @@ -69,6 +69,7 @@ - (id)init { _executionOrder = SDWebImageDownloaderFIFOExecutionOrder; _downloadQueue = [NSOperationQueue new]; _downloadQueue.maxConcurrentOperationCount = 6; + _downloadQueue.name = @"com.hackemist.SDWebImageDownloader"; _URLCallbacks = [NSMutableDictionary new]; #ifdef SD_WEBP _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy]; diff --git a/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m index d4e2a99e..b722d561 100644 --- a/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m +++ b/xcode/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m @@ -73,7 +73,7 @@ - (id)initWithRequest:(NSURLRequest *)request completed:(SDWebImageDownloaderCompletedBlock)completedBlock cancelled:(SDWebImageNoParamsBlock)cancelBlock { if ((self = [super init])) { - _request = request; + _request = [request copy]; _shouldDecompressImages = YES; _options = options; _progressBlock = [progressBlock copy]; @@ -404,12 +404,14 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp } else { SDWebImageDownloaderCompletedBlock completionBlock = self.completedBlock; - if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) { - responseFromCached = NO; - } - if (completionBlock) { - if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) { + /** + * See #1608 and #1623 - apparently, there is a race condition on `NSURLCache` that causes a crash + * Limited the calls to `cachedResponseForRequest:` only for cases where we should ignore the cached response + * and images for which responseFromCached is YES (only the ones that cannot be cached). + * Note: responseFromCached is set to NO inside `willCacheResponse:`. This method doesn't get called for large images or images behind authentication + */ + if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached && [[NSURLCache sharedURLCache] cachedResponseForRequest:self.request]) { completionBlock(nil, nil, nil, YES); } else if (self.imageData) { UIImage *image = [UIImage sd_imageWithData:self.imageData]; diff --git a/xcode/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/xcode/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m index 889305b2..0d8ed035 100644 --- a/xcode/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m +++ b/xcode/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m @@ -164,7 +164,7 @@ - (BOOL)showActivityIndicatorView{ } - (void)setIndicatorStyle:(UIActivityIndicatorViewStyle)style{ - objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInt:style], OBJC_ASSOCIATION_RETAIN); + objc_setAssociatedObject(self, &TAG_ACTIVITY_STYLE, [NSNumber numberWithInteger:style], OBJC_ASSOCIATION_RETAIN); } - (int)getIndicatorStyle{ diff --git a/xcode/Pods/SWTableViewCell/SWTableViewCell/PodFiles/SWTableViewCell.m b/xcode/Pods/SWTableViewCell/SWTableViewCell/PodFiles/SWTableViewCell.m index 94a05eaa..f6b8f130 100644 --- a/xcode/Pods/SWTableViewCell/SWTableViewCell/PodFiles/SWTableViewCell.m +++ b/xcode/Pods/SWTableViewCell/SWTableViewCell/PodFiles/SWTableViewCell.m @@ -91,7 +91,7 @@ - (void)initializer // Add the cell scroll view to the cell UIView *contentViewParent = self; UIView *clipViewParent = self.cellScrollView; - if (![NSStringFromClass([[self.subviews objectAtIndex:0] class]) isEqualToString:kTableViewCellContentView]) + if (self.subviews.count > 0 && ![NSStringFromClass([[self.subviews objectAtIndex:0] class]) isEqualToString:kTableViewCellContentView]) { // iOS 7 contentViewParent = [self.subviews objectAtIndex:0]; diff --git a/xcode/Pods/SZTextView/README.md b/xcode/Pods/SZTextView/README.md index 7d45c70b..be87438f 100644 --- a/xcode/Pods/SZTextView/README.md +++ b/xcode/Pods/SZTextView/README.md @@ -1,7 +1,6 @@ # SZTextView [![Build Status](https://travis-ci.org/glaszig/SZTextView.svg?branch=master)](https://travis-ci.org/glaszig/SZTextView) -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/glaszig/sztextview/trend.png)](https://bitdeli.com/free "Bitdeli Badge") [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) A drop-in UITextView replacement which gives you: a placeholder. @@ -9,10 +8,7 @@ Technically it differs from other solutions in that it tries to work like UIText ## Requirements -Your iOS project. (Tested on iOS versions 7.x, 8.0. Should also work on 5.x and 6.x) - -> **Note**: This is ARC-enabled code. You'll need Xcode 4.2 and OS X 10.6, at least. -> **Note**: To run the tests you'll need Xcode 5 with XCTest. +Your iOS project. Unit-tested on iOS 8.x, 9.x, 10.x -- see `.travis.yml` for details. ## Installation @@ -23,7 +19,7 @@ Either clone this repo and add the project to your Xcode workspace, use [CocoaPo Add this to you Podfile: ```ruby - pod 'SZTextView' +pod 'SZTextView' ``` #### Carthage @@ -31,7 +27,7 @@ Add this to you Podfile: Add this line to your Cartfile: ``` - github "glaszig/SZTextView" +github "glaszig/SZTextView" ``` ## Usage diff --git a/xcode/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m b/xcode/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m index 9546cca3..8193a969 100644 --- a/xcode/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m +++ b/xcode/Pods/SocketRocket/SocketRocket/Internal/Utilities/SRURLUtilities.m @@ -51,8 +51,10 @@ extern BOOL SRURLRequiresSSL(NSURL *url) { NSString *networkServiceType = nil; switch (request.networkServiceType) { - case NSURLNetworkServiceTypeDefault: case NSURLNetworkServiceTypeResponsiveData: + case NSURLNetworkServiceTypeAVStreaming: + case NSURLNetworkServiceTypeResponsiveAV: + case NSURLNetworkServiceTypeDefault: break; case NSURLNetworkServiceTypeVoIP: networkServiceType = NSStreamNetworkServiceTypeVoIP; diff --git a/xcode/Pods/TDOAuth/LICENSE.md b/xcode/Pods/TDOAuth/LICENSE.md new file mode 100644 index 00000000..41894031 --- /dev/null +++ b/xcode/Pods/TDOAuth/LICENSE.md @@ -0,0 +1,28 @@ +BSD 2-Clause License + + Copyright 2011 TweetDeck Inc. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY TweetDeck Inc. ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL TweetDeck Inc. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + The views and conclusions contained in the software and documentation are + those of the authors and should not be interpreted as representing official + policies, either expressed or implied, of TweetDeck Inc. diff --git a/xcode/Pods/TDOAuth/README.md b/xcode/Pods/TDOAuth/README.md index 191c4abb..2ccca0c0 100644 --- a/xcode/Pods/TDOAuth/README.md +++ b/xcode/Pods/TDOAuth/README.md @@ -1,9 +1,12 @@ A BSD-licensed single-header-single-source OAuth1 implementation. +[![Build Status](https://travis-ci.org/tweetdeck-archive/TDOAuth.svg?branch=master)](https://travis-ci.org/tweetdeck-archive/TDOAuth) + Use CocoaPods: pod 'TDOAuth' + Or Carthage: github "tweetdeck/TDOAuth" diff --git a/xcode/Pods/TDOAuth/TDOAuth.h b/xcode/Pods/TDOAuth/TDOAuth.h index 1bbadd33..35363d4c 100644 --- a/xcode/Pods/TDOAuth/TDOAuth.h +++ b/xcode/Pods/TDOAuth/TDOAuth.h @@ -28,11 +28,16 @@ */ #import +#import FOUNDATION_EXPORT double TDOAuthVersionNumber; FOUNDATION_EXPORT const unsigned char TDOAuthVersionString[]; +#if (defined(__IPHONE_8_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0)) || \ + (defined(__MAC_10_0) && (__MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_10)) +#define USE_NSURLCOMPONENTS +#endif typedef NS_ENUM(NSInteger, TDOAuthSignatureMethod) { TDOAuthSignatureMethodHmacSha1, @@ -41,6 +46,7 @@ typedef NS_ENUM(NSInteger, TDOAuthSignatureMethod) { typedef NS_ENUM(NSInteger, TDOAuthContentType) { TDOAuthContentTypeUrlEncodedForm, TDOAuthContentTypeJsonObject, + TDOAuthContentTypeUrlEncodedQuery, }; /** @@ -78,6 +84,16 @@ typedef NS_ENUM(NSInteger, TDOAuthContentType) { accessToken:(NSString *)accessToken tokenSecret:(NSString *)tokenSecret; +#ifdef USE_NSURLCOMPONENTS +/** + Allow to pass NSURLComponents. READ THE DOCUMENTATION IN PREVIOUS GET METHODS! + */ ++ (NSURLRequest *)URLRequestForGETURLComponents:(NSURLComponents *)urlComponents + consumerKey:(NSString *)consumerKey + consumerSecret:(NSString *)consumerSecret + accessToken:(NSString *)accessToken + tokenSecret:(NSString *)tokenSecret; +#endif /** We always POST with HTTPS. This is because at least half the time the user's data is at least somewhat private, but also because apparently some carriers @@ -100,8 +116,9 @@ typedef NS_ENUM(NSInteger, TDOAuthContentType) { @p requestMethod may be any string value. There is no validation, so remember that all currently-defined HTTP methods are uppercase and the RFC specifies that the method is case-sensitive. - @p dataEncoding allows for the transmission of data as either URL-encoded form data or - JSON by passing the value TDOAuthContentTypeUrlEncodedForm or TDOAuthContentTypeJsonObject. + @p dataEncoding allows for the transmission of data as either URL-encoded form data, + query string or JSON by passing the value TDOAuthContentTypeUrlEncodedForm, + TDOAuthContentTypeUrlEncodedQuery or TDOAuthContentTypeJsonObject. This parameter is ignored for the requestMethod "GET". @p headerValues accepts a hash of key-value pairs (both must be strings) that specify HTTP header values to be included in the resulting URL Request. For example, the argument diff --git a/xcode/Pods/TDOAuth/TDOAuth.m b/xcode/Pods/TDOAuth/TDOAuth.m index 673643b0..07f5be94 100644 --- a/xcode/Pods/TDOAuth/TDOAuth.m +++ b/xcode/Pods/TDOAuth/TDOAuth.m @@ -34,7 +34,7 @@ #import #define TDPCEN(s) \ - ((__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)[s description], NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8)) + ([[s description] stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet characterSetWithCharactersInString:@"^!*'();:@&=+$,/?%#[]{}\"`<>\\| "] invertedSet]]) #define TDChomp(s) { \ const NSUInteger length = [s length]; \ @@ -71,6 +71,26 @@ return [NSString stringWithFormat:@"%ld", t + TDOAuthUTCTimeOffset]; } +@interface TDOQueryItem : NSObject +@property(nonatomic, strong) NSString *name; +@property(nonatomic, strong) NSString *value; + ++ (instancetype)itemWithName:(NSString *)name value:(NSString *)value; +@end + +@implementation TDOQueryItem + ++ (instancetype)itemWithName:(NSString *)name value:(NSString *)value +{ + TDOQueryItem *item = [TDOQueryItem new]; + if (item) { + item.name = name; + item.value = value; + } + return item; +} + +@end @implementation TDOAuth @@ -78,8 +98,8 @@ @implementation TDOAuth NSURL *url; NSString *signature_secret; TDOAuthSignatureMethod signature_method; - NSDictionary *oauthParams; // these are pre-percent encoded - NSDictionary *params; // these are pre-percent encoded + NSArray *params; // these are pre-percent encoded + NSArray *oauthParams; // these are pre-percent encoded NSString *method; NSString *hostAndPathWithoutQuery; // we keep this because NSURL drops trailing slashes and the port number } @@ -101,31 +121,37 @@ - (id)initWithConsumerKey:(NSString *)consumerKey } signature_method = signatureMethod; - oauthParams = [NSDictionary dictionaryWithObjectsAndKeys: - consumerKey, @"oauth_consumer_key", - nonce(), @"oauth_nonce", - timestamp(), @"oauth_timestamp", - @"1.0", @"oauth_version", - smString, @"oauth_signature_method", - accessToken, @"oauth_token", - // LEAVE accessToken last or you'll break XAuth attempts - nil]; + NSMutableArray *mutableParams = @[[TDOQueryItem itemWithName:@"oauth_nonce" value:nonce()], + [TDOQueryItem itemWithName:@"oauth_signature_method" value:smString], + [TDOQueryItem itemWithName:@"oauth_consumer_key" value:consumerKey], + [TDOQueryItem itemWithName:@"oauth_timestamp" value:timestamp()], + [TDOQueryItem itemWithName:@"oauth_version" value:@"1.0"]].mutableCopy; + if (accessToken) { + [mutableParams insertObject:[TDOQueryItem itemWithName:@"oauth_token" value:accessToken] atIndex:0]; + } + oauthParams = [mutableParams copy]; signature_secret = [NSString stringWithFormat:@"%@&%@", consumerSecret, tokenSecret ?: @""]; return self; } - (NSString *)signature_base { - NSMutableDictionary *sigParams = [params mutableCopy]; - [sigParams addEntriesFromDictionary:oauthParams]; + NSMutableArray *sigParams = [params mutableCopy]; + [sigParams addObjectsFromArray:oauthParams]; NSMutableString *p3 = [NSMutableString stringWithCapacity:256]; - NSArray *keys = [[sigParams allKeys] sortedArrayUsingSelector:@selector(compare:)]; - for (NSString *key in keys) - { - //[p3 appendString:TDPCEN(key)]; - [p3 appendString:key]; + NSArray *queryItems = [sigParams sortedArrayUsingComparator:^NSComparisonResult(TDOQueryItem * _Nonnull obj1, TDOQueryItem * _Nonnull obj2) { + NSComparisonResult nameResult = [obj1.name compare:obj2.name]; + if (nameResult != NSOrderedSame) { + return nameResult; + } else { + return [obj1.value compare:obj2.value]; + } + }]; + + for (TDOQueryItem *queryItem in queryItems) { + [p3 appendString:queryItem.name]; [p3 appendString:@"="]; - [p3 appendString:[sigParams[key] description]]; + [p3 appendString:queryItem.value]; [p3 appendString:@"&"]; } TDChomp(p3); @@ -158,11 +184,10 @@ - (NSString *)signature { - (NSString *)authorizationHeader { NSMutableString *header = [NSMutableString stringWithCapacity:512]; [header appendString:@"OAuth "]; - for (NSString *key in oauthParams.allKeys) - { - [header appendString:[key description]]; + for (TDOQueryItem *item in oauthParams) { + [header appendString:item.name]; [header appendString:@"=\""]; - [header appendString:[oauthParams[key] description]]; + [header appendString:item.value]; [header appendString:@"\", "]; } [header appendString:@"oauth_signature=\""]; @@ -193,14 +218,15 @@ - (NSMutableURLRequest *)requestWithHeaderValues:(NSDictionary *)headerValues { } // unencodedParameters are encoded and assigned to self->params, returns encoded queryString -- (id)setParameters:(NSDictionary *)unencodedParameters { + +- (id)setParameters:(NSArray *)unencodedParameters +{ NSMutableString *queryString = [NSMutableString string]; - NSMutableDictionary *encodedParameters = [NSMutableDictionary new]; - for (NSString *key in unencodedParameters.allKeys) - { - NSString *enkey = TDPCEN(key); - NSString *envalue = TDPCEN(unencodedParameters[key]); - encodedParameters[enkey] = envalue; + NSMutableArray *encodedParameters = [NSMutableArray new]; + for (TDOQueryItem *queryItem in unencodedParameters) { + NSString *enkey = TDPCEN(queryItem.name); + NSString *envalue = TDPCEN(queryItem.value); + [encodedParameters addObject:[TDOQueryItem itemWithName:enkey value:envalue]]; [queryString appendString:enkey]; [queryString appendString:@"="]; [queryString appendString:envalue]; @@ -246,6 +272,43 @@ + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery dataEncoding:(TDOAuthContentType)dataEncoding headerValues:(NSDictionary *)headerValues signatureMethod:(TDOAuthSignatureMethod)signatureMethod; +{ + NSMutableArray *queryItems = nil; + + if (unencodedParameters != nil) { + queryItems = [NSMutableArray new]; + for (NSString *key in unencodedParameters.allKeys) { + TDOQueryItem *queryItem = [TDOQueryItem itemWithName:key value:unencodedParameters[key]]; + [queryItems addObject:queryItem]; + } + } + + return [self URLRequestForPath:unencodedPathWithoutQuery + queryItems:[queryItems copy] + host:host + consumerKey:consumerKey + consumerSecret:consumerSecret + accessToken:accessToken + tokenSecret:tokenSecret + scheme:scheme + requestMethod:method + dataEncoding:dataEncoding + headerValues:headerValues + signatureMethod:signatureMethod]; +} + ++ (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery + queryItems:(NSArray *)queryItems + host:(NSString *)host + consumerKey:(NSString *)consumerKey + consumerSecret:(NSString *)consumerSecret + accessToken:(NSString *)accessToken + tokenSecret:(NSString *)tokenSecret + scheme:(NSString *)scheme + requestMethod:(NSString *)method + dataEncoding:(TDOAuthContentType)dataEncoding + headerValues:(NSDictionary *)headerValues + signatureMethod:(TDOAuthSignatureMethod)signatureMethod; { if (!host || !unencodedPathWithoutQuery || !scheme || !method) return nil; @@ -267,10 +330,10 @@ + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery oauth->hostAndPathWithoutQuery = [host.lowercaseString stringByAppendingString:encodedPathWithoutQuery]; NSMutableURLRequest *rq; - if ([method isEqualToString:@"GET"] || [method isEqualToString:@"DELETE"] || [method isEqualToString:@"HEAD"]) + if ([method isEqualToString:@"GET"] || [method isEqualToString:@"DELETE"] || [method isEqualToString:@"HEAD"] || (([method isEqualToString:@"POST"] || [method isEqualToString:@"PUT"]) && dataEncoding == TDOAuthContentTypeUrlEncodedQuery)) { - id path = [oauth setParameters:unencodedParameters]; - if (path) { + id path = [oauth setParameters:queryItems]; + if (path && queryItems) { [path insertString:@"?" atIndex:0]; [path insertString:encodedPathWithoutQuery atIndex:0]; } else { @@ -285,9 +348,9 @@ + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery { oauth->url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@://%@%@", scheme, host, encodedPathWithoutQuery]]; - if ((dataEncoding == TDOAuthContentTypeUrlEncodedForm) || (unencodedParameters == nil)) + if ((dataEncoding == TDOAuthContentTypeUrlEncodedForm) || (queryItems == nil)) { - NSMutableString *postbody = [oauth setParameters:unencodedParameters]; + NSMutableString *postbody = [oauth setParameters:queryItems]; rq = [oauth requestWithHeaderValues:headerValues]; if (postbody.length) { @@ -299,11 +362,16 @@ + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery else if (dataEncoding == TDOAuthContentTypeJsonObject) { NSError *error; + // This falls back to dictionary as not sure what's the proper action here. + NSMutableDictionary *unencodedParameters = [NSMutableDictionary new]; + for (TDOQueryItem *queryItem in queryItems) { + unencodedParameters[queryItem.name] = queryItem.value; + } NSData *postbody = [NSJSONSerialization dataWithJSONObject:unencodedParameters options:0 error:&error]; if (error || !postbody) { NSLog(@"Got an error encoding JSON: %@", error); } else { - [oauth setParameters:@{}]; // empty dictionary populates variables without putting data into the signature_base + [oauth setParameters:@[]]; // empty array populates variables without putting data into the signature_base rq = [oauth requestWithHeaderValues:headerValues]; if (postbody.length) { @@ -346,6 +414,38 @@ + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPathWithoutQuery signatureMethod:TDOAuthSignatureMethodHmacSha1]; } +#ifdef USE_NSURLCOMPONENTS ++ (NSURLRequest *)URLRequestForGETURLComponents:(NSURLComponents *)urlComponents + consumerKey:(NSString *)consumerKey + consumerSecret:(NSString *)consumerSecret + accessToken:(NSString *)accessToken + tokenSecret:(NSString *)tokenSecret +{ + NSMutableArray *queryItems = nil; + + if (urlComponents.queryItems != nil) { + queryItems = [NSMutableArray new]; + for (NSURLQueryItem *item in urlComponents.queryItems) { + TDOQueryItem *queryItem = [TDOQueryItem itemWithName:item.name value:item.value]; + [queryItems addObject:queryItem]; + } + } + + return [self URLRequestForPath:urlComponents.path + queryItems:queryItems + host:urlComponents.host + consumerKey:consumerKey + consumerSecret:consumerSecret + accessToken:accessToken + tokenSecret:tokenSecret + scheme:urlComponents.scheme + requestMethod:@"GET" + dataEncoding:TDOAuthContentTypeUrlEncodedForm + headerValues:nil + signatureMethod:TDOAuthSignatureMethodHmacSha1]; +} +#endif + + (NSURLRequest *)URLRequestForPath:(NSString *)unencodedPath POSTParameters:(NSDictionary *)unencodedParameters host:(NSString *)host diff --git a/xcode/Pods/Target Support Files/AFNetworking/Info.plist b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist similarity index 96% rename from xcode/Pods/Target Support Files/AFNetworking/Info.plist rename to xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist index 42c9fae4..b672cd74 100644 --- a/xcode/Pods/Target Support Files/AFNetworking/Info.plist +++ b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.2.1 + 4.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch index e72247a9..beb2a244 100644 --- a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch +++ b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch @@ -10,14 +10,3 @@ #endif #endif -#ifndef TARGET_OS_IOS - #define TARGET_OS_IOS TARGET_OS_IPHONE -#endif - -#ifndef TARGET_OS_WATCH - #define TARGET_OS_WATCH 0 -#endif - -#ifndef TARGET_OS_TV - #define TARGET_OS_TV 0 -#endif diff --git a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h index f090a989..df694f29 100644 --- a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h +++ b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h @@ -28,6 +28,7 @@ #import "UIKit+AFNetworking.h" #import "UIProgressView+AFNetworking.h" #import "UIRefreshControl+AFNetworking.h" +#import "WKWebView+AFNetworking.h" FOUNDATION_EXPORT double AFNetworkingVersionNumber; FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[]; diff --git a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig similarity index 62% rename from xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig rename to xcode/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig index 5a114d83..e66cb151 100644 --- a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig +++ b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.debug.xcconfig @@ -1,9 +1,9 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +PRODUCT_BUNDLE_IDENTIFIER = com.alamofire.AFNetworking SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig new file mode 100644 index 00000000..e66cb151 --- /dev/null +++ b/xcode/Pods/Target Support Files/AFNetworking/AFNetworking.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking +PRODUCT_BUNDLE_IDENTIFIER = com.alamofire.AFNetworking +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/AFOAuth2Manager/Info.plist b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager-Info.plist similarity index 96% rename from xcode/Pods/Target Support Files/AFOAuth2Manager/Info.plist rename to xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager-Info.plist index 45226757..b0b461e3 100644 --- a/xcode/Pods/Target Support Files/AFOAuth2Manager/Info.plist +++ b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0 + 3.0.1 CFBundleSignature ???? CFBundleVersion diff --git a/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.xcconfig b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.debug.xcconfig similarity index 83% rename from xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.xcconfig rename to xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.debug.xcconfig index a3ccb871..a03987c5 100644 --- a/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.xcconfig +++ b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.debug.xcconfig @@ -1,10 +1,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "Security" +OTHER_LDFLAGS = $(inherited) -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFOAuth2Manager PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.release.xcconfig b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.release.xcconfig new file mode 100644 index 00000000..a03987c5 --- /dev/null +++ b/xcode/Pods/Target Support Files/AFOAuth2Manager/AFOAuth2Manager.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFOAuth2Manager +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/AHKActionSheet/Info.plist b/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/AHKActionSheet/Info.plist rename to xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet-Info.plist diff --git a/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.xcconfig b/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.xcconfig rename to xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.debug.xcconfig index 67433553..48926d6a 100644 --- a/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.xcconfig +++ b/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/AHKActionSheet PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.release.xcconfig b/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.release.xcconfig new file mode 100644 index 00000000..48926d6a --- /dev/null +++ b/xcode/Pods/Target Support Files/AHKActionSheet/AHKActionSheet.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/AHKActionSheet +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/APAddressBook/Info.plist b/xcode/Pods/Target Support Files/APAddressBook/APAddressBook-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/APAddressBook/Info.plist rename to xcode/Pods/Target Support Files/APAddressBook/APAddressBook-Info.plist diff --git a/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.xcconfig b/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.debug.xcconfig similarity index 79% rename from xcode/Pods/Target Support Files/APAddressBook/APAddressBook.xcconfig rename to xcode/Pods/Target Support Files/APAddressBook/APAddressBook.debug.xcconfig index fbefa007..0758f56d 100644 --- a/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.xcconfig +++ b/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "AddressBook" +OTHER_LDFLAGS = $(inherited) -framework "AddressBook" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/APAddressBook PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.release.xcconfig b/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.release.xcconfig new file mode 100644 index 00000000..0758f56d --- /dev/null +++ b/xcode/Pods/Target Support Files/APAddressBook/APAddressBook.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AddressBook" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/APAddressBook +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/Info.plist b/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/BBBadgeBarButtonItem/Info.plist rename to xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem-Info.plist diff --git a/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.xcconfig b/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.xcconfig rename to xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.debug.xcconfig index 157a83ab..fc612660 100644 --- a/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.xcconfig +++ b/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/BBBadgeBarButtonItem PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.release.xcconfig b/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.release.xcconfig new file mode 100644 index 00000000..fc612660 --- /dev/null +++ b/xcode/Pods/Target Support Files/BBBadgeBarButtonItem/BBBadgeBarButtonItem.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/BBBadgeBarButtonItem +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.debug.xcconfig b/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.debug.xcconfig new file mode 100644 index 00000000..b506a309 --- /dev/null +++ b/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.debug.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CYRTextView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreText" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/CYRTextView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.release.xcconfig b/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.release.xcconfig new file mode 100644 index 00000000..b506a309 --- /dev/null +++ b/xcode/Pods/Target Support Files/CYRTextView/CYRTextView.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CYRTextView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreText" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/CYRTextView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DAKeyboardControl/Info.plist b/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/DAKeyboardControl/Info.plist rename to xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl-Info.plist diff --git a/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.xcconfig b/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.xcconfig rename to xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.debug.xcconfig index 37384faa..eb0620fa 100644 --- a/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.xcconfig +++ b/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/DAKeyboardControl PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.release.xcconfig b/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.release.xcconfig new file mode 100644 index 00000000..eb0620fa --- /dev/null +++ b/xcode/Pods/Target Support Files/DAKeyboardControl/DAKeyboardControl.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DAKeyboardControl +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DHSmartScreenshot/Info.plist b/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/DHSmartScreenshot/Info.plist rename to xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot-Info.plist diff --git a/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.xcconfig b/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.xcconfig rename to xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.debug.xcconfig index 2224b7f8..165e7d35 100644 --- a/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.xcconfig +++ b/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/DHSmartScreenshot PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.release.xcconfig b/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.release.xcconfig new file mode 100644 index 00000000..165e7d35 --- /dev/null +++ b/xcode/Pods/Target Support Files/DHSmartScreenshot/DHSmartScreenshot.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DHSmartScreenshot +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DTCoreText/Info.plist b/xcode/Pods/Target Support Files/DTCoreText/DTCoreText-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/DTCoreText/Info.plist rename to xcode/Pods/Target Support Files/DTCoreText/DTCoreText-Info.plist diff --git a/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.xcconfig b/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig similarity index 71% rename from xcode/Pods/Target Support Files/DTCoreText/DTCoreText.xcconfig rename to xcode/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig index 1c1efcb0..b3419748 100644 --- a/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.xcconfig +++ b/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.debug.xcconfig @@ -1,10 +1,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "CoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTCoreText PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig b/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig new file mode 100644 index 00000000..b3419748 --- /dev/null +++ b/xcode/Pods/Target Support Files/DTCoreText/DTCoreText.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "ImageIO" -framework "MediaPlayer" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTCoreText +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-Info.plist b/xcode/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-Info.plist rename to xcode/Pods/Target Support Files/DTCoreText/ResourceBundle-Resources-DTCoreText-Info.plist diff --git a/xcode/Pods/Target Support Files/DTFoundation/Info.plist b/xcode/Pods/Target Support Files/DTFoundation/DTFoundation-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/DTFoundation/Info.plist rename to xcode/Pods/Target Support Files/DTFoundation/DTFoundation-Info.plist diff --git a/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.xcconfig b/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig similarity index 69% rename from xcode/Pods/Target Support Files/DTFoundation/DTFoundation.xcconfig rename to xcode/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig index 89d4ce1c..d379352e 100644 --- a/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.xcconfig +++ b/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.debug.xcconfig @@ -1,10 +1,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" -OTHER_LDFLAGS = -l"sqlite3" -l"xml2" -l"z" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"xml2" -l"z" -framework "CoreServices" -framework "ImageIO" -framework "QuartzCore" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTFoundation PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig b/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig new file mode 100644 index 00000000..d379352e --- /dev/null +++ b/xcode/Pods/Target Support Files/DTFoundation/DTFoundation.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"xml2" -l"z" -framework "CoreServices" -framework "ImageIO" -framework "QuartzCore" -framework "SystemConfiguration" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/DTFoundation +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/FLEX/Info.plist b/xcode/Pods/Target Support Files/FLEX/FLEX-Info.plist similarity index 96% rename from xcode/Pods/Target Support Files/FLEX/Info.plist rename to xcode/Pods/Target Support Files/FLEX/FLEX-Info.plist index 45226757..cd98f8af 100644 --- a/xcode/Pods/Target Support Files/FLEX/Info.plist +++ b/xcode/Pods/Target Support Files/FLEX/FLEX-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.0.0 + 4.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/xcode/Pods/Target Support Files/FLEX/FLEX-umbrella.h b/xcode/Pods/Target Support Files/FLEX/FLEX-umbrella.h index cf7dcc25..5184ddac 100644 --- a/xcode/Pods/Target Support Files/FLEX/FLEX-umbrella.h +++ b/xcode/Pods/Target Support Files/FLEX/FLEX-umbrella.h @@ -10,8 +10,102 @@ #endif #endif -#import "FLEXManager.h" +#import "FLEX-Categories.h" +#import "FLEX-Core.h" +#import "FLEX-ObjectExploring.h" +#import "FLEX-Runtime.h" #import "FLEX.h" +#import "FLEXManager+Extensibility.h" +#import "FLEXManager+Networking.h" +#import "FLEXManager.h" +#import "FLEXExplorerToolbar.h" +#import "FLEXExplorerToolbarItem.h" +#import "FLEXGlobalsEntry.h" +#import "FLEXFilteringTableViewController.h" +#import "FLEXNavigationController.h" +#import "FLEXTableViewController.h" +#import "FLEXSingleRowSection.h" +#import "FLEXTableViewSection.h" +#import "FLEXCarouselCell.h" +#import "FLEXScopeCarousel.h" +#import "FLEXCodeFontCell.h" +#import "FLEXKeyValueTableViewCell.h" +#import "FLEXMultilineTableViewCell.h" +#import "FLEXSubtitleTableViewCell.h" +#import "FLEXTableViewCell.h" +#import "FLEXTableView.h" +#import "FLEXObjcInternal.h" +#import "FLEXRuntimeConstants.h" +#import "FLEXRuntimeSafety.h" +#import "FLEXTypeEncodingParser.h" +#import "FLEXBlockDescription.h" +#import "FLEXClassBuilder.h" +#import "FLEXIvar.h" +#import "FLEXMethod.h" +#import "FLEXMethodBase.h" +#import "FLEXMirror.h" +#import "FLEXProperty.h" +#import "FLEXPropertyAttributes.h" +#import "FLEXProtocol.h" +#import "FLEXProtocolBuilder.h" +#import "FLEXObjectExplorer.h" +#import "FLEXObjectExplorerFactory.h" +#import "FLEXObjectExplorerViewController.h" +#import "FLEXCollectionContentSection.h" +#import "FLEXColorPreviewSection.h" +#import "FLEXDefaultsContentSection.h" +#import "FLEXMetadataSection.h" +#import "FLEXMutableListSection.h" +#import "FLEXObjectInfoSection.h" +#import "FLEXBlockShortcuts.h" +#import "FLEXBundleShortcuts.h" +#import "FLEXClassShortcuts.h" +#import "FLEXImageShortcuts.h" +#import "FLEXLayerShortcuts.h" +#import "FLEXShortcut.h" +#import "FLEXShortcutsFactory+Defaults.h" +#import "FLEXShortcutsSection.h" +#import "FLEXViewControllerShortcuts.h" +#import "FLEXViewShortcuts.h" +#import "FLEXArgumentInputColorView.h" +#import "FLEXArgumentInputDateView.h" +#import "FLEXArgumentInputFontsPickerView.h" +#import "FLEXArgumentInputFontView.h" +#import "FLEXArgumentInputNotSupportedView.h" +#import "FLEXArgumentInputNumberView.h" +#import "FLEXArgumentInputObjectView.h" +#import "FLEXArgumentInputStringView.h" +#import "FLEXArgumentInputStructView.h" +#import "FLEXArgumentInputSwitchView.h" +#import "FLEXArgumentInputTextView.h" +#import "FLEXArgumentInputView.h" +#import "FLEXArgumentInputViewFactory.h" +#import "FLEXDefaultEditorViewController.h" +#import "FLEXFieldEditorView.h" +#import "FLEXFieldEditorViewController.h" +#import "FLEXMethodCallingViewController.h" +#import "FLEXVariableEditorViewController.h" +#import "FLEXMacros.h" +#import "CALayer+FLEX.h" +#import "FLEXRuntime+Compare.h" +#import "FLEXRuntime+UIKitHelpers.h" +#import "NSArray+FLEX.h" +#import "NSDictionary+ObjcRuntime.h" +#import "NSMapTable+FLEX_Subscripting.h" +#import "NSObject+FLEX_Reflection.h" +#import "NSString+FLEX.h" +#import "NSString+ObjcRuntime.h" +#import "NSTimer+FLEX.h" +#import "NSUserDefaults+FLEX.h" +#import "UIBarButtonItem+FLEX.h" +#import "UIFont+FLEX.h" +#import "UIGestureRecognizer+Blocks.h" +#import "UIMenu+FLEX.h" +#import "UIPasteboard+FLEX.h" +#import "UITextField+Range.h" +#import "UIView+FLEX_Layout.h" +#import "FLEXAlert.h" +#import "FLEXResources.h" FOUNDATION_EXPORT double FLEXVersionNumber; FOUNDATION_EXPORT const unsigned char FLEXVersionString[]; diff --git a/xcode/Pods/Target Support Files/FLEX/FLEX.xcconfig b/xcode/Pods/Target Support Files/FLEX/FLEX.debug.xcconfig similarity index 61% rename from xcode/Pods/Target Support Files/FLEX/FLEX.xcconfig rename to xcode/Pods/Target Support Files/FLEX/FLEX.debug.xcconfig index 5d132455..76df1c14 100644 --- a/xcode/Pods/Target Support Files/FLEX/FLEX.xcconfig +++ b/xcode/Pods/Target Support Files/FLEX/FLEX.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FLEX GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WebKit" +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WebKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/FLEX PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/FLEX/FLEX.release.xcconfig b/xcode/Pods/Target Support Files/FLEX/FLEX.release.xcconfig new file mode 100644 index 00000000..76df1c14 --- /dev/null +++ b/xcode/Pods/Target Support Files/FLEX/FLEX.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FLEX +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "QuartzCore" -framework "Security" -framework "UIKit" -framework "WebKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FLEX +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/FreeStreamer/Info.plist b/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/FreeStreamer/Info.plist rename to xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer-Info.plist diff --git a/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.xcconfig b/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.debug.xcconfig similarity index 74% rename from xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.xcconfig rename to xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.debug.xcconfig index 435c4afe..5618fd54 100644 --- a/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.xcconfig +++ b/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.debug.xcconfig @@ -2,10 +2,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/include/libxml2 -OTHER_LDFLAGS = -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "MediaPlayer" +OTHER_LDFLAGS = $(inherited) -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "MediaPlayer" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/FreeStreamer PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.release.xcconfig b/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.release.xcconfig new file mode 100644 index 00000000..5618fd54 --- /dev/null +++ b/xcode/Pods/Target Support Files/FreeStreamer/FreeStreamer.release.xcconfig @@ -0,0 +1,12 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/include/libxml2 +OTHER_LDFLAGS = $(inherited) -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "MediaPlayer" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/FreeStreamer +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/HMSegmentedControl/Info.plist b/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/HMSegmentedControl/Info.plist rename to xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl-Info.plist diff --git a/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.xcconfig b/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.xcconfig rename to xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.debug.xcconfig index 85321913..1ef6792a 100644 --- a/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.xcconfig +++ b/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/HMSegmentedControl PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.release.xcconfig b/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.release.xcconfig new file mode 100644 index 00000000..1ef6792a --- /dev/null +++ b/xcode/Pods/Target Support Files/HMSegmentedControl/HMSegmentedControl.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/HMSegmentedControl +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/INTULocationManager/Info.plist b/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/INTULocationManager/Info.plist rename to xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager-Info.plist diff --git a/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.xcconfig b/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.xcconfig rename to xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.debug.xcconfig index 78e5ebce..00db2a7b 100644 --- a/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.xcconfig +++ b/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/INTULocationManager PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.release.xcconfig b/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.release.xcconfig new file mode 100644 index 00000000..00db2a7b --- /dev/null +++ b/xcode/Pods/Target Support Files/INTULocationManager/INTULocationManager.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/INTULocationManager +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/IQAudioRecorderController/Info.plist b/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/IQAudioRecorderController/Info.plist rename to xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController-Info.plist diff --git a/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.xcconfig b/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.debug.xcconfig similarity index 70% rename from xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.xcconfig rename to xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.debug.xcconfig index ef96003b..db2428b2 100644 --- a/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.xcconfig +++ b/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.debug.xcconfig @@ -1,10 +1,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "Foundation" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQAudioRecorderController PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.release.xcconfig b/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.release.xcconfig new file mode 100644 index 00000000..db2428b2 --- /dev/null +++ b/xcode/Pods/Target Support Files/IQAudioRecorderController/IQAudioRecorderController.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "Foundation" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/IQAudioRecorderController +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/JDStatusBarNotification/Info.plist b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification-Info.plist similarity index 96% rename from xcode/Pods/Target Support Files/JDStatusBarNotification/Info.plist rename to xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification-Info.plist index 2f66809b..1b1d3d06 100644 --- a/xcode/Pods/Target Support Files/JDStatusBarNotification/Info.plist +++ b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.6.0 + 1.6.1 CFBundleSignature ???? CFBundleVersion diff --git a/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.xcconfig b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.xcconfig rename to xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.debug.xcconfig index 16d96d48..b3b2ac00 100644 --- a/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.xcconfig +++ b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/JDStatusBarNotification PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.release.xcconfig b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.release.xcconfig new file mode 100644 index 00000000..b3b2ac00 --- /dev/null +++ b/xcode/Pods/Target Support Files/JDStatusBarNotification/JDStatusBarNotification.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/JDStatusBarNotification +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/JSCoreBom/Info.plist b/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/JSCoreBom/Info.plist rename to xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom-Info.plist diff --git a/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.xcconfig b/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.debug.xcconfig similarity index 79% rename from xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.xcconfig rename to xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.debug.xcconfig index ff20a056..0c0ee176 100644 --- a/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.xcconfig +++ b/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "JavaScriptCore" +OTHER_LDFLAGS = $(inherited) -framework "JavaScriptCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/JSCoreBom PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.release.xcconfig b/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.release.xcconfig new file mode 100644 index 00000000..0c0ee176 --- /dev/null +++ b/xcode/Pods/Target Support Files/JSCoreBom/JSCoreBom.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "JavaScriptCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/JSCoreBom +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/MBProgressHUD/Info.plist b/xcode/Pods/Target Support Files/MBProgressHUD/Info.plist deleted file mode 100644 index 21a30b4a..00000000 --- a/xcode/Pods/Target Support Files/MBProgressHUD/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/NSHash/Info.plist b/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/NSHash/Info.plist rename to xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-Info.plist diff --git a/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig b/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.debug.xcconfig similarity index 76% rename from xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig rename to xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.debug.xcconfig index 8fab560f..c6a4f6cc 100644 --- a/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig +++ b/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/MBProgressHUD PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.release.xcconfig b/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.release.xcconfig new file mode 100644 index 00000000..c6a4f6cc --- /dev/null +++ b/xcode/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/MBProgressHUD +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/NSGIF/Info.plist b/xcode/Pods/Target Support Files/NSGIF/NSGIF-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/NSGIF/Info.plist rename to xcode/Pods/Target Support Files/NSGIF/NSGIF-Info.plist diff --git a/xcode/Pods/Target Support Files/NSGIF/NSGIF.xcconfig b/xcode/Pods/Target Support Files/NSGIF/NSGIF.debug.xcconfig similarity index 88% rename from xcode/Pods/Target Support Files/NSGIF/NSGIF.xcconfig rename to xcode/Pods/Target Support Files/NSGIF/NSGIF.debug.xcconfig index cd246a52..f20cd980 100644 --- a/xcode/Pods/Target Support Files/NSGIF/NSGIF.xcconfig +++ b/xcode/Pods/Target Support Files/NSGIF/NSGIF.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSGIF PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/NSGIF/NSGIF.release.xcconfig b/xcode/Pods/Target Support Files/NSGIF/NSGIF.release.xcconfig new file mode 100644 index 00000000..f20cd980 --- /dev/null +++ b/xcode/Pods/Target Support Files/NSGIF/NSGIF.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NSGIF +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSGIF +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/NSHash/NSHash-Info.plist b/xcode/Pods/Target Support Files/NSHash/NSHash-Info.plist new file mode 100644 index 00000000..2a9158a0 --- /dev/null +++ b/xcode/Pods/Target Support Files/NSHash/NSHash-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.2.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/NSHash/NSHash.xcconfig b/xcode/Pods/Target Support Files/NSHash/NSHash.debug.xcconfig similarity index 88% rename from xcode/Pods/Target Support Files/NSHash/NSHash.xcconfig rename to xcode/Pods/Target Support Files/NSHash/NSHash.debug.xcconfig index de8a0e38..244401c5 100644 --- a/xcode/Pods/Target Support Files/NSHash/NSHash.xcconfig +++ b/xcode/Pods/Target Support Files/NSHash/NSHash.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSHash PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/NSHash/NSHash.release.xcconfig b/xcode/Pods/Target Support Files/NSHash/NSHash.release.xcconfig new file mode 100644 index 00000000..244401c5 --- /dev/null +++ b/xcode/Pods/Target Support Files/NSHash/NSHash.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NSHash +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSHash +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist b/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/OMGHTTPURLRQ/Info.plist rename to xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ-Info.plist diff --git a/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig b/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig rename to xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.debug.xcconfig index 9c39c0f2..14f6cbd2 100644 --- a/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.xcconfig +++ b/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/OMGHTTPURLRQ PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.release.xcconfig b/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.release.xcconfig new file mode 100644 index 00000000..14f6cbd2 --- /dev/null +++ b/xcode/Pods/Target Support Files/OMGHTTPURLRQ/OMGHTTPURLRQ.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/OMGHTTPURLRQ +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/PHFComposeBarView/Info.plist b/xcode/Pods/Target Support Files/PHFComposeBarView/Info.plist deleted file mode 100644 index 09cb0fc5..00000000 --- a/xcode/Pods/Target Support Files/PHFComposeBarView/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.0.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView-Info.plist b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView-Info.plist new file mode 100644 index 00000000..7f71fffc --- /dev/null +++ b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.xcconfig b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.debug.xcconfig similarity index 90% rename from xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.xcconfig rename to xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.debug.xcconfig index 922a895f..665fe2ea 100644 --- a/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.xcconfig +++ b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.debug.xcconfig @@ -7,3 +7,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/PHFComposeBarView PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.release.xcconfig b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.release.xcconfig new file mode 100644 index 00000000..665fe2ea --- /dev/null +++ b/xcode/Pods/Target Support Files/PHFComposeBarView/PHFComposeBarView.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/PHFComposeBarView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/PHFDelegateChain/Info.plist b/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/PHFDelegateChain/Info.plist rename to xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain-Info.plist diff --git a/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.xcconfig b/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.xcconfig rename to xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.debug.xcconfig index 40708292..6881816e 100644 --- a/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.xcconfig +++ b/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/PHFDelegateChain PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.release.xcconfig b/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.release.xcconfig new file mode 100644 index 00000000..6881816e --- /dev/null +++ b/xcode/Pods/Target Support Files/PHFDelegateChain/PHFDelegateChain.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/PHFDelegateChain +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Info.plist b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/Pods-Jasonette/Info.plist rename to xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-Info.plist diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.markdown b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.markdown index c7bf2cc5..fca5b75e 100644 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.markdown +++ b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.markdown @@ -3,7 +3,7 @@ This application makes use of the following third party libraries: ## AFNetworking -Copyright (c) 2011-2016 Alamofire Software Foundation (http://alamofire.org/) +Copyright (c) 2011-2020 Alamofire Software Foundation (http://alamofire.org/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -447,7 +447,7 @@ THE SOFTWARE. ## MBProgressHUD -Copyright © 2009-2016 Matej Bukovinski +Copyright © 2009-2020 Matej Bukovinski Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -768,7 +768,7 @@ THE SOFTWARE. The MIT License (MIT) -Copyright (c) 2015 Roland Moers +Copyright (c) 2015-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -792,7 +792,7 @@ SOFTWARE. ## RMDateSelectionViewController -Copyright (c) 2013-2015 Roland Moers +Copyright (c) 2013-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -812,6 +812,7 @@ 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. + ## Reachability Copyright (c) 2011, Tony Million. diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.plist b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.plist index 331a66eb..4c33e071 100644 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.plist +++ b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-acknowledgements.plist @@ -14,7 +14,7 @@
FooterText - Copyright (c) 2011-2016 Alamofire Software Foundation (http://alamofire.org/) + Copyright (c) 2011-2020 Alamofire Software Foundation (http://alamofire.org/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -560,7 +560,7 @@ THE SOFTWARE. FooterText - Copyright © 2009-2016 Matej Bukovinski + Copyright © 2009-2020 Matej Bukovinski Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -923,7 +923,7 @@ THE SOFTWARE. FooterText The MIT License (MIT) -Copyright (c) 2015 Roland Moers +Copyright (c) 2015-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -953,7 +953,7 @@ SOFTWARE. FooterText - Copyright (c) 2013-2015 Roland Moers + Copyright (c) 2013-2017 Roland Moers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -971,7 +971,8 @@ 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. +THE SOFTWARE. + License MIT Title diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh index 990634f1..16c77155 100755 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh +++ b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-frameworks.sh @@ -3,10 +3,15 @@ set -e set -u set -o pipefail +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" @@ -36,19 +41,24 @@ install_framework() local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" + echo "Symlinked..." + source="$(readlink "${source}")" fi # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" fi # Strip invalid architectures so "fat" simulator / device frameworks work on device @@ -62,7 +72,7 @@ install_framework() # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" @@ -74,35 +84,45 @@ install_framework() # Copies and strips a vendored dSYM install_dsym() { local source="$1" + warn_missing_arch=${2:-true} if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. + # Copy the dSYM into the targets temp dir. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" fi if [[ $STRIP_BINARY_RETVAL == 1 ]]; then # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" else # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi } +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" @@ -117,13 +137,16 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" + warn_missing_arch=${2:-true} # Get architectures for current target binary binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" # Intersect them with the architectures we are building for intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" # If there are no archs supported by this binary then warn the user if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi STRIP_BINARY_RETVAL=0 return fi @@ -131,7 +154,7 @@ strip_invalid_archs() { for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + lipo -remove "$arch" -output "$binary" "$binary" stripped="$stripped $arch" fi done @@ -141,6 +164,37 @@ strip_invalid_archs() { STRIP_BINARY_RETVAL=1 } +install_artifact() { + artifact="$1" + base="$(basename "$artifact")" + case $base in + *.framework) + install_framework "$artifact" + ;; + *.dSYM) + # Suppress arch warnings since XCFrameworks will include many dSYM files + install_dsym "$artifact" "false" + ;; + *.bcsymbolmap) + install_bcsymbolmap "$artifact" + ;; + *) + echo "error: Unrecognized artifact "$artifact"" + ;; + esac +} + +copy_artifacts() { + file_list="$1" + while read artifact; do + install_artifact "$artifact" + done <$file_list +} + +ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" +if [ -r "${ARTIFACT_LIST_FILE}" ]; then + copy_artifacts "${ARTIFACT_LIST_FILE}" +fi if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework" diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-resources.sh b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-resources.sh deleted file mode 100755 index 345301f2..00000000 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette-resources.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.debug.xcconfig b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.debug.xcconfig index dd7b6581..c181696a 100644 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.debug.xcconfig +++ b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.debug.xcconfig @@ -1,10 +1,11 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager" "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet" "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook" "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem" "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl" "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot" "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification" "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF" "${PODS_CONFIGURATION_BUILD_DIR}/NSHash" "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ" "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView" "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain" "${PODS_CONFIGURATION_BUILD_DIR}/REMenu" "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController" "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SBJson" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton" "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell" "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager" "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore" "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" $(SDKROOT)/usr/include/libxml2 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" "$(SDKROOT)/usr/include/libxml2" $(SDKROOT)/usr/include/libxml2 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "AFOAuth2Manager" -framework "AHKActionSheet" -framework "APAddressBook" -framework "BBBadgeBarButtonItem" -framework "CoreText" -framework "DAKeyboardControl" -framework "DHSmartScreenshot" -framework "DTCoreText" -framework "DTFoundation" -framework "FLEX" -framework "FreeStreamer" -framework "HMSegmentedControl" -framework "INTULocationManager" -framework "IQAudioRecorderController" -framework "JDStatusBarNotification" -framework "JSCoreBom" -framework "MBProgressHUD" -framework "NSGIF" -framework "NSHash" -framework "OMGHTTPURLRQ" -framework "PHFComposeBarView" -framework "PHFDelegateChain" -framework "REMenu" -framework "RMActionController" -framework "RMDateSelectionViewController" -framework "Reachability" -framework "SBJson" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SWFrameButton" -framework "SWTableViewCell" -framework "SZTextView" -framework "SocketRocket" -framework "TDOAuth" -framework "TTTAttributedLabel" -framework "TWMessageBarManager" -framework "UICKeyChainStore" -framework "libPhoneNumber_iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FLEX/FLEX.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FLEX" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/NSHash" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/REMenu" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SBJson" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS" +OTHER_LDFLAGS = $(inherited) -l"c++" -l"icucore" -l"sqlite3" -l"xml2" -l"z" -framework "AFNetworking" -framework "AFOAuth2Manager" -framework "AHKActionSheet" -framework "APAddressBook" -framework "AVFoundation" -framework "AddressBook" -framework "AudioToolbox" -framework "BBBadgeBarButtonItem" -framework "CFNetwork" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "DAKeyboardControl" -framework "DHSmartScreenshot" -framework "DTCoreText" -framework "DTFoundation" -framework "FLEX" -framework "Foundation" -framework "FreeStreamer" -framework "HMSegmentedControl" -framework "INTULocationManager" -framework "IQAudioRecorderController" -framework "ImageIO" -framework "JDStatusBarNotification" -framework "JSCoreBom" -framework "JavaScriptCore" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "NSGIF" -framework "NSHash" -framework "OMGHTTPURLRQ" -framework "PHFComposeBarView" -framework "PHFDelegateChain" -framework "QuartzCore" -framework "REMenu" -framework "RMActionController" -framework "RMDateSelectionViewController" -framework "Reachability" -framework "SBJson" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SWFrameButton" -framework "SWTableViewCell" -framework "SZTextView" -framework "Security" -framework "SocketRocket" -framework "SystemConfiguration" -framework "TDOAuth" -framework "TTTAttributedLabel" -framework "TWMessageBarManager" -framework "UICKeyChainStore" -framework "UIKit" -framework "WebKit" -framework "libPhoneNumber_iOS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.release.xcconfig b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.release.xcconfig index 36b91a85..38461191 100644 --- a/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.release.xcconfig +++ b/xcode/Pods/Target Support Files/Pods-Jasonette/Pods-Jasonette.release.xcconfig @@ -1,10 +1,11 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager" "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet" "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook" "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem" "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl" "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot" "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification" "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF" "${PODS_CONFIGURATION_BUILD_DIR}/NSHash" "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ" "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView" "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain" "${PODS_CONFIGURATION_BUILD_DIR}/REMenu" "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController" "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" "${PODS_CONFIGURATION_BUILD_DIR}/SBJson" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton" "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell" "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager" "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore" "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "$(SDKROOT)/usr/include/libxml2" $(SDKROOT)/usr/include/libxml2 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" "$(SDKROOT)/usr/include/libxml2" $(SDKROOT)/usr/include/libxml2 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "AFNetworking" -framework "AFOAuth2Manager" -framework "AHKActionSheet" -framework "APAddressBook" -framework "BBBadgeBarButtonItem" -framework "CoreText" -framework "DAKeyboardControl" -framework "DHSmartScreenshot" -framework "DTCoreText" -framework "DTFoundation" -framework "FreeStreamer" -framework "HMSegmentedControl" -framework "INTULocationManager" -framework "IQAudioRecorderController" -framework "JDStatusBarNotification" -framework "JSCoreBom" -framework "MBProgressHUD" -framework "NSGIF" -framework "NSHash" -framework "OMGHTTPURLRQ" -framework "PHFComposeBarView" -framework "PHFDelegateChain" -framework "REMenu" -framework "RMActionController" -framework "RMDateSelectionViewController" -framework "Reachability" -framework "SBJson" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SWFrameButton" -framework "SWTableViewCell" -framework "SZTextView" -framework "SocketRocket" -framework "TDOAuth" -framework "TTTAttributedLabel" -framework "TWMessageBarManager" -framework "UICKeyChainStore" -framework "libPhoneNumber_iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager/AFOAuth2Manager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet/AHKActionSheet.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook/APAddressBook.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem/BBBadgeBarButtonItem.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl/DAKeyboardControl.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot/DHSmartScreenshot.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText/DTCoreText.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation/DTFoundation.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer/FreeStreamer.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl/HMSegmentedControl.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager/INTULocationManager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController/IQAudioRecorderController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification/JDStatusBarNotification.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom/JSCoreBom.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF/NSGIF.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/NSHash/NSHash.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ/OMGHTTPURLRQ.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView/PHFComposeBarView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain/PHFDelegateChain.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/REMenu/REMenu.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController/RMActionController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController/RMDateSelectionViewController.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/Reachability/Reachability.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SBJson/SBJson.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView/SCSiriWaveformView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton/SWFrameButton.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell/SWTableViewCell.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView/SZTextView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth/TDOAuth.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager/TWMessageBarManager.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore/UICKeyChainStore.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS/libPhoneNumber_iOS.framework/Headers" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AFOAuth2Manager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/AHKActionSheet" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/APAddressBook" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/BBBadgeBarButtonItem" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DAKeyboardControl" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DHSmartScreenshot" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DTCoreText" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/DTFoundation" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/FreeStreamer" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/HMSegmentedControl" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/INTULocationManager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/IQAudioRecorderController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JDStatusBarNotification" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/JSCoreBom" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/NSGIF" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/NSHash" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/PHFComposeBarView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/PHFDelegateChain" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/REMenu" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/Reachability" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SBJson" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SZTextView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS" +OTHER_LDFLAGS = $(inherited) -l"c++" -l"icucore" -l"sqlite3" -l"xml2" -l"z" -framework "AFNetworking" -framework "AFOAuth2Manager" -framework "AHKActionSheet" -framework "APAddressBook" -framework "AVFoundation" -framework "AddressBook" -framework "AudioToolbox" -framework "BBBadgeBarButtonItem" -framework "CFNetwork" -framework "CoreAudio" -framework "CoreGraphics" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "DAKeyboardControl" -framework "DHSmartScreenshot" -framework "DTCoreText" -framework "DTFoundation" -framework "Foundation" -framework "FreeStreamer" -framework "HMSegmentedControl" -framework "INTULocationManager" -framework "IQAudioRecorderController" -framework "ImageIO" -framework "JDStatusBarNotification" -framework "JSCoreBom" -framework "JavaScriptCore" -framework "MBProgressHUD" -framework "MediaPlayer" -framework "NSGIF" -framework "NSHash" -framework "OMGHTTPURLRQ" -framework "PHFComposeBarView" -framework "PHFDelegateChain" -framework "QuartzCore" -framework "REMenu" -framework "RMActionController" -framework "RMDateSelectionViewController" -framework "Reachability" -framework "SBJson" -framework "SCSiriWaveformView" -framework "SDWebImage" -framework "SWFrameButton" -framework "SWTableViewCell" -framework "SZTextView" -framework "Security" -framework "SocketRocket" -framework "SystemConfiguration" -framework "TDOAuth" -framework "TTTAttributedLabel" -framework "TWMessageBarManager" -framework "UICKeyChainStore" -framework "UIKit" -framework "libPhoneNumber_iOS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/REMenu/Info.plist b/xcode/Pods/Target Support Files/REMenu/REMenu-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/REMenu/Info.plist rename to xcode/Pods/Target Support Files/REMenu/REMenu-Info.plist diff --git a/xcode/Pods/Target Support Files/REMenu/REMenu.xcconfig b/xcode/Pods/Target Support Files/REMenu/REMenu.debug.xcconfig similarity index 79% rename from xcode/Pods/Target Support Files/REMenu/REMenu.xcconfig rename to xcode/Pods/Target Support Files/REMenu/REMenu.debug.xcconfig index e1936f70..695799db 100644 --- a/xcode/Pods/Target Support Files/REMenu/REMenu.xcconfig +++ b/xcode/Pods/Target Support Files/REMenu/REMenu.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/REMenu GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/REMenu PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/REMenu/REMenu.release.xcconfig b/xcode/Pods/Target Support Files/REMenu/REMenu.release.xcconfig new file mode 100644 index 00000000..695799db --- /dev/null +++ b/xcode/Pods/Target Support Files/REMenu/REMenu.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/REMenu +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/REMenu +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/RMActionController/Info.plist b/xcode/Pods/Target Support Files/RMActionController/Info.plist deleted file mode 100644 index a5730fa1..00000000 --- a/xcode/Pods/Target Support Files/RMActionController/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.5 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/RMActionController/RMActionController-Info.plist b/xcode/Pods/Target Support Files/RMActionController/RMActionController-Info.plist new file mode 100644 index 00000000..10f280eb --- /dev/null +++ b/xcode/Pods/Target Support Files/RMActionController/RMActionController-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/RMActionController/RMActionController-umbrella.h b/xcode/Pods/Target Support Files/RMActionController/RMActionController-umbrella.h index c56d5e05..8de13645 100644 --- a/xcode/Pods/Target Support Files/RMActionController/RMActionController-umbrella.h +++ b/xcode/Pods/Target Support Files/RMActionController/RMActionController-umbrella.h @@ -11,6 +11,10 @@ #endif #import "RMActionController.h" +#import "RMAction.h" +#import "RMImageAction.h" +#import "RMGroupedAction.h" +#import "RMScrollableGroupedAction.h" FOUNDATION_EXPORT double RMActionControllerVersionNumber; FOUNDATION_EXPORT const unsigned char RMActionControllerVersionString[]; diff --git a/xcode/Pods/Target Support Files/RMActionController/RMActionController.xcconfig b/xcode/Pods/Target Support Files/RMActionController/RMActionController.debug.xcconfig similarity index 76% rename from xcode/Pods/Target Support Files/RMActionController/RMActionController.xcconfig rename to xcode/Pods/Target Support Files/RMActionController/RMActionController.debug.xcconfig index c1aeb562..b3adad4f 100644 --- a/xcode/Pods/Target Support Files/RMActionController/RMActionController.xcconfig +++ b/xcode/Pods/Target Support Files/RMActionController/RMActionController.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RMActionController GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/RMActionController PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/RMActionController/RMActionController.release.xcconfig b/xcode/Pods/Target Support Files/RMActionController/RMActionController.release.xcconfig new file mode 100644 index 00000000..b3adad4f --- /dev/null +++ b/xcode/Pods/Target Support Files/RMActionController/RMActionController.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RMActionController +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/RMActionController +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/RMDateSelectionViewController/Info.plist b/xcode/Pods/Target Support Files/RMDateSelectionViewController/Info.plist deleted file mode 100644 index 763f9a65..00000000 --- a/xcode/Pods/Target Support Files/RMDateSelectionViewController/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.0.3 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-Info.plist b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-Info.plist new file mode 100644 index 00000000..a7b58ed3 --- /dev/null +++ b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.3.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.xcconfig b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.debug.xcconfig similarity index 91% rename from xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.xcconfig rename to xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.debug.xcconfig index d2c34f14..0080def5 100644 --- a/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.xcconfig +++ b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.debug.xcconfig @@ -7,3 +7,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/RMDateSelectionViewController PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.release.xcconfig b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.release.xcconfig new file mode 100644 index 00000000..0080def5 --- /dev/null +++ b/xcode/Pods/Target Support Files/RMDateSelectionViewController/RMDateSelectionViewController.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/RMDateSelectionViewController +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/RMActionController" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/RMDateSelectionViewController +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/Reachability/Info.plist b/xcode/Pods/Target Support Files/Reachability/Reachability-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/Reachability/Info.plist rename to xcode/Pods/Target Support Files/Reachability/Reachability-Info.plist diff --git a/xcode/Pods/Target Support Files/Reachability/Reachability.xcconfig b/xcode/Pods/Target Support Files/Reachability/Reachability.debug.xcconfig similarity index 78% rename from xcode/Pods/Target Support Files/Reachability/Reachability.xcconfig rename to xcode/Pods/Target Support Files/Reachability/Reachability.debug.xcconfig index 6abb28c5..35557250 100644 --- a/xcode/Pods/Target Support Files/Reachability/Reachability.xcconfig +++ b/xcode/Pods/Target Support Files/Reachability/Reachability.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Reachability GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "SystemConfiguration" +OTHER_LDFLAGS = $(inherited) -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Reachability PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/Reachability/Reachability.release.xcconfig b/xcode/Pods/Target Support Files/Reachability/Reachability.release.xcconfig new file mode 100644 index 00000000..35557250 --- /dev/null +++ b/xcode/Pods/Target Support Files/Reachability/Reachability.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Reachability +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "SystemConfiguration" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Reachability +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SBJson/Info.plist b/xcode/Pods/Target Support Files/SBJson/SBJson-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/SBJson/Info.plist rename to xcode/Pods/Target Support Files/SBJson/SBJson-Info.plist diff --git a/xcode/Pods/Target Support Files/SBJson/SBJson.xcconfig b/xcode/Pods/Target Support Files/SBJson/SBJson.debug.xcconfig similarity index 88% rename from xcode/Pods/Target Support Files/SBJson/SBJson.xcconfig rename to xcode/Pods/Target Support Files/SBJson/SBJson.debug.xcconfig index de6d4757..c3b35efb 100644 --- a/xcode/Pods/Target Support Files/SBJson/SBJson.xcconfig +++ b/xcode/Pods/Target Support Files/SBJson/SBJson.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SBJson PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SBJson/SBJson.release.xcconfig b/xcode/Pods/Target Support Files/SBJson/SBJson.release.xcconfig new file mode 100644 index 00000000..c3b35efb --- /dev/null +++ b/xcode/Pods/Target Support Files/SBJson/SBJson.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SBJson +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SBJson +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SCSiriWaveformView/Info.plist b/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/SCSiriWaveformView/Info.plist rename to xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView-Info.plist diff --git a/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.xcconfig b/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.debug.xcconfig similarity index 68% rename from xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.xcconfig rename to xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.debug.xcconfig index 4520564b..abe6b60e 100644 --- a/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.xcconfig +++ b/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SCSiriWaveformView PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.release.xcconfig b/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.release.xcconfig new file mode 100644 index 00000000..abe6b60e --- /dev/null +++ b/xcode/Pods/Target Support Files/SCSiriWaveformView/SCSiriWaveformView.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SCSiriWaveformView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "AVFoundation" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SCSiriWaveformView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SDWebImage/Info.plist b/xcode/Pods/Target Support Files/SDWebImage/Info.plist deleted file mode 100644 index d8bbd99e..00000000 --- a/xcode/Pods/Target Support Files/SDWebImage/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.8.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist new file mode 100644 index 00000000..8ec7929a --- /dev/null +++ b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.8.3 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig rename to xcode/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig index 06920109..b6581d79 100644 --- a/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "ImageIO" +OTHER_LDFLAGS = $(inherited) -framework "ImageIO" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig new file mode 100644 index 00000000..b6581d79 --- /dev/null +++ b/xcode/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "ImageIO" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SWFrameButton/Info.plist b/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/SWFrameButton/Info.plist rename to xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton-Info.plist diff --git a/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.xcconfig b/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.xcconfig rename to xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.debug.xcconfig index f459f3e2..5011066d 100644 --- a/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.xcconfig +++ b/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "QuartzCore" +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SWFrameButton PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.release.xcconfig b/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.release.xcconfig new file mode 100644 index 00000000..5011066d --- /dev/null +++ b/xcode/Pods/Target Support Files/SWFrameButton/SWFrameButton.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SWFrameButton +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SWFrameButton +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SWTableViewCell/Info.plist b/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/SWTableViewCell/Info.plist rename to xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell-Info.plist diff --git a/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.xcconfig b/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.xcconfig rename to xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.debug.xcconfig index 4cbe0baf..13e94aae 100644 --- a/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.xcconfig +++ b/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SWTableViewCell PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.release.xcconfig b/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.release.xcconfig new file mode 100644 index 00000000..13e94aae --- /dev/null +++ b/xcode/Pods/Target Support Files/SWTableViewCell/SWTableViewCell.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SWTableViewCell +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SWTableViewCell +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SZTextView/Info.plist b/xcode/Pods/Target Support Files/SZTextView/Info.plist deleted file mode 100644 index e433362e..00000000 --- a/xcode/Pods/Target Support Files/SZTextView/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/SZTextView/SZTextView-Info.plist b/xcode/Pods/Target Support Files/SZTextView/SZTextView-Info.plist new file mode 100644 index 00000000..b6b2813d --- /dev/null +++ b/xcode/Pods/Target Support Files/SZTextView/SZTextView-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/SZTextView/SZTextView.xcconfig b/xcode/Pods/Target Support Files/SZTextView/SZTextView.debug.xcconfig similarity index 88% rename from xcode/Pods/Target Support Files/SZTextView/SZTextView.xcconfig rename to xcode/Pods/Target Support Files/SZTextView/SZTextView.debug.xcconfig index 7d3da43a..6a81ef8b 100644 --- a/xcode/Pods/Target Support Files/SZTextView/SZTextView.xcconfig +++ b/xcode/Pods/Target Support Files/SZTextView/SZTextView.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SZTextView PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SZTextView/SZTextView.release.xcconfig b/xcode/Pods/Target Support Files/SZTextView/SZTextView.release.xcconfig new file mode 100644 index 00000000..6a81ef8b --- /dev/null +++ b/xcode/Pods/Target Support Files/SZTextView/SZTextView.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SZTextView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SZTextView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SocketRocket/Info.plist b/xcode/Pods/Target Support Files/SocketRocket/Info.plist deleted file mode 100644 index 1c2e79ee..00000000 --- a/xcode/Pods/Target Support Files/SocketRocket/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.5.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist new file mode 100644 index 00000000..f220e5e3 --- /dev/null +++ b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.5.2 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig similarity index 75% rename from xcode/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig rename to xcode/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig index 1a4e4b21..6c602a2d 100644 --- a/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.xcconfig +++ b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -l"icucore" -framework "CFNetwork" -framework "Security" +OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig new file mode 100644 index 00000000..6c602a2d --- /dev/null +++ b/xcode/Pods/Target Support Files/SocketRocket/SocketRocket.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"icucore" -framework "CFNetwork" -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SocketRocket +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TDOAuth/Info.plist b/xcode/Pods/Target Support Files/TDOAuth/Info.plist deleted file mode 100644 index 7ea8235e..00000000 --- a/xcode/Pods/Target Support Files/TDOAuth/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.1.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/xcode/Pods/Target Support Files/TDOAuth/TDOAuth-Info.plist b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth-Info.plist new file mode 100644 index 00000000..b6b2813d --- /dev/null +++ b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.xcconfig b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.debug.xcconfig similarity index 90% rename from xcode/Pods/Target Support Files/TDOAuth/TDOAuth.xcconfig rename to xcode/Pods/Target Support Files/TDOAuth/TDOAuth.debug.xcconfig index 94308f39..ce7b61e3 100644 --- a/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.xcconfig +++ b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.debug.xcconfig @@ -7,3 +7,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/TDOAuth PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.release.xcconfig b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.release.xcconfig new file mode 100644 index 00000000..ce7b61e3 --- /dev/null +++ b/xcode/Pods/Target Support Files/TDOAuth/TDOAuth.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TDOAuth +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/OMGHTTPURLRQ" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/TDOAuth +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TTTAttributedLabel/Info.plist b/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/TTTAttributedLabel/Info.plist rename to xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel-Info.plist diff --git a/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.xcconfig b/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.debug.xcconfig similarity index 71% rename from xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.xcconfig rename to xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.debug.xcconfig index 5022119f..518c0310 100644 --- a/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.xcconfig +++ b/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "CoreGraphics" -framework "CoreText" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "QuartzCore" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/TTTAttributedLabel PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.release.xcconfig b/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.release.xcconfig new file mode 100644 index 00000000..518c0310 --- /dev/null +++ b/xcode/Pods/Target Support Files/TTTAttributedLabel/TTTAttributedLabel.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "CoreText" -framework "QuartzCore" -framework "UIKit" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/TTTAttributedLabel +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TWMessageBarManager/Info.plist b/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/TWMessageBarManager/Info.plist rename to xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager-Info.plist diff --git a/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.xcconfig b/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.debug.xcconfig similarity index 89% rename from xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.xcconfig rename to xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.debug.xcconfig index 43998725..d420c703 100644 --- a/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.xcconfig +++ b/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.debug.xcconfig @@ -6,3 +6,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/TWMessageBarManager PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.release.xcconfig b/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.release.xcconfig new file mode 100644 index 00000000..d420c703 --- /dev/null +++ b/xcode/Pods/Target Support Files/TWMessageBarManager/TWMessageBarManager.release.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TWMessageBarManager +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/TWMessageBarManager +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/UICKeyChainStore/Info.plist b/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/UICKeyChainStore/Info.plist rename to xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore-Info.plist diff --git a/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.xcconfig b/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.debug.xcconfig similarity index 80% rename from xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.xcconfig rename to xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.debug.xcconfig index 103bc4fc..18147d3f 100644 --- a/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.xcconfig +++ b/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -framework "Security" +OTHER_LDFLAGS = $(inherited) -framework "Security" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/UICKeyChainStore PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.release.xcconfig b/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.release.xcconfig new file mode 100644 index 00000000..18147d3f --- /dev/null +++ b/xcode/Pods/Target Support Files/UICKeyChainStore/UICKeyChainStore.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UICKeyChainStore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/UICKeyChainStore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/libPhoneNumber-iOS/Info.plist b/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-Info.plist similarity index 100% rename from xcode/Pods/Target Support Files/libPhoneNumber-iOS/Info.plist rename to xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS-Info.plist diff --git a/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.xcconfig b/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.debug.xcconfig similarity index 79% rename from xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.xcconfig rename to xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.debug.xcconfig index d2786032..a81b893f 100644 --- a/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.xcconfig +++ b/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.debug.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = -l"z" -framework "CoreTelephony" +OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/libPhoneNumber-iOS PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.release.xcconfig b/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.release.xcconfig new file mode 100644 index 00000000..a81b893f --- /dev/null +++ b/xcode/Pods/Target Support Files/libPhoneNumber-iOS/libPhoneNumber-iOS.release.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/libPhoneNumber-iOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreTelephony" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/libPhoneNumber-iOS +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES