From f805b0d285da453e1c0e4979dd06430fc05ff869 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 14 Jul 2016 08:40:40 -0700 Subject: [PATCH] documentation/API update --- docs/android_zt_sdk.md | 15 ++- docs/apple_zt_sdk.md | 7 -- docs/docker_linux_testing.md | 57 +++++---- docs/docker_linux_zt_sdk.md | 37 ++---- docs/ios_zt_sdk.md | 45 +++---- docs/osx_zt_sdk.md | 119 ++++++++---------- docs/todo.md | 18 --- docs/zt_sdk.md | 6 +- integrations/README.md | 8 +- .../android_jni_lib/java/jni/Application.mk | 6 +- .../app/src/main/java/ZeroTier/SDK.java | 1 - .../joseph/example_app/MainActivity.java | 2 +- .../project.pbxproj | 9 +- .../ZeroTierSDK_Apple.xcscmblueprint | 30 +++++ .../UserInterfaceState.xcuserstate | Bin 59138 -> 113066 bytes .../UserInterfaceState.xcuserstate | Bin 42664 -> 45214 bytes .../Example_iOS_App.xcodeproj/project.pbxproj | 29 ++++- .../UserInterfaceState.xcuserstate | Bin 14966 -> 24037 bytes .../AppIcon.appiconset/Contents.json | 5 + .../Base.lproj/Main.storyboard | 111 ++++++++++++++++ make-linux.mk | 16 ++- make-mac.mk | 10 +- src/SDK_Apple-Bridging-Header.h | 37 ++++++ src/SDK_ServiceSetup.cpp | 8 +- zerotierone | 2 +- 25 files changed, 375 insertions(+), 203 deletions(-) delete mode 100644 docs/apple_zt_sdk.md delete mode 100644 docs/todo.md create mode 100644 integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierSDK_Apple.xcscmblueprint create mode 100644 src/SDK_Apple-Bridging-Header.h diff --git a/docs/android_zt_sdk.md b/docs/android_zt_sdk.md index 055360f..21fb31a 100644 --- a/docs/android_zt_sdk.md +++ b/docs/android_zt_sdk.md @@ -7,7 +7,7 @@ Imagine a flat, encrypted, no-configuration LAN for all of the instances of your This short tutorial will show you how to enable ZeroTier functionality for your Android app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](https://www.zerotier.com/blog) for a discussion of shims available for your app/technology. -In this example we aim to set up a minimal [Android Studio](https://developer.android.com/studio/index.html) project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the code, look in the [sdk/android](https://github.com/zerotier/ZeroTierOne/tree/dev/netcon/Android) folder in the source tree. Otherwise, let's get started! +In this example we aim to set up a minimal [Android Studio](https://developer.android.com/studio/index.html) project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the code, look in the [sdk/android](https://github.com/zerotier/ZeroTierOne/tree/dev/sdk/integrations/android/example_app) folder in the source tree. Otherwise, let's get started! *NOTE: For Android JNI libraries to build you'll need to install [Android Studio](https://developer.android.com/studio/index.html) and the [Android NDK](https://developer.android.com/ndk/index.html), and you'll need to tell our project where you put it by putting the path in [this file](Android/proj/local.properties), if you don't have these things installed and configured we will detect that and just skip those builds automatically.* @@ -22,19 +22,22 @@ In this example we aim to set up a minimal [Android Studio](https://developer.an - Create new package called `ZeroTierSDK` in your project and add a new file called `ZeroTierSDK.java` containing: ``` -package ZeroTierSDK; +package ZeroTier; public class ZeroTierSDK { - public native void startOneService(); + public native void startOneService(String homeDir); + public native void joinNetwork(String nwid); + public native void leaveNetwork(String nwid); + public native boolean isRunning(); static { System.loadLibrary("ZeroTierOneJNI"); } // Loads JNI code } ``` - - And now, start the service: + - And now, start the service in your app with: ``` new Thread(new Runnable() { public void run() { - ZeroTierSDK_Wrapper wrapper = new ZeroTierSDK_Wrapper(); + ZeroTierSDK wrapper = new ZeroTierSDK(); wrapper.startOneService(); // Calls to JNI code } }).start(); @@ -55,7 +58,7 @@ new Thread(new Runnable() { **Step 6: Join a network!** - - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` + - Simply call `wrapper.joinNetwork("XXXXXXXXXXXXXXXX")` diff --git a/docs/apple_zt_sdk.md b/docs/apple_zt_sdk.md deleted file mode 100644 index a84b5a8..0000000 --- a/docs/apple_zt_sdk.md +++ /dev/null @@ -1,7 +0,0 @@ -Apple + ZeroTier SDK -==== - -Welcome! - -*** -## Platform-specific Integrations diff --git a/docs/docker_linux_testing.md b/docs/docker_linux_testing.md index ef10b72..a27c29c 100644 --- a/docs/docker_linux_testing.md +++ b/docs/docker_linux_testing.md @@ -3,9 +3,20 @@ Testing ### Docker Unit Tests -Each unit test will temporarily copy all required ZeroTier binaries into its local directory, then build the `netcon_dockerfile` and `monitor_dockerfile`. Once built, each container will be run and perform tests and monitoring specified in `netcon_entrypoint.sh` and `monitor_entrypoint.sh` +**Running all docker tests** +Build the docker images: +`make docker_images` -Results will be written to the `tests/docker-test/_results/` directory which is a common shared volume between all containers involved in the test and will be a combination of raw and formatted dumps to files whose names reflect the test performed. In the event of failure, `FAIL.` will be prepended to the result file's name (e.g. `FAIL.my_application_1.0.2.x86_64`), likewise in the event of success, `OK.` will be prepended. +Run the docker tests from the docker containers +`make docker_test` + +Check the results of the completed tests: +`make docker_test_check` + +*** +Each unit test will temporarily copy all required ZeroTier binaries into its local directory, then build the `sdk_dockerfile` and `monitor_dockerfile`. Once built, each container will be run and perform tests and monitoring specified in `sdk_entrypoint.sh` and `monitor_entrypoint.sh` + +Results will be written to the `tests/docker/_results/` directory which is a common shared volume between all containers involved in the test and will be a combination of raw and formatted dumps to files whose names reflect the test performed. In the event of failure, `FAIL.` will be prepended to the result file's name (e.g. `FAIL.my_application_1.0.2.x86_64`), likewise in the event of success, `OK.` will be prepended. To run unit tests: @@ -13,42 +24,42 @@ To run unit tests: 2) Set up your own network at [https://my.zerotier.com/](https://my.zerotier.com/). For our example we'll just use the Earth network (8056c2e21c000001). Use its network id as follows: -3) Generate two pairs of identity keys. Each public/private pair will be used by the *netcon* and *monitor* containers: +3) Generate two pairs of identity keys. Each public/private pair will be used by the *sdk* and *monitor* containers: - mkdir -p /tmp/netcon_first - cp -f ./netcon/liblwip.so /tmp/netcon_first - ./zerotier-netcon-service -d -p8100 /tmp/netcon_first - while [ ! -f /tmp/netcon_first/identity.secret ]; do + mkdir -p /tmp/sdk_first + cp -f ./sdk/liblwip.so /tmp/sdk_first + ./zerotier-sdk-service -d -p8100 /tmp/sdk_first + while [ ! -f /tmp/sdk_first/identity.secret ]; do sleep 0.1 done - ./zerotier-cli -D/tmp/netcon_first join 8056c2e21c000001 - kill `cat /tmp/netcon_first/zerotier-one.pid` + ./zerotier-cli -D/tmp/sdk_first join 8056c2e21c000001 + kill `cat /tmp/sdk_first/zerotier-one.pid` - mkdir -p /tmp/netcon_second - cp -f ./netcon/liblwip.so /tmp/netcon_second - ./zerotier-netcon-service -d -p8101 /tmp/netcon_second - while [ ! -f /tmp/netcon_second/identity.secret ]; do + mkdir -p /tmp/sdk_second + cp -f ./sdk/liblwip.so /tmp/sdk_second + ./zerotier-sdk-service -d -p8101 /tmp/sdk_second + while [ ! -f /tmp/sdk_second/identity.secret ]; do sleep 0.1 done - ./zerotier-cli -D/tmp/netcon_second join 8056c2e21c000001 - kill `cat /tmp/netcon_second/zerotier-one.pid` + ./zerotier-cli -D/tmp/sdk_second join 8056c2e21c000001 + kill `cat /tmp/sdk_second/zerotier-one.pid` -4) Copy the identity files to your *docker-test* directory. Names will be altered during copy step so the dockerfiles know which identities to use for each image/container: +4) Copy the identity files to *tests/docker*. Names will be altered during copy step so the dockerfiles know which identities to use for each image/container: - cp /tmp/netcon_first/identity.public ./netcon/docker-test/netcon_identity.public - cp /tmp/netcon_first/identity.secret ./netcon/docker-test/netcon_identity.secret + cp /tmp/sdk_first/identity.public ./sdk/tests/docker/sdk_identity.public + cp /tmp/sdk_first/identity.secret ./sdk/tests/docker/sdk_identity.secret - cp /tmp/netcon_second/identity.public ./netcon/docker-test/monitor_identity.public - cp /tmp/netcon_second/identity.secret ./netcon/docker-test/monitor_identity.secret + cp /tmp/sdk_second/identity.public ./sdk/tests/docker/monitor_identity.public + cp /tmp/sdk_second/identity.secret ./sdk/tests/docker/monitor_identity.secret -5) Place a blank network config file in the `netcon/docker-test` directory (e.g. "8056c2e21c000001.conf") +5) Place a blank network config file in the `tests/docker` directory (e.g. "8056c2e21c000001.conf") - This will be used to inform test-specific scripts what network to use for testing -After you've created your network and placed its blank config file in `tests/docker-test` run the following to perform unit tests for httpd: +After you've created your network and placed its blank config file in `tests/docker` run the following to perform unit tests for httpd: ./build.sh httpd ./test.sh httpd -It's useful to note that the keyword *httpd* in this example is merely a substring for a test name, this means that if we replaced it with *x86_64* or *fc23*, it would run all unit tests for *x86_64* systems or *Fedora 23* respectively. +It's useful to note that the keyword *httpd* in this example is merely a substring for a test name, this means that if we replaced it with *x86_64*, *fc23*, or *nginx*, it would run all unit tests for *x86_64*, *Fedora 23*, or *nginx* respectively. diff --git a/docs/docker_linux_zt_sdk.md b/docs/docker_linux_zt_sdk.md index 2b693ae..a1d9a63 100644 --- a/docs/docker_linux_zt_sdk.md +++ b/docs/docker_linux_zt_sdk.md @@ -29,8 +29,8 @@ RUN yum -y install redis-3.0.4-1.fc23.x86_64 RUN yum clean all # Add ZT files RUN mkdir -p /var/lib/zerotier-one/networks.d -ADD netcon_identity.public /var/lib/zerotier-one/identity.public -ADD netcon_identity.secret /var/lib/zerotier-one/identity.secret +ADD sdk_identity.public /var/lib/zerotier-one/identity.public +ADD sdk_identity.secret /var/lib/zerotier-one/identity.secret ADD *.conf /var/lib/zerotier-one/networks.d/ ADD *.conf / ADD *.name / @@ -42,12 +42,12 @@ ADD libztintercept.so / RUN cp libztintercept.so lib/libztintercept.so RUN ln -sf /lib/libztintercept.so /lib/libztintercept ADD zerotier-cli / -Add zerotier-netcon-service / +Add zerotier-sdk-service / # Install test scripts -ADD netcon_entrypoint.sh /netcon_entrypoint.sh -RUN chmod -v +x /netcon_entrypoint.sh +ADD sdk_entrypoint.sh /sdk_entrypoint.sh +RUN chmod -v +x /sdk_entrypoint.sh # Start ZeroTier-One -CMD ["./netcon_entrypoint.sh"] +CMD ["./sdk_entrypoint.sh"] ``` **Step 3: Start container** @@ -72,32 +72,11 @@ If you'd like to know the IP address your service can be reached at on this part `zerotier-cli -D/var/lib/zerotier-one/nc_XXXXXXXXXXXXXXXX listnetworks` - - - - - - - - - ## Tests For info on testing the SDK, take a look at [docs/docker_linux_testing.md](docs/docker_linux_testing.md) - - - - - - - - - - - - ## Installing in a Docker container (or any other container engine) If it's not immediately obvious, installation into a Docker container is easy. Just install `zerotier-sdk-service`, `libztintercept.so`, and `liblwip.so` into the container at an appropriate locations. We suggest putting it all in `/var/lib/zerotier-one` since this is the default ZeroTier home and will eliminate the need to supply a path to any of ZeroTier's services or utilities. Then, in your Docker container entry point script launch the service with *-d* to run it in the background, set the appropriate environment variables as described above, and launch your container's main application. @@ -109,11 +88,11 @@ The only bit of complexity is configuring which virtual network to join. ZeroTie Replace 8056c2e21c000001 with the network ID of the network you want your container to automatically join. It's also a good idea in your container's entry point script to add a small loop to wait until the container's instance of ZeroTier generates an identity and comes online. This could be something like: - /var/lib/zerotier-one/zerotier-netcon-service -d + /var/lib/zerotier-one/zerotier-sdk-service -d while [ ! -f /var/lib/zerotier-one/identity.secret ]; do sleep 0.1 done - # zerotier-netcon-service is now running and has generated an identity + # zerotier-sdk-service is now running and has generated an identity (Be sure you don't bundle the identity into the container, otherwise every container will try to be the same device and they will "fight" over the device's address.) diff --git a/docs/ios_zt_sdk.md b/docs/ios_zt_sdk.md index feeb7b0..cb0cbe2 100644 --- a/docs/ios_zt_sdk.md +++ b/docs/ios_zt_sdk.md @@ -7,56 +7,57 @@ Imagine a flat, encrypted, no-configuration LAN for all of the instances of your This short tutorial will show you how to enable ZeroTier functionality for your iOS app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](shims_zt_sdk.md) for a discussion of shims available for your app/technology. -In this example we aim to set up a minimal XCode project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the code, look in the [sdk/iOS](https://github.com/zerotier/ZeroTierSDK/tree/dev/sdk/iOS) folder of the source tree. Otherwise, let's get started! +In this example we aim to set up a minimal XCode project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the project code, look in the [sdk/iOS](https://github.com/zerotier/ZeroTierSDK/tree/dev/sdk/integrations/apple) folder of the source tree. Otherwise, let's get started! -**Step 1: Add ZeroTier source and Netcon-iOS XCode project to yours** -- Place a copy of the ZeroTierOne source in a folder at the same level as your project -- Add `ZeroTierSDK/src/tests/iOS/Netcon-iOS.xcodeproj` to your project +*** +**Step 1: Build iOS framework** -**Step 2: Add ZeroTier binaries to your app** +- `make ios_app_framework` +- This will output to `build/ios_app_framework/Release-iphoneos/ZeroTierSDK_iOS.framework` + +**Step 2: Integrate SDK into project** + +- Add the resultant framework package to your project +- Add `zerotiersdk/src` directory to `Build Settings -> Header Search Paths` +- Add `build/ios_app_framework/Release-iphoneos/` to *Build Settings -> Framework Search Paths* - Add `ZeroTierSDK.frameworkiOS` to *General->Embedded Binaries* -- Add `libServiceSetup.a` and `ZeroTierSDK.framework` to *Build Phases->Link Binary With Libraries* +- Add `src/SDK_XcodeWrapper.cpp` and `src/SDK_XcodeWrapper.hpp` to your project: +- Add contents of `src/SDK_Apple-Bridging-Header.h` to your project’s bridging header. -**Step 3: Configure your project** -- Add `$(SRCROOT)/../ZeroTierOne/src` to *Build Settings->Header Search Paths* for your project -- Add `-D__IOS__` to *Build Settings->Other C Flags* -- Add `zerotiersdk/tests/iOS/Netcon-iOS/NetconWrapper.cpp` and `zerotiersdk/tests/iOS/Netcon-iOS/NetconWrapper.hpp` to your project: -- Add contents of `ZeroTierOne/netcon/tests/iOS/Netcon-iOS/SDK-iOS-Bridging-Header.h` to your project’s bridging header. +**Step 3: Start the ZeroTier service** -*Note: You should have been prompted to create a bridging header for your project, if you haven't make sure you do this and add the native function prototypes manually from the bridging header we provide.* - -**Step 4: App Code Modifications** - -After you've linked the two projects you need to find a place in your code to set up the ZeroTier service thread: +Now find a place in your code to set up the ZeroTier service thread: ``` var service_thread : NSThread! -func ztnc_start_service() { +func zt_start_service() { let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) start_service(path[0]) } ``` -...and then start it. If you enabled the proxy service via `-DUSE_SOCKS_PROXY` it will start automatically and be reachable at `0.0.0.0:1337`: +and then start it: ``` dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { - self.service_thread = NSThread(target:self, selector:"ztnc_start_service", object:nil) + self.service_thread = NSThread(target:self, selector:"zt_start_service", object:nil) self.service_thread.start() }); ``` -**Step 5: Pick a shim for your app** +*NOTE: If you enabled the proxy service via `-DUSE_SOCKS_PROXY` it will start automatically and be reachable at `0.0.0.0:1337`* + +**Step 4: Pick an API** This integration allows for the following shim combinations: - `Hook of BSD-like sockets`: Use BSD-like sockets as you normally would. - `Proxy of NSStream`: Create NSStream. Configure stream for SOCKS5 Proxy. Use stream. - `Changeling of BSD-like sockets`: Call `start_changeling()` and then use BSD-like sockets as you normally would. -- `Direct Call`: Consult [SDK-iOS-Bridging-Header.h](zerotiersdk/iOS/Netcon-iOS/SDK-iOS-Bridging-Header.h). +- `Direct Call`: Consult [src/SDK_Apple-Bridging-Header.h](src/SDK_Apple-Bridging-Header.h). If functional interposition isn't available for the API or library you've chosen to use, ZeroTier offers a SOCKS5 proxy server which can allow connectivity to your virtual network as long as your client API supports the SOCKS5 protocol. This proxy service will run alongside the tap service and can be turned on by compiling with the `-DUSE_SOCKS_PROXY` flag in *Build Settings->Other C Flags*. By default, the proxy service is available at `0.0.0.0:1337`. -**Step 6: Join a network!** +**Step 5: Join a network!** Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` diff --git a/docs/osx_zt_sdk.md b/docs/osx_zt_sdk.md index 55010ee..8cc11cf 100644 --- a/docs/osx_zt_sdk.md +++ b/docs/osx_zt_sdk.md @@ -3,102 +3,90 @@ OSX + ZeroTier SDK Welcome! -Imagine a flat, encrypted, no-configuration LAN for all of the instances of your OSX app. +Imagine a flat, encrypted, no-configuration LAN for all of the instances of your OSX app. -This short tutorial will show you how to enable ZeroTier functionality for your iOS app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](https://www.zerotier.com/blog) for a discussion of shims available for your app/technology. +This short tutorial will show you how to enable ZeroTier functionality for your OSX app with little to no code modification. Check out our [ZeroTier SDK](https://www.zerotier.com/blog) page for more info on how the integration works and [Shim Techniques](shims_zt_sdk.md) for a discussion of shims available for your app/technology. -In this example we aim to set up a minimal XCode project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the code, look in the [sdk/OSX](https://github.com/zerotier/ZeroTierSDK/tree/dev/sdk/iOS) folder of the source tree. Otherwise, let's get started! - -**Step 1: Add ZeroTier source and Netcon-iOS XCode project to yours** -- Place a copy of the ZeroTierOne source in a folder at the same level as your project -- Add `ZeroTierSDK/src/tests/iOS/Netcon-iOS.xcodeproj` to your project - -**Step 2: Add ZeroTier binaries to your app** -- Add `ZeroTierSDK.frameworkiOS` to *General->Embedded Binaries* -- Add `libServiceSetup.a` and `ZeroTierSDK.framework` to *Build Phases->Link Binary With Libraries* - -**Step 3: Configure your project** -- Add `$(SRCROOT)/../ZeroTierOne/src` to *Build Settings->Header Search Paths* for your project -- Add `-D__IOS__` to *Build Settings->Other C Flags* -- Add `zerotiersdk/tests/iOS/Netcon-iOS/NetconWrapper.cpp` and `zerotiersdk/tests/iOS/Netcon-iOS/NetconWrapper.hpp` to your project: -- Add contents of `ZeroTierOne/netcon/tests/iOS/Netcon-iOS/SDK-iOS-Bridging-Header.h` to your project’s bridging header. - -*Note: You should have been prompted to create a bridging header for your project, if you haven't make sure you do this and add the native function prototypes manually from the bridging header we provide.* - -**Step 4: App Code Modifications** - -After you've linked the two projects you need to find a place in your code to set up the ZeroTier service thread: - -``` -var service_thread : NSThread! -func ztnc_start_service() { - let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) - start_service(path[0]) -} -``` - -...and then start it. If you enabled the proxy service via `-DUSE_SOCKS_PROXY` it will start automatically and be reachable at `0.0.0.0:1337`: - -``` -dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { - self.service_thread = NSThread(target:self, selector:"ztnc_start_service", object:nil) - self.service_thread.start() -}); -``` - -**Step 5: Pick an API** - -**Step 6: Join a network!** - - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` +In this example we aim to set up a minimal XCode project which contains all of the components necessary to enable ZeroTier for your app. If you'd rather skip all of these steps and grab the project code, look in the [sdk/integrations/apple](https://github.com/zerotier/ZeroTierSDK/tree/dev/sdk/integrations/apple) folder of the source tree. Otherwise, let's get started! *** -## Linking into an application on Mac OSX +## Via Static-linking Example: gcc myapp.c -o myapp libztintercept.so - export ZT_NC_NETWORK=/tmp/netcon-test-home/nc_8056c2e21c000001 + export ZT_NC_NETWORK=/tmp/sdk-test-home/nc_8056c2e21c000001 Start service - ./zerotier-netcon-service -d -p8000 /tmp/netcon-test-home + ./zerotier-sdk-service -d -p8000 /tmp/sdk-test-home Run application ./myapp +## Via Dynamic-linking at runtime with DYLD -## XCode Desktop App Integration -*NOTE: a sample OSX desktop application with ZeroTier integrated can be found [here](../integrations/Apple/Example_OSX_App)* +## Via App Framework -**Step 1: Build `ZeroTierSDK_OSX.framework`** - - From the main repo directory, `make osx_app_framework`. This will use the XCode commandline tools to build and copy the framework into `build`. - -**Step 2: Add `ZeroTierSDK_OSX.framework` to your project** - -**Step 3: Add its path to your *Build Settings -> Framework Search Paths***: - - For example: `$(PROJECT_DIR)/../../../build/OSX_app_framework/Release` - -**Step 4: Pick an [API](# API) to use** - -**Step 5: Join a network!** - - Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` +*NOTE: a sample OSX desktop project using the ZeroTierSDK framework can be found [here](../integrations/apple/example_app/Example_OSX_App)* *** -## API +**Step 1: Build iOS framework** + +- `make ios_app_framework` +- This will output to `build/ios_app_framework/Release-iphoneos/ZeroTierSDK_iOS.framework` + +**Step 2: Integrate SDK into project** + +- Add the resultant framework package to your project +- Add `zerotiersdk/src` directory to `Build Settings -> Header Search Paths` +- Add `build/osx_app_framework/Release-iphoneos/` to *Build Settings -> Framework Search Paths* +- Add `ZeroTierSDK.frameworkiOS` to *General->Embedded Binaries* +- Add `src/SDK_XcodeWrapper.cpp` and `src/SDK_XcodeWrapper.hpp` to your project: +- Add contents of `src/SDK_Apple-Bridging-Header.h` to your project’s bridging header. + +**Step 3: Start the ZeroTier service** + +Now find a place in your code to set up the ZeroTier service thread: + +``` +var service_thread : NSThread! +func zt_start_service() { + let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) + start_service(path[0]) +} +``` + +and then start it: + +``` +dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { + self.service_thread = NSThread(target:self, selector:"zt_start_service", object:nil) + self.service_thread.start() +}); +``` + +*NOTE: If you enabled the proxy service via `-DUSE_SOCKS_PROXY` it will start automatically and be reachable at `0.0.0.0:1337`* + +**Step 4: Pick an API** This integration allows for the following shim combinations: - `Hook of BSD-like sockets`: Use BSD-like sockets as you normally would. - `Proxy of NSStream`: Create NSStream. Configure stream for SOCKS5 Proxy. Use stream. - `Changeling of BSD-like sockets`: Call `start_changeling()` and then use BSD-like sockets as you normally would. -- `Direct Call`: Consult [SDK-iOS-Bridging-Header.h](netcon/iOS/Netcon-iOS/Netcon-iOS-Bridging-Header.h). +- `Direct Call`: Consult [src/SDK_Apple-Bridging-Header.h](src/SDK_Apple-Bridging-Header.h). If functional interposition isn't available for the API or library you've chosen to use, ZeroTier offers a SOCKS5 proxy server which can allow connectivity to your virtual network as long as your client API supports the SOCKS5 protocol. This proxy service will run alongside the tap service and can be turned on by compiling with the `-DUSE_SOCKS_PROXY` flag in *Build Settings->Other C Flags*. By default, the proxy service is available at `0.0.0.0:1337`. +**Step 5: Join a network!** -#### NSStream and SOCKS Proxy +Simply call `zt_join_network("XXXXXXXXXXXXXXXX")` + +*** +**NSStream and SOCKS Proxy:** As an example, here's how one would configure a NSStream object to redirect all network activity to the ZeroTier SOCKS proxy server: @@ -112,3 +100,4 @@ inputStream!.setProperty(myDict, forKey: NSStreamSOCKSProxyConfigurationKey) outputStream!.setProperty(myDict, forKey: NSStreamSOCKSProxyConfigurationKey) // END proxy configuration ``` + diff --git a/docs/todo.md b/docs/todo.md deleted file mode 100644 index b0fb0d2..0000000 --- a/docs/todo.md +++ /dev/null @@ -1,18 +0,0 @@ -Apple - * Create shared/dynamic targets for OSX - -General - * Trim down makefiles - * Add release targets to each xcode/android studio project - -Unity - * check for mem leaks surrounding managed/unmanaged barrier - * find root of 2X buffer size requirement issue - * check that cross-thread oprations are handled correctly - * check that .IsRunning() doesn't bork the entire system anymore - * Allow max packet size configuration - * Handle exceptions from unmanaged code - -Documentation - * Refactor - * Fix broken references diff --git a/docs/zt_sdk.md b/docs/zt_sdk.md index d0c3b29..d4f4b80 100644 --- a/docs/zt_sdk.md +++ b/docs/zt_sdk.md @@ -1,6 +1,6 @@ # ZeroTier SDK Primer -True P2P injected right into your app with no code changes! A ZeroTier-enabled app. +True P2P injected right into your app with little to no code changes! A ZeroTier-enabled app. (formerly known as Network Containers) The SDK couples the ZeroTier core Ethernet virtualization engine with a user-space TCP/IP stack and a carefully-crafted "shim" which intercepts and re-directs network API calls to our service. This allows servers and applications to be used without modification or recompilation. It can be used to run services on virtual networks without elevated privileges, special configuration of the physical host, kernel support, or any other application specific configuration. It's ideal for [containerized applications](docs/docker_linux_zt_sdk.md), [games](docs/unity3d.md), and [desktop/mobile apps](). @@ -9,8 +9,8 @@ Your only responsibility is to pick a shim appropriate for your app's design. Ac The general idea is this: 1) Your application starts. - 2) The shim initializes inside a separate thread of your app. - 3) Your app can now reach anything on your virtual network. + 2) The shim and ZeroTier service initializes inside a separate thread of your app. + 3) Your app can now reach anything on your virtual network via normal network calls. It's as simple as that! diff --git a/integrations/README.md b/integrations/README.md index 6881c23..ebff82a 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -1,7 +1,7 @@ ZeroTier Integrations ==== -If you want everything built at once, type `make all` and go play outside for a few minutes, we'll copy all of the targets into the `build` directory for you along with specific instructions on how to use each binary. You can then use `make -s check` to check the build status of each binary target. +If you want everything built at once, type `make all` and go play outside for a few minutes, we'll copy all of the targets into the `build` directory for you along with specific instructions contained in a `README.md` on how to use each binary. You can then use `make -s check` to check the build status of each binary target. *NOTE for Apple platforms: In order to build iOS/OSX Frameworks and Bundles you will need XCode command line tools `xcode-select --install`* @@ -32,7 +32,7 @@ For more support on these integrations, or if you'd like help creating a new int *** ## Current Integrations -### Apple +### Apple `make apple` ##### iOS - [Embedding within an app](../docs/ios_zt_sdk.md) `make ios_app_framework` - [Unity3D plugin](../docs/unity3d_ios_zt_sdk.md) `make ios_unity3d_bundle` @@ -45,9 +45,9 @@ For more support on these integrations, or if you'd like help creating a new int *** ### Linux - [Dynamic-linking into an app/service at runtime](../docs/linux_zt_sdk.md) `make linux_shared_lib` - - [Using the SDK with Docker](../docs/docker_linux_zt_sdk.md) `make linux_shared_lib` + - [Using the SDK with Doc;ker](../docs/docker_linux_zt_sdk.md) `make linux_shared_lib` -### Android +### Android `make android` - [Embedding within an app](../docs/android_zt_sdk.md) `make android_jni_lib` - [Unity 3D plugin](../docs/unity3d_android_zt_sdk.md) `make android_unity3d_plugin` diff --git a/integrations/android/android_jni_lib/java/jni/Application.mk b/integrations/android/android_jni_lib/java/jni/Application.mk index 25bc603..8437a62 100644 --- a/integrations/android/android_jni_lib/java/jni/Application.mk +++ b/integrations/android/android_jni_lib/java/jni/Application.mk @@ -1,13 +1,13 @@ NDK_TOOLCHAIN_VERSION := clang APP_STL := c++_static -APP_CPPFLAGS := -O3 -DUSE_SOCKS_PROXY -DSDK -fPIC -fPIE -fvectorize -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1 +APP_CPPFLAGS := -O3 -DZT_DEBUG -DSDK_DEBUG -DLWIP_DEBUG -DUSE_SOCKS_PROXY -DSDK -fPIC -fPIE -fvectorize -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1 APP_PLATFORM := android-14 # Architectures # APP_ABI := all #APP_ABI += arm64-v8a -#APP_ABI += armeabi -APP_ABI += armeabi-v7a +APP_ABI += armeabi +#APP_ABI += armeabi-v7a #APP_ABI += mips #APP_ABI += mips64 #APP_ABI += x86 diff --git a/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java b/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java index e974c52..b0f7386 100644 --- a/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java +++ b/integrations/android/example_app/app/src/main/java/ZeroTier/SDK.java @@ -4,6 +4,5 @@ public class SDK { public native void joinNetwork(String nwid); public native void leaveNetwork(String nwid); public native boolean isRunning(); - static { System.loadLibrary("ZeroTierOneJNI"); } // Loads JNI code } \ No newline at end of file diff --git a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java index 41507f7..42be80d 100644 --- a/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java +++ b/integrations/android/example_app/app/src/main/java/com/example/joseph/example_app/MainActivity.java @@ -32,7 +32,7 @@ public class MainActivity extends AppCompatActivity { Log.d("SDK-Javaland", "Waiting...\n"); } Log.d("SDK-Javaland","Joining network...\n"); - wrapper.joinNetwork("e5cd7a9e1c3511dd"); + wrapper.joinNetwork("565799d8f65063e5"); // Set up example proxy connection to SDK proxy server Log.d("ZTSDK-InJavaland", "Setting up connection to SDK proxy server"); diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj index 71005f5..9365564 100644 --- a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj +++ b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -1402,7 +1402,6 @@ OTHER_CFLAGS = ( "-D__UNITY_3D__", "-DSDK", - "-DSDK_DEBUG", ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1433,6 +1432,7 @@ "-DSDK_DEBUG", "-DSDK", "-D__IOS__", + "-DLWIP_DEBUG", ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1459,8 +1459,8 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( - "-DSDK_DEBUG", "-DSDK", "-D__IOS__", ); @@ -1496,6 +1496,7 @@ "-DSDK_BUNDLED", "-DSDK_DEBUG", "-D__XCODE__", + "-DLWIP_DEBUG", ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1520,11 +1521,11 @@ INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "-DSDK", "-DSDK_SERVICE", "-DSDK_BUNDLED", - "-DSDK_DEBUG", "-D__XCODE__", ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; @@ -1567,8 +1568,8 @@ ); INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( - "-DSDK_DEBUG", "-DSDK", "-D__UNITY_3D__", ); diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierSDK_Apple.xcscmblueprint b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierSDK_Apple.xcscmblueprint new file mode 100644 index 0000000..0d8a914 --- /dev/null +++ b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcshareddata/ZeroTierSDK_Apple.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "E606611F311EBBA46CDC9112D11FA5B7A3480FA9", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "ABA3617E9F0148F844A82502F0D808DE6591AA97" : 0, + "E606611F311EBBA46CDC9112D11FA5B7A3480FA9" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "0231F1D2-335A-48B9-9ED2-F5EC32297E1C", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "ABA3617E9F0148F844A82502F0D808DE6591AA97" : "zerotiersdk\/zerotierone\/", + "E606611F311EBBA46CDC9112D11FA5B7A3480FA9" : "zerotiersdk\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "ZeroTierSDK_Apple", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "integrations\/apple\/ZeroTierSDK_Apple\/ZeroTierSDK_Apple.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "http:\/\/git.int.zerotier.com\/ZeroTier\/ZeroTierOne.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "ABA3617E9F0148F844A82502F0D808DE6591AA97" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "http:\/\/git.int.zerotier.com\/zerotier\/zerotiersdk.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "E606611F311EBBA46CDC9112D11FA5B7A3480FA9" + } + ] +} \ No newline at end of file diff --git a/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 711fd6a3aa22699f3c2ce07668cc67dcf3a20601..8d89f080eb97fd7f1ae29caae927e59f14aab3b7 100644 GIT binary patch literal 113066 zcmc#+2VfJ&(!Sl3uBlkECD}kArjrDLWy>uUSp^Jkv24?$7$d;J*p3S&KysVjd#}{= zg!JBf@4big-h2CJ?{xCXl5820|GoczFR?WH?dUSbe~8J00H zMuy9KI`5e|<5otyx?4Ni=Zx!EbWpUVr+e`?q%*{ z9$_A3o?>2NUS?ilUS(cm-e9&fA21&x1|ftIiwww!IK(3XiAX{wWJWe*M@}>hjYOl+ z7&HOxj;5eORD$+I`=SttgnbSb(HU5{=+H=>)+&FFUYIC=s-iJn4Fqi4{w_)YvS z{s4cBKf_<*Z}9i{C;Th^1OLq;*1+9ST9@3 z?#b@MPGkLSh^=I+*jl!pZDi-L^VtK~W_B^Vls$-D!FICU>`HbGyN*4KJ)Av?J(fLz zJ()d?J(E3$J)gaZ-N0^UFJ-S_uV%NgH?TLex3PD!_ptY~53!H3Pq0t3&#^DEuduJP zZ?W&P+u4uUPuVZnui5X|AK72n-`T$mjDa<92GL+PWErvzPD7qygkh9nv|*fKqG5M~ z+fZOAGL#s~4SO5*GgKIYh8c!gh8n~Eh6clI!#u-6!-0kt!xBTQq0P`?=rZ&gRvXqD z4mA+Nk%nUo#~V&EoN743aJJz*!-a-R44VvF4VN3PGF)r8-f)xQR>K{JyAAgl9yB~+ zc--)m;aS5AhL;Vm8QwI!V|d^2q2Uw5=Z3Eg-x_`}{A~Em@TcJ)BQ_e1g3)BO8tq1h zG1oZUIMSGJ9BZ6l+|4-IIMrBaEH;)I_cHEl^ce%j>BgDHYGa)-Y-}>lH7+nljEjs> z<1*uNW4rNSV~=r_@et#Bqij6Fc(n02A+)25vKdJ%1B_ zD}M)nH-8`hApZ#eIR6y?EdK)kGXEO?CjSoqKK~*A3I93&75^>&1OGGs8~-Q&kAMZE zAP6SGD%b^wkSh!qMhf}DSYd*&n=o0JDijLELYc6au&>|~0>X4*rcf=^31Oj0m@6z0 zBEljeDl8M03+=+eLXWUYI7C=4$iflA(ZX@UiNYzu>B3pUxxxj)#ll8mi*T86rEraK zop7UYi*UPemvFD}fbg*JnDC_VjPShhlJKhVhVZuVp74S2vGAGjrSOgLz3`LptMG^L zw}?c8$cvI_5p80Q=n{vCyNJ7rW5n^|BykUMis%u&VyU>NxQ{qZ^ot>}Qmhhd#d@(( zoFmQ`4-lKh#o|)&AaRA*DRzr1#WmtO@i6gl@hI_F@dWW?@ig&F@f`7d@gi}9xLLeZ zyh6NM+$P>2-YniG-YMQA-Y-5RJ}N#TJ}o{cz9_yTzAnBczAJ7QKN3F`zYxC`zY~8H ze-VEd|B@Jql{iV1%u<$=Ejgt;X@oRN8ZC{JCQ7?YZmB>jl1ijVyisX_`$Go)Ek zjkLeiAkCKMNeiU|r50(4)GD<}9a5LnE3KB+N{32BI#N1DI$krqfMlo6a#^V7kz>!L-q|)pV)p z2GfnEn@l&GZZX|zy3KUE=?>E)rbkVWnO-uzY!vqMZ<;!GV&Af|wq zn)fyDXP##EnJdhGbHH3@-rrnr4x1ayjpiovY;%iwu{mm9V(v0`n|sW?W@0|ve1!Q( z^Qq?3%%__#HeX`iVBToH#(b@LoB2-jUFN&Z_n4nBKWTo-{IvOX^Bd+j&2O1MHGgLQ z-28?47xS;?-^{;TI16tPETY9}aanRLV=dz><1G^`g_a_V*D}rGvs768mRd`lWq(V( zC2VQ1G+LT0i!3dc#g?e$U`v;!+tOpX+H#%cddtn0TP$~2?zG%%xzF;D>8WpS8j|-8#!!XKk|1w$8UUTNhgo zvbI}$tcO?+wH|3b%6h!@Wb5hHbFCLzH(4*YUSYk)dZYDb>z&qntq)rtvp#8k-uklj zP3t?>53QeCzqWpB{n`3^7L&zgNm;fmSJv>X{HzICyJr<-d9q5g_R8{QP0yN@wSU&^ ztod2ZS&On3XC0K)p4F3eNYz=HKvL4HN zGVA%Qm$Tl?dMj&t*2h_2W_^|QL)I@@e`Wn`LpI)Kve|99wmjP~o7*PY)foQZOd(Kwoco@wqDyx+ab2Kw!>_)?MT~E zw&QHa+fKHfVmrfjrtMtYdA5zVO}5RpEw-(;Yi!rrZn52JyVv%p?J?VPw%2U$+1|Hp zw|#E=-uAm4+gZEGZnj(Ox%NE!F#B-(82e`&UCvOjHq#{R7RIs5bWm+fEJzqEg4|JweI z{agEY_V4XK*nhPDlx@m3XIrwZ*;(1PY<)(`*D>5N(vj~N>zLr!%`w?A)luju zc9c2xa_sByIRcL9j+u^XN1Y?=XmZSTEO0~|iyTqMGRJa9yW?O-k7JeN5XX9l>^Q=4 zwBtC(iH=hor#sGaoa?y2aj|2gV~gW5$CZw29M?H+bll>&-Eo)WUdIEDhaHbOo^(9p zc;4}n<5kBSj<+4}IX-ZF?D)*_rQ;jN_l}<&zdHVK{Ov?egOhhkPK(p#%yGJ$!<@S~ zcXf_&j(1LS?%|x`^f8x_rI_sT{&NYIU`_I$T|@Ue{{ZTGyd2;yTiGjO%#UNv=~}XSmLGo#(pHb%|?} zYpd&W*Hx}-T{pOHcHQf`&-IY&3D=XZXI;;^UUI$Wddu~;>mAp2*9Wd|T;ICBbA9jn z!SzorlZ$e3E}JXnO1ZXNXYR<{QMtS3PRyN@yIZb1w2b*Be{>}K9>7+5`*rR&x!>k~m-|cZAGv?#;XENPKW}v2 zn7pxhC|DkJ z7kVoEZm%cgahH|&3f!fIUT=9Q6soB37ivAbm|dAkmovFc9y5#?&WvDoVMa2eWTVW< zye!C~EXgL>d^wZPjAq6#W0`TxcxD1KQMSldVh9mKB{9q$istU6XCaM>!RnyF!Gsnae3dgr%s*P*bUP$b!JC*v~$^1YLcmkM7uhATH({h%cp{;M3;6c)7(AP*9j9C zX^*a&IuAq|KqMTP6;VD-_@uENCbB3HsSVGWTG_s&V~TQ}@d8uNgqa4Wah@7D?cgPI z)PIe3H`at=6(waVRwek}78z4Icr6+5bTf`*yutl4`Z)67iT%pAZ(m;>eE z@(6jC&CDXEg;^|*ly{ZKQhyo+o)oF8sth+of`Q70+WJU1SQYd)RMyr+W(DV_5(v(z z^VNjo0{KY@O_kxwimG5ez)*}Alzem$vwVX*O10(+rX42P*VWa$W)ri5X;LLRnXZk@ z!E(MlM*X{o>D?fYR$HuMRv%CkuI}w=Uep#<8g6D*sZHth9Kx(!5dS(H?b!^UtYeyB zdf<T?lk+_uZ{hm&D)eED9I@rZTL)Sp!*sMacdgmX9L5l) z34r@P(=2-ga}2fYk<3xd(eea&q6~j5Vvb{u2g~jz@1Bum2Q^#<#!ovkx&)j?4SKq~ zhi1^T6oYC*IG4GQ4&glJeC7h#El-s_o0*H4iSqEHdsxfi?sw_)zP9R+lVcdcwJX?Wot)o zcSCd6(r9df^3z?2HqQH*2boD5nFr+Zjm$&xo^(9+KvP4Q>f8i6SN23#bgNn6F{XDD z^EmT_yqD~gM{592GtV*Eo0w;qXXU-+eKs-AGcU;d%KORF76MG=VpxD%mq6l=*lh4O zMXYXK3hBO=u41G6td!7UU$e2(*5otvKWfGx%|o+Vew z)pCtoE7x7k{J{Lk{KWjs{KEXo{Kovw{K5Rm{Kfn&?=Oet2Dwpgl4r|vwf`X#LpeNud^pu3k;E!NQS-{`- zRYm%*LdjoESf0kC!Yy4LZEbaQHwT@^;bBXu^c*Zo?ztfSSN`OlwV?#kf8|LJSeW)J zPs}!b8Y&)%ERbfARj!xE!2XYJ7h#K%uWpkx2S?c`hnciN$*Icr9Jx?#;s?Xg2=#+G zbge2WDqSD*8MG_PPZS-C#wC6*5lu?`U=K7o@q?+TAn}7Dhpb5YzQo-`yju-@RAxqGqy6R1Iqznu%tiD!D~oEJrt^8dQtw{E*hAAuS!LSDFD9rc{dSS3TG%!qISP zeBB$SoA1Q$H1i#T*1@WU*2+B_(R#UefK>|-ShdjM=m>eGyf(gSp`+1puyCMb(6RC= zdG#iAJUT&MBOmgwty;^JwTIF4Jsq8u(B0YS9C@9*URkG3U!cfFZ0U!sy7fiWtuK~k zePY;%HZfPApnSMY6)>t#y1Ex{8M5<>(4@rF?{Zq80dluOYA=t1<5@_&!YrxJ7lK^JNNe=(i+v3^+7nmb`t%~uxOdT$Dwb6g zRT6zyMbX<=L!sLN9f)eF=a}AYc6jjpJbD4Wh+aZ3qgT+Y=r!~@dIPDqchI}& zJ@h`>jy^yiqL0wW=o9oQ`V4)JzCd51uh7@%8}u#u4t^eg%e{f_=X zf1FAV1zMdu>l(~hj}bu5lh&F&DesiI1Agb9cSYl?7&X!!nrsP55vRp2)qj( ziAUjGaXuc6$KbJe93GD+;E8w=-VN`L_rQ~}8&APgaRK(=LR^HsxEPn3-JLsf)B*acoA;Fi*Xb$!AtQn+=>sv%W)fCf!lEh?!*VkFW?vPOZa8{3Vs#8hF_OYlh2UPl+TjSmd}yTmCuvUmoJbnlrNGmmM@Vv z$Q$KN@@9F9yj8wbzD&MczCylIzDmAYzDB-Q-X>osUoYPv-zeWC-z?uE-zwiG-!9)F z-zncE-!0!G-z(oI-!DHPKPW#WKP*2YKPo>aKQ2EZKPf*YKP^8aKPx{cKQF%^zbL;X zzbwBZzbd~bzb?NazbU^Zzb(Hbzbn5dzb|i>Kaf9^KaxL|KaoF`Ka)R~zmUI_zmmU} zzmdO{zmvb0e~^Eaf0BQef02Kcf0KWg|B(Nb|C0Zf{~?GW2oZz{VhJ)3WF&|qh$l!O zNF+!i$V8BtAPYfOg0cv*5o9MQo1h$m90WNDauJkEP#!_U2pUe%2!eJYXe2?S2-=mP ze1b+3G=`wD1dStTJV6r(nn=(jf_5WlcY^jHXfi==f~F8Om7oHGJOmXIR78-Mpkjhb z2r4D0jG%IY_9SR8g7zk8AAC zswSw0pjv|J2-=^ZdV<0PH4xNDP!mD337SLDT!Q8iG@qaa1T7@!0D>X}9Y|0!L5m1# zA!so{QG%8bw3MJ_1ho=$5JAfcf;)s21ho^?K~N__2NTpqP&Yw61oaZMlAu)tttMy< zL5C2umY{V6ttaSEf(|1{CWsJpI6+4cbRp-R}x zsyhEj8%>Tk3RYKu4t-6-k;)oqQ5$H4JHLv?nm|=hYxzrTAhGU(H9oi-jKK9`APD^h zBK5&=ZDYMZ7$3;*w1FqyRSHSy3}y-DsIn&9;H#>NH29{+oBu_d?=fI=I<#Pee@3LX zJ`k*rDatam;V`7G-|>CMx^>~X)w+pc*)(Fc6*Ki>92Fa%0&Rw`o=zX!j@DM!g(HE= zxB?<=GAh=jwv%2%!u(V;R#pWfO}_d{UrmEHO4dweNA#DS?)OKUg7x%rRvT3o6`a~% zP?^5~=;5!eX$aOdDF5_LvcX>)(B_$SQrU_9JDMJ>3D)}> z;EuVzHdI+vSu-8F>T8ro8%^uqC~lm}8h=$ITu{#l`e35Mkx+eYHMm!06*#QwYzYP& zLD8o4NAuOe{kGqyTxkdAz-X1bYhPU@IAImsPAd-1j-qV~`?n4IeKis4VXBWtULT{G;N>Xzr7NEvEkF$(0Ut3rN<-s7$ra43Rh9>OV_QVhKYnLr`JSaMk*Vs zg4OWPcn1?{lhJ9Lz%4v&6d%v-RD5z;aV_d1^^J5yb-sofnr?2|a$LWbwGA_Z^~%(# z8iuO+LXIt22n%1>w&2-a2A&ZRRMsj5}IP?HW)=?Uqi>uSRdU^YmMVX&aqW(I9DJfV%21QSd$ zE4^HTL29VnsFZlr91%JrTHpIqSx16w0H&>P(PA5@#IOVjO*_4Z&8A}G6U3^0ez-Y- zH6d=T24DU3U_4;v(I)PMCYlR}A^lTP$Yz0HQ>7o2_ElH*MfSpErNXl+>$Jr~8{L6a zY-BZ8*Py2&f#F4Pf5558h22^i3!M+bu(&fg0+x9)7iW$g*r_GHRz=c5*>QB57ya% z+N`E+#-JI|=Ed;rmL@^4xt8zi8*3tsuqO!wLz*SmQu%Rd>fjkO>bb6i+N8kHTFvcIDt1 zTR$t&nzr{ zUMQ}vRDozS@EVoXd4M(p2{ZdJ08_Fw=8d7s^oZjHkljSgTo10S^N@qlt0iWQ}j*z^+D>~l{KMS zwQh%65VoT5Nu;8(##bLd0{l$d4%fGZbrf__d+0^`v{tH!0?J`70FK%K$uWM0H(=Uuw7y~7rggKXQxLsf z4aOvu`eHG0eKQDDG{Gi)D(RAs!9?W}?A|A*CPEl$Yv}i0!6g^JmDV4H7J%dPB7@!C4K%sa%3r z^o^oVDGhZbm7bsC`Zm zHX5UE)Th4ITtAT$sC+`q!K~@7sUqsZIaC?X@rK=KlU?;)Xie0v^qWS*WGbAON?5la zF-)aW;}WElnmej#1a=0=K2b$Tf;(Oy1wkf7jhX9BxC0ew8f;Di_ z(6^5>l+jiR0X@4O@)Fp+f9xCfqM{Q~INA)?rulWvJN1Kf4*F<#+tsngwXb4dGvHj$=)iqTI(`kcU`!%Q!&P$0tlM3(M zPdGS7xtgN)m;Oe$af2x-Pl(nsI2WO~Gg%rC<8X8g^McSpGPGI|(dq6O2 zQ5L3>{pU=Xr2!1uL>uLx2BlmYuBIC3tuUP9;wft`6)4mR&{Zj-+={?;58YeCt_oHf zAKeE)+mNrasuA}3npO*F`*Em=7FBn|uD@a@5(qYBFW4`0M`(*t2`yq0%37GPAS|M? zvjEWw zSN#o@^B`8~4KUpN!oSsmJwsKsvo%$EDE59y*vh5l^k{ojEwI**1Hp>M>B>~lrHyV# zs)9|yxP4a*32aVT37kyn&JYkGiNVz=y=~JpJA{JmovCKA`)cKS)lUcMo30%)4C^UU z@!&}GW}PNeIHSN56`$@(&LC5WX_-O9w=s&fU?)STUpZoGLpy?^RSXeL2{CPGN+iTh zbu`8EW`-A-3u_iEG0Jh)uW5AL5XM(o6ASx#dgHG@hG}Rg4q<%i)GK$VkQAoF`3g2# zwX^BttoZm&p?DcMDV@NWBfu?1O|Xhy76z+o>nOaY-02i-_rZ-tBP~+ZP^+~&i?%Bo zyd71dK1kDaY+=>_&ZPh)nE}A;z~QtS0;~dVl<7lC0%0}zC5ANEJ@K%#}tA?JlyxhpCK4F(#Bp~kh%z(8c5cY+rRY0G< zx!pohG6-{uq8;Hbs8bz#_zSX_P5ja zlLzVE55W#yhv&i?r9F!_+(lcu2WeSZqwJ|+f33S8Gu%s??m0+P<(5ggi_;RKx|P&z zTnrz%o%+TS*@wDR+W%BYt=$8F$Xd zGQopgCWIL{CTwJ4cUytjW-$^5uh1O`o}_rCgBYm~h9bgdr{6L2845Dk^rme2d?ww; zY^yvAhKr9-V@=`?;Ux+(Sa`%h>U?3aXaAJ^Dn&?M3le83JOl2DVO?pA-%}gjpzZb< z#Cqxy5WDEro^q?_2i-)xO`($WpQZxr^Za}4q3yr?bLONEw)ZGf`e03gq&k`wtRK+! z>ElLgPjgPpsQ$V-I6wM>u*~Q-ZXZ*e^wW|Cryg#HG)+FE2=mgK7ZB7ZJoHhLy5p^) zTZS4~E|t?eO^9k$fl{;5cMet0_VJ+llJ=86NR#`CjXQQl5Z~WvdVfRl%7>tL0$yCL z?xp7xHu4lcc{XM@chSRkeqBdfYYWsJs}oCi7yvQ@9w5@=O;see<DA zwdJ?PwnF+r`ey{8&JAjuX!TbZcAE(`HpUzZoP3(j0N7Unw|Fo+bXf${K+=k2bW!Z8 zAt!;^r7ek<-p~3Ula?gVlBL#JHk1Fjw=OU52VB^-)F3 z5Y+K0J4~OSKGK7W1+cJA&s`~Ua_D4WUD%)m;`b89F%&1bW0tIdr<_!?#LFe)cnVp$ zW02Z7Q@~Ez2~FvyA_e3g6f&@5n$jI)^4OA>34W(=?8QVj#8+J_F zn#QUs}c!sGnPP~U{ zw1=T&urxiuYSvIo?GZ=zQ{fXQnVcmx^QE-4g$Ki5q8H~Y$u0x zJ?)`+hz_i->ah8a6)VA$FU=y<8RDCcrq$F)!mA7&6PAI8taJ9+Plw3*y zcPL&OYZO3OSmKW+j0aJ)p)9F78!BkD;<6gn4DD*oxMFAZgSzp?cszIRtof9e2jHy> z&3xSyF!^k&a~j>fg5un8-h)M+9?&3u)aNm}{rJj3hpXVl%|;L7O_lWxjd1JI2d8Pb zCNu5gXfrAUQ2QPS)O;oG(d#JQfF7Nwow{sS)~K(})P_P(ol+Zu>urC%cHwV4jAAC= z%nV>bxSlDP)AvL@uHE4jX~3l~#j#mE6e!P^Y2}?ie;om2r!oJT%k9{R|GqaFL|0UvR6eywcK8>#x-waT-tCVa;{t#<-P~lc~B) zX_0Xz?O?zaB*FG^&12UPDzg(@A|y=cITUoj{cUPcc*zSMpTo9;mTytYsM>h?JD)-h zxF{t+>Q)eC^z@B_2z=PLKe~tl&KYP?(gEf-w=d3z>mTg`Pze?V7#{nprxoQDi0}+} z2|&Ls-#~k5-05E8`zF}=!-I8do%kML^S{#t+z8PkzyQ7ei9l}BUr=32yT~*^Q`(9? zUxjl}WdNSq`00~9$k%<>X~rvP2cFunPvbgq$6jZTzp|zl$WaNkh*tmL%6K(xUNm6y zctgmSv=EWLE*O8G!?=wC>>UQazt)y~Uwd=g8mMoecRuuAfuc{n+*-449esO1^(}hS z1Ifk*?{&_Fng=bOZlFlD86c%ZQHo3Hi;OYY2wZ!>rcwjHnS$@LQ{WoZZ4@ey45bud zfDtOYyL;(fo~oucN?2Nb0j21H{tLX7&{uwAyptkU3>mRHSY2BWRkhH?bR|D&8s0clUjU|mBi+2fG4E!yVj>EUNBjs%<*c%{*ZFzstxiv z3Yj8OGKW;xO>Ik&aQc6df=}NWePI!fkru{R`Bx}tikQh3@jHsXbJMCf zQawD=)-3ZQg&rtr3_h)TXxPR2>*9|oexcws|C&{rpdvs1jPG}fJ%&=ux`86NwLQ8R ze7d$8-mZZ9+R6anTQxftjsM%g4ltuXAT zX21>wnACu4(Z<+Nj4O#Va$Ev28z*u$peEuZ&cvBH3uooB2---{CW1B-w1uFp1YLS5 zXXmoH9L~WxITt~f5p+30HxP6$!EY1%&VS6?^`G)d4wbfRh$Ld^Nu;z1$>+uZ%NIAA zper_VV+k-=rDvz)CIZhFH;LPgpsNVFF3$ADP3EQo^%m#mfY0S>g09)b6>z}laxFpI z{x!C*_WKkHFHP?ZAh)X6G1KNsMFT!;g*m>UVY ziJ+Sax`m)y3A*i4u9BO{&El%KYOaQ$+X=dZpgRe=i=ev+x`&!2M!i^6u8=5}dOdwy zjypt0S)_7KCID%DlqL6}edSC3DnmL-&3Lo9IT}?Tgg7^!>DnNV(Y`!@izJ5VBCaLz zgC*Qj^@Aprcvwjk+;X5Do{QNd6=L_2zr!GwVpyOkzy=PodWOq>DbB= zh2XuyR1|F*dm?uPwG~kRJQn9@ViVwz(_WwrGmKkT9-p&J2wQ(20GQ?d>&~tsu z&?dT$C6{gZQ`ecsC_Z9`b?Ww86!te0x0Sn;yNtV>yMnutyNbJ-yN0`#+s0kTUC-UX z-N@a<-OSy>-OAm@-Ok;?-O1g>-Ob&@-OJs_-OoM1J;*)8J-zTv**zT>{-=DAN!+ZnZ$T#t``8oVt zejY!cU%)Tq58xyGfqXN+h;QK+^HF{Yzm#9bxAF(^%lS5b1>eqh@SXg@d>7x%_wc>^ zN`4i;nqR{o!ms7m@$30R`NMdbC;Z|35&V(-QT);TG5oRoas2W83H*utN&LzDDg3GY zY5eK@8T^_2S^U}jIsCc&dHnhO1^k8lMf}D5CHw|{Bfp8?%x~eh@|W_L@t5;g@K^Fz z@mKTL@YnL&2zr5_7YTZapqB}Hg`igndX1ph33`K|Hwk)+ptlKnhoE-}dXJ#@3EEE3 z2Lydc&_@J)OwcC;eM-=01bt4>7X*Dt&{qU~P0%+4eM``H1bt7?4+Q;4&`$*YOwca` z{Yubp1pQ9X9|ZkL5Nx{sCg>l68G;ePz@oM1md;!515_}QC7ZZF5!5awPNbn|tHxs;t;H?B-O7LX_Urz89 z1Yb$;RRmv6@HGTqOYk;=uOs++f^Q)BMuKl5_-2A{A^28;ZzK42g6|;sPJ-_u_-=yl zA^2W`?<4qrf*&CGL4qG5_+f${A^1^(A0zm2f}bGxNrImu_-TTlA^2H>pCkBrf?pu` zMS@=<_+^4$A^25-UnBT+g5MzcO@iNw=V4x{v>%*nPI--kSL*5qB#`5k()mFM5`r<&8sTi~B? zH4Jq{Is!Rfsa)Ry0y$nOTpyG`j#o<4Q;5M$o{me2SL)A)L?Fj2rRSLu$ni>Tc?JY> zyiz*8g9LKCQa3(CQaD~I692bI;drHBe8))Pc%=w@$4TLMrRY0TQaE0z?H&>-9IsSy zXG{vmD>d3XLJG$#_1Hrph2xc~>miWB3Cg9(Af#}DQZ}6lDV(5GK&O+`bD#-Ib#o$% zRv*zE)X!^m6M|C2JXBIRL8(?Aoxr`7`Z7t$|AJD3oGFK#pi~tnQf}$^yi#(=2}-^2 z;2d&-QVE<|F2R0EU2kR_a>5w83=G5}Cyb{OgL23TN@?woIOGJSbT+XGR0$|t5PfC! z>W?ACt}q3qHg<<-=LDtnHE|p%Xy*i_el;W7IYFsJ9SZH7pcI-8Mmr}cm7|IN-^U6> zS-&)ECkxlqy3VXHzN`IYFr!)Uk05&LSr$b%7bO$O%fp zpN_qWK7fYWZAx!S{Yl3nCn%+SLu8Q?l#0C_VUZJ*$~@gLpwu~;8&30grSNWaA6Hef zq@G1iP|E6b*aOi^2};e}04#EXQU<4^KTE+PCn%+DLt~K>l+v{US>%Mn)g&EfB1~eD z6ON)1nXt$SO1+rQA5*c&2};eEj>1b7N@9@{l+rDo-^S?_(z3`2N>P^1jPQbv^3oZ+ zNvl087L>Xw9f#KdEOLTUE>+s+6W~BYW|0$=0;!>}$O%dXROT#lf>O&gu)Ll@M^Flr zbgmA=8h}MkP>PIn7VBFtl33&frCvzq0on}ctAYfjDoEG=z$|itQUf$7i=3bo_~`Ob zdKNiBDc8}tU>X)VL8-;jDLOEVoS+oi=oF>JX!LdNL>4(gsh`o=6U?vk?F3>jL8*vI zV6+;HMNUvET@u*LGG>tzl=_wgzOa-ma)MIDlE4=>0E?WU)TktoPU)n-6ePhWecWg|4h=ym?ntnEpPZWGV5qPMjlJBN z5D`ih#}HWLgzYpZr|B%Ao4(C%JOh42+otJEosGoT`vs-8BEbUci^ly}yzzG$C^qIYFs5NQgP@qjPTZeDB)`&@qzrwjBfd3^vy5o;SFwduY@le# zZ+H!imYzjUoK5jkR1(nNFVRy0QtdR-qy!c@ao!NdHzmw}Vg@x>e=EsLDkLcx-mgOZHjk3~*gLfh>Gi=5a>0aEaarJAKQEOKHS#Ylc< zI!SpoTvM@}>6tji4hok{l$8WW4cnhZPVAzMca}v??4>9fggI4VKo&W1HAPBhQA#JKa8krXL~ z=cPu{4#5eGcH%Lq$D`5o49;jL9#0W=n9)u=i8fE3-hK+CCD{^BrR@i!JWIuBC!RrD z?hvD$cs6aCOsbNov~uG$Afugl9>qxx)I^+E>g&&FCtgS!CoeZC8)v|1Cti{X9_)BC zWV91EQM{dGv=g^dkin)m)nQq@Jd^HYwoS)qCtgKClEXcvjZ-q(iPutuoER~YTYni!n~x{PIWfXt`4kOY&w+} z26ZnCi?30zFrvdzD-PNo2GW-=sMI8Ka%}4uwyijTq&^5E<>n_bFO(*bac! zkI_#2kRl|{L286S812MQDA<5>4LinYCw@+WlTY?KqKb6DgEHEQUs3F#@Ik2&qLNn( z#AqjeOOeyg^$;2D#2<#LCr$c_mV+?bi9b{1<&3w}5_0d^1 zB~_jzP{g4`lO9oHK1ofLCz&XAL((=Ny)WsoGos3qth9##nIZbQL_7}q=%?xx*3r~d zd6J!WFcdeAcaV-MPjXPm0Vz+?=^Q75NutV=a))Z_etK%qX{qw0;k1XLq{cKoz=c&J zRh~4GA`d05(;z2O5oBkxP5%9Fe@^`pv@swrUdp;_lNx(f?s&p04eo>VvJa1+Vs2BgZ9!kK9opM*iE z@}wq;H=su+YL@|3o-~(YCSUmsV8Jw0dC~%kG~m*gaKP6^oBC61sj2d$2!$PROPdaM zV5&T65d|J_zm*PHIbO$k#L`jaNzt9_K-U8Co6OlXh=P4odD0e&kYY08BxLby znGsc3ItNFH_~k*rKEt zrI%EutAWU#G~w5zpP5P9Y$K)Dr8lHErMINFrFW!vrT3)wrR~xO(udMV(#O&#(x=jA z(&y3_(wEX#($~^A(znug()ZF2(vQ+l1iwe{c7i`7_+x@UCHQlKza;o;g1;sBdxC!? z_-BHDCHQxO|0MWt!ZL)#gf$SBBdkDJiLhqES_x|-Y&KyXgmn=%kLvV`^sDrn^t<$j z^r!Tf^tbeni7_D)HnApy$!OwCyh$*LCdp(nnN1dx)s$tjne3))Qx0K=6Lu_NClGcD zVG9YnCt)iHJCm?Agl#13Lc%r^HcHr5!nP5%ld#={T}9ZngguO~M-cWH!k$3blL>n| zVb3D$d4%0a*sb!o7nxa%iK$|$nHp1`%*ZZ+--rERX5?VqT`g0?fmxCII{%bqdZdvm z(gzV+eP&3&uH4bn3jfm{o!Snigj4;|uAbHGWm%$rlU2;mU`@#k zGrGEGYTK&T&Z$(r8PM?0t1cl7qa zFVr{{z%=Wd^TV0Ep98uj!9AQ$_n}he9f0wrf?SUm~`dndzk;Hn5DY zY;A$4>S*uj>S(KLYi^JBw`+si!EZYlN(u2lSH=1xVr$Dx+1B=+=u-8!-n*wZcXqZ# zr|PNulqZ%6pS0G7`~RKjcn7E|`~?@&nW>NvdCi@zphjzCMR&g>(W1isvtuJm9!K&g zgN|&Oq5_L{OodF03k-<~#)ZEVjk`isfrZ+v%#5oANhQp4S4*_BCoz?Esdz>xUK$!+ zSaodRee6xjy{lAEe&;~@CCGIus5s>G5bkJM9_{H)95+$XOz>DVvvDUlDJ(gyOQv?W zwRW~HNyI%`#kIhZYX@*!+gsXtVGUN+Ay{=1Li+?2It%XbcL2I?MQiPhG%sGBjwI};Ev9Qs*P6DOt|RQOgv}@HXu^)6gs6FSU9BscyVe9cT6$MR+j|;XS46ve znpbqft9AXpYHICng>~5v#%^wbsjP>eSdA{6(YiPaPde4pExa+;uTdCCu0eQlVk_XC zo$^5A_*dVWzt&q;J~_Y8Q|4VS%w1dP@s>@_FIXQtGnno)-IsPi_nRItZ38Z1b{t{H z(*aQyVha4;fd_uJ?}D|3h2?1o1FBJ_Ti-^#3U9$gN%C%frRz%I@DfM{tX8POA($V~5X3WS8 z=fS-QyEkF?A?&_e%m%a3w9U*Dc0a;SQ%2+apN^(<^lrVQ*DPFHSl}rxg%On&7p|WN zaZ&1l*@_2-*=}~hkj&ZU9J9mhB&?sX0m23e8`@&dHRr*Q;8;4Hurrh)RsK(hH0+~| zN36Jci)b`D|ZZZXd?SAl^b z4bCI%e8oTu{-?7&`o3=;@!bgdrPvEWSX5L<=cTA9AtKFl%nRv^r;Nx0%n=w6T$&s} z*oZQq1C<#s9X;-XlDok^WrZb>xXQ|D;wmgCE}oq4jazD|xh<`wR+!rX7;az|5w=AE zUaSC*+;S_s_Tu^AO0Zr)hNT`_PXE0x+*X>`riEQ+UJtNvnX`njOBL8i*20MO z>fLL8hz>fX7d>o#1TY^X>}tZUQ7{itFu{wguY9#&ZBaovI8ISX2~Dq_;v!GNz@IU{ zm=^gZ^UHwzDq+_VcD;gpXbgG$+`GO~%}JdI%vn^Nfcmz1J4H>kJu`n`{t!?`@Bv(J^%= zRP`)gu(sG!28JjsD^|j(tULku4+}$qQ@ND|S+HrF1@2alCG2qu@bL<8&ba&P?na6o zio8V%YDuv^-&-V0R$5e>#jd*5iG)3gqQ?9_XVg;{Hce5jTV7J4Ild*&GBPdJD9f&( zA?$QdA?&G&hNr0-j(X3!%N$ih*d;=^mlc5x;^A(YXqlWA)NPrfDtHEA&(tfpOXtNW zUZ^Tq)R((0#g;wOV(n$w8x-7^uxAtY97Vx%RR!~wT{UKws-VYPN>|J>uwZF?)B#H+ zfLel+nD4z(O+kuAh>xaA1Tk(Q$@M_Z1u9BVnwa=hgP%ZZkgEGJvQ z8?Pkn)r7s4u-6gx2EyJ%*josD8)5Gt>|KPthp_h%_5s2^MA%0N3rXw=!ahaVX9)Wo zVd04K5@BB<>}!O5gRpN=B~G)PZaKqprsXWl*_LxG=UUFQoNu|na-roS%f*&UEE_Bv zEt@QxEn6&GEtgs@vs`Yu!U7t+Ls-Z+Ul8_d!a{!dm9T#i111KJ7$jn_5QB{va)=?9 z7={zWNMaa64C9Gm5;5#S3{!}~LkuOvuqQF>OAP*m=M|Q1>Jj%Uct>-!dvyyuHgLCf zEZuYJ)L>ztxV*5u+#T|ll)1g3qB3`RQOM^mttcohFDdtw7FU$&Zqh9`sX*5x0r`pp zfua&mz#Z@geQs}Ypuk;L5iEBX7y5mrMHPYK(x6Wdbh`?)EeXi$@fQR=fiibtzz0Bu zfL2~!;&uDVJt1#dsKirPUZe-QM+Le*38>WT_ZF0SE8G>Ha3x8S_Qf_38*Ak;0cwN7P~z~ zp<=hUq`>R0@D&xgOM;&A;sS^eP*)H1f(mqd5>RPDFjQI`f|eC!0k^lp7Xo7!_}xKo zQ9(gzLAeKhKwJ;>stR;x5>R1Ls1*KF<_`J1piuz;`AR&+?qI;<^9Ovz-ePY8&|50d z-AO>9VlSMq3d-F@ffCRtR1|bq6bB341-{}6Ul|-NLLQG^qxV&ydy{|)%gPH1{a|8n zN-#D|lDoX3ywn}=mlX#}L!||!Wfgj$k5!=ilYqQs6~0oxuh3muTw3V%mKTAsOFcy} zv_N55NyzI728#7SU#LJ2CIOYg38K8Hq`)2U6w(kW^0~``MFBT>m%r5O1y`y_0Qy!1 zdN>KlQ(77<3weF+iVCVxCIOF|1Cy16%8UHq^9A}eVzsJ3&nE$u!o^onunh7>aRu0@0^${7KIHaz3d+l|}AsSPp(v=7*vA!M)21A#5ukp_hd8$=|9zt7czK0t%It`3wAoG(;fpd&`Q!vrD{% zZl9;z9|{Bui%UHEoNZN~MYFFb0hN{q%1YsA>MnwV59DlbfxEl_Jlk6o3_vsoN_|Co zKeDP1qS-f-fP!GsVh9Fzps*Cu2qav0d0Ba}yVU0^DJ`ieC@3h=d$v`5`pmwa1XKzu zh2K*G-ct@S?=6SS1iymja~Bkr6bJm?VxPwk$zQqcwNABq;J4|l1%!QfqqUH*@6l~u z{0FSG3*Gn+aw$JUW-WoA*0RD)$oulBm!ZUAnsra)v+iZxo2fS4X5G&^En>4pS9ijX zXg72LHD}Pnwr~sqqZ8te)s}Y&xEZrtd;Y1UvIL`WSaCJs8Utd>WIw+oQzc+ zOZ!`4v$e)r%QU6^9vJHaO%459X%^q#8m1PnC+sI1tqp|zG!u)@p%$M@*w0c}+;Wo@ z_O+@}uOaN`FUIY&$QrW2ebVqk_}ly7w^8_* z=k!`v^?42)kiXHu)>1Gy*M6G<%zC&L%2iZdza#ATNe+6a9Pv^;2?rVa8&@Nx}ovvn&4+d|miHd^7t z@OvgRen&vceM*EvGz746N4O3$(iziNTPn zyBDl*5K+6kofwRLV|fd_7*3*bFMihw4=gk@ZYKs_ga3%ae@qNQD)?8eUup1n5`!3r z=Wv3lzO(+&r~8k@VA8;Uq2Rv~gE3E3uVDGgP0+*48&lKfo1UkmL(8F zRw}Uf`wVd}HG~>(S@x{|qwPEZqbT+Uz9+Y5LCM`NxjR}2B=p{UNhgv%#Nq|5g zF@;_-2#5-zsECM#red#jk=~0`d+*Qgv)Au8d$*UnBp}H9-h01iyqo#Yzs>CI?A)wg zA*{BrI!s|MDaOfpXQ9;y3u)^g39L>= zf~uYOf@X`xg(swANaqR-x(KV=)S$c6pog&5sYZiqzV&NRV{gS+6cQa0Tj85HVXbEh z8z6-x3Tyr9g#B3IoBaX4Ne{`W&@59}!%Sgv5Dpn8tPQIX7LpZW4#L)OVQo~!Hy1SB z^pD)+d_~5G+acqGHNw_mXDbs;P}n;HJ7u(mUWJuZbkA*}7I6Q)=AjB(2Evll}) zR%o_KSUZ}+wn|~!gtb$3!rURd%^~NEuy*zhpdouh7(necgtdz~goZGL#v~~6>SRXg zNQg0pdZWY`+RbcHj-esw*1eh*Ltghs$=aj34timeUT+6|JLKI8o8J@GUZw^gN)0{| z*51`=@E?CPtUMd7I>EcJ*|JxIuS0l%Y!08_32Q%7gCC>@KMHIA>NNO0`n zU8N&l&@|iZh#`Lys?>_EXur&E^{16x71mgvPWCI%$$q7<##N(Jt=9gy)Ofq1_t-Ui zZADvUXMHSTl|58g2k<6mc?@{=#5_-FF?$%9+yrivWAm6VKkRkw5sLPxy`H_ky@5T< z-q0RyZ)9h2?OI_SD6C1snk=j-!kQ|qX~H__QG28kUh`>tGkbG;3wuk25h|VaMOMbG z9%0Q8R))F3<=2$=A6A-OJT|YCZNJ0wOX3Rh$I8tbOmw{;$L7g>hKVIZ@{8G#QBuNt zm;%2r?-H`?n)lPP#>hN-FFQ-)PuhFi``G*1 z``P>3qwLZ47<;Te&K_@1un!Q{p~5;`SVs!$b;5eRu#OhiTwxs}tc=d%g|$FfCkboO zllE)v1MNxnWP6G|)t+V_WKXwy>>2h<`(R-$7S<`kI!#z-2rHxRY+;=vtmVRbqp;2s z*7?G^Kv)+BEs5Gk7`NBfVVAb&EqD{N{d%v^5tk-3ct@5!&ntA)1@Cz>w-BCtx3zt| zS7z2F?Z&bfdZlFlPqz5kOTE%^{-^t}{CoE8)4by85C4;$nD*ITd5kNUunE3WsBiSj z%>SS50k<#oN}O=fA*ybZwtcZz+Qk2dP5SnwUfG40yaC*Pk5|$S|8jqJjyZCzu-~s} ztL^vMnJ$$GYw2qH1NH}nwM z`}!&}9yer6E$<)Ef1XiTF-t#ff38aD7mU)=W$6X>AlaMjTdS1z>t~AGVc%V)&|X92 zEGhD~UxGv)v>&Nbx{AmX_S01g`L#6Leck?6r9yAp-w{?JtaD|%ORYw`5&f5p3sT@i z`zMvE1^C>Q{e}JOe=hW2`%nK|=y&^Hl?yo(!#g(_;dv%dIfvD8d2ngR6%M8;Hw)`6 zvh=OXeKsv>A5^WDLsOcsafCSR4u`NV64u4SdfOU@?x^ixqOwF-Nr)%p`bB#tEKxb7 z`IGZYr={l=6&9Dq6i#G^e`$WQ?m+|C{m3u>(G`Oo&NiCAa`AV+11xw4w zFD=M3R;e8Il(Kb>`i=&UFh@fNQ<&R@^&VlpPgsfensRfp?uc+Sld4BLnmC#Y>m9ASe#{V zasJZYHjGuti2hd?PFHf2@Ftfj;VfnbPWOyo5BT!O(aF)RI;*-ndN_D|%H7hv!n%To z&;7j;l|kW|(PjAsxn}+T4sMaFdL_;g??@0c-Ax=L7ABdp)ILG~Fda*koO7NvT*cxW{oAoBD3WTl8-YYOACuM#j@a`CojJu#9p^v{m3S**wv63IjO9m;MA2@ z)x7$eT0>L#WvHAs501rFkXgmz7^#USpW2EGH)~FE=multa5p zch-?>gA?+ml?>;fzE)S)4lTEqtE*k^a$EV8=e4 zHE%K8tLh{w4)y+-Ck4qetDCn(w)f}gr&_nUs%^XW=rBaisIkn@#Z#1>lNa4yvDYZS z3UM7fnM$ti*ph$m(v^a-`Si}hN%X_jUF3(|doUFb@Jz1PXRCX*toCzbeRW{ow7gtn zHcu>0^y!;XTv%9IZc(mK97HCL;dvEh@+A-3R zqcne*A>lelmZPa7+rfODfnlw%u48Nv)`x}lk%t}4E&Cl~9Aho}E&Js-VR=AUSvYu1 z{$ZhO@Ft-1_w0;mMaN`iGKoXQ@&0q@zfw>A1mBEHk>4 zPua!ZEz-WCJwwBKW6j%9>L??%r0ms>Qu+MCo>7>aJuN)DG`xGyPF=&(lI^VNRqpfN zv3I&swo0j0UPHc;o?i(#W-DcnDJvZ14&j*VxY04sG2gMkag$?Vc{^c!T3DYI*5`%w zMPX&-c(br>71o!8^<_Cm`zN;!-^A>h|KViR;hT^>chOVF>VClE@J-5IxU^fN;QKAd zO7Bc>!zIrd9jm;OHvNz84jd1A|=P?y(NO5C2mv@dg{>CpDjTd}bj=XYjuDtg!VLws>J<_hutuyI)xDFOM97A-Fp!dvsm_BP;*r8CN(Z zC3|xISUD|}>w0my`TP}CoX6rr8)ca6pNrp z$L5vrgY9Z0NR_}mX#I?G(nh{4K1n3hQga`ns^bA*^o->s!M5 zwy<(r^)7qAHDaw4A*eErOcGW6U*3(@A5EKmF51GKA&X;Ih8o;Z^=TA+K;^ zUTN_(qx)&?>3&)VVP&s^sat2QHzS|cMeC|{)4FRtw4PcoVf~M=ej%)13hP(G`n9lr zBdp&(qV>`GYW=kS{5M)zA*|mC>-WNTrLgJ7|7w@FD~}v0Q&v8umlLiLUJVW188W<+ zRQXUpI8bt*h|w4MCXs2loT;e>$_vYj%5PYwWm+a_L$slm8-(@0 zQJ6n`n7b zD-_n>%5M_Z-;HVTITbUX0FXK7*50dOsnn2VsXr>RWU4lYS-NE_llzw}+bu6!c9h>z zerx%n^2O!1l`nZ%E7yb^EBG%L$v=hda^EN+#|q}>UbzdEvZo!EE47=oTeMrXMcQKR zHf@P^yLN}RRJ&8VOS@ZJrro10*Y4F;X!mI=wfnUPvX@|8V+EMM8c3gW!JE5J_PHCsLGum10RqZwHb?pu9P3Q3FIyY)JHUA>-OUvHp?=?(R8y^-EnkI*CaCVEr7nciG)p|{jq>8G}+Pranubt)%3EglZA$WkRhXRI5-`q1uFcxlpeV>Xkyh zN~kr3dbLom5o#@=h6vRzREJPCq3S}dE!0qLh1yK0&4t=Rs4a!sN~o=c+D52th1yQ2?SDO)M%l`2sKuyaYBt3YJyM)2sKft z*9vu@P?Ln3EYuXCrV2GpsDp%>E>w?DGlZHc)WJd>BGjQm9VXP_LLDL0kwP6M)a!(r zCDiMMnl04PLd_9su2A!YI!35tg*r~C`9d8p)Coc@5b8vsP7-RNP>Y0mgHVfwS|Zd^ zp_U1CvQVc8b*fOO33a+qX9#tsP-h8swovB?wOpt|sB?vSqfqAwb-qv+2=ykRE)?p` zLcK+(w+eNUP!|jJHlZ#N>g__kL#RuIdZ$qD66)PTT_)6fgt}a)_X>4|Q127!N}=8_ z)CYw6pimzY>MEhG7U~+It`+J!p*}3sM}+#QP}d9fF`+&#)F*`cq)?v{>eE7fMySsU z^*NzFFVq)=`l3)b2z8@SHwksKP`3zmt5CNI^(CQh7wXGG-67PSLfs|Q-9p_X)V)I8 zC)E8yJs{MBLOmqZ!$LhG)T2T@Ce-6XeMP7zgnCk_r-XW1sAq(FR;aHE^);csF4Q-K z`le9d66)JReMhM83iUmqzAw}dg!-XSKN9N4Lj6Rjp9=Lep?)sZ{|NO9p?)dUuY~%w zP`?rCw?h3+sNW0qze4>%s6PtzC!zi<)L(@9t5AOv>hD7RL#TfW^)I3REo_RgS%mE} zVXGl*R$)_x%_eW^jraNK#!;0GEyh*U_u#f<=FF(r*u;#))Rd^CES?OTul&}Hb0|Zr z6i$yB;4fkvDCw$P1R?U+S+h~&Xvl~vg)-C9QqwcyVzbhcqB7!B)06#DjZ+}&Rj$A> z-ifhUQGv}Hhdnm4Ft6os4(#xF;xe+*qGASeDsM_+e4HmEOJ2dfuUs?LF-~-B?XMJ< z%r7RgDyn+25>w=BKw~pwGP1ny?lx;02RCAfuQ}ffk5W^zV&iB}zF66lnwcIG=QqSS zjIo2iLNz664Ai^7{^38RzS;hhCDH(n%jROnoRW6&r8+HcArF%$AQ>bwSVY|u&jrcLQm#?D9i1WUZ zCL;=WW_gAr#`}|SuRP+eiblQ=^1_*z)Yv$)A>)w1W|bTAzf+gwh)?7#UI{c=QOP*_ zuYcuAe&_h!zU_M%wkIn-JvEv1N=zbQy~!5jK;yW-ww0wtrKKe$#&B>hnG`n^Yo&X# zqS6wxQd5$Knd%#-`E{&Z*Ao*(Q8LV%qsBW}Q6n{-)Qd^VvI-2dtFv~W>TDo?w>Kh)a^Z4GqO_6)QkbVl)OU2z}J-OAIcgLm1+>6!HLqoF*TD(aU)IWm=Hb&t;+dL4~4{GUC!xq(2kVQ!~>{jlVo!$pYuzFJJFd4}#c_OgP zLbLQQvUJmPl}=0bWZ*UiMh_k|>-;Y3)D5a*4uU~0`Rm-}0v%G@BFlwUD^I#3OGd=k zc5SOHTRW(1EMcp-Xw|-4mZ%d{!qhGx!)jk8i!})7M0N21!- z$SQ4us+cM4VfdFt8O>tj1}Da#bX0Ppzh~FBS5?Y0Ffq-%c$n7dvRH$l7GhG1x-Pr6Ph#o!_*EvO;h= zd*bA~KKT4|6mNR6tt=mTj`F^;M%J1GXYCHMMm@_wd0=IM z?`51bXZl{hnG%)kcYkMDu>Ls;GSNu)XJfbXiS%To`ZJ}cEEskUk-=B$+I?hMmnA8G z(gfpj;GIS>YDiz0=J%I{np6~u9hQ_B&A6OQ|4NMJ0?Yd*D#?wJRT@^Ql9`?^2c=4d z<7MFn0fmW#Z`hYTAgy93s+}l{HmfKqU(v}mA~uotSVs->$k}8<5?w*M*dL4}S*dkJ zB`)=zxb(qsWTDxRoZNY`bsBe~SzPOyJi@)$tSy-=-jUv4DJuT5+V1z8-tSBH2%Hn#Jk(lBybDb>Hw4zMK ztEA;C0%N1nW3vcsdQ^I1h3~RuozRLpjG0VfvoeOI`NihSBDE`u7!%yUH^AAsboHmxWLYMxqWOVwacN985(mo>P)_#JQ~YJ8$+F!l$`ZFh znW>cXB`z0{Ok>7n%vl^evYisxY`=t z2oDP`Klh)@%WJ9MtogEhK&oRF!=@~f<%yFwe#Yd^Uwok~9^kQx>&39-=+vaFIPPlA zZgHzD8;}8J1cD-aTc!3r-dj|z%J|>tW!xyHC7Lqtkj3j%xWhx(eOby>!>{IDvRJ@4 z6f7(#PwtUL15(gPK0=llKg@VRhS~CpN{VKt_(NA+H^0A(Z!*j`2j>pjxcJFF;P=DBvP#>)D)Q~@ByD0!d@A=f z+^kCv$~zkBM<=F4rJJ_^wb#qKbpz{i9c2t+Xl8O!F`zvm%Y_G)iyImjlbI0}o#gFA z#vPOC#;0ZJ2InYEhQuchHH$tci?#|ZTA?+*mqWbw?v@n@2FHr%zbGp<3ase&Y1+U9 zDJ00Ro2sZ((HARS-?qx4K|ZNaDRA)FF3Sb^y`r3VAjDMP^qjlFpdPVP){O|%KA>)9 zMp`E094j|b{(iRSJdFi4W5mx`b@C_3{_`~EjfU^;*$m1dSs};+-fT#Y3QpFevRqJB zR9I1=lqvNUS-NSU%`%r|f1#{#h4*9)h-b1Hl@VpuIVI~f3#?;~+~)i*J~fHCPvG5Y z?X$8{YLRA1NpivAJpfFTEH?@miNY)caHk!SZ~QH4Fj7nt5h>-d{-8BS64W2 zKJtMq6&X~@=(|$WEM^8(bK+xJBgmm?nbE9cRIG(m_04CpPV>N4!8 z#`CEehA(8TpbkAGopA}j`&UcMqF>9R%`Be0Y_=eV%Ln9g0WoQaobLH9HoT6|8!&%{ zekUt6sZ^<=gI0Hu`axD{T&apTDa>|)u7N+x@)4EFn^)KB8u(3CXjrL2dff18rT-}l z_pVepZm6;TBiAouGFfqB3LDT+mM1gX`*yt4fEiqu_`oD7O(p1>?qEe=C^3!p6p5arR>Ko=EgdS`>`yZS`Y<#D@*+uiNoou zas`-`U;awPpS&Pvh^b05DZ8JsO*cF#X>f9Qx3(R^+k_j7md3lKjNKlldPTLKeBC}>E_nyuhMCg( zU4(t!&>L%~3oR`R$9A@-84rrT2Y_z$!&bT#{TYj7v&Qlj2R~;-s*a z|LiQ;8?urzQq6h;WW7%RTu&;I9w&!s--X!}Fi;BUdSL>H4mYRCbg*bvl>JX0LsO)T zs_z=Fk~!XiAT=!`F*$L#x2NJ=V1$jaR>ta8Qx zt{t%+jy}RG=u;8fAyUc(baSI~db`m%vTnGP)bYaf$xKO4<%v&HYHFH4%SOri7tqJO zzLf#4&c9}~ub0xQi8kl>7fxh+omj+PuHtax2NW}Bnm3*?fj1eUIZ{T|ex1b8@nzX# z^JdPJPKn`RV^*SvHB|2#-;EDUEyhR*9jf>wSc0$1M0t|42F49zbtBfSo-eCcb!l+* zm@IkK$z;Hlu{GAU%=!hge(Qf|K8DUt)1F~mqs-gN&_Y?W%|FykOflxv%&!C1$3lx` z)t>)Q)mUX3lE?yzIUstck`+sFp=DA|)y@%Yyw7)BH5j_m{3|x0Q)T6a`#^N}d7i#^Ab=>0hS~T`cSM`3LWLF9E)VUh^rp_x>Ru5VuQFRmVS51vwXM)ykZI z@p|ubceXpFq;q%HY9x6R&FrkpWc_pZ8?%1EMK&fajr+%#I4&~*6SsS%oO6fe9CFfG z9WpgpDJ2X)r+bmWp64s8%Q&L*r^Vu1so>y9+g3J+3 zQ=gTxs!kEluUVk1A#qWDzr7%ZRqY9B#cY8u%;BEPxR>?S_T4cU1}1wFJaH-h%jZTZ zXHXRbE6I@^ib0b3ncN4!-B7>^Ak%bqYI%6VMjrcyV}G7(k>aaHV@P(f+-nk^R#=dq z!)A7GVC4)0Ap>}TC~t3)vV2nxzqFU6w5r|qJkrwQVxtJCKL$IbgsL&9UP6Ykm|!X) z*AU{;(^J#^>g<-n23GN%Pgn_kllSI?7x<<^fkws*h-04{dz|F%FJ>g%cr*R?3*ILM zSG}9Q0Krkwtl|+J83&}sR=pw}l(Lg9LTPVK8?lK^jWHfgd1vc#_8+MA5h?kcv987) z0g}D1rH)RG9cK2H;}@%^%uz$jc=qubGt8(M`ACn21w0(!-IG#s)vj{^-erOkTd^*2 zM#_o%cb<&qDW}w|(&Ex&3;uNVZ6Y-m z!Q@aHPXoiUc;+56P;MqN`@?@^0~eER{sz2b0&lX;WOxm{3;9ZlO!zlCn+vS$@nHlQ zz>^jK*!Atjy1J5{rf8mo@C-A+IsO*@D_gjj5$qf-a5c+FmHzNc{z*!{nC^ED$tiI| zvwGbNjJ@QUM8je%TDLX^rX?DQ#0AoZT9Ud-P)bFq1bk$LWwlt4`z3o#Ot?$xIoT!d6g}j7ne=jxWib zwWYxLi*P_dpJC;U_Y4d$25q_8Zpw6Bf|AAr*9@L1u&xyNulh@7iXo5-i~rGtvw@U$ zF_+W;9~#o+j>}}O8RipYXZWS+$G-7QzxyIC)qTc~2iVMEy057eSoPjEAZY^D6^!KO zR-TKzyg{S?c%R2q%*UNA{?S}Rp5JZqW_)mBdPXLzE*0WT?OI=$c7ACC5@Xr>?iXn0 zia(>R4lDJ`(9cD<}}79c$l$v%tR^C z@A0UMbB#aGybDR*>ldra#&0?@Qe#rhN1V>sf311IeWTw?#+|A6GG+FR1lhoOuOLCb z_iOH3hTxgJ_mOH)K(CcT&pW@ZUT9{De0`SW01ddEKp82rC!f)ydT2{2YJ|70;X1uRfGhsh=`w1ZabEBSnt`=G>Fp4!C7 zCwq+770YSPk+Ojfsh%j`gDRF=yuX?A|76X(K~9$NZlVo*aOKRB)jOTHy1ydhrQC>! zjTOJta*mb)dVAzq6FK2gld=n@vA;pC`N%&xkixsTHErfh`Rf61ZpoD%2Ae2;tT~K5 z4`!a`NlB>}AgNj@#^zEqGsR}H?7^hc6h2N0?{i7QO;Ho1sMxBaj7=Cg!TXA6Gv7@s zxwJ;b8k-*EAN(qzV*8DAl9U*I(Grv6l2g;!RZ9~I#`t7vc!QLebkXwUFQSro2<`jf z0(s{9#DDwkER~XzFIBR4nTs14xsTXXdWsa?{h~$t)*?(P)1{Qo7cC_r##~`=&XN+U z35GYUWVU~BYvUi({6RJbwx|rAkeX|)&T=U)uBt{CE{~J+;*BL&)5sg8$ZC4Zg^ToF zH_a(U;N8D-ffSx_Df)5|mRF#FCr!?qrO;~n%!O-g?A58*jo@4)B@Vb0HGMZ9Y>V-) zWjmKhsh1Qid3`a~Ys_FRy<|mwSFV^;9?F4<)Zdh&A0CbZRocu3&#{Vl26kn9K!`I|@#HbUv+=t#UpiY*+YCjBpwc30qV?i$P9e zj7b7}g_%zcV1~lkQQ0MVXPg_H8 z5)(P?s^VjQT4TKTD|L)nx8gftvkO~IVbg@|Dq#y@|B7*BQCqnIKJXMMugtdogV;C< zwaj>1f!ExfoKfW5C2YL&=ah4=b02!|x9o8q9A42slp z+t3;3+3H_Fw%YlslwaMu$-FgRcfP@%`pQ14&^P!*t<}yqrML?&U!7~%d*cm^_e3eq zZJ_0*y^oy{>S+RVf{+j>I)k$i{{+9i1NsxNqJ+8!}o@z z%j44JF?_?lN3|Iz&Dle7l>f*#|B-RNleC;aIDeJR{pkG3`LpvEVQV04VZzo>*uvM= zeA=>yGjhY_S$CWq*nszLa2Q;@!P&+6GAlU$FmH-HyRIZXdx~*PG^c6R4gS`54x1;Z zP@Xs&9`vPA9rtkvpz-FtLV56`GpL9mT^^q1)7E8m**IIy#aS?oS8>dtJkOADak67c zVL=|Jt(E2#OQX%=HC@+GT)JxgDpxIGi}W47<#H%xt6iFlv)Y;nTk~@BNN$(YRfj{! zEjL*fmQN|4y4qFORZrNO3R|=C{(d({^uJ@OadxlSO1O(xoCH*gbRo2bu(jkhCH{~^ z^q=-nP_34(R!Z}S9+EH4FizccwRN>eS<8&_(p9bw!q&#rwX@Ws@!wH3Aw6}t9t z^$u#bkE^e+wG+1XG)u_6Ng2^U|N5Y2V_fk;wGvzdgsr2nb&@B!g;38tB~YF#7}0;^ z4x{#ISF$U`m8#Tqr76j-beD%CnB~#R-aO0T0KpV_s-fLAHg8gXneX&BdEjQ=)Kc#^ z?xNy+dB(a|t$?qDt#>&`{d5twerH{ouEDf1#5L44jCRsoBW*QYqimNA<#6o+cF#{5 z%;Du6O)(-zik?*JJ;*pbw=kzno>+0N5nu$zqw}?~HD0#WTi9?_*MK43mF2o#4)LxW zVe2Jq-OLfWr_p^~d30ab7-8dGM!xaYl`qFvVe4V^!fJ=p^A3SQrn*WncBJhxC0QPK z)JLk=SB{cg$y`%q)9Lu9Jj@vUTr*v>`0WUR@?Q*sj?@f}$ZFSYIrd#>ac>LdF2OH% zE}(_guDMeBg%mZDe4cATMUT8m*rLoVzeQ&Gt*%AF7Asse}SlAMTjgF8gY}X3g zz;&)iUF%(sxgK{tA#6#)MpjH0wi|_Qo*Zw&{nzM$`K4|Bhn=?dUzE>XBs#k^XIy;# zq+G_)b4ZcD?_o^y_=ZluczzFdjvC%st?A(xTw6Ju(DkBggKMK}lWVhUi?AgNTZ*uy z3R{}64HCBWhh5uTFV%dy=F_enuARc>5w`2(ATJMzyAddo0&nitQ? zW#rkfzH@ddh-2gsW%@?8VVZr&#mhBTxeg0k#wyoQVaqhfGw+ot%Fy2|e8P1~UPev| z+u&8M)512yxQtXeJk~7!nu`}XKI(ei^@in1*ITZ)UGF$TUGE9oP+=R!VUxDu!Zt$K zM)INwVH+jO1^w43N72gvE00X8bci{ptqe7l7|I+YmpNXEheOC1Sk2Gnzj1zX>9kI< zS(Gm&jGJSHZJe;> z3)^^Mn;>ij!Zz_Scc^8L+XZ#pb>&%^O1PVe$0TDsEi(SUMA*vYA6(_H5w3JVrFQ1;S^)qERU#_U8ibE=Bfo8fL*mk*#Z50W6w8q`r-A6We?jqH`E8?`f9}2W`_jgCRqir>8HBip< z06KZ!&TO{{Td7x#Sa)22`m5dX%HV*1_nI@n%@k&GfE7tt;p>C$6n7eZ%gqQpb(NbD zc-nbJCwHcMaL~-qJ0$jO*nosRNmN_OS+c_{C%HN_K;j0VUFp3 zAmH;=#@}X$*Sa6}PuJX!2-{u0>6-g7rEHD+arYDMCxz{9VOuV2_xa~+?q}T32TsJ? zFSuV6wq?S0k4zAG;=F&{^4??=^*3f`W}{o&F9lWK?tWR=?iIEb-nUMA?;yN2@4h~$ z<{tO{pqd9{!z%+C_Ma&)t7qA>+Q|i_l6Kb?mgE(UYnQ`4OgkQ26_)Z+fRfw^?ee+H z7|Yv|xLlO9%P!(=QSAb+!^UIDs-IMxIZr=K@dUq<#(muVN~ST$@>&{&7t<(89cT=# zpbPW_UJ`T79GDMFVFj#%C*WCl9$thkunk@YUNm#fYw)+C)VdlPKtpH*5zqvhK?|U* zT5X^&^oMAOg8?uQQeY5dz+jjNx4=E{6dY5O5cKC&&q_#JXa~Ik86gRf2*?RZ2I_|l zh2by?u7}aE2=>7@iekqHc3wwhM=v{i*^y`O3|*l+;1fG??Wr&VkYmq+Y&Zk&z~}Hi z`~rU}io*uz=LiKC(1zn?SO)jQgRlzLz+>b~>qL$dA36&Gc~0ax%V9p;1jN&M8{7^{;VxJW zF9LcxKY%X)-#YQ9>oUNnEF&qdns5z-fCDtB2hAZ0Vu0AX(8+~PE_8C?7nVU3*C6l! zadu%p%N2^N7>KoNGE9Z(FcW42I&-tExaPqESO~<jgTI|FUF#{+h{ zAA+qwp18k*-vC?Oe=~GgK!VC)cbz$a?sd?;&Jw`Sb?$&W0ln(1g4M7Vo`vV&dBFd5cEN7g1N-1OoCIQD z2V3fV3g5x+ic0eUq+uLfPA7xaOC zK-?M-w*~`%KG$FpxF1{(pNG}r>z(%@Y{p9WvRSMZIZ z(7Y0M8Cbyv_$>^-h4DogI)$NA7&?Wu0{j(5eukl6Sa;|NQGi}y*c^5JPZJ0**FPOAPv$X0|vuT z7!D)hI=CLNzi}>%fpIV%3SbfxK{1rVWS9!mVJ6Ima+nMAU;!+ITVN5~2DigfxC@rS za##T?;Q@FER>N9&7#@Yk;0bsNo`L7!1=s+aU<+)6?XUxO!5-KL2jDOq19GDAX&@gO zzX5NmO> z8W4wwIY0~|<^%qZxE1hy#2tX&Bklow9&tb5?+E%*#KW*2@N)!xDgqxz(6=M-Z^Tx> zw-Gx5zeenbLqOk%cm?QZ5oduu7V#F)|06ztkKr?*zeRiv^tXr~fc_To8~mv#kqXoR z8(axjLkMUP3T~(eVbBPu5ZMe`LK|ogouDi9fZos#q9G0jz(7cWL68AMU^t9|>mdim zKt2>eArwOyOobUR8wAXQo8T5$47bCbung{n`(Q0R1<$}qcoV(?Y>&j|CfM5K3J8Z5 zKz=kq*Cy!LBn^mV6Jpqe_L@8hkHTYc8r}x{+q4$ApblVfQ|xSdEud#p^lN%EY=j-K z3*LcG;d4c4rULbw*`Yf`0Xf(#7bXJsH^a7O*wkz}90Fq8>9Wnr{c%ZvG?ur6`!Gw1|M#&=v+m7G%SGxDD`Si z*%)ZAWgAEU{M0fXZh+}P-nYc}E%ALza=GOmI10xB8Lh~%R@mLDIdlMWrqxKugRy|# zt+2V(5}*&X!iHA(uhnbtK70tsX^ouL$Z6dOS_1a8CZ}4HORce|HT7HLv(_tM17J_< zoq&wi|A8+RrHu~tAq>dbHsorXSQrl_PzHCxN_YV9N1GFH3Vv0TwwHkw@I_mE-O&uPE)YqkR)-2E?>IK4_l}H^L$yuI-R+s0{T>^zCis>i7*MK06E?X9Xg>yCv@m^5NN;CY4{p` z2IAA1_B%I)=0IFKCqpU}!c>?J_W(L{Mu*P(;5ZQD&cvqkPw)%3>FCj=G2ojnNstLc zU?JQA*D4<6- z;?j-!-H1!K4$u>N!$iP;-LRn>dD)G6-PQy8ca!zdzuOP+C;Y7_-Lbzr^}Bb1Q7{I^ z!D3hj%V7r`gv0O^V0(9L@1a9|2!l9C0b<#M81$G6E|0J`?YroOb%cO#%vUwqm3HPll?a-+~S zx&~YgwIC7FAp`D&mGA&yPxM>xj-tdg0>;&t){qC2pa{sd7;-)4Irs#yE#^B#iACSo zcF+N?hkU>nvG>7Rco^_=?3aL_daocx;USOHmRohbtiwurUD}6R8xycG0UHyrF##I~)B|#50J;wt z1!G_w;NJnq;1xwlB)*AZfWC<%0beAJg>~>0;EP21N+SL2S_{NNGNi)oK%QQU53YS1 zK7r2^WndF%3+(}024c%VY+?JGGVo2HY!c%|QUhoR!60^cVS ztK=fUhspRbc{}U}{FvefzE6n&;*ydN#3ki<*annMy$W=|)>QnEiXT$(L+aD831~B| zCZJOqZKh2Gax#saOv6uUufpq!GKh8tku!tHnL&I%XbuQ?4c-UhpWYFAK_9pomcm^? znRLpeQ^rFX4`n=*@stDQJh#FJ@CAIOC>eubI1rNz?8v|$8Q7fZ0%Dcf81PqS8PF#( zUxIybKv4!epf1!0`s`r*F&LW$6U)JyVXLAHxeTy*$Tg4#!(argg2&(q_zr%9KNMwX zKNtYl0LsQIye?8BLkdlo>rAZiCz5 zRd^3RP?Q|}oP(cp@N*7wa*&gQoSd_OojLC-N^S?}3B6$<+yQq2`sAWdF8bu90{Z4* zTi%nf0r2IRE5HFdq4D@}d_716a)10BSOMhq zc;t;g0Vm-!ybaho{yq2#z6RuuCobcqtiKfn7b_Ep%Y+cH19nf)p)N!~Q)mI$K7l-$ z&<~;^4iex+*baw*b|=v81nilBJrihm!iVq);NuBjC`tis6to8XR*(wmkO@NodkSs< zVqHM23y5_Aek~}68{u}qzXi*HSQo5>2Vpg=g*`x<6EBB0;DM=Y+6K{s4a2KHS zMD#7hFNOG|@CP983x5Ohp$Oj;)c_k@30DJtD$*bn+(0af!k`gELNjOyv|rR7Isv&- z)C2He5&kQ}e?|DOXaEd^6c_{*F_Zze70rOzfQ?1iScHv5 z^o^p$fWM0HR}uay!e2%Bs|bG;;jbccvWT24dK{jDXW<3d2wUJK*a5p?9~^`ua2!s; z8F®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 Y@W21GZ1I18_WI@j{`~)chs)yr2QL?(IsgCw delta 28303 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 DxHW&$ diff --git a/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/apple/example_app/Example_OSX_App.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index f1741d2f2a4ed27f518adc07e6a6a2f1f936a784..206d442bcf440ac121e4a46d20ad508625ef5d63 100644 GIT binary patch literal 45214 zcmd@72V4|a_c#vEojbF$J2MNbf*?idePMUmYNC;$yvj2hFs>AlAkO|Pa`)4PfO&)wNwb`kR!zfYe0KJOcz&m+v-d+xpGoO{|m_e^7F zTdTL*WO|uF49j4KV|YfRKV5&u?6jqxE^li``|Pxi#)Y1yZf|{>yQ^tID?F}C>+a|r z&Y*RhZyLrijKFA_5lj>l&15oJOg59lJDMHC zCb7w^nYFPl_E`2fwwNtrC$Ur5Dt0G*{|4d+3(n&*q_;7*!}Du?4Rrb%wi1|@CY1*qwz=_gHv%DPRAKI z6X#$PHe&~N;&HePm*a_e8m`9E@hp5iZpI$mg4=Ni?!?`A6<&wW#^>P+@kRJzya`{8 z`|&n>9lizMi66iZ;wSM__*MKGejUGo-^6d>FY#A+AO0GDgTKY!;a~8t_y9i0={S*- zxM5s0HQaC&3;GCR`8_ONT9m|d5#&f0IL~bfq#m(eqadWr^?nJJMYvGo1%edv- z3hpFsCAW%O&7H-a&7H%Y%WdG!<2G^^bC+J^r z#hOW)N==QXPBTX{SJR;JXy$7cYnEu1X;y29=5)6*MQ*a4mg=2℘#yp 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�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 diff --git a/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Assets.xcassets/AppIcon.appiconset/Contents.json b/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..eeea76c 100644 --- a/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -59,6 +59,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Base.lproj/Main.storyboard b/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Base.lproj/Main.storyboard index 32e3df7..7d81256 100644 --- a/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Base.lproj/Main.storyboard +++ b/integrations/apple/example_app/Example_iOS_App/Example_iOS_App/Base.lproj/Main.storyboard @@ -16,11 +16,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/make-linux.mk b/make-linux.mk index c972531..61148de 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -108,13 +108,22 @@ docker_demo: one linux_shared_lib # in order to verify it's working properly cd $(INT)/docker/docker_demo; docker build --tag="docker_demo_monitor" -f monitor_dockerfile . +# Builds all docker test images +docker_images: + ./tests/docker/build.sh + +# Runs docker container tests +docker_test: + ./tests/docker/test.sh + +# Checks the results of the docker tests +docker_check_test: + ./tests/docker/check.sh # Check for the presence of built frameworks/bundles/libaries check: ./check.sh $(BUILD)/lwip/liblwip.so ./check.sh $(BUILD)/linux_shared_lib/libztintercept.so - - ./check.sh $(BUILD)/ ./check.sh $(BUILD)/android_jni_lib/arm64-v8a/libZeroTierJNI.so ./check.sh $(BUILD)/android_jni_lib/armeabi/libZeroTierJNI.so ./check.sh $(BUILD)/android_jni_lib/armeabi-v7a/libZeroTierJNI.so @@ -138,8 +147,9 @@ tests: $(TEST_OBJDIR) $(TEST_TARGETS) mkdir -p $(BUILD)/tests; clean: - -rm -rf zerotier-one zerotier-cli zerotier-idtool -rm -rf $(BUILD)/* + -rm -rf zerotier-cli zerotier-idtool + -find . -type f \( -name 'zerotier-one' -o -name 'zerotier-sdk-service' \) -delete -find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' \) -delete # Remove junk generated by Android builds -cd $(INT)/android/android_jni_lib/proj; ./gradlew clean diff --git a/make-mac.mk b/make-mac.mk index b1d53ba..d2ff04f 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -52,6 +52,9 @@ CXXFLAGS=$(CFLAGS) -fno-rtti # Build everything all: osx ios android check +# Build all Apple targets +apple: osx ios + # Build all iOS targets ios: ios_app_framework ios_unity3d_bundle @@ -111,15 +114,11 @@ prep: # Check for the presence of built frameworks/bundles/libaries check: ./check.sh $(BUILD)/lwip/liblwip.so - ./check.sh $(BUILD)/osx_shared_lib/libztintercept.so ./check.sh $(BUILD)/osx_unity3d_bundle/Debug/ZeroTierSDK_Unity3D_OSX.bundle ./check.sh $(BUILD)/osx_app_framework/Debug/ZeroTierSDK_OSX.framework - ./check.sh $(BUILD)/ios_app_framework/Debug-iphoneos/ZeroTierSDK_iOS.framework ./check.sh $(BUILD)/ios_unity3d_bundle/Debug-iphoneos/ZeroTierSDK_Unity3D_iOS.bundle - - ./check.sh $(BUILD)/ ./check.sh $(BUILD)/android_jni_lib/arm64-v8a/libZeroTierJNI.so ./check.sh $(BUILD)/android_jni_lib/armeabi/libZeroTierJNI.so ./check.sh $(BUILD)/android_jni_lib/armeabi-v7a/libZeroTierJNI.so @@ -143,8 +142,9 @@ tests: $(TEST_OBJDIR) $(TEST_TARGETS) mkdir -p $(BUILD)/tests; clean: - -rm -rf zerotier-cli zerotier-idtool -rm -rf $(BUILD)/* + -rm -rf zerotier-cli zerotier-idtool + -find . -type f \( -name 'zerotier-one' -o -name 'zerotier-sdk-service' \) -delete -find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' \) -delete # android JNI lib project -cd $(INT)/android/android_jni_lib/proj; ./gradlew clean diff --git a/src/SDK_Apple-Bridging-Header.h b/src/SDK_Apple-Bridging-Header.h new file mode 100644 index 0000000..c54c342 --- /dev/null +++ b/src/SDK_Apple-Bridging-Header.h @@ -0,0 +1,37 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#ifndef Example_OSX_Bridging_Header_h +#define Example_OSX_Bridging_Header_h + +int start_intercept(); +void start_service(const char * path); +void join_network(const char * nwid); +void disable_intercept(); +void enable_intercept(); + +#include +#include "SDK_Signatures.h" + +void zt_join_network(const char *nwid); +void zt_leave_network(const char *nwid); + +// Direct Call ZT API +// These functions will provide direct access to ZT-enabled sockets with no hassle +int zts_init_rpc(const char *path, const char *nwid); +int zts_connect(CONNECT_SIG); +int zts_bind(BIND_SIG); +int zts_accept(ACCEPT_SIG); +int zts_listen(LISTEN_SIG); +int zts_socket(SOCKET_SIG); +int zts_setsockopt(SETSOCKOPT_SIG); +int zts_getsockopt(GETSOCKOPT_SIG); +int zts_close(CLOSE_SIG); +int zts_getsockname(GETSOCKNAME_SIG); + + +#endif /* Example_OSX_Bridging_Header_h */ + + + diff --git a/src/SDK_ServiceSetup.cpp b/src/SDK_ServiceSetup.cpp index d189477..13866eb 100644 --- a/src/SDK_ServiceSetup.cpp +++ b/src/SDK_ServiceSetup.cpp @@ -90,8 +90,11 @@ void zt_init_rpc(const char * path, const char * nwid); if(!ZeroTier::OSUtils::writeFile(confFile.c_str(), "")) { LOGV("unable to write network conf file: %s\n", confFile.c_str()); } - zt1Service->join(nwid); - zt_init_rpc(homeDir.c_str(), nwid); // This provides the shim API with the RPC information + LOGV("zt1Service = %x\n", (void*)zt1Service); + + //zt1Service->join(nwid); + LOGV("started up\n"); + //zt_init_rpc(homeDir.c_str(), nwid); // This provides the shim API with the RPC information } void leave_network(const char *nwid) { zt1Service->leave(nwid); } @@ -195,6 +198,7 @@ void zt_init_rpc(const char * path, const char * nwid); #if defined(__ANDROID__) homeDir = "/sdcard/zerotier"; + join_network("565799d8f65063e5"); #endif #if defined(__APPLE__) diff --git a/zerotierone b/zerotierone index f93ba1e..0b7adff 160000 --- a/zerotierone +++ b/zerotierone @@ -1 +1 @@ -Subproject commit f93ba1e965b04467b03f657f999955c89a79d0e2 +Subproject commit 0b7adff086c692b05e38d0f4f0af19e80842f7ac