From 664e6bdfc27d488877415f193951f730be20cad3 Mon Sep 17 00:00:00 2001
From: George <george.makhoul@kuwaitnet.com>
Date: Wed, 25 Oct 2023 12:24:51 +0300
Subject: [PATCH] first commit

---
 .DS_Store                                     | Bin 0 -> 6148 bytes
 LICENSE.txt                                   | 202 ++++
 README.md                                     |  97 +-
 TraccarClient.xcodeproj/project.pbxproj       | 920 ++++++++++++++++++
 .../contents.xcworkspacedata                  |   7 +
 .../xcshareddata/IDEWorkspaceChecks.plist     |   8 +
 .../xcshareddata/swiftpm/Package.resolved     | 122 +++
 .../IDEFindNavigatorScopes.plist              |   5 +
 .../UserInterfaceState.xcuserstate            | Bin 0 -> 43851 bytes
 .../xcschemes/xcschememanagement.plist        |  35 +
 TraccarClient/AppDelegate.swift               | 176 ++++
 TraccarClient/Base.lproj/Localizable.strings  |   9 +
 .../Base.lproj/MainStoryboard.storyboard      | 106 ++
 TraccarClient/BatteryStatus.swift             |  22 +
 TraccarClient/DatabaseHelper.swift            |  48 +
 TraccarClient/DistanceCalculator.swift        |  33 +
 .../AppIcon.appiconset/100.png                | Bin 0 -> 6049 bytes
 .../AppIcon.appiconset/1024.png               | Bin 0 -> 65721 bytes
 .../AppIcon.appiconset/114.png                | Bin 0 -> 6936 bytes
 .../AppIcon.appiconset/120.png                | Bin 0 -> 7390 bytes
 .../AppIcon.appiconset/144.png                | Bin 0 -> 9037 bytes
 .../AppIcon.appiconset/152.png                | Bin 0 -> 9622 bytes
 .../AppIcon.appiconset/167.png                | Bin 0 -> 10625 bytes
 .../AppIcon.appiconset/180.png                | Bin 0 -> 11415 bytes
 .../Images.xcassets/AppIcon.appiconset/20.png | Bin 0 -> 1016 bytes
 .../Images.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 1537 bytes
 .../Images.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 2282 bytes
 .../Images.xcassets/AppIcon.appiconset/50.png | Bin 0 -> 2776 bytes
 .../Images.xcassets/AppIcon.appiconset/57.png | Bin 0 -> 3230 bytes
 .../Images.xcassets/AppIcon.appiconset/58.png | Bin 0 -> 3346 bytes
 .../Images.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 3369 bytes
 .../Images.xcassets/AppIcon.appiconset/72.png | Bin 0 -> 4256 bytes
 .../Images.xcassets/AppIcon.appiconset/76.png | Bin 0 -> 4507 bytes
 .../Images.xcassets/AppIcon.appiconset/80.png | Bin 0 -> 4634 bytes
 .../Images.xcassets/AppIcon.appiconset/87.png | Bin 0 -> 5268 bytes
 .../AppIcon.appiconset/Contents.json          |   1 +
 .../Brand.colorset/Contents.json              |  38 +
 TraccarClient/Images.xcassets/Contents.json   |   6 +
 TraccarClient/InAppSettings.bundle/Root.plist | 113 +++
 .../de.lproj/Root.strings                     |  10 +
 .../en.lproj/Root.strings                     |  11 +
 .../es.lproj/Root.strings                     |  10 +
 .../fr.lproj/Root.strings                     |  10 +
 .../it.lproj/Root.strings                     |  10 +
 .../ja.lproj/Root.strings                     |  10 +
 .../ko.lproj/Root.strings                     |  10 +
 .../nl.lproj/Root.strings                     |  10 +
 .../pl.lproj/Root.strings                     |  10 +
 .../pt-BR.lproj/Root.strings                  |  10 +
 .../pt.lproj/Root.strings                     |  10 +
 .../ru.lproj/Root.strings                     |  10 +
 .../zh.lproj/Root.strings                     |  10 +
 TraccarClient/LaunchScreen.xib                |  39 +
 TraccarClient/MainViewController.swift        |  80 ++
 TraccarClient/NetworkManager.swift            |  82 ++
 TraccarClient/Position.swift                  |  53 +
 TraccarClient/PositionProvider.swift          | 127 +++
 TraccarClient/ProtocolFormatter.swift         |  65 ++
 TraccarClient/RequestManager.swift            |  29 +
 TraccarClient/StatusViewController.swift      |  81 ++
 TraccarClient/TraccarClient-Info.plist        |  91 ++
 TraccarClient/TraccarClient-Prefix.pch        |  15 +
 .../TraccarClient.xcdatamodel/contents        |  18 +
 TraccarClient/TrackingController.swift        | 150 +++
 TraccarClient/de.lproj/Localizable.strings    |   9 +
 TraccarClient/de.lproj/MainStoryboard.strings |   7 +
 TraccarClient/en.lproj/MainStoryboard.strings |   3 +
 TraccarClient/es.lproj/Localizable.strings    |   9 +
 TraccarClient/es.lproj/MainStoryboard.strings |   8 +
 TraccarClient/fr.lproj/Localizable.strings    |   9 +
 TraccarClient/fr.lproj/MainStoryboard.strings |   7 +
 TraccarClient/it.lproj/Localizable.strings    |   9 +
 TraccarClient/it.lproj/MainStoryboard.strings |   7 +
 TraccarClient/ja.lproj/Localizable.strings    |   9 +
 TraccarClient/ja.lproj/MainStoryboard.strings |   7 +
 TraccarClient/ko.lproj/Localizable.strings    |   9 +
 TraccarClient/ko.lproj/MainStoryboard.strings |   7 +
 TraccarClient/nl.lproj/Localizable.strings    |   9 +
 TraccarClient/nl.lproj/MainStoryboard.strings |   7 +
 TraccarClient/pl.lproj/Localizable.strings    |   9 +
 TraccarClient/pl.lproj/MainStoryboard.strings |   7 +
 TraccarClient/pt-BR.lproj/Localizable.strings |   9 +
 .../pt-BR.lproj/MainStoryboard.strings        |   7 +
 TraccarClient/pt.lproj/Localizable.strings    |   9 +
 TraccarClient/pt.lproj/MainStoryboard.strings |   7 +
 TraccarClient/ru.lproj/Localizable.strings    |   9 +
 TraccarClient/ru.lproj/MainStoryboard.strings |   7 +
 TraccarClient/zh.lproj/Localizable.strings    |   9 +
 TraccarClient/zh.lproj/MainStoryboard.strings |   7 +
 TraccarClientTests/CoreDataTests.swift        |  36 +
 TraccarClientTests/DatabaseHelperTests.swift  |  39 +
 TraccarClientTests/Info.plist                 |  24 +
 .../ProtocolFormatterTests.swift              |  32 +
 TraccarClientTests/RequestManagerTests.swift  |  33 +
 translate.py                                  |  85 ++
 95 files changed, 3277 insertions(+), 77 deletions(-)
 create mode 100644 .DS_Store
 create mode 100644 LICENSE.txt
 create mode 100644 TraccarClient.xcodeproj/project.pbxproj
 create mode 100644 TraccarClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
 create mode 100644 TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
 create mode 100644 TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
 create mode 100644 TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/IDEFindNavigatorScopes.plist
 create mode 100644 TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate
 create mode 100644 TraccarClient.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist
 create mode 100644 TraccarClient/AppDelegate.swift
 create mode 100644 TraccarClient/Base.lproj/Localizable.strings
 create mode 100644 TraccarClient/Base.lproj/MainStoryboard.storyboard
 create mode 100644 TraccarClient/BatteryStatus.swift
 create mode 100644 TraccarClient/DatabaseHelper.swift
 create mode 100644 TraccarClient/DistanceCalculator.swift
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/100.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/1024.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/114.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/120.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/144.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/152.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/167.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/180.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/20.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/29.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/40.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/50.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/57.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/58.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/60.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/72.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/76.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/80.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/87.png
 create mode 100644 TraccarClient/Images.xcassets/AppIcon.appiconset/Contents.json
 create mode 100644 TraccarClient/Images.xcassets/Brand.colorset/Contents.json
 create mode 100644 TraccarClient/Images.xcassets/Contents.json
 create mode 100644 TraccarClient/InAppSettings.bundle/Root.plist
 create mode 100644 TraccarClient/InAppSettings.bundle/de.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/en.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/es.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/fr.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/it.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/ja.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/ko.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/nl.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/pl.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/pt-BR.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/pt.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/ru.lproj/Root.strings
 create mode 100644 TraccarClient/InAppSettings.bundle/zh.lproj/Root.strings
 create mode 100644 TraccarClient/LaunchScreen.xib
 create mode 100644 TraccarClient/MainViewController.swift
 create mode 100644 TraccarClient/NetworkManager.swift
 create mode 100644 TraccarClient/Position.swift
 create mode 100644 TraccarClient/PositionProvider.swift
 create mode 100644 TraccarClient/ProtocolFormatter.swift
 create mode 100644 TraccarClient/RequestManager.swift
 create mode 100644 TraccarClient/StatusViewController.swift
 create mode 100644 TraccarClient/TraccarClient-Info.plist
 create mode 100644 TraccarClient/TraccarClient-Prefix.pch
 create mode 100644 TraccarClient/TraccarClient.xcdatamodeld/TraccarClient.xcdatamodel/contents
 create mode 100644 TraccarClient/TrackingController.swift
 create mode 100644 TraccarClient/de.lproj/Localizable.strings
 create mode 100644 TraccarClient/de.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/en.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/es.lproj/Localizable.strings
 create mode 100644 TraccarClient/es.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/fr.lproj/Localizable.strings
 create mode 100644 TraccarClient/fr.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/it.lproj/Localizable.strings
 create mode 100644 TraccarClient/it.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/ja.lproj/Localizable.strings
 create mode 100644 TraccarClient/ja.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/ko.lproj/Localizable.strings
 create mode 100644 TraccarClient/ko.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/nl.lproj/Localizable.strings
 create mode 100644 TraccarClient/nl.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/pl.lproj/Localizable.strings
 create mode 100644 TraccarClient/pl.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/pt-BR.lproj/Localizable.strings
 create mode 100644 TraccarClient/pt-BR.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/pt.lproj/Localizable.strings
 create mode 100644 TraccarClient/pt.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/ru.lproj/Localizable.strings
 create mode 100644 TraccarClient/ru.lproj/MainStoryboard.strings
 create mode 100644 TraccarClient/zh.lproj/Localizable.strings
 create mode 100644 TraccarClient/zh.lproj/MainStoryboard.strings
 create mode 100644 TraccarClientTests/CoreDataTests.swift
 create mode 100644 TraccarClientTests/DatabaseHelperTests.swift
 create mode 100644 TraccarClientTests/Info.plist
 create mode 100644 TraccarClientTests/ProtocolFormatterTests.swift
 create mode 100644 TraccarClientTests/RequestManagerTests.swift
 create mode 100755 translate.py

diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..27bf70574c2297bd84bf4f461e9c378f8489fea5
GIT binary patch
literal 6148
zcmeHK&u`N(6n^dsODU5oG{i1Qk+@c+v<wODlC|Ao5^z{5H~=ciQb9%*S4~QXs!Bb>
zAH$Wug#U#Te9!izHf0khHX*;t{`}*8&&lW7j)_QgCeb6J8WA~2jOAO%{$SkCY0XNe
zg*%0c@q&Chpa$i1w&ractO8bn>!tv&-6}n!L+WDXF0bGGFp<Y$B13ra_OOrC_@xXb
zq6!^>u}?jEuGai1MFqyU0%ME%G^T)#@e5GuQbI8eDW$?#;{M+=!)Z1$Px(C@C2^KF
zn?FQpqkQA$rnBi(owxo6IrZ}(pJbh2{F-ZhDU<NL9E309;dD^j?#eU|;&eDxgg6?)
z<;|-&jpVc=Cux)^uCF_sic=ZXc4o77Yq##U+fU|oclNZ^th<kQTl0Cvx%=SZ-qGM=
za+=C7EEl#&?2*d044%VR6fV)`lRr)qnZAb?N4R&fir9J2psl0`s*a$rq?6S-5j@uN
zEZ(^!S|3p|?B!V@#?L~G+wkFeP2rsYbMP7%|MM!Z#BZ=XHmcUHPyzFQbgEbQ40dR%
zfK}jnD!}`Li^S*|Txe8V2Qqa90G83L3}yaUV2*3hGq})*9+=Qnpr#6Q#Sof~cGviM
z1{WGNorJl32s5%UHx!{pM|@Yglkha!+$vxdSXE#{S8II!A6$I@UnSX^Rlq9nUnwBU
zJ-^q%E19!(?dABab&=j7v9aGmqoN=)$FVB#QM`ks41F#afS$pHMzp}}hk%m7W>$fJ
Gs=#mGYO7!X

literal 0
HcmV?d00001

diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/README.md b/README.md
index 8f04207..0c30be4 100644
--- a/README.md
+++ b/README.md
@@ -1,92 +1,35 @@
-# Nmo Teams App
+# [Traccar Client for iOS](https://www.traccar.org/client)
 
+[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://itunes.apple.com/app/traccar-client/id843156974)
 
+## Overview
 
-## Getting started
+Traccar Client is an iOS GPS tracking application. It can work with Traccar open source server software.
 
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
+## Build
 
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
-
-## Add your files
-
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+Project uses CocoaPods for dependencies management. To build the project you need to download dependencies:
 
 ```
-cd existing_repo
-git remote add origin https://git.beinmedia.com/aziz97/nmo-teams-app.git
-git branch -M main
-git push -uf origin main
+pod install
 ```
 
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://git.beinmedia.com/aziz97/nmo-teams-app/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
+## Team
 
-## Suggestions for a good README
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
+- Anton Tananaev ([anton@traccar.org](mailto:anton@traccar.org))
 
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
+## License
 
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
+    Apache License, Version 2.0
 
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
 
-## License
-For open source projects, say how it is licensed.
+        http://www.apache.org/licenses/LICENSE-2.0
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
diff --git a/TraccarClient.xcodeproj/project.pbxproj b/TraccarClient.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..495d167
--- /dev/null
+++ b/TraccarClient.xcodeproj/project.pbxproj
@@ -0,0 +1,920 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 54;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		5E394EBE28A9CC7600396F33 /* BatteryStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E394EBD28A9CC7600396F33 /* BatteryStatus.swift */; };
+		5E716A271F63A0B100A2DBC3 /* DistanceCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A261F63A0B100A2DBC3 /* DistanceCalculator.swift */; };
+		5E716A291F63A45A00A2DBC3 /* RequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A281F63A45A00A2DBC3 /* RequestManager.swift */; };
+		5E716A2B1F63A60800A2DBC3 /* ProtocolFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2A1F63A60800A2DBC3 /* ProtocolFormatter.swift */; };
+		5E716A2E1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2D1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift */; };
+		5E716A301F63A9F600A2DBC3 /* RequestManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2F1F63A9F600A2DBC3 /* RequestManagerTests.swift */; };
+		5EE3CA342998948F002C86E4 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA332998948F002C86E4 /* FirebaseAnalytics */; };
+		5EE3CA362998948F002C86E4 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */; };
+		5EE3CA39299894B9002C86E4 /* InAppSettingsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA38299894B9002C86E4 /* InAppSettingsKit */; };
+		CB4197931F674A3E008F301C /* DatabaseHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197921F674A3E008F301C /* DatabaseHelper.swift */; };
+		CB4197951F675518008F301C /* CoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197941F675518008F301C /* CoreDataTests.swift */; };
+		CB4197971F676B52008F301C /* DatabaseHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197961F676B52008F301C /* DatabaseHelperTests.swift */; };
+		CB4197991F67724F008F301C /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197981F67724F008F301C /* NetworkManager.swift */; };
+		CB7ED0801F6602CD00A33FCF /* Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7ED07F1F6602CD00A33FCF /* Position.swift */; };
+		CB7ED0821F661B4F00A33FCF /* PositionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7ED0811F661B4F00A33FCF /* PositionProvider.swift */; };
+		CB7ED0841F662BAF00A33FCF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7ED0831F662BAF00A33FCF /* AppDelegate.swift */; };
+		CBAA0F7D1F68E14C008BBBBE /* StatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAA0F7C1F68E14C008BBBBE /* StatusViewController.swift */; };
+		CBAA0F7F1F68E807008BBBBE /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAA0F7E1F68E807008BBBBE /* MainViewController.swift */; };
+		CBAA0F811F68EB62008BBBBE /* TrackingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAA0F801F68EB62008BBBBE /* TrackingController.swift */; };
+		CBCE82EF1B8D253600A7318B /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBCE82EE1B8D253600A7318B /* CoreData.framework */; };
+		CBCE82F21B8D265800A7318B /* TraccarClient.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = CBCE82F01B8D265800A7318B /* TraccarClient.xcdatamodeld */; };
+		CBDEEB8A1B8EB6A4006BC126 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBDEEB891B8EB6A4006BC126 /* SystemConfiguration.framework */; };
+		CE5899C81B115C9100ED70D2 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CE5899C71B115C9100ED70D2 /* Images.xcassets */; };
+		CED4871C17DB1BF6007FCF57 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CED4871B17DB1BF6007FCF57 /* UIKit.framework */; };
+		CED4871E17DB1BF6007FCF57 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CED4871D17DB1BF6007FCF57 /* Foundation.framework */; };
+		CED4872017DB1BF6007FCF57 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CED4871F17DB1BF6007FCF57 /* CoreGraphics.framework */; };
+		CED4879917DB1DF4007FCF57 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CED4879817DB1DF4007FCF57 /* MessageUI.framework */; };
+		CED4879B17DB1E61007FCF57 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CED4879A17DB1E61007FCF57 /* InAppSettings.bundle */; };
+		CEDB048717ED50C1000E7EDF /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEDB048617ED50C1000E7EDF /* CoreLocation.framework */; };
+		CEF643271B919FFA00195CEA /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = CEF643241B919FFA00195CEA /* LaunchScreen.xib */; };
+		CEF6433C1B91AA9400195CEA /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CED4873317DB1BF6007FCF57 /* MainStoryboard.storyboard */; };
+		CEF6433D1B91AA9400195CEA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CEF643371B91A94600195CEA /* Localizable.strings */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		CEE286D41B80839700AE7E83 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = CED4871017DB1BF6007FCF57 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = CED4871717DB1BF6007FCF57;
+			remoteInfo = TraccarClient;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		CEFA94EF1EA2EE31009B5809 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		5E394EBD28A9CC7600396F33 /* BatteryStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatteryStatus.swift; sourceTree = "<group>"; };
+		5E716A261F63A0B100A2DBC3 /* DistanceCalculator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistanceCalculator.swift; sourceTree = "<group>"; };
+		5E716A281F63A45A00A2DBC3 /* RequestManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestManager.swift; sourceTree = "<group>"; };
+		5E716A2A1F63A60800A2DBC3 /* ProtocolFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProtocolFormatter.swift; sourceTree = "<group>"; };
+		5E716A2D1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProtocolFormatterTests.swift; sourceTree = "<group>"; };
+		5E716A2F1F63A9F600A2DBC3 /* RequestManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestManagerTests.swift; sourceTree = "<group>"; };
+		CB4197921F674A3E008F301C /* DatabaseHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseHelper.swift; sourceTree = "<group>"; };
+		CB4197941F675518008F301C /* CoreDataTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataTests.swift; sourceTree = "<group>"; };
+		CB4197961F676B52008F301C /* DatabaseHelperTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseHelperTests.swift; sourceTree = "<group>"; };
+		CB4197981F67724F008F301C /* NetworkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = "<group>"; };
+		CB7ED07F1F6602CD00A33FCF /* Position.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Position.swift; sourceTree = "<group>"; };
+		CB7ED0811F661B4F00A33FCF /* PositionProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PositionProvider.swift; sourceTree = "<group>"; };
+		CB7ED0831F662BAF00A33FCF /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		CBAA0F7C1F68E14C008BBBBE /* StatusViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusViewController.swift; sourceTree = "<group>"; };
+		CBAA0F7E1F68E807008BBBBE /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
+		CBAA0F801F68EB62008BBBBE /* TrackingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingController.swift; sourceTree = "<group>"; };
+		CBCE82EE1B8D253600A7318B /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+		CBCE82F11B8D265800A7318B /* TraccarClient.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = TraccarClient.xcdatamodel; sourceTree = "<group>"; };
+		CBDEEB891B8EB6A4006BC126 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		CE2FA5181CB935C9007F86B4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B80FE1EC71CAE00D1C41D /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/MainStoryboard.strings"; sourceTree = "<group>"; };
+		CE4B80FF1EC71CAE00D1C41D /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
+		CE4B81001EC71CCF00D1C41D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B81011EC71CCF00D1C41D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE4B81021EC71CFF00D1C41D /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B81031EC71CFF00D1C41D /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE4B81041EC71D1700D1C41D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B81051EC71D1700D1C41D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE4B81061EC71D3600D1C41D /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B81071EC71D3600D1C41D /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = zh.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE4B81081EC71D4300D1C41D /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B81091EC71D4300D1C41D /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE4B810A1EC71D4800D1C41D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CE4B810B1EC71D4800D1C41D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CE5899C71B115C9100ED70D2 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+		CED4871817DB1BF6007FCF57 /* TraccarClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TraccarClient.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		CED4871B17DB1BF6007FCF57 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		CED4871D17DB1BF6007FCF57 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		CED4871F17DB1BF6007FCF57 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		CED4872317DB1BF6007FCF57 /* TraccarClient-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TraccarClient-Info.plist"; sourceTree = "<group>"; };
+		CED4872917DB1BF6007FCF57 /* TraccarClient-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TraccarClient-Prefix.pch"; sourceTree = "<group>"; };
+		CED4879817DB1DF4007FCF57 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
+		CED4879A17DB1E61007FCF57 /* InAppSettings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = InAppSettings.bundle; sourceTree = "<group>"; };
+		CEDB048617ED50C1000E7EDF /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
+		CEE286CE1B80839700AE7E83 /* TraccarClientTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TraccarClientTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		CEE286D11B80839700AE7E83 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		CEECE4B91B91AE2B00EB6F4A /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CEECE4BA1B91AE2C00EB6F4A /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CEECE4BB1B91AE2D00EB6F4A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CEF254DD1B905266001DEFD2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CEF254DF1B9052EB001DEFD2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainStoryboard.storyboard; sourceTree = "<group>"; };
+		CEF643241B919FFA00195CEA /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = "<group>"; };
+		CEF6432A1B91A48B00195CEA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CEF6432C1B91A49400195CEA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CEF6432E1B91A49700195CEA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CEF643321B91A4BF00195CEA /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/MainStoryboard.strings; sourceTree = "<group>"; };
+		CEF643361B91A94600195CEA /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CEF643381B91A95700195CEA /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
+		CEF643391B91A98300195CEA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		CED4871517DB1BF6007FCF57 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				CBDEEB8A1B8EB6A4006BC126 /* SystemConfiguration.framework in Frameworks */,
+				CBCE82EF1B8D253600A7318B /* CoreData.framework in Frameworks */,
+				5EE3CA342998948F002C86E4 /* FirebaseAnalytics in Frameworks */,
+				CEDB048717ED50C1000E7EDF /* CoreLocation.framework in Frameworks */,
+				CED4879917DB1DF4007FCF57 /* MessageUI.framework in Frameworks */,
+				CED4871C17DB1BF6007FCF57 /* UIKit.framework in Frameworks */,
+				5EE3CA362998948F002C86E4 /* FirebaseCrashlytics in Frameworks */,
+				5EE3CA39299894B9002C86E4 /* InAppSettingsKit in Frameworks */,
+				CED4871E17DB1BF6007FCF57 /* Foundation.framework in Frameworks */,
+				CED4872017DB1BF6007FCF57 /* CoreGraphics.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		CEE286CB1B80839600AE7E83 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		CED4870F17DB1BF6007FCF57 = {
+			isa = PBXGroup;
+			children = (
+				CED4872117DB1BF6007FCF57 /* TraccarClient */,
+				CEE286CF1B80839700AE7E83 /* TraccarClientTests */,
+				CED4871A17DB1BF6007FCF57 /* Frameworks */,
+				CED4871917DB1BF6007FCF57 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		CED4871917DB1BF6007FCF57 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				CED4871817DB1BF6007FCF57 /* TraccarClient.app */,
+				CEE286CE1B80839700AE7E83 /* TraccarClientTests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		CED4871A17DB1BF6007FCF57 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				CBDEEB891B8EB6A4006BC126 /* SystemConfiguration.framework */,
+				CBCE82EE1B8D253600A7318B /* CoreData.framework */,
+				CEDB048617ED50C1000E7EDF /* CoreLocation.framework */,
+				CED4879817DB1DF4007FCF57 /* MessageUI.framework */,
+				CED4871B17DB1BF6007FCF57 /* UIKit.framework */,
+				CED4871D17DB1BF6007FCF57 /* Foundation.framework */,
+				CED4871F17DB1BF6007FCF57 /* CoreGraphics.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		CED4872117DB1BF6007FCF57 /* TraccarClient */ = {
+			isa = PBXGroup;
+			children = (
+				CE5899C71B115C9100ED70D2 /* Images.xcassets */,
+				CED4873317DB1BF6007FCF57 /* MainStoryboard.storyboard */,
+				CEF643241B919FFA00195CEA /* LaunchScreen.xib */,
+				CEF643371B91A94600195CEA /* Localizable.strings */,
+				CED4872217DB1BF6007FCF57 /* Supporting Files */,
+				CB7ED0831F662BAF00A33FCF /* AppDelegate.swift */,
+				CB4197921F674A3E008F301C /* DatabaseHelper.swift */,
+				5E716A261F63A0B100A2DBC3 /* DistanceCalculator.swift */,
+				CBAA0F7E1F68E807008BBBBE /* MainViewController.swift */,
+				CB4197981F67724F008F301C /* NetworkManager.swift */,
+				CB7ED07F1F6602CD00A33FCF /* Position.swift */,
+				5E394EBD28A9CC7600396F33 /* BatteryStatus.swift */,
+				CB7ED0811F661B4F00A33FCF /* PositionProvider.swift */,
+				5E716A2A1F63A60800A2DBC3 /* ProtocolFormatter.swift */,
+				5E716A281F63A45A00A2DBC3 /* RequestManager.swift */,
+				CBAA0F7C1F68E14C008BBBBE /* StatusViewController.swift */,
+				CBAA0F801F68EB62008BBBBE /* TrackingController.swift */,
+			);
+			path = TraccarClient;
+			sourceTree = "<group>";
+		};
+		CED4872217DB1BF6007FCF57 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				CED4872317DB1BF6007FCF57 /* TraccarClient-Info.plist */,
+				CED4872917DB1BF6007FCF57 /* TraccarClient-Prefix.pch */,
+				CBCE82F01B8D265800A7318B /* TraccarClient.xcdatamodeld */,
+				CED4879A17DB1E61007FCF57 /* InAppSettings.bundle */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		CEE286CF1B80839700AE7E83 /* TraccarClientTests */ = {
+			isa = PBXGroup;
+			children = (
+				CEE286D01B80839700AE7E83 /* Supporting Files */,
+				CB4197941F675518008F301C /* CoreDataTests.swift */,
+				CB4197961F676B52008F301C /* DatabaseHelperTests.swift */,
+				5E716A2D1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift */,
+				5E716A2F1F63A9F600A2DBC3 /* RequestManagerTests.swift */,
+			);
+			path = TraccarClientTests;
+			sourceTree = "<group>";
+		};
+		CEE286D01B80839700AE7E83 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				CEE286D11B80839700AE7E83 /* Info.plist */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		CED4871717DB1BF6007FCF57 /* TraccarClient */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = CED4873E17DB1BF6007FCF57 /* Build configuration list for PBXNativeTarget "TraccarClient" */;
+			buildPhases = (
+				CED4871417DB1BF6007FCF57 /* Sources */,
+				CED4871517DB1BF6007FCF57 /* Frameworks */,
+				CED4871617DB1BF6007FCF57 /* Resources */,
+				5E3175221F692FA600CDF0F5 /* ShellScript */,
+				CEFA94EF1EA2EE31009B5809 /* Embed Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = TraccarClient;
+			packageProductDependencies = (
+				5EE3CA332998948F002C86E4 /* FirebaseAnalytics */,
+				5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */,
+				5EE3CA38299894B9002C86E4 /* InAppSettingsKit */,
+			);
+			productName = TraccarClient;
+			productReference = CED4871817DB1BF6007FCF57 /* TraccarClient.app */;
+			productType = "com.apple.product-type.application";
+		};
+		CEE286CD1B80839600AE7E83 /* TraccarClientTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = CEE286D61B80839700AE7E83 /* Build configuration list for PBXNativeTarget "TraccarClientTests" */;
+			buildPhases = (
+				CEE286CA1B80839600AE7E83 /* Sources */,
+				CEE286CB1B80839600AE7E83 /* Frameworks */,
+				CEE286CC1B80839600AE7E83 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				CEE286D51B80839700AE7E83 /* PBXTargetDependency */,
+			);
+			name = TraccarClientTests;
+			productName = TraccarClientTests;
+			productReference = CEE286CE1B80839700AE7E83 /* TraccarClientTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		CED4871017DB1BF6007FCF57 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 1200;
+				ORGANIZATIONNAME = Traccar;
+				TargetAttributes = {
+					CED4871717DB1BF6007FCF57 = {
+						LastSwiftMigration = 1100;
+					};
+					CEE286CD1B80839600AE7E83 = {
+						CreatedOnToolsVersion = 6.4;
+						LastSwiftMigration = 1100;
+						TestTargetID = CED4871717DB1BF6007FCF57;
+					};
+				};
+			};
+			buildConfigurationList = CED4871317DB1BF6007FCF57 /* Build configuration list for PBXProject "TraccarClient" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+				de,
+				es,
+				fr,
+				pt,
+				ru,
+				"pt-BR",
+				it,
+				pl,
+				nl,
+				zh,
+				ko,
+				ja,
+			);
+			mainGroup = CED4870F17DB1BF6007FCF57;
+			packageReferences = (
+				5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
+				5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */,
+			);
+			productRefGroup = CED4871917DB1BF6007FCF57 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				CED4871717DB1BF6007FCF57 /* TraccarClient */,
+				CEE286CD1B80839600AE7E83 /* TraccarClientTests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		CED4871617DB1BF6007FCF57 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				CEF6433C1B91AA9400195CEA /* MainStoryboard.storyboard in Resources */,
+				CEF6433D1B91AA9400195CEA /* Localizable.strings in Resources */,
+				CE5899C81B115C9100ED70D2 /* Images.xcassets in Resources */,
+				CEF643271B919FFA00195CEA /* LaunchScreen.xib in Resources */,
+				CED4879B17DB1E61007FCF57 /* InAppSettings.bundle in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		CEE286CC1B80839600AE7E83 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		5E3175221F692FA600CDF0F5 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
+				"$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "if [ \"${CONFIGURATION}\" = \"Google\" ]; then\ncp -r \"${PROJECT_DIR}/../environment/google-services/traccar-client-ios.plist\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist\"\n\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\nfi\n";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		CED4871417DB1BF6007FCF57 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				CB7ED0801F6602CD00A33FCF /* Position.swift in Sources */,
+				CBAA0F7F1F68E807008BBBBE /* MainViewController.swift in Sources */,
+				CB7ED0821F661B4F00A33FCF /* PositionProvider.swift in Sources */,
+				CB4197991F67724F008F301C /* NetworkManager.swift in Sources */,
+				CB7ED0841F662BAF00A33FCF /* AppDelegate.swift in Sources */,
+				5E394EBE28A9CC7600396F33 /* BatteryStatus.swift in Sources */,
+				5E716A2B1F63A60800A2DBC3 /* ProtocolFormatter.swift in Sources */,
+				CBCE82F21B8D265800A7318B /* TraccarClient.xcdatamodeld in Sources */,
+				CBAA0F7D1F68E14C008BBBBE /* StatusViewController.swift in Sources */,
+				CBAA0F811F68EB62008BBBBE /* TrackingController.swift in Sources */,
+				5E716A271F63A0B100A2DBC3 /* DistanceCalculator.swift in Sources */,
+				5E716A291F63A45A00A2DBC3 /* RequestManager.swift in Sources */,
+				CB4197931F674A3E008F301C /* DatabaseHelper.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		CEE286CA1B80839600AE7E83 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				5E716A301F63A9F600A2DBC3 /* RequestManagerTests.swift in Sources */,
+				CB4197971F676B52008F301C /* DatabaseHelperTests.swift in Sources */,
+				5E716A2E1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift in Sources */,
+				CB4197951F675518008F301C /* CoreDataTests.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		CEE286D51B80839700AE7E83 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = CED4871717DB1BF6007FCF57 /* TraccarClient */;
+			targetProxy = CEE286D41B80839700AE7E83 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		CED4873317DB1BF6007FCF57 /* MainStoryboard.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				CEF254DD1B905266001DEFD2 /* ru */,
+				CEF254DF1B9052EB001DEFD2 /* Base */,
+				CEF6432A1B91A48B00195CEA /* de */,
+				CEF6432C1B91A49400195CEA /* es */,
+				CEF6432E1B91A49700195CEA /* fr */,
+				CEF643321B91A4BF00195CEA /* pt */,
+				CE2FA5181CB935C9007F86B4 /* en */,
+				CE4B80FE1EC71CAE00D1C41D /* pt-BR */,
+				CE4B81001EC71CCF00D1C41D /* it */,
+				CE4B81021EC71CFF00D1C41D /* pl */,
+				CE4B81041EC71D1700D1C41D /* nl */,
+				CE4B81061EC71D3600D1C41D /* zh */,
+				CE4B81081EC71D4300D1C41D /* ko */,
+				CE4B810A1EC71D4800D1C41D /* ja */,
+			);
+			name = MainStoryboard.storyboard;
+			sourceTree = "<group>";
+		};
+		CEF643371B91A94600195CEA /* Localizable.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				CEF643361B91A94600195CEA /* Base */,
+				CEF643381B91A95700195CEA /* de */,
+				CEF643391B91A98300195CEA /* ru */,
+				CEECE4B91B91AE2B00EB6F4A /* es */,
+				CEECE4BA1B91AE2C00EB6F4A /* fr */,
+				CEECE4BB1B91AE2D00EB6F4A /* pt */,
+				CE4B80FF1EC71CAE00D1C41D /* pt-BR */,
+				CE4B81011EC71CCF00D1C41D /* it */,
+				CE4B81031EC71CFF00D1C41D /* pl */,
+				CE4B81051EC71D1700D1C41D /* nl */,
+				CE4B81071EC71D3600D1C41D /* zh */,
+				CE4B81091EC71D4300D1C41D /* ko */,
+				CE4B810B1EC71D4800D1C41D /* ja */,
+			);
+			name = Localizable.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		5E3175231F69305200CDF0F5 /* Google */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				DEFINES_MODULE = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+				SDKROOT = iphoneos;
+				SWIFT_COMPILATION_MODE = wholemodule;
+				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Google;
+		};
+		5E3175241F69305200CDF0F5 /* Google */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 58;
+				DEFINES_MODULE = YES;
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "TraccarClient/TraccarClient-Prefix.pch";
+				INFOPLIST_FILE = "TraccarClient/TraccarClient-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 7.0;
+				OTHER_SWIFT_FLAGS = "-D FIREBASE";
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Google;
+		};
+		5E3175251F69305200CDF0F5 /* Google */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				INFOPLIST_FILE = TraccarClientTests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TraccarClient.app/TraccarClient";
+			};
+			name = Google;
+		};
+		CED4873C17DB1BF6007FCF57 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEFINES_MODULE = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		CED4873D17DB1BF6007FCF57 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				DEFINES_MODULE = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+				SDKROOT = iphoneos;
+				SWIFT_COMPILATION_MODE = wholemodule;
+				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		CED4873F17DB1BF6007FCF57 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				CURRENT_PROJECT_VERSION = 58;
+				DEFINES_MODULE = YES;
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "TraccarClient/TraccarClient-Prefix.pch";
+				INFOPLIST_FILE = "TraccarClient/TraccarClient-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 7.0;
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		CED4874017DB1BF6007FCF57 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 58;
+				DEFINES_MODULE = YES;
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "TraccarClient/TraccarClient-Prefix.pch";
+				INFOPLIST_FILE = "TraccarClient/TraccarClient-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 7.0;
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE = "";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+		CEE286D71B80839700AE7E83 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"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;
+				INFOPLIST_FILE = TraccarClientTests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TraccarClient.app/TraccarClient";
+			};
+			name = Debug;
+		};
+		CEE286D81B80839700AE7E83 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DEVELOPMENT_TEAM = HK8L8KQMEZ;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				INFOPLIST_FILE = TraccarClientTests/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_SWIFT3_OBJC_INFERENCE = On;
+				SWIFT_VERSION = 5.0;
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TraccarClient.app/TraccarClient";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		CED4871317DB1BF6007FCF57 /* Build configuration list for PBXProject "TraccarClient" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CED4873C17DB1BF6007FCF57 /* Debug */,
+				CED4873D17DB1BF6007FCF57 /* Release */,
+				5E3175231F69305200CDF0F5 /* Google */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		CED4873E17DB1BF6007FCF57 /* Build configuration list for PBXNativeTarget "TraccarClient" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CED4873F17DB1BF6007FCF57 /* Debug */,
+				CED4874017DB1BF6007FCF57 /* Release */,
+				5E3175241F69305200CDF0F5 /* Google */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		CEE286D61B80839700AE7E83 /* Build configuration list for PBXNativeTarget "TraccarClientTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CEE286D71B80839700AE7E83 /* Debug */,
+				CEE286D81B80839700AE7E83 /* Release */,
+				5E3175251F69305200CDF0F5 /* Google */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+
+/* Begin XCRemoteSwiftPackageReference section */
+		5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/firebase/firebase-ios-sdk";
+			requirement = {
+				kind = upToNextMajorVersion;
+				minimumVersion = 9.0.0;
+			};
+		};
+		5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/futuretap/InAppSettingsKit.git";
+			requirement = {
+				branch = master;
+				kind = branch;
+			};
+		};
+/* End XCRemoteSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+		5EE3CA332998948F002C86E4 /* FirebaseAnalytics */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
+			productName = FirebaseAnalytics;
+		};
+		5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
+			productName = FirebaseCrashlytics;
+		};
+		5EE3CA38299894B9002C86E4 /* InAppSettingsKit */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */;
+			productName = InAppSettingsKit;
+		};
+/* End XCSwiftPackageProductDependency section */
+
+/* Begin XCVersionGroup section */
+		CBCE82F01B8D265800A7318B /* TraccarClient.xcdatamodeld */ = {
+			isa = XCVersionGroup;
+			children = (
+				CBCE82F11B8D265800A7318B /* TraccarClient.xcdatamodel */,
+			);
+			currentVersion = CBCE82F11B8D265800A7318B /* TraccarClient.xcdatamodel */;
+			path = TraccarClient.xcdatamodeld;
+			sourceTree = "<group>";
+			versionGroupType = wrapper.xcdatamodel;
+		};
+/* End XCVersionGroup section */
+	};
+	rootObject = CED4871017DB1BF6007FCF57 /* Project object */;
+}
diff --git a/TraccarClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TraccarClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/TraccarClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>
diff --git a/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>
diff --git a/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
new file mode 100644
index 0000000..a0a0de8
--- /dev/null
+++ b/TraccarClient.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -0,0 +1,122 @@
+{
+  "pins" : [
+    {
+      "identity" : "abseil-cpp-swiftpm",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/firebase/abseil-cpp-SwiftPM.git",
+      "state" : {
+        "revision" : "583de9bd60f66b40e78d08599cc92036c2e7e4e1",
+        "version" : "0.20220203.2"
+      }
+    },
+    {
+      "identity" : "boringssl-swiftpm",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/firebase/boringssl-SwiftPM.git",
+      "state" : {
+        "revision" : "dd3eda2b05a3f459fc3073695ad1b28659066eab",
+        "version" : "0.9.1"
+      }
+    },
+    {
+      "identity" : "firebase-ios-sdk",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/firebase/firebase-ios-sdk",
+      "state" : {
+        "revision" : "7e80c25b51c2ffa238879b07fbfc5baa54bb3050",
+        "version" : "9.6.0"
+      }
+    },
+    {
+      "identity" : "googleappmeasurement",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/google/GoogleAppMeasurement.git",
+      "state" : {
+        "revision" : "c1cfde8067668027b23a42c29d11c246152fe046",
+        "version" : "9.6.0"
+      }
+    },
+    {
+      "identity" : "googledatatransport",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/google/GoogleDataTransport.git",
+      "state" : {
+        "revision" : "aae45a320fd0d11811820335b1eabc8753902a40",
+        "version" : "9.2.5"
+      }
+    },
+    {
+      "identity" : "googleutilities",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/google/GoogleUtilities.git",
+      "state" : {
+        "revision" : "c38ce365d77b04a9a300c31061c5227589e5597b",
+        "version" : "7.11.5"
+      }
+    },
+    {
+      "identity" : "grpc-ios",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/grpc/grpc-ios.git",
+      "state" : {
+        "revision" : "8440b914756e0d26d4f4d054a1c1581daedfc5b6",
+        "version" : "1.44.3-grpc"
+      }
+    },
+    {
+      "identity" : "gtm-session-fetcher",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/google/gtm-session-fetcher.git",
+      "state" : {
+        "revision" : "5ccda3981422a84186387dbb763ba739178b529c",
+        "version" : "2.3.0"
+      }
+    },
+    {
+      "identity" : "inappsettingskit",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/futuretap/InAppSettingsKit.git",
+      "state" : {
+        "branch" : "master",
+        "revision" : "08ab93cd15759eed534b821c2ea789d97a0fdca0"
+      }
+    },
+    {
+      "identity" : "leveldb",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/firebase/leveldb.git",
+      "state" : {
+        "revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
+        "version" : "1.22.2"
+      }
+    },
+    {
+      "identity" : "nanopb",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/firebase/nanopb.git",
+      "state" : {
+        "revision" : "819d0a2173aff699fb8c364b6fb906f7cdb1a692",
+        "version" : "2.30909.0"
+      }
+    },
+    {
+      "identity" : "promises",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/google/promises.git",
+      "state" : {
+        "revision" : "e70e889c0196c76d22759eb50d6a0270ca9f1d9e",
+        "version" : "2.3.1"
+      }
+    },
+    {
+      "identity" : "swift-protobuf",
+      "kind" : "remoteSourceControl",
+      "location" : "https://github.com/apple/swift-protobuf.git",
+      "state" : {
+        "revision" : "3c54ab05249f59f2c6641dd2920b8358ea9ed127",
+        "version" : "1.24.0"
+      }
+    }
+  ],
+  "version" : 2
+}
diff --git a/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/IDEFindNavigatorScopes.plist b/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/IDEFindNavigatorScopes.plist
new file mode 100644
index 0000000..5dd5da8
--- /dev/null
+++ b/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/IDEFindNavigatorScopes.plist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array/>
+</plist>
diff --git a/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/TraccarClient.xcodeproj/project.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000000000000000000000000000000000000..b2d758c245a287f08b5ba9e4e4628cff98a6159a
GIT binary patch
literal 43851
zcmeFa30PFs|37}uIWu!tWLRWJk;N4ThGhU*1O|{*QQS8|7<H6Q22?cjo=VF$D=XU*
zP)kiMGuv0&Gc&V&FUu?|TWnM7|33H5fGC=uPkny>=lMSA1I*le_VYUL?Yz(X%xtQ2
zx>^zv_H&5C9N`R{kuz~TCryf8;AnO^8yhA^S2x$pal*H8(JhTllcF1E&UMtZxO_RZ
zVr`Y#dsJnqqs>v9>rV6<Cvf8U%9iRDhl;lO7z~`uDO?~I#07InTr!u!*|=0LjZ5c-
za~WJFm&IjsMO-mg!j*DkxUt*>ZW?zUH;bFi&Ep!mHf}Muggc*G#$CuQ=Pu!H;%??{
z;cn$_<8J5f;MQ^*xVyP6+&$b2+>6{x+{@f<?iFqi_bRuSdyU)2y~(}BeZ+mteZqap
zeZhUj{lNXm{lxvs9Y-d_BLRs>LNZd2H}XTlC=5lQXfzmEP&~>&nJ5coqY-E%DniAm
z3{{{Rs0y8js?khTgJz?7s17xu`Dg)Jh!&xx=mNA1U4pJhH=s4>MszD$i`Jp_XfwJS
zZ9!Yn4s<`-i5@@?q9@TF^eWnmUPEu7chCpuL-ZLsfIdfGp|8<l^aJ`C{er!4AMB0I
z*a!P!KkSeD;sD$q$KZi@2#&>ZI00L6GETv1I2~u=ES!z=upJlTk+=wt!lQ8o9)ri?
zY4|)`jU9Lvo{Q(<R=fZ&#EWnnUW!$GF}@0~!dK&K@EUwGz8&9z*WvYe1HK2}i|@w|
z;>YpRco%*Vzl0CtBlvrK6#tBW$H(xWgd+xGBqEVWAL32?h(8G;!6cmYBatME3?hR`
zEQupll1OYMm5e48WDFTgD#<u9o=hMU$s{tFOeeKuE}2JMq=mGS1!N&vMpQz{h2&;(
z3%QltMs6o}khP?pbdXN6j@(7Ik$cF!WIK6~JVc%%Pm^8b8M2$aLOv&7kb~q)a)^9I
zz9xssH{@IL9r=;`PL7e|25cY(*`OG_3}%Cm!PgLC2sI=bk_{;an<3SZW=J;-H)I$x
z4Oxa<Ly@7_P-3Vsj4@0$OfgI~OfyV3I1IB47Z{cqR0B0!Xt>C5v0=Gkh2avzrG_gE
zs}0u~ZZ_Ov=rpV|tT${iY&AS*c;4`W;YGtshL;Vy4X+sX7+y8(HS9OMXZXbMso^Wb
z*M`G}pA1KhUdBE~Z=>1hWArup8U2lYjRD3$W2iCGIM_JEXf-AplZ+Y0OyfA?c;f`)
zMB^mmWaAX$RO2+`bmI);Orz5{*Er8O-`H$iY+PbI-?-Gc+_=JcyYUX=T4TGh!`NwD
zXIyXGV7$|Km+@}nea4534;!C0?lL}O+--ct__^^5<3Zz>#zV%hj9(iM8^1ArYy8gm
zqw#m+G2?OL2@^3HOp3|N)W_s)GMj=-!6vII(UfFLHl>(src_g!Dcv;OlwlfSDm0au
z%1z@<6HF6LRi^Vyi%e~%#ik{u^G!=l7nqirR1-B_Xj);q(sY$+mFarZ4W`>ocbL|i
z?lNsOJ!N{@w9E92=~>frrsqvBm|ir!WO~{3s_9MBTc)>7ADTWg9W;GuI%N9F^tI_n
z(@(s@d+~jEZ{E!N@V>ks@6Y$;1Nabr03XRm@zMNHei)y`C-W)1jZfuA@HzY>elkCW
zpUO|;r}H!TD*imanxDzf;_LYazJ+h)m+}|z%XpQi{7U{Z{%Za@{(62Rzlq<>-_38~
zxANQgd-!|#`}v*x!~7%sqx@t1Q~dM%3;b^W75-IzFTbCEm;aFeh(E-C#edBo=8y0{
z^S|)F3Y>rhED*sUh=L^a5&VU|LVyq}#0eH5UPutELZXl)Bnv5mO-L2egmhuJP$-NP
ziiBdJL?{)?gmR%$m@do^s)X}|YGI~OC)5iKLbI?ySRq^@Tq>*-E)y;nt`b%WtA(3{
z+k~~k7U3!3X<?V}jPR`RobbHxg7Bj7lJK$ciSViLnQ%b(T=+sbD10d#5`GbW6@C+b
z7mf+XML`rrNt8uJG>blBpco{EiQ!_TI8+=a#)@fTx;R|S5HrOrF<UGYOT|&*Sg}%^
zC{7Y5i#1}c=n!X#vqhKKBDRVP#D(G#@qF<@@gngO@ltW6xJtZQTqE8n-Xz{E-Xh*A
zc8HzgX7O%ui}<|wg7~8NlK8T?TYN>_Bfcu`6<-tgiEoPUitmZ<iyw;z#Gk~Y;?LqQ
z;;-Uw;_s3{GD;?im-<Nkq@mI<$ttBvX;QkBCFM$aQlT_bDwRe{mC`tAk~B@4F3pe@
zNDHM!Qk%3`S|Xh<EtM{imPx8~v2?j~jdZPavviBpDXo*%OB<!_(nHdd(lgSt(u>kd
z(jIA_^t$wx^tSYl^se-o^p*6Z^o#VXbX+<iBN@vknU@7wk-cOe*;fvb1LaUTOb(a(
z$u>DvPLtE+;c|wYDQC&q@(4Lc&X-H&G4fb>iab@GCfCXid6qm|Zju+u%jApXi{<6=
zN*pa;CSN75l2^-X<QwH%<=f=j<-6pK@+Nt+e7C$^zF&Swepr4&eo}r$enEasep~)X
z{!Bg~e<>f9kI3K4M-^F76fdQZ;;on!AH`SkQ~Z^1B|;gXL@P1MU}cCBtHdb@id9Kg
zQWTpqT**)}l`O@s<SPYAp;DrhDr1$&%5-IhGE<qQ%vI(ojY_MsKv|+JS5_#OD3>ZL
zmCKatl<Sonln$j+S*NU5HYnSb`;;BZ{mM?|CFNyhxAKazM|oA*tGuS{Q{GnIQ9e|@
zR1PU$DL*Mkm7m8)H?-E(z0P@YeK>E<%=vKv6Gv5A<~iD2Q{b;#s+bU6Q&;VBb#OkM
zuZmUD!TEE2f&Suq)#xg-e{p`n#Kz`%uBPf5M}A{XYrUhPrOF(gnx2xHmv2jovnD1c
z#3d&u7R03|6{g4K+tQMg?DoQhghHFA<`8Zmm$;b=<-)jdt{>N*i{J)ukz5oP&Bdrj
z)ui&Opo*%b%BrGzseM%M&D<bvFgJu7$_?XUxj4?k#d8UqRW++I6kk9wrO2P+t0}&l
z;w@?x#oH*pM-8en`;2XEus1feI2N^xb<{vpT~+3ge8;Tn*1DF0T4zgRvnD6G3LBfp
zk1cae%dKevIjgc}j-%cIoz=fW8Tk%Zi?gA+1*9=}oY(BAp4ZgqgyOUmAZgWBnG?#Y
zT`l&;`ldPue6L`#o2vz?)Jw~&c7ce-ig&iOjde6NHp8%adq!}gv!S+eA#0reDYv<~
zx?wgnqM;?<F|&1cal@>}Ds%s_jV?z^OLfl%O>nxLGo5u%EEHJjr~}c^QQK8uklt^-
zv!3c$Up=!ig0pi0om>u=%jKy)s;}zT$>nneT%qc(2CLz0()+=rpEi(sw_G54R+&?J
zOTdO>JaoEeYxCOlj9R{dz2)nfo>ky!Y8f|*OKj)L)xPcAXf;3$nm(?%x~8VO*<R;_
zk=n;q0<On#;~A=3ob`^V+-F-Z$=tL&Qw`k5P2?tVlesBVba*#Z*E=TZA04g<qbl=Z
z4m;re)JdZ%M{DA>o?|*Uqsr_zs<OPbrFv$aBi{)#*w|3r+}6oW=c>4=(;#ctGfz9K
zxf<5anQBNoSF47e-cE0B4(H_NPKI{6TAG~=v(>OF^WX&dmzDs_hyAstC0i46^V1U&
z5(}!FO>-I>9F4B3>gIY|vfi>fu3nS<-7Txs%IW0lxCX5g`gc!@nz$A&v6Gw6HFGYt
zpW0uI=;T_t1>8b)fEuYrv88g()mNE^Cl;jHQ><2dT(Y$w8CJVJKQ2ALAU!TUIjtZy
z(VAyXwWhfn?Q+())>Xqo)7xHU&a7R~QtMdYtZ~HUPZ;N{U_Gm-18Op-v98w99Ovol
z@TTsET?3#`@ltNQKDGN--^r$yO}nZ+bNzH)la2E{yGTzr?840ps0RX7+=>o1ah{R6
zl)IWsypvnWUB+F`UBO++UB#_Z2dabA!Rioos5(rIy_36!yOvwcUB_L|-N3C;<J9Zb
zN7Q%J4=El)@jNzmgC^B9);cVJ=2B;irRQ3+OtJ&Gs>>lkU6nbtN6KQLOwF^P?|H3G
z*7;MjR>HWo&1|f02J&*&Ix3hBsn`1#Da#sXd#FH_Ij%=*PHA_AV|KNx)m7Qp+FawX
zL-PS6XG@>!0^($cuGTfq?&_$PA*rIdk!h@ztxb&Xo!ZMDX*~1N&ULai)S+71xpk^l
z4SJos6Q=ntZX>se+ssz@OrWS!;cv48@C8&`<<tZ<zRKJ>%US0b9v>eM#HZO6Kig7Y
zJ#S89Yh64L@p+&>$G7N2Bd$iH8gb4>S9}jT(({{TQB5s$s-DeX?U`Tci*hTsZTzT8
zAg>+V)^3d5%RR~^ZsN9c_i;P8`?;Om1Kfk$L)^pMBWj|Wq$aB=s!dH*)6{fzxSFwv
zdkomy6Wo*BQ{2<sF76rl_MDojW~td~o@!UespHiN@NFVPUIJ^IhOM!UjUEJaJp<M^
z%Q?HXSz}xtctm%-)}MG-#ssHh;kdRYM{z@~V-cX}lw`TJwRx>AEsYH>duwwukXtRC
z19(<kSIXYnQ0Qo>nWLrkG$7bhqX&p(jWt>ep{$g%mc_Vhqs!Ui$ZY{~H?y_H;VCoz
ztogJyjCIU!1vc)<arT;Y)R)1kV#C5jh~~z+I!E)#z3n-CMNUUEv(vPlGLF`>wydC`
z1sJy`qJT7^m*`mnuXFpk#I<YHAT#HA^fvb%7tq1I!@aAHP;)xC_qq4gT=)-6+Pk{8
zRxeGTCJ=t$39P&(M{`S?{><-B_did0pK%BDD)wnI;X&?DJNKoUuU78ozUB^d-@uCd
zmivx7!hJsjh+BTSK6A__#rUfWmPOOlTDKGks8>g-g=&F1_W!R%2wcH+<co?=f7=HQ
zKg#{g{ZeK2?b+~(>Xtd`7_~_6@Ne9)cJ6nzSgr7k$O(j)IP?eiC*sr+wNx$ZL>Lid
zP|MX(>S#5(66ED^OnjKE$;qRbAOWkv+2VA#CRH$W!temiFV|M3Mi!74>H`#u33Y89
z$cvk*KQ$wtQ%1D|`EpZFd8ViJM}4czVXP~j^?vH&S%(5pAPVB9{zbYfb6;&lPR$Qu
z4)EhspX#-TpwJmzGLY7dP87mA;vO{=j{501@;n%TB6~iFK_K)qFndxALBoK+qoL}g
zb`+~lX2dMHYpL|MEULQR<~4(?>}c+>T2KN?;S$#&D@sI3C|RANPF1I=)7K#zN=0cX
zU7ew}sLRzAte*7VOX{wmi@dnTF{$t5<)8UidB<w(2*~6dXVdA~hxMLaS2Vioans<O
z-cxrsR3mJlZ0M^T5O_*^J%gQt>|A08%0+o<m3m$W%0~riwOYdlqnmnnm(tykt_9yk
z?Yn!>TY9a2MgcXwY9A_rh4>~a1u=OnQ)ujstqm>eOdVC_XcXw3TEUf$mJT$Un|jiB
zPt(VsiCp4(G!|8&acDf6pw_Amb(T6?owFWILX*)HG!;!#o$6e*PHj-<vo878G}g7&
zHx%c)s$3v%fCd4aC8+1ad}lLAB(PNBRbbCodY>DcU6Z?>Pt!k5bk?@aacQIj)iPT7
zClH8A{repFj-2W|wX$+@f%{oKd)A=VtCdye0ac4?Yd~ZvZg4po7?oJy7zNsMv$KYA
zwd!WaaJ`&n?obDEp%%4KZBi?z<&KN!LgPgE!Z@^^u#F{LjFza)s!Oe$Vogl2FbyIh
z;iQkAK~&L2r_BFynE%%9)p#koijDG0bQ!u_8|4M+LUoZo%B#@T=o)k_TCKLJi`6CS
zQkDLbqpbJlrc;LVwyxpS-?y{x9qRf2$xv?K4t1hC(OqbxdV#u3Rasu|vEw36UZOML
z`$^jU6!==)z&2joqr8okaSyr|ZC5W;FH$eoMmnu)q^-8@kE!mDe#?4tS@aMB`LD<7
zdmKjplJ3!e3O&z8|7o-fJ)@2OrRqxcGJW)4Krf<~(93AIdbxUqdZoHbz4o6U{e7p5
z{+p+a{=4k^d+JsH$>@K?@cA+NM7>(QhUN1utcd7IuiB=;ql#untrO%w_jrH7avelp
zs;kxOV5}1px=@{znCKp0530XG-!T^Qt$IT{I-=g#Lq|YIHGN=BmD%yP^#NwPvD7tz
z5))ru?QH1Q%0PSfC}^HG{faS{xDow^en-d9adZOxf&RoCM(R!K&FU@ct?F&+?dl!s
zTD5&6CfI<D*o1j3U=d4LRy)*t)O*$K>V4`C^?r4y`Y@YnZ{38$s47#RTvMhrHr5wb
z*D$5p9Iaa`iu1=cGJ{KLL*v2*dv(KtYL`bADX(q<S+I+c1Jz#O1YNVr+$D#XJL+dT
znu}|h7&8mRSVj_AVYzjno`TiO(OuzGJ0x;6S1{ujq+%@CQ9G`&sm!s!QRglP$gbI(
zuc`QX)y<lDs!pF>9LOEpfP-)_4#A-~42P?o>IU^Lb(4Cxx)o$F9Km_x0XPyz;b>-(
zWF&e)bshWYYI4*#tLxNt>UuM&GEZ2t1Wb*|X%<^@Qi?4lDIp~>Ej2whBF<_}NV24)
zr^DaW<n+`uYvR(_h$V?>$%&S<RBKW~dSbdYAu&BEHX<=GHNlc-gKw#6iIC2kwsfh+
znD8Jx7{s*+)pf0o4m=2?9Cy2hvUaI=s_T2J-<E7kJjeRel2fd`*YByxqSds~Q&YM%
z-IAP=l4`X<n-fz~lcD*i_cU4SDHx6{$>}LJE3?F=gZcIBH6>~_ZDuu%hcWF@Q%a&W
z@hoF{a!uBh^pvw#WYa3z(rZPDDG9b-dX#AWZ+bLbt7u#I*d<tOiMI5_q$B`AN^)v%
zv-F?U6gA?Vs<53ScbB*qJsyE`bm6wj98jF6FTb98qsGK=K6h-bS`js3FQ@$jgUS+X
zYN91IJux9IJt;XMG0~Qq8XJ*hwWK6jlM|Axw&cXr^wflO04CV%aWQwS6PMspT&6yt
zKBzvVR!m7A-xk-F7?(QJIc17-Lfn|@xH%04Q_AY|<5C*pYAY5Co;FrukfS>BI6NLt
zP#;wvSD);}lkj9bMSWU*NqwUS@x)ac@qDbxJo#@E&mN|gIA+MUXdVwI*>iBMR^1a-
z=JWn`b;S+2O-&$9g1LUS%QCaIp|;Ku&+HPX*Xq=2eX7b_@po$-2dc0u{^Y)Cdn~vP
zH?c9V#|^kq-K9RGKHCYzz8SlKz(1!x&xkv-tyfi)6<3a{D#$M$H+pPUWkFeieO&SA
zQB|b{ldH@TrzMzBTv?n~RxlP)=}As6qhL}+E{N8iG6I$?Nr3g0n8wyqnhn-kYHBK@
zb_`UD@%im|iTZ;2qW=8??$BB$)PlhrQ+y$a?j94fqoos`T*OTU8y5_*2U*MUO4iF2
z_!4}n`m(xPeTDV%a(o5!a*w+IoO=0}UHHpk&>Md(KED&M#@FHN)mPQM>ON1WZgh8w
zb@&z#X7H`*YfLEd2k~Q;1I$@9j!MR1H1?+#wH721d@JsNgs-cWV-jF(_dblCakvw2
z?q#;O;H@wYZ>n#xaX3Q>dWGBBMBJyo?P>E)t<9d&AHt7-u!A2~-)+Z_s_*w)uTN=E
zey_@$xF~KBvqi^&5f*Hq1*u87>G`>-afM0A1#!u#g=ul=@F*@ZFVAkX+LF@p)2*Hg
zp25$t3Z7LzXvaJ>8JgQAA)IO!@a!Jpm+^aC;x@B4-i=?ud+@7xFMbX0!>{B0_znCf
zeha^i-@)&yAE}?HpQ)d#2h~IB*XlRwck1`*kLpqN7xg#w7|Z@X{s4c7Kf)j5Pw=Ps
zGkgGlj=#VM@t61z{z^STQD2JUC@Q3A21PE4E}`faindeq97P{d^drS0#RDiF-g8{O
z)5hiFD)XejyTs!`Zfa=+H4wH6>#JKp2C}#oI%mNm=rT*=pS0ROtuoL1+qLyd#+qB*
zQm97H^qnJ^iS7pcrZwO|m3j2vZh%L6JiV8HXq9|XWgh#tD*;lS4;z-VLBu?*9zwKw
zzWk?n&^%xW-FA)Bs}r>9zWS%C>)Mr!V-&`@$kJ3Z=cK73URrgBLF)S3qd3aZvJkf9
z%c~ozXZHe2;;U8lZIyZI->!;Tby{6LMVr%yGEl4V$UiZZ`Cx&s2I6e5uB*}a5l^o!
zOsnpPe_|-zdjw}3$^lwcKm8L`<%1!YZDAET>cB#Odanj*RsCFL9{0CrEl;CYZTjS$
zUehqGreCYfubru;GUrU#+h~IwG|=+chC;lyX9wS#!HiYQy3%uJEN*6#vu;7{;<mQ7
z`nmJk9I*S>w9r{wy`XKrt2JKVT&bw8nFoM%#e=s+&Ai4|O@cZ}c!RA}cS<H&o$|uj
zP*c}h>xeJTtt>t1)hWpAvEmZ6ZvI|no_MBip7REwhd6q4>C?wFMXT)iKd}Uu$>EfK
zxjBy}WRf%jw%tu6oeU=#B$H&3Y%+r6kX(|d{-OR!5l0cC2vbBTGEiis$V3spiR5E&
zr@}HRBE?)h{4L{#Q6zxL0sd1YQDlZqM)>3d&NWOJ2<hGlW@>*UU{-TB0UIi8Ih_7-
zPUFIIXM?kznI8u9`kHMj+Z(~y1~35cmR{3<F^>7S)Ul1m(@UwVZUf*HECN3p<|z$n
zqE0WRhHc$x_GnAvtXZ&0-CIenlTy_=8=yVCcPY2EWe%8zdwb2~u0n8P07lc>Xf156
zZYqP4b^9@y0$WdHDn+7Np^1NF26t>7Z1rmYVdVAyo_#6eAhWrEb~1}1xt+|RNMU<^
z;L23jQmxNMS<j(xOLe4<G{TM{sV5B-c~R7-gEV2DB5x4zqG!~)x9-Xu4YOP3OlAFc
z+xdNjvM60i<vg2@WD!}yifSW^De|SruLJX>NxhF17Cn9zbli1Hfug4o7ZI>7Zz30y
z<zxl9gj`BilFP{D<O*^nMFA8AQWQi{FhwC0g;EqoQ8-2YDC)n7ta5{NHMvd$=^6&o
z2oFeODC{3;Acd#@f>d9Wu<rgbkgjJS-9XU*4@frxNXaI$8Gg1<6iHE(_B&dwF!N?)
zmOL|lAGx2wbq7TQ+sRIf2Av~ZA1046j5Ux)0jm@ZW*B>dVQk20aP>jMqMkUSgVa;)
zv*ZOGqR(p(jXg_tPnJF89fr+U$zJjr*+*U{`^g*RP4X6bn<5KE@f0OcWThyPq9lrv
zDN3QpMp5b}@~#`3ACiyA$3Q?oW!OyfU^A1VJc{g$g697VP7lZUC&77yf%AI`d%JE5
z`V#}^QSvkUp=dZo8TxMkXPCLKXTndAKN&RtpeU=|0L(G_+@NVN7<j;z!N@4-2u4W_
zf<dGxha&L5IEC{0@Q-Um-Oxw3_~i`NacVZYTVe1s1ZYS#fMN^8w4lQv8U!c`3Oube
zPo6NtAb_eN+|bX^-w<IKV2CtC8KMm_hJh4~q^O9ZVv0&ADy685qH>BxQ8b#OicN;W
zI#dm@hB$)-%Z3C7)iEBZj;Ck}MN=76r~M1n{{d7D*#K1ofM%>4s)js(s=;o^XFn8G
zQZ!Eg4N!HO2YV*G)KCskHNa#}Xg9!QPCQ4bjx~(esHg!-?L*Nd2Cj)3xF(+lE}!ti
zsGNarc-DAoo?)og;d!10&*^6?!INjUp_##Rj=^b|YnW%KGt?Uz42^~+!+eUWD1wrz
zDVj-94MnvSIVb{QW;R80HW^%QcrMhrykQB0r_%$^x-Kpc1^vtA|8XvFSjo_N8AWqF
z=)97l^D6Q)`=Mx_Mo8IjK&PK)wy!s=Vc5KZqWX5jjTGD*&PgCO+-kT($L8%CHX9kT
z+BIx8osLbP3q93sFl^KTd6x#r=Cft<<k@C;m;v%0!@Y*>hWiXV4EGy$8Xhn_Xn2UC
z7K&OaT0qf4iWX7SM$ux5mQZv)MN2ms9&rQm2{#~jF+g760i@am$mRb6@_#`tUt@sW
zN6|75Am0E$o>4b4yl?oBLGc5MXuIJfiY`1yD1K)60x)Gbz&QFv8b?3Kbfb%V(T#l2
zJP)eAF&xp6_??Et6(D084l)t-;?wZ!$?~%iF(Ce8_|@>6;djF^!*Rn2!ykq}jT}Xn
zQnZpHSbdjMbOlAA5nV;mDvGYA=$cJNtOL<#(v@_h#DI9M2Z+~oDd{);3&j5c5RE|q
zL?bAstKC2}hMf(F#wcS90MQst(e>>{5Xx>iHy|2^8sh*`#$gPIYZwrX7A9H(RqaKz
zlyls$GA0{SH6$8s8WL{?nrO6Wr1Zu!LD86HECMJRvyCH+ImTRLp3!d1Hx?KRjUYhY
zO3`f;0bRa>qO}wORqmjulcIGLt>0uUc0;k8d}JJrW#bqI#SI=PZqn49ZA^x|=U*)T
zFR)m}un0obogOUK02Yn4MhE+$2>9Yg{WoywVzbB3)>vn3V3@3@Xmh)<k)pfL5tA<C
z0tT)IBe2On6m0=AXI#X{+}6{u<s+Uj5A}fZ0wdKy30x8sn|sfa&y(d6<FyQvml{_Z
zFEd_lyux^;@hamg<JHD%D1r)iP;@^<J1KgAq6aAg<_#cwgrY|`8CSb8xyDT%Z(*2x
z%!A1%y2#@*|3dPA0ZFh1wHsmOKkk9#ma~$_9mbsuiZGc^wi{tGpE^e<K4N@ahvH)z
z6rW~v?n#Z#?K&NchF3kXde*2LgN)B>NPPBe**tmn7@0N5_^NTQ@ipT<<Lk!##y5;_
z8s9R$O%W9H0!1%U^b$ocQ?#3+S18&;(W?~g-DGrIgNz><KQe+f$f#L^Uh_clO^V*5
z=zT^WK}`8qiTTHs7$dU=8NnK~&x1u~4Kf}z{tQ3AQuI1S`?cS10D1H`2bv>2Q~rmE
zW2pR-qPN;jh@!X84V5ONNzhPf0+A62<U2s<OcEoI@Ad*pYgA5zTgNuID>nI<{548x
z^3(A7;aLjsWC=0F06a~hrZ7{ush_F8DZ(_s6lsbwfynVOMW0agDMg=AbbzAIDf)t<
zgA{#9(V<PIfjXr$4b?RolZ8>ruRQQP+@;aL2>y%Ce;l2rOhBh8i=waH=rrY=jZ&IM
znu-CFrXq^IX*ZQnaB)5-<=QmLGzK7L8qEYrP*3`Fn8q?e@<^|Or12*YtR|VJ>PVcT
zA@K*Gl%}y7fjx2>mOXi@O?3>4Gfg$7T9d;x%QV|G$K*84HO-^wCyI_z^fN`jPy}o5
zH;R6z=om%EDLS#qRPTo3e4S~VS{W4oa6=Je57TC<*uPNx=b?BJgW|;${po??B>+X!
zrKXkahhmOmr2hs&>1z(~%=gu%YZ)Z3p_sIrR#R*^M@X(Q-K>*IP*M9(Y-HF1MI)DD
z(`nf9!FxT`wVT%IkOck1mtx^;**tkRneJzh+-$nrw8ga5w9Ryn>0Z-z(|x8L6iXD#
z6e|>aQ4G!Srr1oe55-Wn-zL*eHzXf6Jz{zkf{Z*4ki`BTNCr_HPH{hA-njq2nEW3I
zlBV4Zldn+R*MrHu43n>!_OTy|11JvEf2$Qfh&RW0X8au!oQG{Uy-RU$yXk$3L(UPD
zADcd7bn+9RlQ>kPlLvs@;IQ5-Kf^1cat640_X$tMhfUw<@cdSTX9VNj2Y~rQ5vT42
zd9obkIfl-kO~06aHT`D#-E_=!+;qb9hv`p>BPoueIGSRJXEKoDK@<<BcnHNqDIT_o
zM>;xrBX8n)Eb}5mXRHUER*G#Dr!sV={fo~30Xlg&wbIT55r}i6lMe-S@?m^9{Pd^T
zLUFwII{_$Wt2x9R<(_grh93m*<Y7h=+j*GLq;rEOAIryUG?TYzG&329A8*xYX3A;s
z^6^<0l@sK~=Oj<fX?%u;Pky+D&-AmE;K`HAmjOWeJl@Xd^96h%Kawxvi}@11l;RAE
zGbx71I@uJDpg4zOAmDiv+bPc9#Fx7PI))$1R{}uCGk_L&09r(GImM$GKu7-z(EkNM
z!4lNY*HT>Q0qAT7&^gA@?1$o!6hS~F_8S1|u^#e`{Coz^CW?#O`DThs&Jmmo_%<D!
zi!^YSGH5N)z*%-WIKA4Ua$?=!jP(HRLVmdpPLM)?|5lu>1W%sJ`76OYoxg(OvF-d-
z6p!oS=*_QY{&p0DNB`eG%n@H)&)gCr?gxaya<q6{-T52%JGjKV_%-~E{7wAL{4M;g
z{B8X06pyEP0>u+4o<#9vil<OKmEvi4@oV{ZzJu@N*YWH54g8%HPp7zw;%bU#Qd~nZ
z%$Jkmxy-dLQ1_&B)E2im>Q6d{H`S#DUtv$d<IG&^XsLGAbvrS`q2?y-_yQcE)ZN}#
zzzXe<@^lwOH>m+nv^Y3fTn%~klHypL822OZIymB22p(W8Fcl=4&OGrJz#&8Jz2?5a
zvm*&SaJ3ogi*Q!L5)ZDH#Wjr$mg=S^C;Wxs(bGM^(mhD=d1p*lWezXSE4I7i!;E%U
z)!mn<oVq79oOmYuasG)O0R#A_`DYjcc2VqT=bxo`78^Nl$D*cc2w0+zT)ysG$G^zG
z+|Iv5@ob9cjIroPSuW!Dbg;84GxU*QBgJ~{sqQs?U(f2^;NN1^y-9IhJO4Jt4Lt$(
zfetu`!Bp~h-AMsy;5o>SmwFoWF%MxmI{8odPx;R%Zlo9%>HJRqbN&ndAjPm&&!>1P
z>wc`}hwF*2qmvf>q$hagdYt>ZqpS3m9Ng0vI2&6bazOKJhdVlo9iRb#(?bsREWJvv
zvC=ua0nnw_sAJ$8MufhlaJZ>rKmWZRJ%s;(|B?TRKRUU~Rg~fd6t_~`Lh+J+bnIB{
zk3T;9__yhvLHvzB4yUg9-}z${FQj-;2Y-V9gW@)d7pp-N^p;Q1dkwKKdg<1w(Z%3E
zlwcH0faD&de(E@P3cMh&FdS!3)_c5--dp1Ck{}C850DDpf)CJe0aTe~?E;WeRgInw
z=fzl15<LJ|&pvp{2^0o!0UL!NAy^0zLWM9PT<9nC7b4)e7o6{+_+pBeQ@n!WODMjS
zV$cdN+sF+QqOdGP2?K>e!eC(tQ`#Zu-sOy~UrsR)<|`=%!n}&H_~<E4S3#X~Hgnts
z!qK8(OFt3}vA$Yn!5JDj40ZD3V%J27$N+A>jL_*XD)UPxR5v@T*-7IbMR?)`!I^SB
zr55_Q1r7_hHajMFWrj#6C)c3GV_`1Gr_~HpsHPc$_D%A{9)ojK5DUfL*zC~T9G9As
zWKXr`<;LYEr$E3ndtP!}S_&MdO0}h>733FKli`5rcr7^FG*1~;2nR4l4{v6*#(IJu
z3K;?%6<sG}3Ryz70Fo5w)7MfA`t)_{gj^v{unYMVUr+H36tAHe&a^{oVMcpK4jkuf
zVdENf+KUM+>LBySKK<3`CU>-pgwt}lgBC)@%GUaNaP-%)Q|Xw^0uZ{!YthLjSW|LS
z5>m}`wbd?+;tq8RqlF4#48=E5d<Vtr)JhM&#tD;vehK4+2?FrNn<>79;#)g~$-)!?
z#Kzkw2DW)U>lzCH*t2Urs;+2uHa2U44TqgQVIG_%sB}OS4K31~dC1vQ>vd@7yQ6Y+
z;e;C#;c0x0FuS+L&k>x$T#DCH+)m+8U{KTux9@2U7ZHQGh<!pM=Pfh|^I2>%7Pn=z
z4>r#91ouXm7>p+VzYppyh~t{!6sw9h$%>zUSa{69*m!q9Pp>}SW*=V&T<GqX9@Y@f
zZFU6?aX}zYQ6-ZrTWe|@4&aur_YLS17#zx)3gL`S4*%I6q#D{oAPlDfQ4tFv?$!Q&
z{UiDeh>VJc@0HHQ4yb2VVO{lX7B!L4nJ(usAHmFGcLH85ASTo~D%&9ZW&QYKR!AOr
zhwmFSc*xK*gkNN7I))7E4!$^OaGa$_Y{ibaVNgJV71sPo9jn#5+>tn}*XIxk-G>X|
zqPZblB9{s=&dVUec_lZ4tA*I+EfClIQV9EZ1%&*&5n`F&2?5%6KybDPAu!vc5O-}i
zIKIEneFlu|JMMe#M~G7H0};w&P%MgvfI?ZQ1eHTnn%QWsjv$QONJ?`5b^k%jDDKom
z5Wyw1Oz%2P%MQ(S!lPDhsvdvRBZ>$Mg$uaE4X}FJgvG){;e27KwuaVIyaARG#UM)F
zwLw@$HVag^5L~f0Qw%%5Q50{Yc(dk_tp#+9Jo_SGfn=)8e~}0p35f=sy(E^XvZakt
zq`ycx4uXbhDWh@(eR#Csjlvar@W!KyH$Jjn4Qw>~LnKZI=YlD6aLq7T)ewe00)Dr^
z?<5FYpTMO?#B&u~xlW6&2FU}0)sn6#Ucz<44IsR+XYB%z(XDEbp7Lfm`m3eX1M~>D
zcOMHD+PPz!(6{(qIJ){K9AkYI4zBKj1FZYh8`NWPVD(2hy!tsDSN#l*t%4QbLoK!n
z4}ex6Y!mJg?iIER_X#_M`-PnpZ>JdKW-vV7PceLbfMO7jAG!-T=tICs!M{w{&JBZz
zAHY3fPY@XCBkUt=jWVkvP(~J{OAq2&>?(w?y_LYB91ScsnEte|8P*;|Z-NI!)vj{q
zY#@D(T8*Z;3Y#12A>a}mN^fjt@vF46FAQ&0=4@7gCw?ykYw8xjs}k~ZlT%Zyd2z{k
z2}$rPFEK7RF)1xBFE1g%o}N%xkYI<^$0)Ym0>};FJtkJeaX{^W&O~R+oJx=h>m2X~
zj`Ki5J*?Fk>N5v-7uDEUH?z9A*i)3wzfP{^q*q}nHi+F30r3$MA|O0!1p9AIu_i{O
zCnt9i@t1`+APkGJTX;p-BfKi?6<!ne39k$LDSnjV$0&ZB;wLD6lH#W*ewt!XDxP5y
z&RfFU!aKsd!h6E|Fhd_|69cNoZxsJd38Dm3Vt{!fJewjjw7(J@+DBC{aKaH*7LA2H
z>iWvm3y8b|kH)vK_`DFFOViEtWDo}m4xB@-?qpp#wPe%Sp)W1^FP!QGxe%hOK(LvS
zaEfS7_ft<Bx@utJpDx>;q}>Q#2}dBnknpu|SolWxR``zM=O})j;uk1>k>Z!u3*QSr
z2tNux2}db@nc}x7{*vND6o1S58KH^0p6I4sjkI*lYn3_l3`q)|4YggtXB@R%c|ma-
z+1%I)ff`u2V)x0dt};e7wm^7T7mKB;f9%TVS#>8wh_bUz_(S+p<U~aAZi>Nryocgf
z*NH>~_W+SlyqDtFDBcGjSTFnwoh+P<wifc*m@o)&!Jus{&`nqQ>@hH~@enq%x5Pnu
z8IIcV#XZY$w@dUA`)~me<qmf1m;~0N+{#A400>u}w7w#2|F(;M6u;gs_N93LS#v=|
zLorwk5kukB7pRMDS!+RGA(V8p10ssS!CV+dir=L8jnO`asXZl+;*v3wAyQAh)@r~X
zQ~h&6761cBEhFDE^y6=ybB)tawnw<Onaw6||Ddpl=)tiG$*CFHc?J7;LF_ZG31TTu
zh8cD&DuQr8>m*t6>Zxz^{08;9BftWch=8GFXZrkm9PM-m>@bskAkp~s)=*8~XELtV
zl_VD7IcNIAp=Jb4>KoV|(6dT2w=Xy(H1He?%6taRhhoC}clMK&QwlQd0~zSt3kui+
z1;zB~94HU!Sr9B_roPlU7qcmJhkthM8!~j*xpp^m&owKc@VLNEOZ+LV1R<zLxD_of
z$v$gh(z!Q0$p~eq1a{cup6%Y3mOlL4OEDKiDVcs9S@EZoG9oAU+)J_k2Bp~j+VcS>
z75Zsmh}G8Q0K_%a05#oLII`$mOS2a}R?g6J`M`VT1$2~->L@GkI^Y=fWV9}gbc}|*
zp85LcsGODhp`G@z(27dG&T-=>^z2N}ZxAixjKRS)IW!c))@Q*TJ2SW%2>;#8Erk1Y
zR>S={k3p>8XW*WkFElyxXYN;If}3%?P=s5~%tfQo7&HMn;g%bURzQTl8{s~i`_OZ6
ze+|34<{&x>vBSI}YL*obhfqX$aQn=7JO?j?TV|HyOYsf(7Q7WdhM$9A9j`!OjYIf2
zk>S>ua1sIc#l(^nI6<6CN=O;p6EmLF5O@E(<k^XCLDv0;T&W4OVn4AzNCO3nn(A~R
zV{~f^J3q>pmZpv`VEA^^$xbms9KcK>=a|0AJhN(C%SihKs}1z<?mB=YB-*;ao>V21
zW?iZ7>Z&GGRwY@x(`lrl61a53>~7;~m4^;Ti4d8zLyQ(<C<Z&<J00R6aWKX2Qhbo{
zjbMlx+}u_Hs%1Tx2%25p64P{@NkBwdc;4VCE>27Y)+AcQcrihQy}9=&exKqGDE<&U
z*u`WqMYO3|6n{kV#}t3UY6x&saA;m-4V<pG&uN4>|G@IY7@01pcD0RbEN%e#0SNUN
z))+f8&rQ|Z#Uw1I@B3=s+#ziAXv(?_31|On<}fxq4(>qEazi|UhT8q&2r);@1*Ve6
zZ4~pxg2`F|;~dTPQ&@1@TCF8hw1--C6o0C66n{?f7q3IEkz$cpES7L@j$?N#Oo9QZ
zXH!7&0g69k(RU%hy;#n|+MB^htOa8lJrg<wc3&Mnqs59-8mKo83hEHYFsv{MxU2PD
zFHd>i)hoT!apHJAq*Bj}J;tR&oWP1_5r@u_3R?G<a*t=qr-(DaVjxZxr-{=k{)*zS
zDL&jO{3xEsBrTAnz5yAF&2&tch@;6i9=TByg)E@TwrUovGuEu9(`Bm2vlUhBazUu;
zvx{Y(#?KM!8D5>@TydUQM=`Yc2*ux1{KGo2L2MM8M35?er1&R_K{)*J|CuPYNQ7;s
za}=ePip!WNbpgdcw~H#pzx<^rbuoxiEB;!P`gOE<drwKq#P|8{C8@Q*fm}ylPTC@L
z2y%xg^}>M^uhTiuTEQpOl2uwZe$v$1`lhxEbxMpp1_$q+1e&`jDyJz&d*+$r%fu@{
z9Tve%d#qgqGwpFUivwWerx~pO5dI4Gk6>fQF&p%Yu2>2XJy+A2#cQ}j>%?ot)#7#H
z^%S3=7>wwDQo^zDS;=k`o^p=?LwA>c<0;vq(_VH>iS0kh)@{Y=x>exRdlP!E4=8m*
zmv)ixpH#{0TwT-P8N}N}*#B!6Z>NN`YsPOjh@ngYbd7GPgRt+K7R>mc9+K0uaVV}6
z?_>;Sy|{rABPFH|wp*@kjza-`y9y|SOJy9jd3B97^I+-rpES1X4P!YV;WM?qOXu>m
zYO4rm+%}8b#Cybh#qHvK;tuhCai{oz_@MX@B?2WPB@!hvB?={8l=Pv*n-Vi6K9u-w
z79Rng^qBa#_=NbR_>}lGe0oNFmJ&Z;QKT;=0h9z%5=6;9O5W4H9;61sIv(NKX6jZp
zE5X>Q-wMEjtXG+b<~hL74-r0Ccw?ulu|d<W*sToivC^~ZI+wRwSJEVVuq917`6Wnw
z+Lb-sm+JIXdtki!p3)AD=fm@;re+910=U*fmgtfR+)2|zYXU9Mqfu*pU~@R5yn2zd
z9&i9AMpzmkwgbO#H$zLTtL+i)X2N|!PG<9DLjYE5R-+z}<8|?MaX;rx?&01P-++qT
z0k7Ez=}|X;L!R_ZGvH9-ud}na#JAywi(;l>u?!vJJKWThA50ky!f<f|*jrp(cLazZ
zh#%^kMEdgm1WaDyr<4SDndimN#lv7=6u%G;ieHL{#IMA!DG8w@l#(z?!YS!TN&gK1
zg>S|0;P?07ILCkxLCHGp19NH*>M=h)`Y7lYA<uZ}&x&B5703!a1XxdZj}~az)}&!m
z*}iru2qT&z9u9DCt*d3AuK;_OI}#IsN85w&!2Ou`Cu6n8#S`KmlnkIGl9H%SiPOxW
zB)Z%B>B|Ns*X6F>vxDvdExgo573>iCZ6NPBYdlZ1L6ZdVpO8dJl4J>%O$;TYD49md
zrE107lDA}*d?a7aTk@0qrM^;t6etBr!BU76ir<yOL1L_R@4V`e1~Hgb&uryDbU|ix
zFjE|pmfYIksbKVWF~sF}T`L4sra==G+$Eiw-lxY~R?o?IGC*!md%9_RSEye~hEkGB
zNjfD1DJiF<Og%<P+M7~;DMA_meT<Z%q-ZHd8Ym5t26J$|iuu(2&Kcb@wZ88Ab`dES
zr;h3Q`g6!x53!88lfzJHvoLy=r_AnmlvpVlOi2<YHcAGmSyg5|=oGU<^%z*a)NX53
zmmH-}Wh}%@mEt6e6i>+zO5!Mq2kWhrC?!Gf0;CklHl@4P@mhPdK^aC#ELd^Q6n)7o
zXiHQYE@gnA4sGgIdh|UBt)z--XLE;?$>hzmrt!2Vn~RsAyB0=%V|(hCo+NfXNkVT)
zv<o{9lN70#+o&F=BvFMsSYg{*DwE2Ag7tF0Lx(hqHLkZ;AjL}+(imy%lqR4(dZ#E!
zp(MG=Z2zw>*Xee4&|5ZMnlKgG<v~e@G!aPLNe}c?lcgyTEceuz?;i4=OQJ)X$~tw<
z>7oBktuw)2Mvvnar+bKialMC(t<x?KQZ1)lkK`s%Qk66p+~}n9q-trVR3p_&4r!J&
zTbd&|DH%>l1|^x4!2D)YGJ=vEN^&X5qr|>Rny0(bNsYQ2o#X;BgXFv2=tyCg8y$fY
z0snf&|KpzV5`}#v=|V~h+-`Kz@-w>8c_#Y`=_=4Xq$?>I*)FZ3q=;!Ae;t-fS}olG
zE^yLy;DAhu!H=$kU&0)a%X)D@_EdGNqy<iBli+}^FD0ema?CGbF2|?4-GRNV)>&(x
z!>-(@)Yb37Rl|qqYiWaYCo{Wxwh2z+kR8%pY~A$w?sUGlN!rY9l(qohgKabEUJAj?
z$Yih)kkJ|=nX2AE$&{Xq<UVPKhmlY+iIR$w=(|p>A7+gA5$RFsG3jwi#!ym8$#_a8
zbd&6-$Yw?&;dn}vMxi6lXmyJioCon0hj<9*b9%;co{VQU*LiaEpvInuuj=%7;+g3$
zI;zp%H5&Z|F}S9&o;l2cwf9uLB?**%&jkXONyT~H3XXo0+^OkLy*aHrHwff^H4dlG
z;Cs^h(g)IqFoPdUpGY7huAroel4eS#Yg2d$W$>Kea}EzkpLfq;9VIhPo5Qam$iH-0
z`bPRz`c66`eNRahCDoMFP~xBvyN*Dd5zlD;q>tu#+Gw&(!@r2<=;qtM>2o<#pG(*%
z)S^Lp3jISbwANjyxyKd*=!))iGLa1oO0y`L4N#h>yHL8!CeM43Ne7ew-PVPHGZxfG
zZ_Ydqw0gBxzpis<*^i-vl6p5h{!a(pltVN(NdlLb{@?2-C=YJ2p(bvQqguOD<G&Ia
z<o@zd5E<kMd4L=#N6FE0j0_t`@?aSRRu?5Ll(bT^fRcrjETW{1LIg&#gp%_&$>2i3
z{>$-l0z0@QCoz#>sYhg3MhSTHv4czG;(tX3U4XN={=pb@axRDrGDvS1xJ3rJ02o;B
z2bbJ@TrQJGfyf|(uBEoiz$@vwi41b3JOM-oc^sq37c!B-bjCAFT?dvtbxxPh(>(6w
zDou7+ewO1(e@%p^%yHI&0?Dq`I*q5ub7ZGHSDq(@$aC;`xsj4iN`MpIM9E5xr*x{o
z*Kh2>Qsnt^b2m%5fs)HkWhwF^?$~;{O<pW7k<XWxQgS&ZS5a~eC95g9u8W(<s!SQd
zzJfwvQ4%|)``QPy?4ju^<V#o*5Y?{M#D`w@pFN2$H-5|#UkfMqwZy0GU%L}Zy-5l(
zL@Z^wuRpV-fNM2L;R!b@2<?^>7S-3qfk(J@ccbRC@A1a=xM7^CjWEZ4{h4RZ?~vgJ
z)lPY>+%9)eax*2jP;x8W%pk9qH-OkkZlmOOX30DK>V^NuH&Do1;L-+ptGrFVhmt!e
zSxZTW`wj&8zHSFC8SX=9mmi>{{p=Sv$dACq4e|pRI^E80Za4`Bnv5ww#mae_lJ#)Q
zh5Rh%Ek7qe51M|BeyyoKh$l(K6at`<y{92v0{K^dS>D}K{-p%^aOar>V0j<l&}~Vf
zWE&-Sord&xfPTpD%J0eV%O6kza>8ax?xti*H^@KMg$)S1@wWuvvqJY99lBf34BZ|=
zt_N~ID{#bdqx_5ftNfe%yL?POE}xM9kpH9v)PwDm0P1#7azBNLummRZK}sIls2~L^
zL@{7qF)6$vFl!_5tLG_sfsz*)P+y|tWlDB4t0S=7|1+0iDSbgsRsxhjB}fTYLX=QS
z9--thN`M?ZMaeEoo`p%r+Lc&JKX$1RC69V;HToaiedVc2yM2q2$9u2ppS<Qu8L0Q_
zNl#ThZlC%`@3~U6ySpfPnpO2bz358O?(U-GnO<x9CvUn^w7a_~d9Hi-{^wU+DXB`D
zzPrHACG>jL)qj1xl>$*xJCzYijsh03S18#-$*bpZ!<A;$P(~_6x@$lW`mJp{bSTBl
ztik*VPJam$#j_1jrN8YVn<!;Uc{jy=my*{{rPxX(P;6zKGG3XWOr&H#C2vyl7A0?Y
zQEX+3PO;zkA5v^(wob9%`Ohe}(xgDl)^=q+CGWQ@E=oRNG}Z^~uU#8q+SZB2IF*IK
zSd~Qz=pP?aa-eHJNjYCp;m%}bsd9m`jFOKi`IwSVIu*(dQ!b+9Q|3iWK7*4<P;9rU
zeH#1L?eJ@cuWa9~yc!OcwZPR5le?xXDo6eG<n3(ba%EL-^<9l+<yuNUXX?%uOsMvT
zB0L*=Y`ZQhXF)}eg4QUvg71TJqjHmSvjXDLmy{f$<SR<PUZ>oq+)g$tAd4KPEXXwQ
z+TYcnNo9^%+Ku3o$2w=v(LPPl_xbc)Oop+pk?YzfbhAh0PUUV^-CfE?Ws?GY{ToWY
zrQ|zGj;zBngtzCpVZh|FfamGv-B9iL6YToHFu{$wY^Ql_^+Mgp8?1~y-)f$;ZoeI{
z2K9KUWrwRH;ev~rW@i)FoM2}(phps|bhatwY3u{ali=8{Jg7XRJghvTJgPjVJgxw1
z`hk)kDfx+#qm=wi$uE@rO382F*v|elmv;TXTLsnJ*|jSr7_itWp04egTG-ZhHP$)U
z%(yQYDQI9$W1byX=G)$DYIckO_Q>j+dZr(Grt}qXJ0`sAQF!c`5|_gv+gjM5>zSPG
zCG_4F7_y#8&)DqB)|oEtOia)8@n<R;ZWm!5x@<$QXO1(r-Q#L;a&pgnzOH~re7gel
z=~%l0BueuEInzpq`(8Vg_Y}~2PEZ4QdUy)?NP)N+r?2z_u+qPvETlTD^gq?;u4NLH
zvt)0N75B9QaWhUY;0P4(12uquqdzrZHM)CwMdd6n(n<gyH+`j5u{AiZQCooESQ*Sk
za<QBhPKAts!#xwYY1|B9E}X+!Dl8YS7S;&23bzYuh4sRn!Y1KvVHdc<|04Dg%_6v8
ziveN~_yL81FJpul2_AqMVix$t<%tF0-Bv1&632*@;skLrcy=|4SBN)(kHz!i?~)=7
zkxHfM(jsZO1onUFYUx_(Cg~RGHt7zjU3yyj9ZWb0a*~`Pr^&<ROt}P9_o;HNJWFl_
z4fZ1WGI^DJBWPt0$d7{p@ixf%AIKlepUMa1ALL_-5rp7GB||9(o-$pTtIStiN~^LE
zXsfDRs9db9Q0`T}^@{Vdd5!SO^(yhI^cwFq!)vye)2rEQq1VM;tG%xGTH|$-*DYSR
zdEMdF?sbpXcCQ^?JG~zCdf4kRuP42p_Bz~WV4sRUi~DTq^M<##cbIp7?*ZP?-UGb{
zd#8A3c^7+^dY5~T_I}=bulJkY?|FaeeZu=sxY~i3jc~<-XqL@hW;kzV9%vqH9%_y?
zTg(aOM02v)W==B?H)om~%{Q2zG#~L%eDZx3_-yt0(AU?uzi))^0N*Iz7~e$SRNr*p
z4Bs5zJl}lZLf=Wgb-t~>7y4f0d$I2d-&MZX`d;UIgYTWbJAI$@-R--_cdze0-~E1N
ze&hXS___RA{TBMEei!*I_q)XJI=@@|Zu7gtuifu1zfFF3`)&2R$8U$<Lw>vbcKf~I
z_o3fGzwi8h@;l+L`1|-r_z&?f@*m^h<bSFE?f!TA@AQAn|0VyI{dfEC@qf?%eg6;q
zKk`59|Be5*{zv>z^yT{EzQ(?MU$Jja-}1f_`cCRQrSG)9Gy2Z%>+CzPZ++j!zVrKT
z>3cXJBw%{L+<?Y_`2ntgMFEQg&JVaCU~9np0iOr_5b#sLi9jLHD=;W9CNLo|F)%sM
z7MK<|Jg^{eWMFY%X<&Ka=)f_7vjS=0ErII;w+B8F_;}!xflmj%9JnWNZ{WVbHv>Nk
z{50@D;1@wskY7+xP)JZ%P`{vIK}kWGLAgQppn{;0L1Tla2h9y?44NP03R)DjIOzPK
z3xX~Wx*_Pspqqnk4Z1yOZP4bREkWCY?hU#x=>DJwf_4WT3`W6Huvf5muupJEaCmV4
z-~quygX4nZgRQ~igJ%Rgf@cRigXaa;2QLf0D)^@0j^K^Kn}fFmZwtOR_|f3!gZBl$
z7yM=LH^JWpe;@pF@UOwY2Okd+L;OPmLV`j<Lc&7&g$xN977`Z{A7Twj3P}km32}rh
z3%NAp@{lV-R)yRca!bf<A$Nq_6|y;GOUSm6*F)Y9`6T4Ckk3O7h8zzSLw!R7LxV#@
zL&HM{hbD#QgxW(3LW@F6Ld!xYhfWQh9$FRpeCYnrgQ15)zYhH-^t;gSLw^iC8v0A<
zZ(&MUpD=TnZ<v2rKv+;%NLW}{zp#j~#IUTe+OS1o*M)5jdpK-=*uk(PVJE`=3`gN4
z+!)S>i{Wy3P<T|hB|ITKF+4f^%J3V)Zx8PbzbAZq_>O*F{X+VM_3PJfVZV#}t>|}Y
zzmNNU)9<@}-}f)>KcWAm{!{wj*Z<M}FZO?_|I7Vf>HkIl@A@C<|3m*{5d$OQBWw|A
z5yK-gBeElkBgREkMVuE=AJG!AAYxI(;s_dXQN;3yOCnZA+z@eN#LW@6M*KR!IDj7@
z4v+^l3|KN?>40Se=z#qLJ{j=kfUgD|9`NmeqXT{!@Y{f615QNti_DFj8M!3#;>b%P
zS4LhQd0pi7k!vE?MsA7R5&3ZB^O1WZ_eSoE+#mT~<Oh)-MSc?bS(G6vCaNfEOw^>P
zDN)m+W<;GA<&2seRTtG7wJ2(F)cH}Xqi&6AkLrwCA9ZKc#;B*GUX6M)>g}j^qu!7D
zEb8;9gHeZ~zK%9Tdqtb0eWU%O!=w8}M?}X(CqySkr$nblr$-k?7e$vumqpX)tD>)o
zULAcy^o`LsNAHZ@6@4K3i|8+-zluH_{cZG-=pUkgivBtJ*XZA)k4OIz!^Pm3sF;|T
z!7;;PEHT!Y<e1c$;W1e;IWhK_!kFTivY62^V`65+oEI}QrZ(n@nB6gZV)n-D8<;b&
zeBkJTV+K|ZTt9I8z#Rj34t#Ks*PxI=VT1Y&iWqeMpp}CzA9UrQRfE1B^y{GC2OS^u
z$KVNrYX&<8&mQa?{QThkgWnwd_TYDi*oN4L6bu<Tq<BdCkgY@R8M1xIj-krX;Gv;I
z!-w`Cx?t!<LzfS|Wa!Fa(}&F+RyV9+SkthVhP^fHonh|{`ye(wwlH>T?DW{G*qO18
z*g3KDVjE)T$F{^SjJ+auRqQpft7ET^y)pKd*xO?7i0z17AA4u)GqIn=@o_`q%Hv#d
zYvOjsy%G0A+_AVnEXYDEilwh5&=PD3wS-&xTVgHomPAX6CCxJ2GSO0Naa!sujg}V6
zLQ9)viRCiO4VIfM9hPmD9hL_y4_ltFJY{*t@|<P2<vq*$mP3|5;!(UIo{yK}z2eRB
ze(?eE!SP}7*7)RjTYOsl@c69wocO%>{P>aaCGlnP&iG5??~dOS|3gAhLT19$gvAMK
z64oYkCTvK!E8*URhZ7!4crsyE!gC2PB)pWcJ7G`4dkG&Ve3Eb=;b6ictI6tT4YGz>
z`&px`G1kG>q1JS3rnSI2);iHT#X8+O(^_ktZFO1~S(jUHw%%r4Ywfgdux_;8ZQW+w
zZoS|7p!F5&Uh6*Ve(RgocdYMQKeB#eJzza(J(Orlj7cm`oR_#N@&3ej5`Rq!OiE75
zO3F#HClw@(N}8B7C24xnc}X=%j-=U1&ZGrNZAs@RElavE>EfjJq^(K!CGAXlDCzN}
zr;?sYdM@dWq_>kkN%}PDK+-o!-z6PSM#+X`K3PfjPWDaqPmW4XNG?b&N-j+vl{_YS
zT=K-^Daq55&r7aJUX;8fd1>;pWSV?&@+HZaC0~)eD*4*v>yqzH-kbbWN<hl+l=D(9
zPU%c}I_0C3FH^ow`8MT9%5OGoGui~3Z0ln)+k9>QwgI+i+aTLeTbwQ4R%V-Qn_;WA
z)!Ll4I$NV{zD>1VWV^z4mF*VWT3e@WgKe{ItL<LfeYU4<ui6gS4%)u5ePcUf`_cBZ
z?Kj(T+n=d8H83?KH7vDXYD8*O>cG^&sY6raQWH`WQ%9#Zq+Xl4BlYdnKhh%8a?{RB
zTbi~aZDraOX;-DKNn4xNnYJNqW7^$mThs1Ido1nAv|VY>rM;N;a@v<^N7H^!JCV+%
z8`Fh!Io&HgEWLkvESO*5%JlTi^bzTK>G|oE>F1@lrY}lgl72xtO}{w(lJv{cuS~x>
zeRcX>>6_EHq;E^VH+@I?1L+T?Ka&1<`cvt<(mziBb9mJ7g5l2LtA^h<eBbczGx}r%
zW`tyfXY|h)oMFvK%1Fsb%}CG4$SBGv%@~z2CSzR2gbY`Pnz20N(u~V9uFhDUaec;`
zj13tZGj?V?lJR)PQyI@?ypZv7#w!``XB^7-BNJsBGWkp?(<{@Q>6aOh8JroGY0XT|
zv}LAc4$sWW%*o8l%+DN|S&~_n>CC(|^X|+&nLlI&Wo2ef&03tbCTne0XV!+SyRz=h
zdN}LRtjDvS%z8TOnXK2c_Gi77^={S&Ss!H`&la=$Wcy_MX9s78W%th>ke!g7l%11Z
zkX@8rnq84ynLQzUQugfZmh6?;S7fiszBc>%>>IOh$-X_iJ$qgDo!O6OKau@Z_O9$_
zvtP)5IeSm`-t5=2-^_kH`{)S&5osf)jJROLx)CpoIGAI~fyhWX@i~b($vIg$g*nAJ
zWjUjB#^#L6nUFIn$B{E9XI@T2&iou#&eb`$<#gn%&$%mSOU|~O?KwMgcI7;m^Fq!W
zIq&9tkn?fQ=Q#&+zREeAb1YZL4bP3pjmjOEJ0v$YH$FEpHzhYMHzT(qw=#Ep?!?^5
zxzlp1a;tM|a%bf_bLZt=ntNyN%emj=`Q)YMP0d@JcT?WZyeIOW&U-fR`MkY(@8rFg
z_d(uAd7tEcmUkrY$Go5Oe#<+a_lG^yKG+^-Pp~K1)9e}cY<rG<w0*3-%3f=qZJ%pz
zv^U#Z?F;QI?5pi}**Dv_+V8dRus>jb*#4OPN&7DQbN2V_AKE{*e`-HqKWP8T{*C=R
z`w#Y`_FwY-^ON!?=C|eFmcJ|iV1cP1rXa7Nv|v=hn1afJX$6jgIR*0y8VcqYxC&Ye
z78bM>tSDGna7DqYf@=$|E4a7d@q%3i&lS8_u%}>e!RrNY6dWixSa77^hk`!~4TXH6
zROnskQ|Mn9P#9B~SU9q<q_DiOqOh`XLgD1XX@ymVGYcJsiwl<)E-R#k7Zt83Tv>Q|
z;gy9~7p^Y6zHoctYlTNg29C@aSv_+3$aN!kjr@4zp^=A2emC;_k-ry_B4ZI>Bo@g<
zUPU2A;YATeQAGob1{W0+jV+p3G^J>I(aa)8(VU{WMQugr7p*M1s_2@c>xynFy0z$z
zqV}SDiXJQ4SM)~F+ePmceOUBK(Sf3aMPC(tQ*@-*SS%Dv#Y%CXVxMCF;(+3y;?UxL
z#Sz6>#nXz_;*R3yiVv5VOX5pLmCP$?DOp&uxa9nj<t0~@TvKvg$(oXzOKvT>y<~04
zmXdo)?km|@@=(bmC2yB}Uh-ARHzh|(j+Xpda;)S;sZ#1)8df@>G`e(9X>4hHX<}(|
zslBwK)KNO8bY5vg>HN}`(uJjqOP7|ar5BanSb9t8ZKZdVwwJCey|Z*v>D{H<O1GEp
zD1EK;NSS|`t!zq}TDGoiSJ|g!f0hg7a(SO}b9r!iWO+>a;PPSRmhy!1r1F&Vyz+wb
zqVm%6QRNlo_2rApmz7^wzP$Xh@+-?%m0wf7w!E|a?((hWkCZ=IzU%+1>CFF{I1ngK
zMX|QlrKnZwic(p%x>j3ODvH(B+Io=;Gnr(VESVfw&7Dl{nG7bG%p_zECe?b>6GibT
zUR1o-delNeQL5IfDvILK+Ir)GT|c{@{pG#?;l0oMzJj9#4F$&vP82j3v=rQxrOMJ|
z-DKTmf01R#ddvFC`pYt9S+ZPNo@~5qf^4E}vTUksnrw!wKnBP_nO!Ezw#!b*+U1$@
z$#R`MBwsFHC*L6dM!s3TQ~sU&u>7dJUfw7_E<Yh}mY<Th$Xn%Y^4s#?<i7*mfqp<H
zkOgD|?*o4aMgboJlYl9}EI<aR0WDwvz5vXC4R8W3AOe&Fl|U7+5vT^X0yRJ_up8J1
z8~_dhKLh81i@+t|3UCd$0o(%a0C$0Vz=Oi{!cm1#p{H<3;eo<yU?(sO`~>_QoB<Yq
zau5M^U<o(}G=Wyo4m!b7Fbqb)7?=Qga06Hi?gjr19t4kq^<X1-9Q*~m0^S1efbC!h
zlmewfuS0J_J)m@GAoO==6!Z}^1{w>EgFc6*Lo*>6Q~_;<4nT*X@1Z)V0Xhzygib*}
zLpPy2&|T;r^bmRiJ%c(FDT+>tzbb|)#w(PH5`|AurdXs{rC6g_r&zBzpr}(cD2^*m
zDB9qza5_8y&V&cTS?~w&hwwk(kKu7}J}iS(FbWsLT38R8VFx@9=3xOAVF_LiuY%XW
z>);LWCU_UT2i^xCP<B`LQw~xNRt{0VuN<w+QRXW1l;f2q<r3v#Wuvl5*{nRJysrFR
zd0+WR*{*!9nx-mLX;cQ)7b>I5rgEy>DzA!CMO9y`)~mLuPO8qT+L0beHu53z5t4(9
zK_(+pk!i?GM1}x}2C*Okgh$GeFOjd1#mG`*1yX@jB2~y9WIys9atQezsY4o&<H$+m
z6mkY>LE4MnF3K(%Uj!7PMR*Zcw4kWIsHx~;QCrc&q7F0#O-0ktZfFMD8|{nsM>Eku
zXdbFS?dWQBJ-P+mhVDTRqDRml&>zu8^c;Exy@uXEZ=rvn575WxQ}nqyTMep9)iHIM
zdZBu`dX;*OdY!sjy;WVKu2t_+A5_<=PpZ!qUoE~~e7E?8CROu>rjI6DGgLENGg32J
zlcUMiOwoL%nXZ|ok!wH=tWjx#nhH&W=8@(l_6oy-WndGq&#>v(OsoJyv0@Cv^w?}{
z4(7mIm<RJ=AuNp17>`w8Yp}Ig6}AD}gjHi(ux(fkwgcOV9l=gxXR!;|C9DN&#oDmj
z*l*ZNZHhKko2KoieN)>*`?j{HwzqbqHeYMeR%_2_+jYHkqjWNz`qdS+^HqlC(-AsK
z7t+x>R#&E5rdz37ty`;GuiK>CtlOrm(bej9=^AvGbocdL^!@Zh^!a+ZzF2S4d-Q%i
zsV~)s^-+Df{!9H=`o;RC`W5<B`osDb{UbwH!$`w8!xY13hUtb`2Dt$-s0|u}&QN0b
z!ay04hK+{r4b6t145tid4EGE#OI|DKT++4VjgsyqLrX@N6qEq3W(M2m?w#8@_l~ib
zF<@kkoKZ9;jSG!SjLVEGjC+iA#?!`2#uj6%vCVkf_`vwc*lv7od}&HC^)rn%eQGK)
zIZa+u%#<`OGgX;3n!Yh@F>N;;FdZ=+Go3K~WV&d&WV&a1X3jA8F^@8TZU)Rwv)8=H
zyx6?gTxV`FH=9qJ&zdirubQu$Z<=pgGAv^(sKsw#ETSc8SzuXY`P#C^vd*%>@{MJS
zWt*kWa?$e0nr<Cn&9n}*W?A#C)2*|taw}+sttu;SC9R9CORXzxknLZuxNH`i-G<vd
zHlJ;&t<qL)+iI(^)!KI3_S){-N7!fE7uzfBo9)}|-`aQD_t^K@&)eJVzuJGd-?u-p
zKea!%cQ|@GK6ZTSP&+gZoukAt$6<0<9S(=f;dKNYLC1W@LdRmqQpXBMg`?6@<=E(`
zc5HRjICePBI=eXgINx(lbrw5m=OX7i=RW6U=dXAQ-V=WZABc~@N8|bU=lFD7iK}n~
zM{xuG1#ZO6xF2WmIL_fBp2Qd6i||Uk3g3uV<6H3>d<VW0KZKvbf5o4<(p*DaIj(W8
z39d=5DXtl=0vF(dT(HaJqFm*!#jXlhrK`%d(N*o*;yU5_)t&Bs&ppYlaBJPA?yx)R
zj=2+V!7aJJbbsaE>^|r|;lAm9?&;%s*E7H~$TQe8#52r;dJG<u$Leu-Tpo`n;t@Ra
zJqtZcJj*;gJ-a=JJT0CZ-Y(t@Z*OlO@4Mb%-Z9>>-f`Xu-kDy+i+YQ_n0KzX)JuDp
zcvpL?y<5FC-lx7!z8=1wzJb1BKFEjoXx|cFz3+_gj_<DTp6{XWiSL=O!=K_$^{4r}
z`7`}l{=xpg`G@+4`$zgm`#<uJ@sIV7^Q-(`|JVL~{wsmB!0^EIz}x^65Ch4;g22MS
z%E0=-roiUFw!pW6+Q8w!(LjBmG0+q^8MqsGPNWd2L>loX(St}QGKehV10sjWCGv<*
zh)Kj0Vk)5^%!HfZ2#Kg7>WBv7IB|mbi8w=?BQ6k^h$qA|qJvB!Q^_>)b@FZUU2*_9
zh#X7~A%~G;$g$*j@)J@=+DIqqCVk|5auvCTTuZJecaXctJ>-6}fjmo|Cx0O?2fGJ9
z3mSuopb(UT^Meb6OM=USD}$?pdxQTD9t<7{{t)~z*cdz=yc)b7ycxU`yc@h1d>DL8
zrBZ3s>(ranNNOB4fto~3p=MGDrKXB0E#;y@6iu;I8I`2wQ>&;o)H-SdwU4T&8mT6#
znYu+irk+wSsF$V9rI$-vO0SjPn73zM<GdHIm{^&itWb7nXlQt7WN36KCzKn?3+0Cj
zLyC|xgoMygaY!37gl324hRh*rC=uEaIu`mp+%udPE)EC7OT)Xu2g66gKZNVU&EX5-
zOW~GqYq%|ZEBrY8H2fm`XQWf4b0jPBK_n-V8_A1&68UFjN@Qw85h;$CBK8O#@kEG7
zFfuO^j!2R1k^PZNk(Nknq%Cqg@>}GO$o<G8x(EF>-HYx+ze^9G2hzjn96FcIqx0#B
z^kn)|x{y}TDjKC{({pGy?V|~rq8HE=bR}IyZ>0CrKhnqOCc2rvOkbs2={EXNv{STm
zv}?3mbZE3Ns)^2y&W)O*wx}oSixN>PIxo5^dN|q|?O@WFx0rOMC-V-|m&sz@W3ri%
z%xETu8N<wCU<PH18H~{}7RJN)8IqwGmZ@MWnJT7^X<&{sCz(^s&&+w|B6FE(XPz@J
z+1J?4Y*)4$o5A*HGubRQn;pu&&*rjuY(6`Y)w6aMXFaT+W!N~IU<LMTb~(F}UCnM~
z_p=AsL+lauB-_fivA5aZ*gx0@>|^#R`-1&5mJ#b6>l^DI%Zv?*4UP?oy&oG98yTAz
zn-O!ym{>(@Z|sLyOYC8+BmPGGt$2F8XZ)RbzxZF{neh?v58|WaW$}gaCGn;4hh?vo
zbuLRQ!^$jW_A+N#ec73^b7dD2If+S$DT%3x6^W|Ew}~Bz+QhEJ$;5fC3)h3|&GqH_
zbD7*AZUmRh{ga!)>A5-FJTA#?<f^%?Tn$&t?dJA!N4R6$3GOHE40n#Zz}@8TaCf<T
zd@nwW&*q2n!}*W-aeO{Mk)OrO`9fa7>v=ox<lVfNr+Jny<9WWEPx5Q|&3p}C%kSp*
z@^yR@-^`!p&+?b~tNeBTCV!i67rF?2h4+LJ!dPLVFj<%?OcUe+C@2J#P$ZZIw-6Q*
zf*?r3d|{!mQdljl71j%zgleHy_)cgLt_gn#PlXr4pJFGmi`YX<7c<0OVjr=e__3%E
zeWD~T7dMOB#Bar&;vR9o_?>uIJSzSyo)a&Kzlc}Ft75BoL%b>8F7I1Dt=v;yS>9Cs
zr}Uwum8_COa!Fn(AdynJv{+g$t&-MAYo+bdZfT!%KsqGVON~;K)GVEnevxiS52R;O
pM=~XuntUVqRx&-=Gub;iF!?_mM@pwo|LucPx<C1!|6h|6{sSHD(!>A&

literal 0
HcmV?d00001

diff --git a/TraccarClient.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist b/TraccarClient.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..84e3575
--- /dev/null
+++ b/TraccarClient.xcodeproj/xcuserdata/g.makhoul.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>Promises (Playground) 1.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>2</integer>
+		</dict>
+		<key>Promises (Playground) 2.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>3</integer>
+		</dict>
+		<key>Promises (Playground).xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+		<key>TraccarClient.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/TraccarClient/AppDelegate.swift b/TraccarClient/AppDelegate.swift
new file mode 100644
index 0000000..732da69
--- /dev/null
+++ b/TraccarClient/AppDelegate.swift
@@ -0,0 +1,176 @@
+//
+// Copyright 2013 - 2021 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import UIKit
+import CoreData
+import Firebase
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate, PositionProviderDelegate {
+    
+    var window: UIWindow?
+    
+    var managedObjectContext: NSManagedObjectContext?
+    var managedObjectModel: NSManagedObjectModel?
+    var persistentStoreCoordinator: NSPersistentStoreCoordinator?
+    
+    var trackingController: TrackingController?
+    var positionProvider: PositionProvider?
+    
+    static var instance: AppDelegate {
+        return UIApplication.shared.delegate as! AppDelegate
+    }
+    
+    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
+        #if FIREBASE
+        FirebaseApp.configure()
+        #endif
+
+        UIDevice.current.isBatteryMonitoringEnabled = true
+
+        let userDefaults = UserDefaults.standard
+        if userDefaults.string(forKey: "device_id_preference") == nil {
+            let identifier = "\(Int.random(in: 100000..<1000000))"
+            userDefaults.setValue(identifier, forKey: "device_id_preference")
+        }
+
+        registerDefaultsFromSettingsBundle()
+        
+        migrateLegacyDefaults()
+        
+        let modelUrl = Bundle.main.url(forResource: "TraccarClient", withExtension: "momd")
+        managedObjectModel = NSManagedObjectModel(contentsOf: modelUrl!)
+        
+        persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel!)
+        let storeUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last?.appendingPathComponent("TraccarClient.sqlite")
+        let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
+        try! persistentStoreCoordinator?.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeUrl, options: options)
+        
+        managedObjectContext = NSManagedObjectContext.init(concurrencyType: .mainQueueConcurrencyType)
+        managedObjectContext?.persistentStoreCoordinator = persistentStoreCoordinator
+
+        if userDefaults.bool(forKey: "service_status_preference") {
+            StatusViewController.addMessage(NSLocalizedString("Service created", comment: ""))
+            trackingController = TrackingController()
+            trackingController?.start()
+        }
+
+        return true
+    }
+    
+    func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
+        
+        let userDefaults = UserDefaults.standard
+        
+        switch shortcutItem.type {
+        case "org.traccar.client.start":
+            if !userDefaults.bool(forKey: "service_status_preference") {
+                userDefaults.setValue(true, forKey: "service_status_preference")
+                StatusViewController.addMessage(NSLocalizedString("Service created", comment: ""))
+                trackingController = TrackingController()
+                trackingController?.start()
+                showToast(message: NSLocalizedString("Service created", comment: ""))
+            }
+        case "org.traccar.client.stop":
+            if userDefaults.bool(forKey: "service_status_preference") {
+                userDefaults.setValue(false, forKey: "service_status_preference")
+                StatusViewController.addMessage(NSLocalizedString("Service destroyed", comment: ""))
+                trackingController?.stop()
+                trackingController = nil
+                showToast(message: NSLocalizedString("Service destroyed", comment: ""))
+            }
+        case "org.traccar.client.sos":
+            positionProvider = PositionProvider()
+            positionProvider?.delegate = self
+            positionProvider?.startUpdates()
+        default:
+            break
+        }
+        
+        completionHandler(true)
+    }
+    
+    func didUpdate(position: Position) {
+
+        positionProvider?.stopUpdates()
+        positionProvider = nil
+
+        let userDefaults = UserDefaults.standard
+        
+        if let request = ProtocolFormatter.formatPostion(position, url: userDefaults.string(forKey: "server_url_preference")!, alarm: "sos") {
+            RequestManager.sendRequest(request, completionHandler: {(_ success: Bool) -> Void in
+                if success {
+                    self.showToast(message: NSLocalizedString("Send successfully", comment: ""))
+                } else {
+                    self.showToast(message: NSLocalizedString("Send failed", comment: ""))
+                }
+            })
+        }
+    }
+    
+    func showToast(message : String) {
+        let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
+        window?.rootViewController?.present(alert, animated: true)
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
+            alert.dismiss(animated: true)
+        }
+    }
+    
+    func applicationWillTerminate(_ application: UIApplication) {
+        if let context = managedObjectContext {
+            if context.hasChanges {
+                try! context.save()
+            }
+        }
+    }
+    
+    func registerDefaultsFromSettingsBundle() {
+        let settingsBundle = Bundle.main.path(forResource: "InAppSettings", ofType: "bundle")!
+        let finalPath = URL(fileURLWithPath: settingsBundle).appendingPathComponent("Root.plist")
+        let settingsDictionary = NSDictionary(contentsOf: finalPath)
+        let preferenceSpecifiers = settingsDictionary?.object(forKey: "PreferenceSpecifiers") as! [NSDictionary]
+        
+        var defaults: [String:Any] = [:]
+        
+        for item in preferenceSpecifiers {
+            if let key = item.object(forKey: "Key") as? String {
+                defaults[key] = item.object(forKey: "DefaultValue")
+            }
+        }
+        
+        UserDefaults.standard.register(defaults: defaults)
+    }
+    
+    func migrateLegacyDefaults() {
+        let userDefaults = UserDefaults.standard
+        if userDefaults.object(forKey: "server_address_preference") != nil {
+            var urlComponents = URLComponents()
+            urlComponents.scheme = userDefaults.bool(forKey: "secure_preference") ? "https" : "http"
+            urlComponents.host = userDefaults.string(forKey: "server_address_preference")
+            urlComponents.port = userDefaults.integer(forKey: "server_port_preference")
+            if urlComponents.port == 0 {
+                urlComponents.port = 5055
+            }
+            
+            userDefaults.set(urlComponents.string, forKey: "server_url_preference")
+            
+            userDefaults.removeObject(forKey: "server_port_preference")
+            userDefaults.removeObject(forKey: "server_address_preference")
+            userDefaults.removeObject(forKey: "secure_preference")
+        }
+    }
+
+}
diff --git a/TraccarClient/Base.lproj/Localizable.strings b/TraccarClient/Base.lproj/Localizable.strings
new file mode 100644
index 0000000..92a31cc
--- /dev/null
+++ b/TraccarClient/Base.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar Client";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Send failed";
+"Location update" = "Location update";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/Base.lproj/MainStoryboard.storyboard b/TraccarClient/Base.lproj/MainStoryboard.storyboard
new file mode 100644
index 0000000..f5ea5bc
--- /dev/null
+++ b/TraccarClient/Base.lproj/MainStoryboard.storyboard
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="4Uy-y2-7bi">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Root View Controller-->
+        <scene sceneID="Ejt-ia-q1N">
+            <objects>
+                <tableViewController id="ZiV-Qa-hnE" customClass="MainViewController" customModule="TraccarClient" customModuleProvider="target" sceneMemberID="viewController">
+                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="KcQ-JP-xCp">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
+                    </tableView>
+                    <navigationItem key="navigationItem" title="Root View Controller" id="mBp-pp-ezn">
+                        <barButtonItem key="rightBarButtonItem" title="Status" id="eKa-7m-jq1">
+                            <connections>
+                                <segue destination="LmD-5n-dPz" kind="push" id="iTl-2p-q5b"/>
+                            </connections>
+                        </barButtonItem>
+                    </navigationItem>
+                </tableViewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="68Y-02-qka" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="863.768115942029" y="82.366071428571431"/>
+        </scene>
+        <!--Status View Controller-->
+        <scene sceneID="El5-px-WCe">
+            <objects>
+                <tableViewController id="LmD-5n-dPz" customClass="StatusViewController" customModule="TraccarClient" customModuleProvider="target" sceneMemberID="viewController">
+                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="fdn-aT-LfP">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
+                        <prototypes>
+                            <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="StatusCell" id="bOU-VM-Ej4">
+                                <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bOU-VM-Ej4" id="jfy-rh-RFY">
+                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                </tableViewCellContentView>
+                            </tableViewCell>
+                        </prototypes>
+                        <connections>
+                            <outlet property="dataSource" destination="LmD-5n-dPz" id="6o2-Hb-hz7"/>
+                            <outlet property="delegate" destination="LmD-5n-dPz" id="hkG-pc-QSu"/>
+                        </connections>
+                    </tableView>
+                    <navigationItem key="navigationItem" id="mzb-XD-7DL">
+                        <barButtonItem key="rightBarButtonItem" title="Clear" id="He4-eJ-a31">
+                            <connections>
+                                <action selector="clear:" destination="LmD-5n-dPz" id="pZK-JC-IGX"/>
+                            </connections>
+                        </barButtonItem>
+                    </navigationItem>
+                </tableViewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="522-xf-AQn" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="1633" y="82"/>
+        </scene>
+        <!--Navigation Controller-->
+        <scene sceneID="kvI-h8-0j0">
+            <objects>
+                <navigationController definesPresentationContext="YES" id="4Uy-y2-7bi" sceneMemberID="viewController">
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="aeM-3M-Z4b">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <color key="barTintColor" name="Brand"/>
+                        <navigationBarAppearance key="standardAppearance">
+                            <color key="backgroundColor" name="Brand"/>
+                            <textAttributes key="titleTextAttributes">
+                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            </textAttributes>
+                        </navigationBarAppearance>
+                        <navigationBarAppearance key="scrollEdgeAppearance">
+                            <color key="backgroundColor" name="Brand"/>
+                            <textAttributes key="titleTextAttributes">
+                                <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            </textAttributes>
+                        </navigationBarAppearance>
+                    </navigationBar>
+                    <connections>
+                        <segue destination="ZiV-Qa-hnE" kind="relationship" relationship="rootViewController" id="nGO-vC-KYZ"/>
+                    </connections>
+                </navigationController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="Kiw-gD-Vdj" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="89.855072463768124" y="82.366071428571431"/>
+        </scene>
+    </scenes>
+    <resources>
+        <namedColor name="Brand">
+            <color red="0.1803921568627451" green="0.49019607843137253" blue="0.19607843137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+        <systemColor name="groupTableViewBackgroundColor">
+            <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </systemColor>
+    </resources>
+</document>
diff --git a/TraccarClient/BatteryStatus.swift b/TraccarClient/BatteryStatus.swift
new file mode 100644
index 0000000..70b8cf8
--- /dev/null
+++ b/TraccarClient/BatteryStatus.swift
@@ -0,0 +1,22 @@
+//
+// Copyright 2022 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+
+struct BatteryStatus {
+    public let level: Float
+    public let charging: Bool
+}
diff --git a/TraccarClient/DatabaseHelper.swift b/TraccarClient/DatabaseHelper.swift
new file mode 100644
index 0000000..8a06abc
--- /dev/null
+++ b/TraccarClient/DatabaseHelper.swift
@@ -0,0 +1,48 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+import CoreData
+import UIKit
+
+public class DatabaseHelper: NSObject {
+    
+    let managedObjectContext: NSManagedObjectContext
+    
+    convenience override init() {
+        self.init(managedObjectContext: AppDelegate.instance.managedObjectContext!)
+    }
+    
+    public init(managedObjectContext: NSManagedObjectContext) {
+        self.managedObjectContext = managedObjectContext
+        super.init()
+    }
+    
+    public func selectPosition() -> Position? {
+        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Position")
+        if let fetchedObjects = try? managedObjectContext.fetch(fetchRequest) {
+            if fetchedObjects.count > 0 {
+                return fetchedObjects[0] as? Position
+            }
+        }
+        return nil
+    }
+    
+    public func delete(position: Position) {
+        managedObjectContext.delete(position)
+    }
+
+}
diff --git a/TraccarClient/DistanceCalculator.swift b/TraccarClient/DistanceCalculator.swift
new file mode 100644
index 0000000..747fa9b
--- /dev/null
+++ b/TraccarClient/DistanceCalculator.swift
@@ -0,0 +1,33 @@
+//
+// Copyright 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+
+class DistanceCalculator: NSObject {
+    
+    static let EQUATORIAL_EARTH_RADIUS = 6378.1370
+    static let DEG_TO_RAD = Double.pi / 180
+    
+    static func distance(fromLat lat1: Double, fromLon lon1: Double, toLat lat2: Double, toLon lon2: Double) -> Double {
+        let dlong = (lon2 - lon1) * DEG_TO_RAD
+        let dlat = (lat2 - lat1) * DEG_TO_RAD
+        let a = pow(sin(dlat / 2), 2) + cos(lat1 * DEG_TO_RAD) * cos(lat2 * DEG_TO_RAD) * pow(sin(dlong / 2), 2)
+        let c = 2 * atan2(sqrt(a), sqrt(1 - a))
+        let d = EQUATORIAL_EARTH_RADIUS * c
+        return d * 1000
+    }
+
+}
diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/100.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2fd176693fa7fb61ea3a98bedff3d287d8b26da
GIT binary patch
literal 6049
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
b43Pf^q8Kl>@6J9Q00000NkvXXu0mjf;+u*U

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/1024.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b31dd5db33453fa95d6fcf21e3a53c9d8ce61e7
GIT binary patch
literal 65721
zcmeFZ<wI26_dYx`)Bqww3kVJ(Env`s41xmE-Jv2Wof0wwCQ7I%N+TtWwB%Tn5=u%d
zA|;`8&TpR~^!_|Ao`2x`M#bUmv-jF7uXU}tr>&_>L&Zh~gTZK2Rg`pLFjDYOQW%mP
z{1wb06bk-=d+I8mgXOm#o`k{BFjXZ5eLu@zgA~z>V`a;~?fmHvI5bLgzrkonVyO_9
z(JJKk=#@y}3S`Ac(P41Pi)<bT>B$)B=-%9<)7RHNrPAt7Zu`@$>xLf<lA*FPXKJg*
z)b5*{VNJl?aK2}$uTdS-)A;!K;|EDm7#RHDKjup?he%*rD>2{yKc7&afQ?-EpI^t|
zVQ_L7x!7}hy8rpa8itp{!VpOGKYw81hy$<#_NRD`{_~&E@8DtBfdB3TtVTk52zIF5
z=AzR7e1e6;R{m#U7=j#m0(K&~Df;gJenJA9{m%iRZ5}{b!>lon1?c|w6LQ!9$$xeX
zRyzcChsW~j9sTcFVBjbf6#pxv6BsNU3)jd{`d6mVD-XfkX#W)jv`uR)j08p!tA6i)
zUkL=w`9I?PKSBRj3;s{g|B=W4Y4m^W<^NpAzm5t2|L>!*)TFJ);y>SdPc4(=r(oBX
zv}70fXF!#Qk56bju==~``whan&87fh_zXj^Da#{z@3X(F33ZWScPlSHxpe7L^CPa0
z!>#w{Zwc`V)&~dOZamO@=!wq5Zx5RfCzx~(e~jl^VCoqo-F1p?w}IcYTf`kFZc<jn
zItVKtICYnxxN)zT&r5JSnoyvXP`tg_VAVj_s;gU77|v4a#^Biw7?Xs&oL9LT)|z{q
z^^}lPeQxv9lW|41pS}}L$1Mdn7zdjY5|&nq1fA-yH8XOIc7AE3-tq8SlqX>G`ey{l
zp&!xD5cgE?$#|^aJ(wt)rpQOTMp(z+3k}}9{wMihlFTnc<kCu8f;`KoPID%qqq5&4
zzhS_7Pk3Vf*fgaMn0N^IJ{@RI5HJ5@9BkW^Zf@csBtxcksv_I((RrdxqVIyx5OP<8
zpLkqf%ENL&`T-H!`NNT0`Gd+U_HD0*OILa=Ii%e21TI43Wa@Uqv~&m`iv6+1>r>;p
ziMiLKg*-LKTAudE^Ycg7BvXy?zeKzu+mzQC*;R5}FcgdPi9ek%L~ox90VjDmsO&@d
z4JS+_$`ky@A6jfTEJzRVS#MS2<x%srWK>xrRs@+cY;Mg#sU77wp#x&oJ&R0RuunW1
zm-gcrp?ukl)}`Yqi5X#aVT74Lv312Rg8i66)>BNzgt}mKO%%ZacT}1xM=6nB@OjnE
zuyK)}!@r_Pc7!YnHZ||zn?(bDJfVUX5Kyf<GCWPNCNxlN<*m=)nVpALa&l=_rBD@*
zu%!e{mMo9KQD65bpY*=SAL36a5Q}59q>QMGghJy88%Qhi9hmMBGX-<T-r&o1H`cf8
z2zLUe-))zL_LpqUALKDtfl=bH)ITCy2!uNbp3UH=t!Ac1W5Q2f7zvTfvNG>v4rmT=
zA75|{>BKO*Ol@5Ex%})e!djA?{A7F9yJZSq1R{nGxpFJVzV$_ACFZp}K`$R;LdZc$
z?+D5*8|Z7M&+TgHM-sB_wM)UHiQzIpWpVV;zb?R&+A=Ro-`{fP*Omxoz51YeqTZvC
z6_N=)6ueosSO4NUpcn&ax6NOa&b_Y{rhT2;wE}MZ34Z6g<$D<Er;2BzVr(-oANvzy
zu=chmOZRiwb`W{srL&?>RE3F~7NN6-jXb*WkQWk-4}7|RYtF}|-S<pw$9e+$;>RJ4
zBA<zI3|<UA?M#xsV39t3-%$6%QKn6xpiv*h$ft;kiNwK3u&87Pda$+mN^B`Np-i!V
zn?SL>wC*zQKO<e)Fnv|;2*QEBVzmPYR#>DZb>a7^p?c4((qU?TlbBfH$Dm9mn3&0=
znW2GixY4_nT06MbP`=R}tl5yHxl(x?i_JoG!;*C$Qf((4&=+xk9QNb*WkE7;ZYb*`
z)yBdxu#+ZKkd~-guY8tUUyTtrExw*dc(v_k`NmFnBTKvy0W4vWpr7o~)SPX&&OFu<
zE7{13I!F{MH4tib`*}x5{X@{!HU4w`9K#NSPrcXuI!sOKCdV-_TsxAn*;3o!qTw<)
zgow%c=cjEBY8+J}%E9dkxK5+e`!*nD#f?zLYe?nLRMqxW=2=bM7oJ{R7_y3vk3U>Z
zdKVm7fWB}U#UEGj=?DpqUUDso@ow1Ni=Rv5iPErs3Kl9}*C+*dgb$`NW?$JV99JgX
z*=j2fOquiDN`9ZF^d4xzRYbQLdG005(y8)n(@Dpo8)xx2qBOBQAo1ORoW==bd|!22
zUkYJV!>Q!*=tT~h>y6el7nSjG2p*3Z?eL;5gBmY!f*JYSw{NRW_zk!qQJMn-#xvcM
zf<qVj6#wdUL#fY#Y2Mco!=%mi=fI!;HpJ<N!Vm<3C^<c!LES0aLBq02LYw;MllH^~
z4jlujZL+PNAOiVJXugMIqpojRJaRcMKuB8}5lp3|tORuN;x-?NqlJauTJe}71@Qt#
zA*~*=ZdQcBPm|>iF9g?ZPy{W0bPQTtXy|kIyYn2S9}Yyv%pX_xV74NoY_>Y145+}P
z@6%Gmj2kZp78vLdIt5*ah>&&A1i^np(scXXhUwBrM-I6l#*@H!&>D!Ve@xzC`@P3Y
zOAW;AK8xkOIZw2PRt8`V)rnDbz#5_ial#a3_LH}Lms;1;uYHdZl-9fe!$l*F<B+DI
z*sA;*JsuAhttOs$AP8VQ+Q6?IbUxq!oj-=5@a&>l)pA|cH@O+vBI@JNTlo<ONJ8GK
zqagE@0KZ)Jx#$FV5M_*;x#P2XWUhR>c&2?BFVgA=_JR>4%WpQj=xgbDXUgDZYRFgW
zj6aT=%FvA>Zvku5e#yW9{;iUNuN~c3`lgiw?v}!|&Qp=9;JX;~whDw13xDQ1(^Qt_
zt;(?QCgy<=B_LMt$Sd$Tqn<ldb)XL8I)2-MN2!F@mpPn!muen8ejLj1j33&84A~3r
zRD<GcG=vi)KXnZlXQ{Qu!^|U~!=hBc{&Af)!qA&I5b|5w#Xo~<FmpHR%<bq~)2{G{
zKo@XMG)nl2A;F0(?-C~c1(RYDij`>Ici}KeIJC++oMPs|>8&HVt{W^)3)@zT&nQ!%
zYHx#7#D%l>r7p=>WQ(g6+VBFj?}}Vt6E2YS(2Y=-HLY4>5Z?58MbMfi{Ddr49W}oe
zSozw<K>T&eL&xZv@Fe83b}vWZs+B>IcGEwj0)lk)@xsyhgM`to`*lIe0g-bH9$B5Y
zi5ibK`Wf%2J;^Cv^@`G!uHpqVAGBE<@Q<iN%7zNy1tJ1&vzyYwgx`_Mn|1xKIC;Qc
zV7OqUu@>0?FadFbm7YP>l%WYhk^-C#i-nZ&m-|%%V1(u)_<JO=gqCwHmXgX1t%oJe
zL;pZdBAW6?>m#!j{oG7uf>XUET!4F&s4E8GQQZ$8n!qynF|u6OHM<)p)sAd$($&q3
z+d_N!!aqX2FquJ5(Cc82d+GDqRF)~~g0cv7!`lK-(TjktIuk#+dfK$;Mi!xe+xbpe
zrl+_FQH54>FmHa5buHemcl5t<<wO1Z5TXu89R$}pi67MkJ2tZhk=}H*<!H->KTb1V
z?vey~7vyFosFltuO}0ACYBxB}7zk>q#-+ZJ1;-uH0M8En5&{kctAS8$QeF3$Hj4fI
z;W$BP6DXB)*!v=I7~nE^v|p)^d1rSkbg3EX85<wcCjPeoqctq*9KR+wKrxwS!kKik
z;p1Nh3WmD#xvN_0ll_6H@mxfY6_=gorFF|cEaHKWieVb$?xc)By5Sk1XbW}$!*ORu
z+PB8II{joRzW!+#zJ(?O&yMIKfTK1H4O{Bke!3AYYGxS)g<R5YMNspXlY{-cQR1K!
zs($?RR>7b9@<$>eAAkkf>(O`I2F1Ue9eq8`o`?n}P@m#G59we9xS^0~4Pa|-6?m;W
zLawS4pVOFDj?LCk5;1MTCm<x5>l6}lymh;D4F*hLCPeW8G@%gwgoh4;4?+yj7#G}2
zQn$S#zfv0U0Mdt#RMAaFrZX-sss3Zr&EpFxx4`)h2?J+3v8*SHu%$L0o;N$Q7P;XU
z0)@w~hxDPO#?L%iCE~4P@N|%4V36Xijkj`^!ec}~#0<ca1R$e&%6Ki=f-(8(0!k-d
zhyIkA`Yx?E(D|AWWS6O5I(KzD`dnccI&A$X95aJFBnV#EUau#C;H5H-TWi^JOymug
zF}S12dFmlH7P3&%?K;ft@z+3@W#B<Qkeb}32J*7L32c<RPyHeCnXq-xXx(ZR58HxH
zJjfyKchv{EsezW@jWac@HOk8=(Jgym@)=TRS?GuzGwD*KpO_2Ju8OYvys9sF{xYax
zB`#cHiKrnlOpS~Qs?OOZUxLa@44xh^X@_zjS)lCr$Ij{e;K7P0KZUuiLUZ?=1}C7r
zwpX;}pgY85lb$-?FfkNo`qFbrv*<SBFm&)3kZ$;8#dU^YzahHww}paD(<O}}I$PhJ
zq3KBuBwF?&@_qgL>@DG$O)WAd<qMg10{M_zJIoDUc`^@82MjC+|ABU!TmEo5aN%j*
ztocL_iy5&(Trd8)M2m<e6lA?P`T_;*)Eqiu*9`Y{uu~OH&F<J1C-Fb;PWF|!KHj}X
zv~><<yLWRtiA=1vHsx*5x3c=n?vUb(0MqhmDiT2;dj;p43X&Y(Q@A>G)V7q>UxGdd
zi*E~RgM`;Rr^~?CJg5qUay%qebC3n#4Q7s-kfI9D&e#3kJ`wclD#szBIFUEilhtca
zO_@|xWk0Fqv5`g{f;>hZ2o9ZL?q?Cmn@S@iO`*{BF$Y$usH&=RHQ|zX9^KR%0iLJh
zim%*@qP34$$ahFt0vjAPQwjk$?<Vmr*ETOM^|ur6gx4l(@yVB*U}+5gA)@v~lB1P{
zTI5idS+^yecn^AHhhS2rr+?gn?xA)2qeOMir6bi@pm<`<S6Cyy&jr<pdaeM}Wzm)S
znSjh=c3oa&;GxvP8!yphnuGk;daE|L@lQ%$HNi+SO)X+~ml|kLPfeK?-;XsPRymtQ
z%K>fTB(U4V9aQuRFkBu*`MTt)S=E}}38D~DZZ+7Ydf2obyzAod)Ve7@5MebJ5FvX|
z8Wp%dw~_boa0|Hznr-vJ^N)5MsVGj6M`-$0)e)V^Y9kz!yxr8t!Z9jqlo8mkh~F&q
zVq+ayv4yseS`*~$_H4k<6g|L_pCKt>xME5x0L&rN31~jbEgx9V`10*fsQD7?(iy^=
zkCt5^k(RUI`#?;p(DO#PT-M@jr*IKRgEh-#iji*MGLk`Ygp`qn(*c*=^Kj6AsivpY
zw!^fTYgg*_IFGfDQ<Ljj*@54tANVBufeZq?2s`4>Km)%*_Pwpa={w(JafcZjlgMpP
zVt__lS7MBfpG`d}$T{mP|Kiv4qPSLtEfBCtfg&nkcu5f%)PdCw;pCzL8g)lD2EC}J
zh|+)*fAcst4#b`ipn7QIFYgub7)Z`*!Q*u<(=p_RT2M#>QcBYt={wgm@qArtatbk~
z>&s;adB?v|02fVd9J#7xenyp{N7E1yxsiD|;xy6oJYbo>wWePl$gz~S@bdDN%i$|9
za8C#!@V>&t+}qgS2rHMZizG4CX$g0H*<9h^WzZWPm<rEsuGAK1vKct?I~BknfEtYg
z%792|WJ98p8SJ#|S1DW_w<W2c#K%8C?mUGg#Ux*TNadgMc|kBS#~5aKg%W6<1<<@n
zU)T~i3Wj51H=0UM5A|ML{0z&jr{6gpbW;;|`Mq<yf&cf_wedS91wO#U0$opg9zjiq
zfo_Ve<Ofes?Y=#tt&1^0ht`tFD>6p9B$O{-2e~&?9~SsLtwa^-j0AqauCZ;CT^}TC
z*?l`0G9Kt?Acb?Ys^}a3qG{perQ>De<rYFu2K*xAq)z9hp-4lx3$GIj{BOLWUcWvk
z`i4@4amQt#R%0;V4&Pcd54F>O{a#}NT227Oi>S+jno9U<IO=;WVoSx7Y^9D5a`|Ap
zl|2Ssg6QstLz>Yry{rS=w_@CZ&mfpF0ZE#F=6$3D{X+S6oA5-Y)v^nf^HHT8%>a24
z<&Wk^YFa%3=gO@ts3BV%DFP2wD1d*+lhKPDv;Q^a9=q7Y$ivHX6bgILh7K}UY*bb)
z>euiwvOjKlWAca%7?>_FF#e@`;n+|ziJAV~apvk|jg8gr;Wy4l#dprO%^P*v^Wc)x
zYP^e(9tSJ*E-UC=0^lF62$tY!d5<o8li(H*8Hul%Wq4_ol9>2<T=j#}hYHc_r$ENp
z4+2E*g^zEM6<YZ9GD6n%HiwTm;aRmrC{RQG46JnCgZcA)jrE*!-~Kd0+r0toV*m-X
z>BkS7md(p$w}Vcc>z>=*t@bf^cEs5vEe@C0TC`nL*^Tomu8ilIK&4>|9&^YTJqNr^
z;mYb+!a;(S^F|*#nGV^m7H+DIWLKw)y`026X)<C1vO8f6RPaqprWdK<HS;W%Vb-)!
zJ1y+qaX4A-M%>lyiKWecm$%Zy@^itjH2MyxO6aX&_#hk>hsYe&nodtI0L9JKzb5%i
z7|P6QdTp>&<NP)fq+Q(B$w2)`;xwCVsRL_f*yXB5uK)EBSnP8sr|RxlO46_S<Nb*=
z*^%@BlQqoRepH}e7PoM39E7*ev41ATczF1pQ(!(2C5=SSi{frSVVeLBiC@u%+zYtm
zeGsuX;95bV--ZJyMC5j(6v%&vNyEkkGmK2DKat}GSoXUnFTNsjZfvV;G1IhDO01vW
zxIj!2!Oe(pTRWqArz7rkWjG4OgZ1BmtCt-xzjzwJ3g<#@=N-y_ZuLomJ!ES4BGDfZ
zKqb|-*yRe2vlgYTvT1^vVFe^=ZdwJ6j5tQ>Yw{(Ek!?Y`am&t{zs2MCJ3+>XwJQtL
zT|Y&0fNO<;h#Lu^fyRmg6gZygn02e)zP#TK>>mUZOA2DT|47-!l65%659)<<2O1HO
z8H_{KiKSK}5+_FaJ}I(CXs$M6ZTPr)$I>n|0+bX)+_F<$;>o|MK`BRm5TtxiJBT7y
zg%Wv9y6}8t%MJ7XgU%GYcp32UFEQKK*2F5-)Uu7!&S844g1Q%33wixG209#;>Nw$B
zP)(s<aw~5<%|zvKr~)Fo6LZGG8}#j?%Xd1nOewU1>^?wtJs_(qX@)*2pyL`ObrJaE
ze`RNn@XoI?6BYB<WIcMCRG1eB+^QRR2w~TB5lN~s(m2WO|9vKNX{@^-g!wUMR|&9K
z9&KJLhnmk*-b~GwC{We8JqNlLBmTgPZq=v3ck0ZFDnKfb2X^ckta%La^_1<>9JQNg
zRyNl?Ep3pi#DVjaymn_oaM3+mSwhrQ|6;OGsYX3oB_*OUkd=y1-Mn=xYcy}BtJufa
zlBv-dhgAc1U6H1f=1_)ze)F{drO%ie!YI{VxCGA}=F_fG7q98`N-nZ#{9ZAjf&}@M
z2&k#fAmDeXf5{f9)!3cooi^Ba!B{K<8Kj~qd3PGuAA>uH2f+ycx`yjCDX0brpT7oy
z=%6FElVgBgDO1~oMd%PNY<V?^mvSWVHE~%Nfx|zp(wd22epc!dVHx0hH@9cYop>eC
zA1<iEWwHtLn#Y{kT~C7G1MMd~#592dxC>`mXHpv<S<R!}?uKFauiq^dQ~ITR;>pj@
zt8z>bB-Bc04I7EKjG{!y`24I`|8(6Pco;UCJ?Y}R5a|n+>2%I_1cJ)~^YcT0(9J&r
zTN3qtY-%n%KfOKN>GU(T&(kY1XBrLS(yjx1fyqDqTI|J=wuRojBcv@*7xr*FsV>HP
z=BL);`+luyuT6*D<O)2aMQH;t%wP@cJP&a>1C|fykqf}{x%^_24!CGN(7+%DyfSDE
z1Z0bZLFp^;H6m22Zv*{TBRHr0oC3f*&^N(5&fV3rFDA=v*|xM?&K}x!O#F%>7DAA$
z>XBl(otQRpKU2^psP9xyK}x9tQ9Z6y5UEGTN64o(jGxWYy0O*yELMPV_a&%8QbFdd
z<V$(C`2#Y3VL_;l0->6eHQo(*SjrtEm$A~F5fq2tIX2kY14jP%)Tj$3tQqvL@3Wi8
zpXWvif|H~?;>&+XL__>rC-R^a7WxS6iKz7~WT2st&9zdS9d~h)7DQnr5HS|5z(9^`
zyRl&&^ix)3`gia@jq|k?#G&?8vM%9ZNf7P-CSMD6CNCA#ET5MCK0*W<i0k7Cl#r_T
zaL8R(gh`Si6i@)TAhkL7OeiWkK237yNWMdoh9nEF892Qd`_!YbT`mAo0ysvbSH;rV
zrP|R;CM0mMg+gT@GP(TRFf2e0w(nbYexDms*jFzMnhdcd*x7}>u*FEn`7oqd8e|;0
zPzF|dIX)6YMGD-CL6WrAd~6+~u{+hSZ-J7cW*(O>?S_ic0y5->fB*`C0AQg-hY<~J
ziP~+GH6@pNR;>569+{>v5*yMpkyrLEnp-bI%)EsMgb!jMmqa0x@k3Vvy1X5Io#jio
zu{lMId#|xh#H9Qp6R+G-VQSLpt^S^M2p$K;a?+1QKPe$^Ihe8Bxy`WAB9s`m8v$T&
zc2bY4tyvFehV;K~UcF|Vz(aRJ3y9#lT;^qV(%RvrP;jH^pl8uvD5FN~96-DLN%dao
z!$kPgf-J`@!JkI~v<U|x7KK)MdeUel)yi=CUU`z?=9-@;-OI!Knx=ymJbE!Sj^@jZ
zQBToHDmCtrAfP%!b0?Yl_~(acKQ4XR9N#L~9NkwoRG}7rd?711^@gMNtJ)w1V^(-1
z)DZCt6=*w)1CgTh{#<n$XtHdC6rS1>0v4YHRa=R!s}I<$hLKFbU4{Z-izT~LB8q!j
zx<-7h3_Lte?FT0qLV*!UO|6$yb;O`QJ1_Lm6K$j)07tNr>ncnNjL#~3if#wb+oHJX
zA$WafZzD;FLD#tqk#cWxfUN0)N(s$m93O^%X>di%XGsdZ`)iO(MYn@^vQ(LxNpgyd
zjC26}DxM?g=tmSt^4IHXH)%8ofwp%~b3s7Tj=A8i$Yh54ENkWh4*^S2ff@{qX!o$M
z2vCT!&9|Zf^7rr`qen{VCx6grff7X<XZl9q@d%*Y##WKwJ|c~eY$ut_#}94Ykk;H=
z9?C530pcO&*`{{@et3Xem%0YLqJ0H>;IN=|&}y*HC3)fg`FzFG#~_Sz#~I=3s5)QI
zy3jbvV7}G5S%VCa9{8dPVN}IU*zl&O*}me=GFB|~oe`_}ioOk-y>`T;|2R0Wt@Tsi
zB<#{R!s}b2P~!DZCJC1J8W%4W2jThvyn+R_dI$Jk7fRCYqtI4v=mZO!)G@N`?*q<4
zE%wsbYKwj4iWZDzC90D|6o`I4BX>d<>b1$$MbQ#OoR2u{dmaM4y;qQ8P5Zp`ty{NJ
zK)L=1v|8BF=%)4gVb@E+HSZ(|1GIah!Df=08aQO}O)oF$YcPglOrfI1AYvL+6nBE#
zN*<lt7l#^ENnW36(6sFBgNS;dktep9Pq3q<rA<VSbG|%3Eb>p908%4rS-1YJDfbOU
z&VomOP!-kSh_k3vvfI`2`g-ySE+y~}`}@s6dKGkOSU7q~q?=DE?WXPzm=3Ldv;Pnz
zJJh=_uy0N$bVk1Q$$14YMesh=Y(W-MqE|p(dircqy3ugJ;HU3dY<uc@!aR8;fi?%^
z0yIX+fed7R2>knecFTo+tCo)B^w6tY+dH@&@viZ*@aa-4C{}cZT^wyKf9qc>0sBqu
zceVWeu{Kz%tu=Uv&?o<oul6L%<-+6ZMJE!&mRimydyE2)bEwC|lX`n1rpy1@^5{kN
zi()(8cXvbEjCYZd?RUEsy+0aAriNhYfG$0-KYc#Ge?8q_b1r?An(`l4h@Q{HfaZ7D
z^a)cYsu*Q5cpKyb0`CjVZ&=8`{21*b6X(XfpDlqiZ1X^^8I9WDkgzequ!D$1P}+@5
zF6$1oa#wZUFz4ft4kG=}@9UvmyQ^dW;FZSOp3?G=%0f9zab9|1C?D-qt$V`a#;f5s
ze|-{WBn-i`5Z#%!(I8}2pKBx=!+>&21u~NK36C$}cazyJk<s+SfQ-5F`|J3<5D0V(
ze;zkYWs&2~QO|!x|AIDZJ{~;ORvI1B%9m&qIa#y#;i>n(=Z<p3O<m1)FwWtkTDg_E
zZYqMoHvvh-4{&&>m11-~9&sjZM4#=gIMvnT0W}r&Ud2KN`X)IF8sz-Pj~`(CTMw&^
zJn^;a_#|o@x>qfMXE2pyG6vJhmcEPXD>9(Vs0VIODxKlSLl;~{*QmHh*MwKWyMGo(
znlnzAjh`&d>tjQa%0k|Z!8z?NP<g|;^CZ}Rq=Zg}yzuQZe+%*EA?9{(lLI(yP*@;u
z$($q+oNrlnT^fnLW8=Kt@b6}l$xbQRw%?3!uPkd9$63ZMp^yLvz$SYz9B)T}G`}Zk
zRA%b^R|euoe_yt$hc<d@9{c%f_MfXC?^7Z2K`}Pc*Zpu6wC_4a@<V+%zmh>n_nw5x
zsH0n~E<Bz+Qt<5Mq5dm$F!&iLOr|u)mQlaAQqhiSvM9YVPEPz}-}m6|BLFz|f-dh)
z)A#}|1Un5LsmQ;23~>H(?S9H<ULCHZ`1d6WEcO66UwXaqFu8#TjhF;`in3J5r>(@t
z2`M{n#@<tiRKx7A4khfe76jG706k9(YQLSz5?rp-CK?Dw{_~6H1g*D7t^IN&^=s5i
zqkby5k?I1-11)YE&#sFrC=W`_*Q;8ntc&u&jr=__3)v~V#@ws~zHFPsN6F|BDiC?|
z?HN>O<;slm>dQJlcPRg>;{YrK=(xRqj6m~q={r|Ej?$5Ct6>32@b)MfXoBi&xF?hV
zY$c-Y3F&?!LHdb--)dDReC|*tK!6s)GA|oJ^_@Z0C$;Xr--O@gNngT_$e$?i6C`%E
zh}Y*9j@hDG0_8od=ZD%0TPom6i|6vQ{1=t4i2qELg8uXG8GcgD+rm5p=AJgQ!Yb1B
z$bY_`8V4T6#|o6$tj2OY`(6}Tp@BXsd(M4EdHVL{o+@GQKjKOtpmT-$m^}w%488t}
zWf_j(KIg2*qWfBbeS_$>#THj;8V%)Mr!h?S$^@HnbF@3qI=%Xp!SQrif)B@6=R!pK
zKW{O>_c6MiYmhqsN+8+HY~pJ*E6lH~boTghP%v6#`t-z@)p^*#Z9wC8?-1BDTS<w}
zo-~PX5c|EkpG#wk;xomQn0@^O-5h_o6U>?hA%$`a170H2D@1njvuMszWA51^%dLNH
z2HQ`Ts{wEDK9maR1s(wcKj!Gb)p9zd^?&TW?w4sA?wqMNuKBu#@y{+C1v%jnEu8st
z&vi+%PmjfE1(7$+v2aYI83tj;(3-7b9^fopNcOLXl;zV-al5WD!I%k<o3^eC3bP>D
z8_B<M{Zzjl%VNi)B{ew{_VYVPEz!oTDF=Wa%K?2pfkI{h3y%835ZGNQ%~t)(;Gg6O
zHD8Ta)1b%(ecHr=$B2ZT;_-K&t^BWTodn*q$v3Gf6APXo{;C-2?!B<jpYl8OWsOdP
zrSCyY7cwkDHzZvdenWow%s+V@@({P1!H_QG7eGHZJnQ+n1PB|Ht~tT`7|IsJO7EN<
zE^7U^8Um>DeZ(&ce9dlEBPlgo5y>}^N2|<w95cChi!gu!A8<LV0_y*MFY+l`P{U%;
zp>dq8>x02}C|9P>eJAS>czI+m{$lXfxKFI7oHWay1HMo48>(o|Yv7LFFiT1eLF_Ei
zx(&(IgUMd|HV)D)b5K`mOv*xhFFYE>2!37R60eGfM-gYjpmNR)OPYUO4RSLWS7u<A
z<C@SgPwckCK({>#Kt0_6Q6VSY*FK<!o9EHTkE^?u1X`3fcj3w4{UFEb)l|nOt!%&8
zsQ1=?dyDjM)oMn1@rOuC;MYG>#lvUIuLd!n$7|xQu@*bFDi%k}o1H!Lu22GT8HU%e
z&VdjGNAZljvLk($oDMVZ>6#}QXh1=31YpP&yg{eVyXGGjm@a*H7+IkT!Ql3PwitS8
z@fsSQm+}GJ(kmvJzPVU!SNdyXWgz<0>)m<-d!KaMFK}JFOVDVcE!T+f=T)M~d^PBm
zj=i|3!UQLx92>27Quf&e^FSq+eudolYf@#D16DPuocV*JR?~B`)q0VwvpH5P1Y5If
z%oot@P^hX0Cd7V!7&Vb@LJO}0M(09mM!L)~T<|m1wAp{@Z^3DO2Qx-5>F_Ctdu(A%
z<aOZYEm9iOKaZG$%il-L=ib8#LoKkb>e=Ea;#UmKy6tp|fsCIG2AgG<-|+0Y{v~wX
zcB8y3w{73EL9MUYLGRm_uM}C(U0EMLy;Q&PF8W!t-v>`=IGhjJS)i>I8hg;~oZyd<
zlaO&cy<}*9zEhWEFz9ko>?+QDGR8|Ons-oMp@*?r=0lf>mAb6NxH}+!h<)gBJBmnQ
z^vnBTJ$QYFBSjt8%L)3<BX2Tp7o}-zNMyD2E(4b0*=Pq8`>xu`9&fMvyx`~+^iJQX
zV!F{qPIi>eS*}8ym~FgaF1&%T-eSbBtHLM{IH>mHSMAmT+EdEeAJO6iQu&?mjF-SM
zONw`#UP`*Su%0>EHt~F|Z4wlSnb&DVl+eZq12x0$iH!@*{{3WN9TZpxdA@s|x_W(R
zI`;S4@xRcK8EL+dS01kqTjtBVFTL`TK-4{%Gb;8owZbd!-3KJ8BA(69BvkYuDFP%V
zXjE8kifCD`UQgEG)h&`I`}I4r1k?ISS}bRJ5qtJv&E}nzrOg-HVe&_gOn8~l;;@u9
zcRwXd587rM=f8lPJ-+n`LUmo{NDSASJo&l;ZPaGuYDKM`icotd<)#DmvnmdzdS7{k
zuVdeWQqrDJ%HBT~>F{)Jx%e)!W`{nK$4qpb-+B+Leu7wY1E2Yn?bddc{BQzy)2`pd
z29T`}Y`yFo9H=it_#7Eb<?P_>22C*M`)}SN(~OeMS}3|oZDSTi-YwmRN{&r(71y;R
zuBM~I8ZrClD^whrou2(7)M8b1WwI{sI$+1i$>c=V4sD0eyh36zrlh%imomH(`JF@$
z93=e$y4~nJ4|BfhBheZ|j`;w$N!d@wNX?V=6CcHPUoE=);xeLkIi0y=$iCB6C%9%~
z>re7~ZX_a$sc;!yxJ&{Nx)BUo7@Y0Pi+b@JxXf{o4Y3cM-`^Fo0&pD<Y0RB60K6gE
z)xH?BC`nS%CvnyesEWC#W&XcJ67d=&95E`umpDi9!a29J7}!~M<pMyJT;D`mCvhc^
zNInfIo{_%#x%|HPNP+?=EK2xbIY*<2biqkl^=@&p0@YC}bK4zIF{!>!3-Bp;T}#^m
z=+RMuh}jQO1mX7d3wGWGUBW+<l3Y#3hgn9{-#(8TKL<Rd0n~BWEco!?KqM(SP9Nkj
zDoiYVW{5VCiA(@)hx{v{i%rdJgR{aW!yYo<R^3-FcqeTaMkGl8yy?{l$H{}r=(+gu
zQ4Crf$VNBy!)u7Sv-E6;8nn`O%mY0F0qIUYJ(FSK_h?r8CQaO?-#Gi*JJLd$Cil@z
z7y)N0tldiLaK3%<rvNL+qd)b7#i|E~v4#z)1o)T@z_*EOt==bEzi;Bp9O`J#w2yBd
zQ!KT2CPJNI<)6yBwp7Lir15>%A6-d&cCwgyHaixMty*XLa*g8n4IO~19r|(@Nn|*I
z06xSxF<g-Z+Jz$%-vI$8<&NFi7jr(jzFvvP?4IHudv9bLJb7x%q*3Ysb<J#LibYDc
z6?)t++nE&9f7>}2sKXEf?L{8cat3qvFd`29rsJ(i9jV0|Qyo_F#lqy&+)->ekbMhJ
zoHXjzvWNJqAczW4{$7D-(54R@^FZ(P#a~hDCxb?V*sBgHqZwP5t*Xy@3yED6>_+6B
zAs+x2f#{I0ZRiwPrZnMp`IP25XqP3waC7nXuyJ?9p232*#y|J8_vvA6ek`u#DB}74
zHNaK;Fa5>{Z_jcl|4^hy9snrEl29iJ0&r3QC7AqmE*@|rx~~1G39F03?t^Wp6Hxn+
z7&XEyjueWA)<i9JG=kdO;&k0Jj$iHX6+!v_>g3mw<OW%jQ1OGi33NRmH4?M~+?o|l
z%a_!m_aOx=m8?#AfoXvC=&9-9nA`b>@&%GKsbA9G=Za#+L6p0KGCyhI7>{r+aQz1y
zyiA+THwWqE>gI2im^X{>WhQ_!*(n@cZs{V?sCVwl*|3g@$a?>5-Z1w}e4O*`EdS?@
zv+9Yt&Md&Koq2VJ<nS3!bsA-{Crf<$a4L!)_vL!Qmre>^fh+p;7~#oh-ca0rXZXNP
z{p_*J84$u)n%vM2SV$5K*lbadvtikPJVLa63bs^}JibF`gpdT}GYp`rh!szZ0Wea^
z+DXPa1>mqf(;x512n+u?slMybSl(r43`B#<Q03mEOXGnxTkPJ6i^;jeC4YMWI27o6
zi&ZbNUyzNJU3;9h9R!y`A)i3%&b%1UH|+pg+S|aDVK=_HLi{)=6_l7GFhSi<BBp`1
zMq~tWH$8^ItGtc*!x80AvhwMi{n&WI0~2c=z_E5_ab<5af+Q3RM1#4VSv;Bcv;|P3
zvU!A@^sCB$EUZ2Fa|vm!U&Uc^oE;%kB+R7|2C*Fym^SCLxE-Zl+|x`vGnxCok;sP!
zuQeCaMwel2y%R*HImUQ717Bah+>@YJ9IS{>T(H?X23i)xg6d7uo?|&0vR5aNDxpDx
zkPtz*`sc~PMt>KJo8=@GrJh5L{Uu4meyL8&25(^avt~wl)u2lCe&#06PI#T|bnHIy
zd2BHmxx{1vIn(r+Gfn8LlAyEjA&>J&n*B|M5dvv$58SkX%tjG2OGSJ=?$M)1ogV6D
z&VA*S`%Muv8sVH>_GQ$2ozzCS;P|O)ACM+mByMQbHMj)nfwBtE(UUMY7uS%dUvoum
zo#v|w$b>mT_lqcNd_MxfG(9&p-NOz<F8ZWo<+l2N_yb_3rDdZ9-RnG=+)+2cD(ZD9
zEQTNfxh0a3dYd~lFPsny750<Hx77BseVjZInf^Lx%MaKrQRe6HY=}jx%@@o!s*p!W
zLj>`+u?k~8*G`bbBAhkc=%?%al9>bF$zwxOHFg{Q)xsz`&J;?HQGL+fb!CZdouYqC
z-{m{|czr(8VAA~FM>>@R7&{`P_2YfJ)3Eu=fR)z)x*c5}>g)tg*dEUSi}5E*%w4H4
zHK>)W`FO~EYwi7lzh6D~`mge~@Ru=16S%CMkrfr=fq=6)_uyvZ(FtIoA)2%CSc^>A
zw6^kGPt9{Sdv}}9^wMnGrDot-l+yz3`R|ZZ4AtX&v?RfM5HLry$1AJEE2If#G*8Pr
zzJvPHR5>KNts$;^HM8~K?OYtMx!6&uZU}I(NsH!+>Bt1>{0N5Gp6<~82RR8Lirgq>
z=8UElt&vQbly9`x^~qset_t%Eg*SY=1NDVKdB?N*=H6a2H<7+E_GFIjSt*TMo{WF=
zE#4frCEVL`l+S;>%sI^Rsqp<NW1{mdT{vd)4tB5@;2zJqT!Txim)r0edb_y01QIl>
z*go4n1C*){x4T+QzpP)*7`@pl(;D~ulVcz<CunBK2!eVQpTScUp%jgAitE93Fb~sp
zq+12>La8q?-`v9mM3G)~HF1>#-CwEGrC!{IXx}1wm6O-rnm`VEh?)OcO)~RRJjew3
zU0E)A2LtZ1buZ1yA6qH0>yuu<p_uPlK1lbLPIW=9qbLzEf{e$OYISfIuQ#qY@lqgs
zsAc_)TubZH69z9C4=aF6JKTAoO7ClsS0r2AS9MAj`d<e>tnYf(kxO7m<G%gRP`xKS
zip;b|td(Dw1B+F*SZEJeAe1C7;Ma%ezYN`HWM^<vZ^>Y3hT)UXB)7%$ExxILLT;d*
zwYv<;9``_pReT25R4M41g%NG>52hQ*(r~$BO<9utMOUkPhCSEqJtag`MoFTLze&!1
zeJSBS19&-ybEDqxwFYUas(aJwX0wckL!U_JKn)NRtD(Tv4naGf3lfP8VC=%la^<Vw
z!>XI(j;YDeV9SXg`F_?OMnSKagcP&W)px~HsF)1+k5d58JM+}GMGYB$CRlStYwE=j
zU)T2(a5FN;Cpjr8dAEDnLO&#cE5ow}6^h@7I(DFsR47h<e-{eDmXkp}L||v2C-!aT
z9EV}T($5SZcaD;UMv*&LFUVLjJX^;fGvGHLa=NP1CJz+IZ}Vv(=b9@h7;g-1+;0#{
zm)+Zv8pKA99dy3!Vb|nrgzT<)fCpOLc_WZ7K`H>jM|zE+BBggJw$~xvdAhjpG+0Y2
zmA35a@9jvT#npk#Yi3Eeb{z=tM4)<(Z5N1eC087<oz9FO%vfp%<5*m+H|H&x4|Uv#
z&VHKvYm7d;ARLap;|iZXg6ei6_}P4Vr;#DHv!83se#?oOotwce*CO8j5ukgvFxKzy
zFgX$(-z<$xQyl>eF0q9-4ph|CYJjxxBM?+)t#dlDr{g!qWNA#-Jz@*S&+VS<gjq7c
zIsCH(=2CsXSj>Na6a#t0_-Ojqe(KgLAB_w)ruyX!na0eay6kfR7nlQ?WgRl!(E7Dv
ze=B;A7UV;u$#!R01I|G&>+MoK0c*K$UqLT0sB~sp-?C{EnWml$W^PP-7o1HBD1OW*
zf=YI7snhE7syM^a&*q1mc@af>u6n1Kx9ypPV2OlF#%ID2z!Hu6D>h1|8)wDx@mG=N
zmdU}RHyrh|;Oe^tV`7ASo{Vc}kGoIUlC`e@<xaU6Kn7-OYQFkBbE%nP4j_5uUrAcV
zIgnlE&SA3^0BUC(b7PWl($Hk7who;R1mB(mogwslnnLc)-mXzG$F4&_1vPd>HD7^g
z>l^HP?avo!G#UQKaI4xhvSl_0=(#JS5>o`dU$y3u(yYE_9qEVa>rj(sxLrpmUdH#L
z_wAu~0hc+tm>%tz3Z4TY{;|8g-LRmTq~c89SewTuWp}o%&&DiQ)w5mb8XpSW84CKr
z0nHaZjcz(k27G`n_D6=^>hiG0;8CNU?Zk6yAG4!t@pp>_5bCe^w8kG{fapb_ZJWp|
zjgzl|Kz@uP8D~vSIpCs+l*YK%hJrmwRY+%Pgu4>-gz9&=oPZ-t2{_Cx6Q|CD_5tbp
zTZryjt-Sh@uEf*;^Jj7bXH3v`w$lPwo@$!+O&S-kx`4e<{`}DaShG!oT#~zc5rRB>
zM0r`v(nhco1Loig<+Z+Yla=u4m!9KouK|C{rvw8!nL1T*{W3DjkJMfRPZDh=y{=xn
z<?9uoLY(%2!Htjuh8dNXF3T@YowxHiUwdrL7Y8b~u8xJIP%=Q0nP<dcq!nuq0d%b#
zeS&g+CfNG03Fve~iqk;`+A7(X@`km4n}1NxbOZG@AYom%5_P*edu+xWK7<?@7)p~k
zO%BUq@*G(U+?c~>MA7eLR3glUiGX`NiRt1Gh`XP2;`9<g_@+*z6idv0wdaKy^dF4^
zV|oNj*yo3zA%x@&@a!mAr~ad_7V4Z!jz8E*a9%-NGTNTml!N614Nh<iAC_ML#TLF$
z{<E}QWIC>+Bj|;TRcZd0FOv?BhM6Fkev?@`&dt!bPR9!9x94@9G>AK{J)Khs+vNg4
z(5vQ7?=o3Oeu!-L{ZDh=O!2txsc+9C`K6`5UVZ*JUysb=YE!yzK;1h%n5MHf)xu?n
zxSyFQF;mRyAGF4<sS!yWX9HrwlMrbofEV*pdpU&jWqmw7po|(6cek9(v=%J27|HV2
zdU<t>xvYT;8w9lOS8-|37$A-rxY{eu$iEt1HYVMxql(D@F67|05MxkkbG4YuT)(FD
z2zJR44-mWWFLG78nuu^ykutN;DcLVg4v+e;LML8bHeQ`MT2pABd|wFdy`wxRx5wC0
zQEVx@UrzH%rGRs)=OBa-M>wQ{Q5e9FUBy!_x(;ZC3yLELLUI}PA<%K`pm`y%J8`zp
z>SqqlAqQUM634V4ls657??dJS%n>4Vja<{DEX4zSUwinq)@>P@?*U49e}jp)i3_X4
zb!r<;FnoHr*(>+-_15ce)4x8J*v+sjERqdh$FdDvL$QavPJ0MZ+FrP_R2?(>;#G++
z>{iqVLpYh4syAW)GBom~|HasZ#Af2h^crsGog-Brg_wIZu5$X_+pxo}%u>GF@wvgl
z13vau#SA=WjF9^L=9YR#p8W_jSN$^w1a0o89JoGh=WlPS#bT@3ycgZYac`xm9BiuS
z1Y?U|_FP;rmjlg!neQ@<eJZgexJ4@U%HZmJQB#4Mk8VLb1Q}V>HyMpU%<wgW1WN7I
zJ{lY40-vVDUdkKN26I0hHO$n#LMLvtDAm07NUKpW9z^0C(_OpFobRyf<iv#8z($H(
zwhK3uOT(S!igHz1cA>XwktnWHp`eIUDQ*5;WzDxD0|q}6c;%9zBHSbP$4>;Vu<%67
z^jYQfKha(aWodrU*y+bvGA9ZnCqAS7<}BU;(M=HodVBf}W@|-n9ctE`&IUxx>MZEw
zd4V?N<BnsJEc@u9LPlC641a3{B9|Dr8Y==aYUPOl-MySlkJL{idEv|!m<aQCQIH?!
zyLdZ-8S3MHvAiEGFHx7eaO^dKVT2OKGDzcEEw8S3HsR-s2dYfFM^a~c={Y#)|4KF3
z<OoVCUZCBsm0{g_^r9WFvSB`*y;*7LdiV8D;%l*q{D2HM0EeK$d@gTqkRZm`sK@T!
zlQkHzRPBulurlznDVb!9$R+eXA9a)|x^*x?_DAEUN;3!I`HL%y3Q1$lj0sH~l<bK-
z&}y)~t~k%vN4$Hr-TWQwQf#4Q{{g+92cC1eC*xx^oVq+OxKh|&xadL;{8V8g>4+O(
z4#LJ)RKQe^<B955panD&a!qyrJ1$nMFt0bSim%s}M}wBL{bBz3#m(`OYwxNKetHl+
za1<&4pDtM*Pih-~8Xey97>=bjt(zK;Tm)?#k;Z7o{YpoTI=a!q{7Qc$G^vdCc!vL7
z%-8v&#a6~^s_@+@ZVpMx1Fl=Q!DLs9h5-9>Arcr%NzJ>P8`q6;sMnRkc7@}19X@UL
z_BThvOY7wjZE5upF!#7P|3LZhQ>ICPwnK9Z6$h^jL>E1LeG2C0*DpD{rkdAK=IQq|
z4Nzov7D-dba$%a|&$)L4faP=5uqf?$`^)}H)|M;MAYm1V)E{j*1!7xu!7dmkBdhjh
zXYvCSf4U-3V7!PRc?*z(RoBkPJ5*r_c`#S;@l05mT7V>Gbeetg)`hm~<rrH1dKmtV
zhOE!eXS0Dd5#L3RNlB^c{#{5k>WrF8_?(pC2M;EVtq<mx;$Q(<UoSYlf7>l2ZzQ{%
ze;KgfU-pEb2M2NM;SD}zplEc!*X?%NKAkho0?H%Vh6OY~crvMN95rWk!!_8-=Rc7T
zIyCQX(tZG!SXz|>rebUvr{4;)!lX(Zx^oCqv`%Sq$}3W0ieI3?6=I(BMHFIGgRUmu
zv@rZ|E2?mayxm?&FG1G#3oGTrTREh;nE_AbEA{EV(d9SyN83PabvQ`|zu@c$kQO`h
zcOe8{l%$g-)I|fnhRj9B@L~);UUaxyO^qVciAF@iXk;nC>N7`ArvwZB&6CqGH+#=q
zT0%GKFS+rA0>1B%+vQC6>Z9#kEoF%pW~5SzyXOW*q8_Nc(?EdH-0t4xRB*#5p&Pc&
zS>f!@seH%AFCfr_`}%M<27^2#lGt(RbcoNDmp&&t-;Wcn^!0Lr7^Leqjd%kD`1S$Q
z&G|s4mL}dLO{c@4|LCpsWuA7Z^L^=Kj%Ta_`!MP<mGO~7yuO?Tho5`&vfu5}JBF`|
z$+&y(u?ScD_ER7K#r&aODQH^d9or)}E(KqjtV}SZCUyMum%UO3ko2`><_xyw;D92?
z7LQe0)55JT{Dy2A7+W|!B8&cRcvA*b&{H9qqk;xK?nO0FxLnd$ngVE3$LWP6ttD@B
zV$%`&!%uZ&{lyb8$RL3SjcN9{Dx5@EzE!C?Guu3%DpP_Gm1Iw=9Gg4nOs_-$ELzx|
zK~%S`(D3YP>m`$ifL*-PgGB`raUZ3)OJU#H-;azExW7Zt<+~)qTe7tDZZUY85BV#u
zvrXR)Lka)nEuX_fDYv;}1wo>qVDfOE_J@+e^%vx)_n1{5O=@GQJa#u1jCJLFj??g#
z_;#EPnRd}yA@a50^GuuU{BJfJAZ+*A#Z5i=YQxiIvwtLVWJ&J8IjydMx7dpb7MBO6
zezU!HEGd3`>`Vh?Nj@kUJ7=aVs?{~_!m)}nNzbAuhBxQH^wPnmyMKEp<H$uoKm$CF
zk@%YjKE3bDt^C^fbUV{f8l{p2fpjHBa~{hJDgw`1#!tcuS*6lH7Hp4QS&Ch=zo<37
zSD9h({P5|T@1d~=v}>rm!?XJxKIDV3XgRxiN6E~k50h&Lu6?nh5$yK$kG=4t0fy&t
zE<3wvrbrw&*|8;@8nx0*<%v9rcLt^UOn1-mw_ouW%^TcQMV>~N^pkEIZC(I2-|g%W
zaLNiy6x&aK(^K{ukCLg3@_PgS8nut%j+o=XxHTvNtDAp{jt(4?OZ*CECA${$egc4Y
z<o87ZQEfywgREMBs38C=NlK4Rr-As0Vf%)-{xwZ2!@f6+4rl(TbhiqE!P}^yQPk6%
z@h_@P7W~UDWU@$H9y5bRmpVF*$x~2z<$XOr=y-M_`N1dkTW~DN`Vg>x=QAaP@aO+*
z>LBjaTC@GdaZ2zt9iKTU1CD<LSyiXCA2)}Lckh)aIuRB`O2t?1`(xCjPZE7tGi@x$
zVFEfuzvDqzHv)a*{zJI*y^sKRrRo$kQdBgpt)~b>mHG}DEr`1{sd0sA8cR~CPaMhw
zt;&)5PPxaY0a8%zf&b1TPKdk3)fzIttHN098M0g>64L_Y4`eMySNBnDq+{0b!E2N^
z+>Tc2CSOVq5Cfe0{7-{Is;6PdOMGp7i9Is~Ls_GCS~pKnpW7|%VTf5~zx+3+p&3bE
zmTzBv$*(Qxc_%FwsulCiSW_Fze_bn_qcVxR?s4-15V8HhmX6W(VhU&6mLIrOu|0bl
zxq$=BfpBN}i;|30Lt7sz3PS)%WqM(_*6q^Iw8K=m?eL8(opkaPq=vdGAUXT7%buD(
znYVu3`#-DD;Ci23i(MNLWBMU}MZtBVJJhV}nvELBRLJEd;DdZ_S6;D;rRc?P(66Y}
zgJn8Zre6{I3I@|jhmzP{97Hki<yX9J8gHD$CbxfwMcn;k>JU+ICn)dm@X>~2hd_0e
zUc-`udRG~>coX2ey*xe|G<33;_ArGG1W@rFJnxpAMJmJnGhTn9rf8g?+DrPRoQKCV
z%u0V%)<@?Aj;BvpCjr|@Cn?W}U{V14v6syQTs(KLgMzb&?#kysu^B2U?mqKFD6xSO
z3BIyI{XS<Rtr8M=gPX9Rw$F0glnx#q9>^EO@0cJiGhc>L^1B(VhnX&~Km3M4%6<9f
z)IsOu$K#shqWlldh30(#_>-_A*z<F)`#me{X0j(V7y2XnGuK^pmEBSRgFirQgaA%L
za{^B}E7_T}W@te6eRKKYM>GynCdqoG2dBK1wfHh8ng+mLlJmkZh(SYnim2yN`#L5~
zob(;-i+tENemZjkW#kVgAVCy;3C7#+NHM%UW08!x2Cvy@JX0h=_5%sP2<(W-1~)*P
zRfR8<9`w+EyB|wzsrG1+w#-LfWZM<Q<;29)(7%|t>HQcF+7Ve`)X3%H*Ci0zkRH^-
z=F+;OJ?aPkyMpns$ibaPp)D^4nOzIUV#9~7Wm_ow+(FB54IZ<0?sjnQYoe0{Zu?E~
zvhw%e1av6FZc$A7fTi&%078A^xTYUoi5Nj1A1qV{ZH=>1Z|;6K#eooKe|2~aaPg|j
z$jf<JVd%RY{h+xfexymrAw)%U=c{Rec=4jva<;NSxdPjfU$&y6qtkd@#qEZ3(ATS^
zA1u{JfU(J{*Q7>c&<ZpD)9-ZHR({_^UpThkS%R2?BH}VR0eLQ1QdR4(;CmQAS{cF^
ze!_(bqO&f!zVA5tX6gtD)>>5!>O26_1>O6*H}_K(R0Y3v4UKi+omZ6rD@!I-!244r
ze~xP@89hPRW+!#&xeXz{XZ<%x&fiq7C?l7IPNOmi26Br*=Zy(!73^g{sETL|AVe(z
zl_~;l-a;$uCQtzQD9CS+(7owGT$yFh%1+O&s3b2x)&|x{fFufd{kw*SstCc%<hb@k
zJuUdoND5CxAQ43r=fntBr{x0L^f+I>U*iErq8r(}C9l%{_oce%_BwZY@$61CnVrW)
ze=<O=fLL%`p!%x0L*`*yHbg#O3-Bgdqsa$fz_daNZQU$EqvgU7`%RUbyOxI2hLExg
zd~FGxa}76Wud=<@#9`F+AN=%A%7eaB0u-#Ok(kT6FM>sLfqrD#vF0yT;G<g^3_w8{
zX~eqz2U?ioicw?-V0DL}?xFT_13?@Z3w1K=nQT7vTp_Xr43xNT@akuwByRy@s8Se}
ziTGyL!04YoUb0Jz{8CKX<8MAvYt}dQs*3Zs-;)&4NH_-N-|peXzE!;vgH}4a$I-cY
z4&P^S!=|6E^0mG}u-`PhmJ=cAo)h1lqa2qr&W-$*3F^!cWEam2Ij)gusZyQ1{*K*Y
z?p2LLW#av6QK;M)3h=tOLQUg->j3PU3m(Tn0Rm{{MNQ2zY5I@5J{|Ltl=F3QjLd-l
zaNS$cjcvIlD_QN|<D-gC*xU=yC=R-G&~kaHG)r&%_4tXch3Eb=HCz(Pm##}ve+shC
z$W799@8ttv@L4lLGsLI=_|fu}G}S+gL#VN&X>ERCVWC<^A((6M_wum<BTfAJ0`x0X
zh%subOo0`x=%r&6cY+|s+0?A$)O7FjE6Ze;t{PFx8jr%|^mB4@oZS5XfJ4k`muJZ>
zesxXiKYVL!*9)T=!S^As^el?#JrR)kS@bQB4{_xAptAhz(4jD~d(RO#sN~Ib<j{5F
z%}i6q_pyBJJ93`{r$!mwtf#vW@QJJen!b_v4ndi01)YX~w!)rTxEHN%o<r+-@wNoI
z#R8x!_QgCHW!@|}X9m7XML;I$aflG0y^PGv7K5)(X<la?_*Km?GXcJDDia3goW~Ph
zygZhSQ1choe;9urQOSFMD+wf->~pu7<ZmR`dM1^eM5ygu13zhQ!<LoPNn>Agy)y>i
z^5k&!xe*=DBERc;bMR3p<Nby3s}WZS3*(31G`-!>*~O23-$>Da#)|{f$=N=V<*FT}
z=3ZC9VT>d$F0g8~1sHb!l;7(VjR@mfyUt|U&CEK8ID#*Q*osR5Ov!Y>yeUym4o)5K
znpnTRe7rUL1`hfft@U?oYr{|9;PCQf+0nVVuV$3tS001S$64nQ?iemS>65v!d{cwY
zcrS>a<I)CMT)5+gZKdP`2--<ZAjIb;k-JGLqrumRnf7`ng29r>_%zvPO}oY9iuKj#
zXiF#+2-^ISEi{|=Xh<r<vJHmMXblFP3Aq!`IgUGjziP4*qs|?T0vt1f&?qSONazU=
zwPyUm(62B~R103%qo>q&s*72a!bQPwJq9ltAUQeoIq#vu$RmWJSxvs_nB$8pVC)0N
zuARqoXP0Q-F?D>WMG8Xz{*uJKxIg$~Pd-{nB&U=g?tL)}=r%*68;DAg`{`OEVDiQw
zZ!vGu>}HOrP`mp%yP&GkGttoG@NN~$wZD8^ZP&Rvj^4}vSsof+63_LD6uy+#L+X>z
zr`UZ0`;HZHtB9pDgws_>=2Ram<@FQyX(jUY!MKoL;i-!k3!s^@lA<;bi682sKX~%(
zVAdp4fVkq_6Xjpzvp%+$Lab2lkSm9WBsYu;lp!hs<heKA$m%MTgUMH?77@;@`s-JZ
z@$h7A&tHIM*A^aer$&Knt(<C+!H7$=84gG-g(;NOwI*rX_bK`cPwh?iU<%2aS!y*I
zWa<S3k2Wv21NW&9I8;lcv*Be8NAXX<7qSrYGGV!yaH(H(&o-O%X)I0-Bz`dI>e?HK
z@$sh7R8NFsX)IoGUM=Eu_`bJoU+N#9;uVXlTD1Yj5n|Yw<(b*(Y)Wea=8tY#CSUm4
z54Gu1wBDz(8Y>o@u`Ea}rnHkY<+_?~fM=`K46ybv6&<f6pa38|V)o8II;&o&d||x~
zRt09Lh@SZkGw6E><-fBZH2!tl`p$Cjp{bLpF||X>8tqpY=7$m2koI#HC+#Oc#)95V
zKxkp*G${xnL9449&7ci1?cwY37R+uABrKhge7Uu%3AcPQwp$^fdl6vNBcsefaV56s
zG^Jgqr@w1ZO#&CDFo4kJciw}sdy~^M^v~%i?H;zURfu5xxIDHv*pPpogL5H0gT$cV
zoW&ix$^1nSQ7WvsjlvB<75DG@&xn(xp>ecSwvB4_G62K$Zwu51yd;)C=IUA_pR4?H
zz;|(|+ZE<*i#)D!80;2x25qiEf%ZaO5*qt~wuGiLVou~RxQlvR#YS%hA3o#w4x)oO
z0ezQJGoh*jbR9!km*uZ~0Asd_9sYlgVeVEv1f5LbnHrT>Ctq>3zK{E61O}>WtLfY0
zS~Qdmy0?XnEM6Do5OSN82ki{f`9vu&Kj~PjYX-0|xcQUxJ>eK5y6;p!x5#Yr|Ix47
zFuB?>B|E9GwYbrydGTX~`Tt|;DjcF{zb?D5NQiVJAt~J;Qc8(*cSv`NfPyR`AuSTp
zh%_SIDW%fV-5{WJOMK4?yua@cV0Px28|R*L?x3p$7HZZH`HD7;36jBd>Jxqlj7k2u
z5hUz*+GpEP!Y+*=Dbj}zHNfrv?)xiN)W7JOhB5b+^+xb&!7JuZE`9Opi($5I@#Adf
z-snM@A&`%V-8Vo7xXhv4`$`KuHu`|A2#RjbyO@27*wtMWO*QWPS-586o3k#G5f`gh
zT@AI&0x$=DPIBB!4L<Gj2uaKA{xup#ixa=joED7uY(b#8X$9@19Dv1-!RI2xSw?`Q
zCL^1$d2&i@^2P`Kw@9OsThI*c#%Em$un&=|QIrk#9PUOTfviHq`Bc#@(n@Z-dTF}F
zo?ak0Aqu~YL28+<5QJe6xVxiq;h}93>H8DAWBQ6aVbgdxxpVYC)|;xRMnR)F>HW0Z
zfQ4RDTIaqjwpyRF^&rJ_#q)KUtn2FLrf?I>Gs(b@NH8XG2!^say6@8y=C4&Jw}b1D
zhGyFCA}uH)Im;j=*`p9u>A~@439EXRgwiVh{zw&cIY{U&F!NkN3zjLn^Y?d9L&K?$
zSdv=&=TjGC@q3;-^{PGh-RR$Ta1x|nU7d+O>VdgM;aVx)ef%6{o2Lb<HK$8t6C9fX
z0#q~FcS9lF#7uDwOmS}7b{FCi!D@4JR6+f=ZnJ`aOZ-bvG+*cjQk4?%YYuR0bYUTd
z7)!7_wDup+(*6Hmpo!vq{kZT~Il&3{l7@+p?5d#qU(4qP19unRBk?c8&UBAIsy1T$
zP%7LbZU1w5V8PqAII8sA@O~GMO!}*EhhN%R4G$#71c)FGNKc+yhm8qhB=tE)Gm*6_
z!=e8kBR!xwpkq<FDfq?K9KK8r*6rO#W@ex8^ph8TP%zAXL^iV*7+YG(5Qo6du)90!
zks)|8=7MaP@4I!Np%c4_Q6^Y55b8Jg;I)I~3j+l*cv7Y$7}wWcBC;~<#YEmXh<`;k
zzIcm5H~7KdGxM|{d@nZ6tnYL~?CLSRc$mT-CrDTpLawHACR%JkayT52h})t_&Z9(0
zZqO;D;$9A$eeWGP8);hfdt4}2FBJ}biWY2HO<b80d3<LlHbHUZL0i>jD}Pvk2Sv1k
z4#b&au7h%8&Uh>RcN=PgLjB^x??0}nx$o%{nTykVgx~jS{21E&O&p3OfJ9f#%YRXi
zE@n?g`-m>^`n@WPJNQ2T{*$J7gZYy}qV#4SK`0dwWnhF{-Q3sd(6>F`LoV=07Wpy4
z-}2D~wL$gR1B{OYqpuFeYCcz!?HB}%p9UF)Fu|nH`2GKXVMSk$J3G{kQp~A~G7oY}
zWPfXAd>P<Q=i6+owv0Im7qYG#(kZD~MV*0B@4&Wcek0q+=Y=1oJ*JQ7cG4weiYefQ
zPHa0f+Kxt&BaL7{RXQ(2Op(U_g*tel%2mx#fudHb6B5(1y3y0&IRgDIkM!y<_h;TR
zQP>nUA9t7zq(2dH4Jz@WfO>uB=ZL-}eDa<eH{y;cT1j-5MGZI+)~Zl4&#iWE-sCkq
zbAmfLH;Lrniz>BYT3>fTHU9ARIZEx9-)}f@jg}b9&zfK^SzRFq)BeVemP+{Ou(pRt
zZFNXvOxuyo`HEdCg0?h%+BD5rNG#iJ{r1FFrr%EIHKpgB{tFWV9GObCtzwjjox97)
z(tIWHlm-!`b(VPyRJ3&56(CR+LXh6ES9r8!4YJ1Pa!ideQKOuWtc8yd>f*IxfXLSN
zWekj%7J_W_qUe#nX}ym~d~h03a@6Jv1loh<^xQe!tfK_^p)8_;2RegPw=M*8Yp3=T
zl`q0hN-8&)$HvFkDkPJJ__oB6K$KT~pGsEuhH7A{w-j0o4#y`1axb95V?&oWS3@?G
z9JT-dPe_PQy%VWxmsjuBdla#qA8~THsK<NYNa?1}mBbBg?6FLLdhz3jyhW5wn;ct;
zMJ>rE-8j;C@wbxSo%=1RsH#FR*U2wa$&obY8vY*NiDgiikTeS*R1tiCm7U^{8kCnq
z`_e%_{w!g9IjwFIIlKFrxYA#cAxh!3@5k}C#-5$@yGmxor1dKm@anj6a5Qay`FB6{
zDcr_{RYQzvl1X0dPjGpB`DHDIawqHNWwJw@3x3Ieu?}pa*AvcXqSP@{lQz}~Y6s;i
zmpg{kEN;0|(`2HE6g4l-yn~*z+nQ7ODPKeZ`K322A}JSsCX~%mL2eQ2;`&Pbcia+l
zb>$C=YxgkdoaOJyc=WVWTqQtWO?^dzQ@GzSSHl_sTXxYza$3EoU+o~-Zjs(_QB-Nj
zFo!BJK3SyN3)Q<l9UxAK%39y`3c79-65{^vAo5^%j8DR1Q{wIkIO3kiA4-hf;!T>x
z5V)+r&nK`bg^#n9GB)KZQkwH!ksQRJGkif?oFBtXE`^Y$K>+{jV?>;wG4_sp=4`}h
z^HKg^&IG|dkpG(Xh2-`ujy38=kt;b$+C#n0&Q$J(W-YQNzCT3dlu(iK$xpw&!p?-x
zi?L}5Jo$>^XQ^U>R#a{19Cj<1PRPw(Wx2QuQgjP%=<II#L#~W?GB#Uph()Ll^|m?=
zgI$s&<p&sEhf=V?dF3AR+koCLkBu@r-cO)i;;}zd5B!<moE+B}C_F9o_5eiOo42+~
zUs{i&LWm+(IB&A$6A@EN0l`W|BJ!<QxAG)57!1wK=xW)IIzq^Eo~y;^Vy+oxk_%~C
ze;L{5{h)Oe+u*dcuA;Eg`zed?m+ohtTJ;S&du4ygMR0jc5tBuwF|XGJZ!#Z*-Nf5{
z7<cwJIH>wj%(Be)Ti3Zq1_hMnMRU++ygV|yx(@RpH(r3#AyxHSv$f(fN3?|pZEA8)
z6Z=dD`;xd^2CaHVTcCx+x$nO~L4(qz`Ub}Zp*a7s?!@!4upAgFuO0?&55sGdgJ=CA
z{-_-HxKcq<qAW;%DllV1#)`?*K3nMXn%NMmwnWnR0#4f<67hrY71T5B?G|>BowFtn
zY`6y%Qj#Z#M$SH#e0M8tt07Dz+I#m{NqT5*&i~1M&YzxwQ%|d(kp9FeIsI}sKqUT%
z?4zb0p$@a9EUVqaS<S%>ml;G|-|yk6Eex0Xz(}nK#bJaNe_#X!Yp?#}%e1<4o(Z;1
ztClBsGH$ZxDdY&Rh-6+^{zp_`$N}>{;nbP%_SrOM>yTaOWB-QHdyav^l?l4>u0;<j
zi14cvM$GM5e+c`AP%bKO1=X%#nK*)Y@e4I>2feG-H4sMoAmHZs^Zqs6<-2jsT#cFP
zG+4x|SD3-5b@;Pci!h$DuKmuP(22oyiTeI`J!4R|AAGIwm*-*O#*Yp_Vj}fePAmUD
zcFXzy*SwF?)^*V)ciGl;IaY{IQu&Oo(h#kL9ZjZ_IjW6|>u`TIgf2ohmo8eo3ueFF
z)nJ6cIH1{FL6^eeefu~8&==C(6PMrC^=;{LzLU6VIK`Uc6nl&jfAKpnN_04=4GUL(
zZ(!^w@q3~KKE!&osJgj}B49j3FBAW4#i0>01DCr@d)Gc~#27^RrlFx>;C^?08aa}M
zGsID>Q7Q|4*kdyKgTrsd>+=0HUFnaZm0C%x`aH?4=8iOh`5XmPE1DR%V1|j?>N2;K
zfZ<pj$7YK)gVC9Fee7lJLb%8XjaIGxCr$}CxU6wV5u-!$<9PGwZi@EJ|AK->`TTEw
z!pw8#$k*?ndp;(?t9g^GHj$X_98W1e%wOQ5tyhwr@T@QfOG4QjH>(eRS4s|$NEbjs
zg_1bG=Y^a8V51WY$+aAbRkW0#?68~Pm7q@T8ci90h9AdSYOI<+Nv1BT$Pg4o^({~;
z%E<F^O)X&`9G=&xyzjM+9d*BU=d0o@AAVQFXHLWU!ecS0JxitZ)`Uo&Ng!y!-OYFg
zw{Bs#9~vD)#d*fZQm&%II2P^^J@G@aE1JbXv0%Yzy9(BJUuL14mVXVVO7}EE1o=e^
zmmze`pPX}HTyM4iwJamDX79U8t#tj=QkAWMXFLYrShDq`4xS(FwH@RL{QqOoW(F`X
zC{KYQ!=i;OE^tl|A2#EI@n++9hsW+pNC@p%4+SJu&mm%@>hJ52V?SnmTgisB(4K1O
zf@Fff{~;N1v)_*zh%u_Jwg<_N@PdGCj(LkP6Rn%FRfzjbx#litWt9vlor&NhR#o1=
zhz0w@aDUt6i`Pt<bACC{SF0;CqJSd%c@_WtNhw6CZ#)Y(c#_2WxrI=k1B6Mo-u#b6
zmhI%pZtz!6Z)yl1)Z8`R*GEo_a?cFwBh0i8;1XJ`NJNk}(gQ#e2}&)E_wIhcJ8|QU
zH#oN^IaU3h+|DrfeZc0e!sQ5Ki%+-O1VzOE;nD*CZ3D5d|Nr7y&<|=B9f|BL(cI1$
zauQC-Z=mj}v%X1bj9V|u`?vI3Plwn1H3@aU;f#CG7}fjulErLL-{b!3(O$OT1A960
zJK`{QQngJI^qvGX`dWoaKIE>*opwQss1lYdDBFAwvh%S#>n>5I@yZq(S>K}(%rNW^
z!4)~9I#j{97qrw7Py!ifsVr^(y>!0U4L-7o#$g|2eTClGnwGAjD6BYyegdZ+_%eQZ
zM$q~E6DjRj>`f_=L+Pjvf1GK8#YXyr3lCk`=Lm{rDMZW5s{S$f_FiQ3>E@$vF`@#G
z=y0~hIH~sTpgh3|p($tHHkhCQjnrRrP)pbm-1j3xZx^=UOOjHR>lmj_6CdPGC7Cjg
z^1|mV{SIC5k3ELBGkg}WdurcbpowkmPsTfO@{qXSLgkgeW?$(WcteAT;+=;bwEPP7
z6rd5@8|pgZP;paLz<*UneuL=a&<MH=2{0#nWxRrp<8H5#guno%UtmXi4Y|i=*Fiv9
zoau<xCI=ZW#K*~T)kxLGT0oQIU&JWfyCd0n+cO-~Sb7<}M%;~|p21(`<pm)P<KZ_a
z;R^f7py1zJR1n3kBjg%X+7t$Tl;h9E9?&=XRH44G)g%~;gMS0|vS{63LhFtmICx$b
z>KO?246K=`3gqJg|J(JF6*FoEhcput#}}E`eV|z%veV*|J<3batNU##<2Oep{5Vh}
z8I4*I)i_2m-SYv*?ZQ!`S~zM%`6>A0ovr7{MiB9Mo0R?vT}uh_1YKbPB>DFXNlpp@
zCIZ(jkr0Z$K;PUSDC%^7(@u)uPOPr+mgC=k4yW{?XIOVR>`TkX27PW(AxF(ISD&mZ
zRQDc6QR7KiX{5iH*G*V>pi;2Lk_d{m{L*H1Ii}*Qu<8H5UoyzfpIkwX>6V$6L{18p
zXmJ1?blL1ejW*AjRU`v(p>mTPUn3v9#g%~i>Z)zbuO;Q+Nt&RsVJ!7T-D;V!tw^X{
zc;JfMEV-Mgw!Y9;<&!v;H2uF;kp8?#HDSVx8`L5Pd!~qZ@ws0WrrU-CY9QfuBE`!}
z6}WOQko=xdb9%Ktv8%zk2L_}5kMQbOzn6+Lr+E3F?SSBb{`{-7rSe+e9RFo0=1p*@
zVg&D{oa-Ln(_1f84K!!PL}@cXQds5dq>3!k=1i0@!F!S>Eb`)DvZE7Bbi$9X2kGE8
z99_b(pSH*@pT1`d?-O<<ks~oE8@+ZS?OCbf&S0#&8G@-R#PjL$I19#~6ZB|GuJ?yo
zW;dsHy&CZOL(L;o^0x}bgAC3)+L@^psqFqz!rG7PEd$JgKPk`#mT$xDP9L*^3P+#N
z;|MSw3yfyiHzU5OdP_JsRqhckq#>tL>pyT)xfBS3gTurZA1F94u3_QJ6zl0j|1eiP
z`l2hcu-@V0=qEmHjkW#jz!W@tC?%||FZ$Ti<ZmU2K>6y&7F#L)Z-R)E`eO`kjyy`P
zxwn^ny&cZhB@l0m(ZTl!ZWNXPH<OOnUvn`rjWp(wF1EFUN{nE4R)$WZn<@KBx09KK
zO)~jwI=&nS+0v5lIEVE6uYD7`$oQL^Y^i}Ahv!XwosFQnpr;7;n%<sUMxJE&m^ps(
zyOcMS)awOuhaD-S0;lvqvUtgFDH_VWXE*oQR`YSeONIaD@rP*URPwn3c`4fBbH=S6
z_$l5p)&GV<-c!_M-JZhsnYp~*=oyCA^Nn%)>f>4#VU`@VQ1OXR*2Ru<4i%p=CxojZ
zIGsNwB_-4M6Lyc!mdk92qeHH%P#BYPj+1?uD^)mP0K&B!6>KjEC<9M<lDB{V;YnJ_
zi2p9<r9}}s$<{CTfWJT@SzX2SsXZuxUo9RunM|SwceX`fi-fhI<4v-oV|909!3BwA
z>z_#0D+l~nH4f0#zZ;PbCMvElz_H>iz7Lou)J%?|@@zOhef8=U1xYnAV14?HoH4ZM
z6!UO$G>S>pj8ojHcg?@qb}uLtCXypLi>EZW-T4#$oI5(^zdTXaO}Fu726=)f03itU
zIiJU}QTQCHlqPmxxJ)!B=@-|XgV%HSiARby*JFGW%DvxKJQFm`g!0s9e>^=J=1pwi
zwsu9PzO$+z=GgH~Av0D7tM~CuGn9hH?rJpeXRFafV4A5Z8n<<*0DK?ng1_#;uu7G}
zIdQ;vS1VWEI)2kgdJnGoL%u^tow51Ix~+k33MshNs#nwpg+iC4itg1-W*DnMc0TtJ
z^o0bk;`C*El34GGQ5rnLzqF8M)~VEO$Lv15GX~qC;7MABF1&xcyU4QFOVEYRC-SrG
zx#?|tLG3}lZz-V6E#Oe%3E!T4Jx+5Z#3>46!cj;E{Z55Rj;8QoYgx3XGx)u1%%Ss)
zI}E&(U4syL#<E(=Q25C4!3BN6A}12gkUih7Ww#Or3rv^Y${!Rg8^BGBe!PJWV5-#a
z1&`ogJM33k?XgANP85Kz()<hh9Up+t{FFJ3Z1j8gXy-&b@vG9Nxr8t`0I$)F1DFzI
z39{1!E<c0MxM(%iSQ4X=#Q>mOupt^*dBIR1r6z{_I2RU+Qeh=GMv$!vHK;&nYYjS~
zc`R`};JMO^xN7)Q8(tNS`8nOgAkh$?+8s-O;=NxmNuC$;=^}o9JC^oWNq&`zj<x`d
z$v6W^?1>JVWlM4KHs{cX5hRY8y<dEo#}_=G)O+7)kG*KDcy?Rt_3D>8POE90)`ujx
z%`G#KoFJ;zOygN?F9#$q<kiL1NT!FC_u4*u1al_b3tIDYx$Vj7JV5JKVKLA329P_8
z?#6RKq_dG=&l#!t31w;kEmlI7bOr@jwPS%+ZaMAADo>kxa3rliHnobMq|g`jnO(|y
zFZd}B+4qO&nFX50uhQ7Qy<-lw*(-B1nL;}5z?eGQW6-yJHTE)GPz?5*h1zgvxX6V3
zdEw8CB*)FhlT|j4ZhMR!6RLlypN$dh=w~627J}i~l_V5!&Pw31zmB`!XBQA0jD|_;
zG$sbU_<W`;s`S85`@XWhD%(t~Nmhnt5Qjq*5`7~}(eS=`AE?x`)GMDmOO1Szo11|i
zM9`+hP8-D`VHiWeu$AyugK;EbC_V*I3D0PwSf6nhuGimw@N<d!Z8vmU>+oxIfsA>o
z)a86T;G$?*?MBe|^@nc-6;V`zvBy@``0=81uF<C=23M_n*5Fhn9$by*pW1|+?qHBe
zi+j<I);^Z=(Au&Y+0#J`C#@gYJqS;KaB8vwW+qDdAJb7f$Q|5+#D9WvJXOJ4`KFBM
zE1<iw&@JYe_ORKTr_T3ovl>tRJh_wL_(enjsd0X>ZWKH84hPq!5;jW?ybY?OX5J!r
z#8o1?K{fjPA0RP%tUrCcg&<VC=&2p@QU|{hA08eKMa#~qd648Q6}@q%n*Gk}&-L}K
z?S66JYX@zenyH0JA7^5uq#cy{AN+5W&LJHvQ*Cc+Alq2E^W@SdU2kyk?<0^<u!4Af
zSb?>*(th4FCScmw0`dCd_;(xw!F-}a;g1Y{bP?lu?$jL-o0sIo;=Vs*>?q#!tX45`
z#x&+^+lwM=>}rj;M{{c(E%o3JrRo~3=#UtOLx-Ebyd^ap1fNP|c3D7e7KqE(D|Ha`
zTzt<=^j20`ya4<c6Z%f8(KO`>aYEUrfYV_WVqIgEWkm(UbQnD~Kkd10_v7|@!Z3|$
zzv0wIPt?2dFI1eQy%mQ`y<GRdOlqaI-`Ca{mgU>oJ(q)7E~(q#;B0-+o%Vb~rmA9o
z2N9g5f`4o056d3r>kBeSLD;~5Ur|Mi5n&XcI^{6mAQr@V<ul1>{-gsa0=MrWNDY)%
zU!*{nxvg4KYA!7)oj$W4=y7%$Qi{J}$Nw50ZSkm%bt4e}j9ZCJ9!m<hY4!+f>T^a|
ztU@dZ$!&JAB0Mk`X}pjUB!@kxrfxLH=Q!O^X`L)2KL4OwD>ysq_QEuHRpB4Kl)yqA
z0VCK##%U@T`$P=72eDiPdyHtY@4dIgE0p9eXd!rX+{(j0<A2zyyi{Y8EUzl-T*K|e
zouz3c`l%r-<ABumnBCA=?O8o<6)Q_)esUC)pWw+tg5Y}GWg^V>TVng~2G`>4Z4;eU
zV?d{hH$jot4<tfediM3wu~_PM_E7;bVV~eDnr+x`LHTr*IV;k{P93I{U5s0gkv%<Q
ziCOx@>sCI-k9Tx1@LOL!_WF{XQvT4ObNeedGeH+}*>--$0x0pr(8WrdiLA$^HO=wz
zy*Ile2+&_j)Q{>>w1+((fQDDlw4kmWy{gZl@9Cuh`(PyibJlmr$-i5!2gl$hj@*4K
z^Kv|lvG~*ZV}ib&%pDAY3={BsesrnCczswUprvP{2gjd<yHoiCB0`>=`q7uq#E&`c
zTAy5T{>G9J=b6*D5ppyR#O5)Y#yinj2^E%=<&Ut46etYVW`Fb<Ysl#pc`!<yILGeL
z{Pr*RB~>_pstGfG1h6>2Z;%Mx1(}-YKw-7Yc&S6BQX9Wl7Se+roLNyj`YZc*uRJ<B
z+NvfU3o&20TF55=B0UJM<nO!9JSchh`!6QU8CmOd69$C@0vWG6%`>Uw>LXVCNwawI
zRA&|nXc5EdNIq4ajaH!lv|F@fNNrCFX!*xKRLh3DKo^#oX_JF8R7wJWD3IAR?93b4
zK@mj*0g+ZPg6rb=kMtvf*6`us`}0K{r^Gcsz-SD7$ACDSNX^{#EDUbWXcY)+i^HS|
z;7ovfcu5OOw;omiL}*gO48{>ZK1O8E9&oJ^G&-gC6oW~MkMfe~?HzcZpM$RzO<C*-
zCxBrkUBP$ajg86E7}*JV!*(5|=?BOx5nt4u1J{)l>eWY2WEc+^^A~QnhY&3ABJrD|
z^Rh2T%qvQSX_SWyBMy!!%}t_YaWsX2yObPcZ4{pdQMWxGIViWvQu7N^@P#+<g?9Kq
z+LIMGVelt0;htu(8B=H5J*UIN2jxanA)=aS!JTStpS$hiFez$Y5`Yq2DvTs!qndtt
zq>*VT-*fX!LTrEDstG9VC4&0!5q(KE?csWs<XTLQRxB3Pq{^@hCn<&%pk5vHR_}fz
zhCZ!!!NtYR<*y+!eAD=jGr#09As8aNgtouw*=nA*blu7o%Z%ou5!CdDo{fii4*)<J
z8s3?lU46Qgh|1xfEe|<CdHPxlT9&8~<iQm^fgmrY&V^6v^CpM_Pn5+apo>#7na>7L
z$$n^`=k4OMZHzEII|~pL-RGqEeYX(PY;Hgpy*VK?O~j4g?oY$_g!WDqKJacJ`CM6d
zQX9NGLIa@$$9n0yzWE7DT$G^fYS@<kqdvar(QDL+%ZEXkiN7UtyAEMO@Z03lcjYT$
zW;VNCaT))i{zF&zRbJpZ_T$a{8jXYxFH{#~ktTFl^0)~(JP4C4?Ti5FOdVM8xL%=t
z=$8wC$2?z1F_e+uY9)arf4EigWpLfJf09}{q%7AWFmv&f=9~*8k63$~0qr}dx^w3_
z%IYcV$P4Uj{9Py>mT%1+E+4*SglIeFwxi|9B*SS1o;T?Vfh=|6YdSwBBJ9)}UU2J8
zzE52P*Fz`1?Z~Un)7Nh3=|u>}upp1a_XyYwuYp>>%kHS0(TiewbPo*LKCDo$FYnyq
zrT1J6NwmK-xjniq`f`50J)yxpqJ=O_>!P=j=G%Mjm>rDBOhiRMdVX|bAlT!w-2NES
ziphKbk8cYWYD;ggq8gEDm11)(PfOyD58qYc&~;oKM+0I<Bg+_RIEQsbZ;3|)RS76B
z8-65Syi`(LD=>r(0Xji{Lc33<4Y)Mib$(N-+;A*{7!!7zt-sK2FxQcy{BYigHPK`7
zIcV=V?t8_EgW}XeV7#%Pu9*y!uehuD_4Ze1HAeCno#n$aCGJ?SC<<@n$6D@#$um8~
zhsV>8C*KCPQjr?!Qqz^oFQ!M|fdwa7I=Xy~<2|xpHk{~Wh%u($Tv3fFErdO|6m;pc
zt(mGFe*dAzML`b-1A{mu97Enw2*!t@Icjyd{`BFQoFKD8ZeV}0vKxJNh8_RW6nyLF
zO22Z)`cn=4SIZrms#>bu(l31Pr{b&BIkAne4oskc!t<=1|Gb`*Rv>(2LYLbJ<H^0b
zGgI2LC2sw_S>9kVLGnIpKfOK&xrMLP;5C(?cm$T0Z%n&+x>Gd0ems$m`j$UqM{tNk
zbyS>C&d4VGd&SQ0Y1cJmo{u&#X+doNSLmW6cfEZ<`n1y5EgUn;Pd_lIAm+i(gzG~W
zB14@WOrN_>Zj{(|4%ka!*Hn|lLkaq8ns+1QlzH`VQ?&BrJwqc|+Y3d?Vn4_Sm6hlB
zL(kXu2cDV#h#h*Na_h`%wcZ8ag&_$Oflch0D@#2oZR7w|$yFG9>3fpkPAzV4+wR3g
zT_8RT)u49pbSrj`a-+=hcQ+cxlqsUrc&Xbf13Hp;`lEqUk}Xl`Td`w}0dhwinVv|O
zI91Q-LFan|vtQ8>N?t^|mcTRK_@W4@I|NbkHDIZiSZ9GUhnn;KVYbO|2wygODKY5n
z+Y%#RReZF6?Ti&5Smx=z7)#}iIU#d&0%cvm&eI-ZjlD5LkGU^WvAKdTQwCmZ3WsHd
zlldUMTu=k@3thp))&QhPDDRA0e|ebYkhP}WCE*;Z_-!o|ceE2z6FOheS)W-4Nj-^X
zs&VK_t#w7!q%g{xJk=(FF;S;AZ%a!IRDVkH!Y5&JiPUItKK_A=tifuZ*BL}9jn_%{
z6Lr|S988UmydcyOhZn19O;djfN7H8dt=m~y7$7@V1s*=A<X}RnM?FQo)7&_F*f}0~
zmnq%N_x5)lapA>8E-BQ{@w+`|v)*2}a&(G3b}rr&ZJ0TO@Ysh+m7c>1@5Vo+8iV7;
zQy2t(sPo3suHmKsvRO|7p!hq6ggYO-FtA(CiI1FCPmHMcx1`Q5n=Ve4dekJPrPtG+
z#u<l;XL%9MjrujYek9+$11BlUSCp$;0OZ_=z9WSkWEeBp5f>OE!s<zPb49i8<LUc2
z&`LW}vPdy?02Tf=Lvcx`P;gxq5G<}iqn!Z`awO%dC>d5LKj(Y#gyX2oT?lY{_`mAg
zTI>z2t3Eoq^?HX!4A8I2l&mAdkkl2tGGb7SopusOp+GpDu4f5rxSvh~0n__2e-e5L
zkIj3ARI!7^S*VY2t;zd$I*j1pqpxU8A|-;7xV`h7qg=s8X0dV|wDFRsubzJy==nOZ
ze)sUC%M#cYIM*dEE@w+Q8i$*LI=@iuy;RxynI~E{wdQInaYQ}5n)lofWagtO>ukB9
zy~lP0{RPeGr^ul6s5Qh9+ZwDoT!y^}eMna1KqL>r&}NLfZX&hR6nE+87B(V4!m70b
zCJwZ2n;2Q5u=4XLz^Z#}uR}K9I__Mq`Zpf)U(RpH;3Vza5k%>V3$NGKUB1X`wGpKR
zkFEU`aP)H;zgT)W*fG<^<)IGr`alk=e&&pda$<axB@*~K?G4Z^;?Pmt^!(3A_jLFZ
zGA{^8N?!|B8Z1#Q#p&ZML^l|3Rm9!aFzb#F=J41*<=SkjrgEFS@Q=s-cyS37giO)>
zP@g_&2tBL~vj`hoG=1rPVnQg$TvoO3D&{l}GA5bu8I-3htiJG(3#VfDem!f3(Y;^8
zw1Ryvf;=QR|Ixo{Fd?l!!4AW92@@&jCb&4Atf7l><K4tgVev?eL3jN<!um87yn=m>
z*9V$7rb27Yjf7(^7bqzkU!v_Oh>^pF?oq$CP>dAJh<mOcb4vi}Biozfb`2AC(qUE{
z{0z7{bb&v&xrilNNY*Cru?>H3^7#dtV6}4D36HZICS7nmQqAD<<B0MHQTL^!&7P!E
zhTM%o%*B_o`pJqkirF5An<qwn4Wdot2NbMEHd(y~J%Ba`bD?Sh@hb3xSTz)<3_FLB
z8S8<mIgvTEa5;2xhpOTA{?@HmJ9V=421Z`}#8o?c5{-ptx7kaYPgE>{E>Wkz6Veq;
zM*(h^>n-undnzp*Jbly*xGqZDt#|Z)h(0=LQc}^4ECHDt%r}eQlNfDu?yY1z^93a*
zLw}Q-X~zKl{c({XuwGd281S2@&5hoQci!2QqNsaK5l^YVQdYuT%YWTIlvSiB<dy+*
zpyFe>^TMfXM3KUpp&iq!T{_dF#c-(V$j8V3vQPR`wRf8PSKUfciY!rI{MHC+XTP>}
zx$ZzxXJl$J5Nz2KpLF^4@e~yxYu9Z-YYo{}aG}!Zh4GVZPAskFA^ZCXNpYQ^D173L
zZRU_WJx(7@D(hN3hIcr!4~6)*H-C;#dOc_EQiqnVJ^DNPCp2z3DM=JAVoI=`Fi4=4
zrk@!BgRbcN14Qm|wjw(;Ewy0&%I9vz(Wu;UTacG?8znhxpWVs0pK|7$%s#pXf`cU~
zOr;N4*@jEjVo_vtUgi-T(<y1vT$914ggzt{IzyBTFVy)l5}2tY2y8SOJ%@rWe^u=#
zk+uGOy?}k#tY%xXv)Y5>j!_KOp@1ILZM{}-)+UtX+}4p+d~&9lqLC&4AY87-w0bbg
zhY|mh?bYteT2tTB>?@kafy<2--aD6KI}(lDn5{bMEXA2ynr4b0bSh59?{PUGNvaXc
z3<lHMj4`F(@=dmGY6VIX;br<q!n!VO_Dm^p^4A6Vv9PjdsW9&4NFg6RFQoFava)9k
z&3~0LwB1bj;;4*5s;Fisc!@I=*!jH?o-~ibw>>VtSAwd;C+&Mol#lW>(`|<2jy{V1
z3dKJ0%KJ?Jp28HzH(bOold{M3uMg0kB<skEgd3rKH9a2T%Hn&_g`OOiha56MHsLc0
zO@?hJF+Fgrpn3>YvR`U-#OoKzdTt!JFZbrLpm*5X01N4rs@o!G|7`MvDYopBAJ4jD
zK9ET=QJ;oAz3~F9=8K-Pgb@P#l#h>N6hPR0*08=?YW^71zigkK84jz8^v`Ug0j_G|
zc)rgR{pVHkOXy1WDVD}3Ev=R|$PPX;lfy1>ab|Y~*w-RvDqd1sfBlpnh})+cIVt2D
zS;kcU^bbpwRA1sWVWL9XV6bCRip5R?@2S3lrWC{toz=Ptr``1|x9F2yG8Q8Lo7a*o
z`<?IiomA|&eP8=bkbB|H*S)>)pevi3{aUoGc=&fsAA$5p{+z~SUl`+bzF-rrCAhe?
zvKP$$;fs=U;t#;)01jz(zWqSg!VcCLpg7yrz0Q=50lCzC&6Jjt%<Q5fhX<ap5)Xh7
ziKAGN;Zo6VfABB(KFKDMZ8Z2J$cC~`GB>yferZzLt<8pNM|J4Pc@<pH(6;`sHW=9S
zV;B%r>})ecctN#e7@tv;0<Z$;i;VA`iOz#wT&cACMocW9kYIMq2z^4GO}Rb$L9V?E
zc&mER4NZR}nwouW^cYtpAThAx&|b6r%jZ*<e;@7Z4EB|_P-J;RoV$EFfBYG!cxgE-
zvf;?Sxd)7t0>xrf=$yp8VHcqjsOe_Ccot#CqrafYBX_=n=>uH?@X6wu5NDafYM!`1
zm%vAa^T%dxeC}+gzZ5R#Y#HW4nz4*$m-uSceA;QZ<9^ag^Y>Wd;;O1nlF_vOVk_ij
z#&~OK=l#+2^cKPG&PN|CIA4qbq&1M?^3ar4Tjv~bW1N?BP?k(5K_Kz?I%3LObE8*a
z4$}=@qJgPqV!8O>F<PKK$@kCzXd?c%_xET=+>L_hB0~7$>vZvmsxn{p9xRX#50_G7
zEYUcurp}2HRbY;)8uOdy9OLc401OU1-XcpXN6_H`Mxi=CQTepX?>21)^wnmd79=i%
z3F0ZH{4Pmkt=N#tOI?k=PAs@pSJ~PbQP`B=)8WvLB_^C0xDlpN@M=5|921J|@t{gD
z9pZpYJ{oG#GbMZO`|I-d4g5Q$d}(tTV{X<}hH~Yy1_-W;ChZ(2G6MKVwpS;`oL5f_
zl53rX)=A|4P5dqxVUEH?SZ{}7TrqmuS5U>v=_j2W@TKi3Gi%<MeeEE^X&P(e5CmEz
zm}jLkb=W=5=fe+LNFEJC7o16V#=>Uwj^my7b*G7CzT6#rmG^d}s$x{yOew}-;6VlV
z2M_Ewg6mrV3#nYz|2>;Ax_sqKO!ZaND(m)&ECL@J1L+6UN99|wPqd&QPjpbzbRxO*
zI^`I<pAbapAl!0eW3(iIxQ_E=SPU?7<;KCUQsPo<K`kt|Zy)((Fe%8`Sbs_Ib_8>B
zVIpP&Ro~w8DgUW!mZNBW%XvKZ#p!J5UytqGM?-q&?Uys&UX0j6nc%DmIMte&lFnC(
z!Mjb=>|Zku!~9?zLGxF&IU8DEA^Y<6&hPS0eU7O)T#cWL`P3h)mwjqS33{6T%<4bg
zdDLTTh#8FSU^jwU{$+|t#P&s%Xw+NU;D;HTB27nPvrDt>DY=e&TMK_WtC)L}^AI!K
zv7B+h9%psD6Mg4RK&=ev%1`lsAV!Dr(kKgeMruzvK++^)pH%>n)E_v2z&{YA0nG~t
z#D!awC_A^Sa3=v~&II}xZ5+F258-ZH=Tux7ePqFNac7e@1n^z#)4O~fbJ<sQx{&sd
z`zU9<Hp-2-pubz~1tImRKnc|Z&+$C=?6Il%8Vqm-K*+!X?mRYcC+RReoIVArvqc=f
z=l7@$$5v*4VlVH$AC{Ghi=~-yrJZqawMe;=!_xT;i%7_bPLFtweY{^$9e7>L_N_E|
zTz(ZoivTn~Q@RNx4HbD_BRk|RkGd!yC=EPDo+f<RzZ0_0o;pcmB!DkW{$o=|yH$QW
zL^MwmAI<SkBBwQZ@mrGo%~uycgHT`KaK6OvvwYb1qO+{3FHG^7+qns{xE)GvhWFVS
z?t;7Ke*9(#_Nl%tUm=bwK<IWfoW+Jdyd10Mp?Mk)84*>tr__{%(|c5Yn4JVnhB!}R
zc=;;#r-DDB$KXj?_<|XtWa$_82g_$3H853r**EqL0<<Bfcr`gcCC{eg4~@m6A{ksX
zT;Cx)0D#0IlvA;j7WLfYUDxz>e%0uq^u4FaaT<U?Tp;8SbiKhxyy$+v8%WLeDPKDR
z6k}<&i+*CC?J^bd9%!b4kKbOTqK%@8Kut(hj=-+lvVawtk%}nt@d30_ZwePc@WP$g
z3j0$a0;S7ZW6Q?ibn=V7-dmc*KDn$nxLg@b@;E*PKX^=Ir0RqUg#YJk%`!-hhK3GE
zPRQb;V*4*y*?l^^(0<qcaB}3VTGn+q_2iLuAhYix5Ue6ZXfu+<N4mjB7RBdH%^&nE
z2cF4VzSE{LUNfa%kho~o!oKv*yqG5T5sBfLsqVu*(PTvnLL^Ku19hkL=Me<Hv4_P|
z>4jL=Sy*`+d}xY*tyHCkmezFrs(ySB%ivI8FWN--`qgpW={r+tXAF|_`a?%Z2o_Qa
zZnMP)@elf0xcwbs9W4t<FL$0@TpCp~8a5t{@|<EDiUbHc{3C6UU`vD~o4hCh<8(a?
z>G%l5#R<R9LM5m%?()N9+}sA4XzD+-Ag|eugWs}^{6zrXvRsjSw6ykIBCF-f)M`KE
zRr)UWCNC4f|K~tjP(cEGQd`Npu7~UwfBnxz&h`{u4+WjYW1m1(y0jm>MbJcMP{4_{
zGz1iw?d;<OlOqjiI``yNBvjj%QjWy&{gQ8<nW1c%hDIlKUX0tBdyinXM;N(J*u7S?
zYZOnLXz0&2VcEMyW)+Z>W;xWgG<GeAzr-h5=7zGjryOX;X&iu3LpBQtBa%8dKaE@p
zdB_74GJ?;MJDa9UXgvuG7{b8A+}r4Y(`jFlXG9H1J%q2~9plrY3p4u!n#iUK8qpj?
zZiz#5V8;u;zj%UI(PMUA6He0LSy)JX&tDB;|M+v+vDtFWZhr^iDrtiP6HW7FvsXwa
zcQOSObfm99ICTja(dY&)Zxve`gMc?dYx(R%i2e#*GRf62OWk%;qpteTTTr9a>E|@R
z!e~>13YZx)8EC;rsdn5tGe;xCpQeAPWqcVX(Ll9s!(gPxFkz`6_WSZYolR|S>e}J<
z9o8X08Hy^kE=#G^1wlm60r2~^6l2j=)Ms}aSVDL1E||LZ9Uv6GUgklE2M>Lw-#pp~
zw5mcvHcO>8gi=tH6U$P>kfiHw$So~8j*xRh{~0lIm5kqYdH|6&;uNp!nKVeYKn}xg
zdc*y8X-EZHaHd=vE`uFl<`^O622+sLEq!Gr)$S!R=<?ose;*dH`~)WI-cMfyroXq%
z{J!>p_6Gun<l<!tKo~t{U?wHOS;`D&Nz_?46c_&6RMYtq(c6wHY(6&w+1YpWj0nfl
zyDU$sxlUT^dH&Bw-XVE{nbKubfP}b9X!&jEIucgUyB$RFWB0VU9iw_*Ap#n@_19hu
z@F4vsrDejO(E!thFdPp)tqttj1E#{_omGXv0zFJvpREY-vP=BH<NW;Z&P&+?WBYp+
z!%MA_*B2ha=ynt#Ha|IP_8|cW`zK$>YZ>ij;kx~wijEzEVqIXzxU*3UL-;>6J57*0
zQ4H&SAP92hXeUJ&pEF+yx?s8bZ4UWK9OnnA#c(03_8kr20IgN&vYh_+_R=MM&4Cw8
z`|zVsVfXGk#IbC4e=hq~{HbjDBZVv^1SNmz%k9|}9>kJ}3p(q=O6Z__&wCc(MP2GE
z{-Ea}Pj}Ws&qV?ujtz@V&ckc}ey*mmLVPS!!pW=Q70b{zaAAe>(ZBJ)RaU_^;^(S5
zCkDN)yLlg7eEW<<TYLKO-P2|@JhMAwzsMK;M6+6SO!lMC-#@7%&K0eR1D;60Z6g*Y
zj9-Ca<Dc)cQb|&Z6oKDN^u1lMC|wittwIvs;=(|~3kO63P8D}qp3z)?Z0oO@{K!*$
zz9)gbV*FpNv?y0?zPrRzXb_pGg<jh)z`%6ZyXv0nkM5UDQl(_ze#2G0LK#!n%roI^
zFzK2w1P;~9Zm#Je_*MDwR)oPrhZUw5@e=8-!x6tU8$u~E+^E#1Ak>>E#@BYOUyqDu
zo2Q>7@rF}AjV?q5O)~Rr?@wCpgRCO6=G&4GSC}e;V#xG)Wh-#r)<}%c210?i96hqe
z5V*4)T3H1vaJKWrkPOW|8RO}-{5_JFI|j+)ZZBW2yTI2`BJMo+77vxtBLvq*_5|Y-
zAab*7L*vm&Wzr3@_<v~>1UX}jsAR=dDz$*AN+|zHQr2x(vfGiW;T0e1!^<2%UG1H%
zF<xX96uELfiIe&A&?+K?wx1}2vIGds{|z_?-jf+9GIn)wmoreOp3MHVrESye9xn%C
zKTbQXB(RiQb9ml07yjx=G9|aI!Y&v0o*XGI*ZKBU600=N^ir<Mq^OwM@b`oOs%HE0
zSnWP=*^E7ZCRoD-`?1XK@A-L^tjr@tz2R_Q2-p#GV{FQGI+#YIolZ)k`D3b_M|zNT
z=YO7e@%Q=-URz%aiGeUl0?5e{(Wu^gAP53sY*$+8@VIIj1sj^YJ%IQa!$XhrySa!U
zC7!?5w%*t(6%BrqhI*kiyLf=<)M<H#unXCV?)u^Bp+NZQOucxh{x1CGPXu*p+fqec
zunOf<WkBc*MXx6jQfc&$5%bSEj;W72v%D}HJ`;`By#&Q!qD6Di_NAevk-*gJ7czr<
zoSs*%Bsk8uSaxFmLv5KbD_|ZEo_}Y>+lA$xx`$1DQO?BDpZ^$hzo4~jDOMxiu~O9b
z)bw)e)>0BY+LREefheL_sH)$fzAmOLG`wN%%{t<pS7!5c?we%{=B^)yYlz3^o8yV9
zY~l=0XqhM~P@z_PO&eF#mAKX9g;X^jzH?t#KK>xDCimLN$(NJ+V+w)!V?%~DK9I*;
zudgMrDAPE4cH2LgoO)Kf)d!S?xauw!$K>kQsz;%H&|%sr-~_h&ja!%+kPt!#ZG3fJ
z{EO2)mA-|S_DM_ktSLx&FxhF*Y<Fg|SS`$kkzBV31GH^S--P&R@b;^3qwThA%DsB-
zJYR-pkG5Ypeiw||!_uYQKg}S{EER%8+h9m%h<qlq0i#%?Zw`4TGjF_Q?9GWRg>yNL
ze|c{DUw)-K%L*WbA?&Oty2yZmoTF&)WF1MHWV+AmuR_faah6^?6xEBmZ_aRUP1zVY
z6K>CPss_d8)zLZ2gjbgZ_B{8^duVCg?mYA0SuM#c1P)4vC&DJw?cRu1yvlnZm9&Hq
zSH>)Vr@qOOiJvrkB$&5@a_ooa{l!z#3<Vg2TFZtB4Ogyx_85Knf7Wz4?1F%^+olf9
zLg}jO9_w9okFRRJAB}Jj5g=oBB}v`!@nA|1hI{Na2}0lsO;F;kbLh@IGdH(tlT>~o
zcNHEx$(pdfxlW!y3gBUx#2UFpy)Qn^(0w4i3fSh`khD|eIgQFZQrfTqU>D#j+?yEO
z;1o6c$W?@-Y3&Me{_7K`u49*a3qMNB7_32!y>PCpkKsIR`WNY&uP2{@RXaj_l<S!!
z;eTGg2^^9QehkHSG8<YQSlJTDg)y*N7Sht<^(??|G~-#$si+zR<%NOy*lD=>F=A!o
z_eL+z2%-KyD7@d2Xd?Z1Y}}bk*4X%)ZZ=<D;%?i{hl1_MUs)92*AeOU{+h?2m$0D5
zXk+MakQM+IpHy*FTr|OQ9M{7W@=v;x@!u^k<@JzvQr}LfZ7d>8p#1QL>;6cFqdjc>
z0K<~)ldpWN0wTOTE?u@pbK_r>sDPcibO+lgF;mf+oM&FKXu+!m1{MMx00V2hi*6hQ
z%qiyMmyRo@NY1Q#|J=j40{0Hi2b<Rs*CtVdM~-*YuYlLpvOE*|*Gh13+(V4MP+P^f
z{QFN6$IFy6r;oX{e;6lSJvqRlhuL4r+wUHUll#2?t}#J9tgD#~CjYUW4aF{0SAy&E
zk_F8Pq>}i0jINQG^5^FQc>cqTXBkWamGAy&zTqK%40pUQ(8k@VZT6Qw#p!V5!6KAN
z+cV{B1=qN%A2?0hd`ri)jLrQ(gfp=c&$99=w|pJZg0U}5kl}x90rS@8qVb+o4MHX6
zv&1I>8Ar($Nbw_s6?74$`3|#ya;L$YGD-m?>~#fI#t-eT!9hJD0^-7Vnhz_QuUP6R
z-kX#~2gD-j!&8T04Fy%gRxG$S-G+kuf@`g+fqB?oEc{s6#j0PFP9fpF5Go-_nK^}D
zp981W!H>A<Ty2RkXY#DypU4vafEigOvaSKc`?IgzhkMsy``q`j4hGn$Ak4<*R8|5v
zT{?DM-%)D`wDaFVrOF6ffSC6_`JHQ?{M<p10Prc?Mr?V&e*gJXGV>4(%sKDf?}baH
zmAoQ~qckWgDg3~Gb#ZD3i1S&RAZpajaqMdklLvjFm<Pw9bECkShxDXR;A%U25oT{D
z7o`O7CFgleNejPdJ&bP#p4++K8-Ysm&*-lAZ+<B@=YdCBp7!A?VgY5QW=h6^EF9P&
zN2alnF;#<_&qiET_}xj}=vrCr7;u1zb<<VY`S1AMq-EnzA(mIRU9!9-ZQHvzOa5T;
z?Dx9@GU;-@V5RV*W6DfzVb8=zfH^|bw+zKtg}U|1KQ}ZBUfBAg?BLA-{3aY1KrHjV
zIl7>;-`iZthKU-%8vy8QckJ%?yRn`a*@GYpszs4=wNI*texqv+@8_q+lOvU|_Wi&w
z;4<&z)!?9v8O#>np%62XebwlumsG&0H1comF8<CjXZV#63`*a{qMurNTx`M+TSm<L
zu}^u-bgzSA;|A*MP(29(J61Sd9~~~u8BuRx56{0Vqtn9#7Dm(tn}cFEvScFwK5>zD
znBX3CaIiagT_ksvK9!P!ff}qO8#T^Kn{Rx5{x6rsU;0Y@fhzCT;r+Zd@<<X96v4nt
zAQeQP;#S<o`p6z(NX<As^17pAzhScB)z*d74$S#W#7{`XXyV-U!+@aFCHCR1#ayO6
zv+nKeD~oC=25?EBkE>b6xZU}Tx{4~!%Hn>d_z$nwayt@Y{w6QRw2sNra1NC3A%ZT*
zzu0-Wy8Ji3GGWHa)dIx7ZEd0CkGA`_RbG8-w<oE69YAAa9(|p7gRPMOy3x{@;DB1j
z8sDDNm!=GOTOdg8e$4<g=Lc1bufT8cuHBT{8yzKW8qTHHu~xuDsHFxrRJ$Gdw2nAn
z1n%W-z(V;<cvq=ii&pKbwdJ9-ty}<JPxZ~90R?ain#vZ)7q$@7uWi1ovVY`;G1_6)
zhhC}RS5}}&eeWJrVYQ+;wo^+zDRTyoCGj)bnO@H$yw0|lENuCyz}k`txboxUlT7vv
zQ<dvG{{;ox-R(kK;$PeDHDkdY^~n^@lIA02&Lon>M1BHm)MZFKQYmPmzJQv^IA2gi
zQB@XC?w%k0s^y-9#8{Lj`GwD$X4C4X6_ZG%o6KMUBhDz(a-sp?W*Q$cH1a)ozFa(>
zOCjz%hO$zb91hHx_`%Rwf?rK9a1Qln<mh3rU5jtXV78#1!AcLR{1bndq{5n4bf?ls
zgq6|uDwKIp!d@>q>Z=3aU0^@hOw@k$(m+4(?1+F<$M~{Y1W-N|-_OSf5}=VrV!mZx
z$Q>s&Jx<zr{DF&lV87(i0@u6ozbgp;7RH9N&@~_vLaEi*^6S-jm`_VeXwd?mpY_Mb
zRypbj1t1<0Kmi-s;rr;-C$x4FRGfseJ}O8M5m~ybTWkUtRrd?m!dI3PTV{F<4ZgQW
z_msK!&6hcVJ(0^BRzR8%G;Io?eTM12PIhxeo+Fo>WOwL{I%r*#G`oe7a8H@towVCl
zWb}Q}ZwZJO+F!VIql3rk%6&dNYUPEx1t1ULmuCMk@gMI=a{-t|ewqvGi&#CE52p-b
zh6l&;oR0I$Fva^WHBA{pSv?Gd)6)~Qi*lo{@y@cZzLN^*Ub|nMA=)+L(5V34B>A6^
z5PUl6QJa*3@-W7>6o`!-wvk9%0^6eV*(o|-c4zW+Lw$>RoiJ)%hM(oXfwL(bY9Kxu
zaLO*z9C_!NuW$TBf(rO#GIm)%q$Z*OR%YPkvxoZiN1=&7x%JtBD+|~;GiR{fz;aj4
z+taiL??5S;IOFqiEU$qyX3YTEf6o9XLji@{`Q@=Qumyh!e6Ichz_-Q{RzMI+uW>EY
z80NQ0Lu_xDCvEb;MJxuVwF~od{eD#3=ra+sjjX;jE~>=Xy~lu;_&Ol%juI^M7^qio
z(s?#K>eD`Rp!Hs%uY5q}bK}1_#8NRZw0R1sALl~pbJB3ciUHqeQrCgp=HAzn2pu-u
zqOaWkK4MWM*s^|nhz6mh1k(m4`#gVq$UAPXv@X|1Owsrfg}m4P>ws-%^?kNFLB^{X
z{fu$-aRO8;K5waAK(bSGr^LNz&r8Z7)VZzr(a1Mo2Y&%<oaEPdYd8HoEtH?yoc=aS
zxFz;xy-XZSE0)pQVTeilE^xL6dXervo&p2tD=^F{&IpGujw;T58>Yo^Jhr?>y~=Zw
z(0@bhXtdcWVs~$$S{STH1kII^d*G@xGy7h<0SZi<ic4S~ta+!SVj-p`1l{^L2$Kc$
z1BT@E4(&xezs`hq4E7~ngcg<I;$d2q^Pe?0eIJ**KEjQDvy>OTj;F&-OWjfb0#2P_
z&LERTNMkL%v~Vc)4){&&$SXzA$n7&(8Cc5zhFZ=X`Y*ISY{_r&z+wa{7&)BNBI)w1
zH00%^>Nx<@uO7UG!(jtAJqu9j6mGoOCfgEg5MV=lg<w??=ZKSY{k4Dw!M~(6ARZR9
z&%yTW$IFRF(v8yEbtq8EEHcxCL1SRi42XsuUcN^19@%D+r8Pn>yxvy?l?Db{fge~?
zkNQQ97`7I7j~53Bd3PK;LW7~2=)tsYz=LC{ar;g-9OqZ*6genmbf{Or0dX7RyuRni
zN7M>Ghn~-)!k0(k)gonQ)j#5H%{{?Dx@OPPVX#7?>cb@=;q!)Luj=7<w*g$dit1Dp
zJo+aA_!5!ZS(DDJ%v(sD^Z8$d@)!&oeXJiVy~q&nhGI^1ORVW<eUpI5qI3kww*k0L
z7t#(qQvaAgpn_pT!78YXa@8=1f)PMN7(*Se*Ao8iCz%jw&x)WeRCDrUJfYbJUm4>~
zT=oNGUlv;D&8!73vIjkQof`@|F0WD06b$VCqRi8@v=)O3`)^sOjTN!+0=_g6C`=F~
zZ+!4wTz*1Ss?-CJ5?4=x1S@An?2J9n8<FjzXL|P#ECd<fxq{^X_JOu5;3+A0d&7lc
zU@3f8S)AJ!e41hI!6+s$1VynjAm6-HamZ&3`NL#5m^y9wyxT!?z|n_*KRW2OFS5d~
z@9YG}x(E?SaH%Yfmmo@i?s}JQ$(i&j@(@+YN`X3el5D9jLCMydC6xo*3Uw1$0I2SD
zutOYb^C)zD(5!RBkX#ml@UD02y6}=7-Fzn?9Zm$w&2MLuF<iQ^G-b@S30~lIPH0A~
z8<}@#!jBorVcmoXstSBr<>%D1-%5}e6d;~r3y5I@0`<dC+CSU>)jOU+0pE5A160xa
zXI7nc5G5gn3wMy58Ik^7<3kw=Q3V#KJIP<QW;0*#O^Ih~1Ir9YmNGZz%9PIN3mT!R
zL)Z9AX4y(z#CD=RkYmS=$kP`2qeG`JWDp;40RDG>27)LBglm#_*R372VY4KE-~T<4
zE=>2mZ6M^}G>=b2W4Rp*2|vEoaaNyIu>2c>?DV}Pp8N2rp6or&*tOi(rk?D7m1y8d
zbDtW6MDlpQ@NiOI2e3Q|A5o0|ay;Y`^vM0U#&~%H1)~F?r5KXHvp!xQcYHoTRodG+
z_rF-R2VZ1?r7yYD55>hX?;*~j>)u7K!}{#h^*vlM7#?ACU(ior>{AWF{Gk)HV7$Hf
zE{ObJ)+vWHN4MOH5>|1EHOt)O1t+p_3ciMb3#^BJ$8q7|&=s`p4|J~OW23shfHgJ-
z%PNIf3Uc=AH(r3&o&VhuK0sY&ZJ?&}Mi-F1TSA4C7W6x1^Rz|l*%5Hcq-(q(`lXc<
z3BFJh4<!QsX6Bp(Y+U0c#r^jM1!eKA8x8j*hg#_=xEoY+pm>k{ofHMjZ7eYOi`a>D
zt<RL7(%~jhAl{qKKqy7>NCX*gJ^<8g0liyLE^|aSZO7j<!T=(kl!eI2iDu>Zk$@>m
zohs5V^(^Fi+vfoO5a8p?UOWWL1Unmyh>yHn_h3Lmu%R$`hRIA*t&f@5DD-~ELISe*
zKN|CGl}pm2j-okKBo62#8d$t%^cvY&!khf%s(BM)@9_|tDwvSeZG?LIS`mM%?3JWx
zsq6jk0glm-zCb3?%dgZZyE+s>p8sA&lnTOUsCZih3euX?azM)p#70f32E#~mLBEzo
zgo!&XW_eLRp7+K+KR3j-D!LiCQk#KXnrdi5>!T=lQwZz-?a!?DvMi-YS`L7H;T69Z
z`V%m~nQ?*Lb#k5SRn^&VD23C3P@tZ7WTy#Cav}qx&&^XT;ev(KFco&%CG?`fT(COm
z`YdNN*%#P?6Cb>t4rlHERDLUvcb^M!8yU?2h7DN7vCR0qbOgjH-~VxS-QiTeZ=B<(
zgN7|DO7<$NR5&TL>@BN8R!COnITcOG-YeOAuW+Oynb``bBt=$c=I?%u`d+_(y1v)-
zb>8=RpXZ*R`}5rQzYj7t#a4M+s^>(`;hot4AFvRy+YIF6Dlc0UFjrLC++qUK>gTpy
zLW3o!O93MFPX|tO^ps>0`gU~fxq<106<<DRpOaoUb`pqgO@@PTg{AhoiY8putPCVa
zxJU2f=$>9C^xqVk2Bu!wiezo<sH<%ZMe0s78yxB*ruWmQ;iczw(EcV+f^;vfFR~aX
zsIG^w>QY?&a@FFQnQIc|R^`jn-#~U;=MkY+ZeL>0Shc`=KdbH74@6`fjlkQ`{U(d*
z8lfF}FqpPS?=E_syb>;a;Qb**dLU}u60$2LJWMXM2&LG*prxy?bNRtv{f`hu*t$<$
z*sa#F_X3E!aO6ycH#dXxp=M2`==hL^9BIT<Y^2MY@6??ohL83cyj%Y{h1yjNxjM0}
zY{FCz!)>30-z@ywxnfoU$C$wEb{;wk(R_@q&tqPqRnz_n1^wEnV0=d7qxb*5;WqhB
zGb-1JFDr1v_wFU^tMi%dLdUn>A9RAJb|&$Gzurk3okT+PetV+C2L=F|(~q7?`RAm*
zGQuUn{Qv>uufIaya<vFR>RN=mRENdHXtjB}KxTUwpMIz2qKsj_g`!xZYJ7Mpw=s%L
zmHg`Kk_#D4{ulm!4ZaLbX|a9~vc0EB&zU_CJLF9lY)1%14iXQTl}%MQ*x}M|RePgF
zl>o!ThYzuEDUrH9>hCpm@O3*E8H&P61b&Y|$CD37Z`8=4_K9pg0{oaY_^}~N^Fm_=
zs+jG|N055{y#h-4MrgZ($n$y>z&Uz29zV8fN3@L2e96`-j5DSA!c((0SHbk7FogpG
zA+-^GF_|63;hQ$WI}hR;!Vih+3qfXzBe%TPuzmlXO6hh)JKEckd0)@h&&d+~6`56o
zE212Pn=aRZU90Jl(G;+Ayp-oC9x~Z-uzOO&g)sVjEU=>)6V}9E4m$Ck_MC5fjA65;
z$BT5GOtdL(QREMIwmxs#9oMJlX_oFMW|6UDkPql5$PfOG_~cj;NRgEh3vGv{_wHeN
zY838r1seJIZ<59lF${6kPxV8?JtqY&6W!AuE0@pei)-(E(Nh7UQ5A%r6Q-TNvvc60
zo(}bPpOccqs0S<x3ER~o<RS0SQt?BNX;^(e>UCcRR`^z2#YG9dS2&U#!z8Z#4C-ux
zjz0%-Pghg6mK*DwBdR4~zMT&yyW)QH=*99Z&Fd(dKpIP$wq4;IhTVGK|ML)v6TPR1
zKc3%1T5SY2h85|+`PA~STjoIR+SteKI^3R@yo-fy0w*L_54;f-mZD5kCw{FmX@d+2
zK!J>7GT;Bnt{UH^Gg*_b?$YWYGD~^-SkZPzxKQ;IpE0N_9`^DJoqbQ$1Z+Cf2+xUE
zdlx?JLvoZIv(#3J-Olm`KZF#^!cyJ~4#o)&zGzkiVcu@jcFTFVCKcC=hI?+0A<JB%
zUZ_Q`Bkyc1A9XYV3dU(hWsLYNL{u2uuKn<>WJ<D&Hc!GDqSnS26h8cJ9)_#ps-)4B
zXf{J=sP^ae#b^-}?~Y~TRKyRgm2#c^y{9u@9)v`P_$U!c<9uhdr+?1!3Ub{l8zhHb
zPVbJU*1C%Z&s!N{S4D2eO*~V|J!ticHf0+mPr${Y#gd!u$9kQe(+X0yhF}6>HYV5C
zeV;~;z_ogJM#KUG?@q0iyFe-y^Q*dOH#F{W(%AdqKcRDr+{vp&f&s!MF2dk+vN>_k
z|Bc4sA;+&H37yUl;i{K|ZNnj?`BsGrW9oiVJKM4A?E2(e-U2I%x;~&-3rJs8$o0aL
zWu%;>Ymdfx+s(^M(SZl#r%<0(Y|j9gK4;7`-hoE|mo_J3Dkx+9NMH&3n*wx`znR$h
zdW=MB91WpEtV!n&xLBbTrzSJzMPf_86h_#SYX#&$?ZfI=I#kl}fVa!HStSDngMn|i
z>HXnK-B-Sww_Zv`&m%Ty@Th?NCk6KD+1Od6(Ong#Q+7AAQHJwJn>$&TZlFYmYVLOk
z>AqT9(zy|u&$e@}MMt)gJS%?luJ4V|>MzV<y_P(p(kBk-ER&0ZtCfECv&`<o0nShu
z+3X4w+>^C0JdAtWB1&)_ZNJVowx*^l{wG6P9eVi{on)FcJ~!?=ffRz>8P3NZk=(bZ
zKdI-pUid!p*ERR+yq@ve$yFxRjp@<uxL*V6-czQ$AGt53`f6#%b3yYvgBOq|s9DKN
zLW?+K=n9ggi@)hr!YOEiPU{)zGB<*HfC99Ta?)pgvJ+2X2R3gUzdKkvrlN7S?-m*M
z_1m%hjN|)Eqz^;i#g9o_?F2FQS3eH-kCpRGG05D424phf4gEXulv*M-_~XF?AKR3C
zBdx@_;cLq5GF7r_zp-m_KW$KRr?=E8;osH8kx>6pFZda`olK?wyW3IN)3k)0&QT=f
zA+*R1dTWM^^iHRW_y?>cv?4Rm?vD6<lz(d#i;<L^(7#V6>|K<T$Wee=vrgw5jA|F0
z-Z_=d!>0E30cY<m9J=%3oAreYvv+{e^P2nV)2HW})17CajQ~ZGSjgaJs?zYFreUrm
zM=?!_Z8slW>8vOFkDDnce{3%L7|Qk^Wc(Aq-X_C-9XYs3qW>&%OUth#n$Tp?p_Yx+
zt_pqYzK1h!^77GlcCn_oi~8I6I}TOC2qkMOAi-OXOE^i&!NC}}2*U+PKtB*F$sjr^
zeD*cLeQjQcar_t#d+r=Ms>SA+U_dTQf<f5%ohVP3T*ukq*=v2OJ~8rv=4KGH@VUOq
zQ7CZldov8u{!p3I#P5~fDEoO%N=psmYAlsyWf_@Is}=OUl-L$`RuuF!cmr@7=fQaM
zU==VRANAK+)B9G#%2tWTVV2%YWAv|Izw%rOB1mUMQSSVG_bBG5*d78CRa~!2=&y-S
zMuW66(aF5ymyEso9n8m`OERt-r<>%;uzn4D(s}X6?2_7`G9eTC#$eBp>7{u(<Q6Y5
z)OTe>C2v;#Km!v(2zsUJ4qt~FgKopVI%*K1=4^Se?c&xWHfyK6CMhYYl9C3(-Yeg)
z!R1Ru!RYy&-*XmXI|mBZTn|Ir6tPybSJR(Ko?mU|I?VNAkPPY9#ry*Ko;P<=cJH3>
zy;pV5_~JG8T}Tp8xl}RSK3=~oGX|lGZh9@wRKm7MNv9sQwY4K@D4P3vgyhy?$TX|D
zIa?$dMxzVV;llGFrqZiFmT3%><L~Trg-Vde?+g8usHAMqV3D#G0=BG!Wpc}6nmumG
zbBDQ3`I7EElj-4(dJjm+-#p^|dXD6l7(97LWuD99OoA>X9=N>+UTn59IebbhQj6@1
z$!qf{{MC8R=iJ(iwo`=)`;+r_kx{KKOuI_N4^e)d;oW4NZmu6L<cu9j&$lOt^nRLM
zlCxpE&I(OOrL{Jm^?Bdojj8fddB=RfU_a{2KsP5a+T8hkB@gH!{Y-ir>*Mx#lIJ;X
zDGp8omGjnUI{1SFv_Waq1*`ac=7pZSleERJIPT#+d$M=q0m^-GWnN_K5!hFAomOE~
zNGf1T9=6@uD*;!G+__YO>s(oT>t^!7=VISo8tyLqq;B6}kwhp(JEpe!?;W`J@EmC~
zmC(soXeez<nCzz7aV`WY6kMjf)q6t@y6IU)qxT$zN|2ecSr6b`v#nReT3=5aFku#q
zpTPAZ%c?!!?H&HZX^|{Lf7tPt1X?^aak*wuXoXNY=#Z9)heMJFRu`Jz-aY$7h`r_3
zE*eYS^u6v~V^^PB>!-w#FRYbtc#-Y?QGTv_#~k4<qmm323CU%Jm)n_<00R4c9Q%s>
z6J%lt-7%Z$rE1*4%4NIZPb$UL&zs~fCVYTP^0$WRC3ns@0rwuY;Ihyw4)&Qx`TFkz
zE)pi7eBYxZWnQd5RRm5gzHj&hL2rko<F74|*_BK{EZ(smDwD(2KMG_S6?QDa9O`WW
z)7yf5Pm=dHJ=~yyNCL(5CWO5s@An&Pa*MC@28`6DryhNZ+q{=>>ku8a(@8x<baqT5
zJvDVe-Q)Ueec#~18tzrKdb>~c?SnU&oYhQuRG@Vhv`x7_1--exM(BMoKk5pxDctWM
zM|e(vlPdiECTt8U+QW|EYIXY!Ts_O8gJ(H=^Y}l57C71bU||Pt2QL=}-y-)r&hq#j
z_rOysLZdTx-q;(K%Y(<XbtUuvHj;hG)By1E-HPl$*`r+E+|ZfNSL88NZw@W}+U098
zECIdhLXtUkT#cd0PvmiO=$bW1x{ZD%Y_VRDROg}gc1K(pUwS0ELN#1_e7)yc(kIG;
zvnkZ2DXA2{Dkz6;2qgSui8u|n5l%SIO2BpGi_|;Y!bhD+NQoN{6rXUV*FYk0O3o+z
zvOa&FS_fNyfyydnbAwfpKwDYJDQJGzZoS+TjWVIwu6HK>TgTGH9XrhI3sFe|by0-H
z_GJ^K!GQriQbL1XM$bYXX<8oh`hFRo`ycpA{a@O+s)Q@u5cD_$@^)s5u1EC+P(wDK
z!0^MUlDA*SHhXhBs%aytZFs`ihgXE%{^qUICZvPwxxW}{_mYrTLEA*N+t%#R9!I`b
zUpkbLTr9caAp`=@eB{iNpW-*58^!dxCLhb6im$*0>D=jqh(oFGprf5?YRG<Edy)=K
zF7FdG&rr5D{w(4<iga%k(9(R84i9<5m-po}&(r?XekZr{07^B^iwR&Aq3y&o7D`Iw
zJ8X}2Z596m%G4r^f;$+Rb<jX1Z8w{|9ECbY@gM99y%Uk(P}?n@&QOqp{w8piL;z=l
zc0T3!8(>T_#6@;kshg^QB7v%a{PseS0M4?s?0V;v{9g<C6y}g?dS^{Ee%c7FM!|E6
zPT;l?L#c>JO>1SOi(W*J^|S7e7S;4iDFi}7EinI&hwjMx(L8L;NiT#zL`Kz{;$%nC
zOIQm~(rtTF6S>#odx!zO-oPDlN^}0Sx1EvV<k#q-uO3B=*8ub@AoKnEj09X&EYirz
zZ|;2uYo7b3FvyNr{~(|gbhwa;itVtzkf2yQ2JH(UhiO>k&_C2Pom{^Y;p1>7W~~>G
z+UObd!s@E0+OzrCoxH%8$fa<SPnq26ZiNV^g8P)hnRDtiRFC)OAAgxtfVulIB!!;z
z1La{pg~yy#=kK@4U*bG8;`2RcTDK<@Z66sq<k~WW9w?vnh;KbLK2sfecXRq3ZUt=}
zo}OIl@$9zA(cMR`kx;+n@!$A;Q+erkEN6C0feP)k+v%t~t-A+%UgjMlGU7w1_+ip~
zHZpoJ?EKDvAG{Fd9((c2!a0>(Pdo~vMWJ>2l7={IeZP-q%_6Pd!TX_mCGNRa6@L|G
z=^IhLNB(e95&t$i+_K?UqTN$Pp6!0*OB^WmFY3!*+sz+8distJ10&Dw;=FGG{Il}o
z0U7H(J<?03E|?nB@Mmab6$D>Q(Lt|k5Lj>q_UOF9J%pVhcorCm^pAR?r9QP!^Q11n
zhjBB?f7}KPWsYzB;nX2~RH03~Qu6HG;(_6pLFo+m50rZQ6(&w6MvIAwi&To9+M0xh
z!_AVvb7D<j9vPRGdw7-(I-Fk{4$=s6`jqMKwEh|%R0|JU(w%bEO44%X4ZWO=G1MXc
zEU%OBsk{4OvVPz8)D)sEzAWN|u#elL*Yb5S>~CtjVCt0PY~0e13&Nj^PBduez0yP@
zQ>1^cK__`<N>-E|&51xK`DUe(?!MU@1GJBJrdmw%qGD~FJD*zwT%$V&lP}J^DGf8O
z^6;OG6XQf46O1;tU3?X#ee>(~XT2(Qd^~7ya;#t_pKN;|)d^kVJ@2VZ$NY;edx>`&
znMu&)kGj2bm4|F|U~tjya@sK0$Jj(e-y$Mjx*#s0(GPb8E%MSt?b9)K^QuF>d$-5i
zeCAavF=h7h91>b2zpZx|Mv7SW_O{lK$NH!io#754(&Klt?9+;0u8PqRaX$Q<8!zg!
zd~v@w%sN~tpxar>C1N|z{!E+LmKK42-!3tdyfd1^bi-Z0vcn3DAHDU%>Y%e0Q(9P;
z@+rRyM1&6X?Ix|qe4btRGAJIuQr~$gaeIRu?%=1}9E3gG^0OY06p-uUNU;uUqS=Eh
zCayCgw$XF1`OT;IX{S0pK3T|>H~Pc4n4{-{)laLwKL=J0Z;j8x`IFn_em<Y;;`aU>
zLzE^9jQ*H&AM_)42fA&v)>&p1nuy+&n*(|oewvNRD(HeE)4yNqN_sUn2~B)Z*<OXI
z51vBiU4}|u|AJ^Ij*^+A_vQOh(HPx(JuKr*f5fHIABx3rs#RdEnhze0bxl8+sNWf3
zj_(*%@i3us6Z>NpCRg`t=TWNo*X2}JGYP5;w6ATlCfW||B60cgI#=>l(KJJ|US069
zo1L^uA+O0u+1q&@H>Kd_r{u?n9@+jAIFI#PrOO*h@r7s0(%j*2tiQvk<xY1e4_57S
z{3_HBF;CjENISFzd@k^YT=K`5UEt*6I?MjfwY%lMk$!)C?Dm8Mf;Z|=9JMe@5mw<h
zeZI*pKb<!u1PlKu>HGli6M5|x+Um~+$gM-NM8@xs91N(ROxEB)=`$|bwJwgGD)$M4
zs?4@l=Y?Yj3Y;aX>koJ^n7c{Ba2pqtXT_~VKkwC|=8P9?yqMDizb_PL5B5_eYjD9c
z+@|Ylmw%_`7QB)>wR1>b=)oUz87zh?sw?#8xUZ3z76x;U$UkPO9@I;1i7nAL54rA&
zk5QMF9Ie(Dh{#MBxRfl5E)bfYeRR)SJf%vbL!)q&+2!2!L_Q*w-iC6;w?tJ27Fw3o
zYiYzFWM)d-o?Ov8nwq*^rge>c?<Y~kA3B5PqZsVS^E^`1L{Fi(!u`8nG6WaS(kv)!
zKZuiRPg!=&WOcFq^Gwq}a+EM%<coCvRIhh2%YaT~WTaHqv!Guh({6?Jo#{HeE5k2%
zVa)V7`MLFB3|M!*czwZt7e%30Ghgbx(i)mxJ6^kC5J`$#bN`zCqh)c~YGTk?3MQEU
z5~5}}m>jw2nHKaXx8!zYrysTi{r#q1!j13yK6KycW!~1%yIgH)j%Ta7zl;!J(2Wm2
z%q>dcZ3t?P|C!&X+FNw8v7izgdM#9PB<I5C+vbak>Ly|2VE;NNV&j&NdE5L)9I4qz
z$0xLohh@;jywwjS#nH9mi{>OGncEGOR5)&3`_pMlhL@f9_=)!;yQxOO%}Hd%`^(t}
z&1Y!Y1^o8sRoWg%&Vfp%3i%kbVljJJz=ya@j4&i6lAZHm{~DXiWBrS1c+J`E*|;N~
zTJ_;O7Y^?6wM<(~nF4Vpz|Xoph1>4Y*?n8GWXOB;Wna>mVP?{}V>vf9oSCcGF@E*Z
znszPzSL==Mj0#+>ZXLT7C1YAa`Ax`lN<MubcqTnvh2jHUilZ8><}-A^cH9J>_TjUK
z-31Sr1f>L|)GigMNP*KbqZ4YYl#_9d_-?O9{li?pRRJY=X(+AK<EiHP^ADeB(7ZLn
zm)5xJ4p&E*ijnqh4Q9$q##XX^8cY9vy1pr_`A;z)Xzb*(mlF?M)9T7vq;i9P{}Lh0
zlKdJxH1^>cw$Ycqm~BAkfy%+gmipeE*~hDV#2L4__9}60Fs*VquM;<NU}#*8-~n9g
z>_q|zXQd~_xJd&TDSenz?QloqYvkcPrw?K>Vm1%?Z@quC<;o|>vqn|?r;fc_aE>zO
zBqP}!Luz8Xa`9fueiv+Vh~*8^@whCjHJ;2pn);_oAN3a;au|K-ZBS`%Bqdv$vtvL+
zNyk6P?T=pw&zXAmfrQ{1=6y;-QPFSmK;OlgM>F16?vX_wQWM+gT22^RIUVu#sY|8o
zi0Xrq%-Q>PjSWo>UOK2Poi)9I|44q(rp2q!Z9YCWdd}wN9ul^;Bbjf~GgE%fb91q2
z2%Goo6QY`){gl#3Je24n65LPS5Jb2=8{bnu{@udL#ARo)+Xm)z$8Y}P^ub2C-J@x;
z45lPRO_dFHA<(0}CiYn`Lyl|+zYg@L`C(WY>?h&%CgK&^IhXM0C7t!L0{@m6x#7X*
zN6v0)Ea4rh+a^`c!!q%39oJ1m?qnl+cv!;iFQE##KkK^0*|d%&_v;g9ECSLsv-i1(
z1a2;AW$1DTYy2%=t+2daiY*o6p!)1(W3m^NKOms-%PKc$m<ganIrEKz<N74vVZ2YA
zd?2Ars313W>M3>7EU!pW;LZK8<4%h=mb}Bcxwa>-F2F?TCv8Cw7zIphjXjtyI)}p;
z#1p^F+`bN{7C8(bexR*f?!xepGT>un6;GP=jDU-9U<I;QkJ$yChl+L=6p5bN9w>;j
zM;i>ZY1A3WOhn(i6@tS+<bo-jV(bgd(`0|=tYcx3GPSQU@F`;hYp|~7vWmu|S8x4Y
zIA6_@@4C#MX77^Y=uJ(#6$24TNCWDV^vO~(Jrf=GrG?Rof_ZZwmOBg;trTCYKfW(3
zCTK!HO(-WVWzI|W&-K~9;&Ws2!~&E@z=URHK6|<HSb@f`EhkGDVoKAU<nf=79h>5K
z$c5GdKaDN-D(vm|8g~LAtd>5YbcU#lw|T79`DV}_RFaVn%_cZK_O)lewzPx&ik$D(
z{4fYEE_e-U&j%epk!(1&strSS&#L-v2Z-zjGUlJO6AWfDSca}=T|1mKVQ|>_&~!Me
zdz>UXz&88M%X2SxyqhXY`>}R+k+<fmlheL&Rfwq8JLiY<YkC(#cPVrHs%JP+l#c2#
z@rr%t%8|rIBYl~hv$T%f!e=8eZsQyGgVY4iEtB+1(6s8p*muhLi7T9;Ysho<$w)&i
zQo`JE28NE`vP3nO6k=n=iX{rhuRPxKBoDFLgm_9bGqbdg`#JsIZoB1oRPQ>XF+Yb_
zEcoBheI4eyU4})D?|wmicSNOkTwLt&&#FqJc_~zSnghpARtt=;<=A3QC=*wzY@B;M
zTu)`&j&1oR!U9UPggwWiE2_U*g>v;avM5<`@PSBpb<%P9;XO^Yidb?x0bO0LlT|q|
znCw*eg`1ewbOMn%!1_;jYx~Y1L=Fo2wkDd>J6r&N!3@=d5t(hz)i~G#>(B;piV1JM
zUJcH5iO>Ch(c|f<weJC8gGx`;m3_eZ$o^g5UOL2JJ+Hko2(U{HDblL%QmNhg)?Rhu
zqf>rq*P9nyg#4ol_`t$FQF9q+Uf%!7g3I8?kH{oM#0@ze>biPtE+4nSP!HdgICu1d
z>D=%9sHOQM!H0vlN37RizCCHqe0xuJq*1Nr$F9i)m}YfjqBJzi)%eO(wZ&ONJgUdo
z*&p0W@~dNa*2?$PD-u#s@6+FdZP<HOBR<3N=;lGvksq`?q2@KVD0ZwOQw+vXpE*@d
zNg!8tI*%T&&ZUs4&p0>ubzgdf7|nCpKVLLuq(_<gwq=P(N&frXX!naV@s5{%Ff8}|
zybhz9JN;|aKXht$%q<7e_zYt_>G4?<-vXLbZ^<ZT%73BMUm@{0L~TYoUYuUF?wkq{
z)v<=qywh9JaSJ`Mbfe|hr+DpV5(0PCX`e5zqMljiz>M0mBQ(b#2w-K%JbtPw#UR<H
zzx=ZGSz-|3`@JijYXimwexy5*;B)8A)C1zTcA9qm4Qh{m9Z;5=SAy4Gr+A8M+j}qQ
zEXXzRQkS7f$LB@QM#*OEll){<oB9WX!ZYRBk>%O#Hr+CsB={_<)4e~u=W}|*$2m+@
zuTVjl<LptO`?<XHw)M#uzA8s<F<=+I^{z}|oYDs_1V}JvQL8o#N$-hQAWWgU88jfB
z(a^XUG}Lo#CxzgA&U-R|aqsedkBx!0CKGY6Eb8Lfd{fymFG|CnIqD01?KMiME#Byy
zz3IoVbZ%c|_(d;2D!p8Ek@4P!9Ty(XbfEJG>3l}d@b6Ov53VCdGeuipu+x1c)R_T>
zTwd#zB^YCt&L@BYV`(4R%kV^SEQ!nU0NPX3v`R90{)fwB)u)SVwbF;T_FaTF&v?yt
zV5L>m&9GAoCh~snQnhCp#1LPnoIIj2$yPq+xWc4eYRmpW>vALyrO?oF`L0&C&Nn~I
z6gRyK=LgjOf%OFU!A_YED}_no$byno`!YT*@6~-0nC-NrC0`<2--20^=R9)c9NEU5
z+{LTMAa-VY@a+I*$&i?{IN81E(X+f-#zwuhQO7~Li@jGi9=&*-^qKm>o*Ei(S06jB
zPA=bZcNugDPvHuqL))c06#A7i^NeSZNTGl6<gGN=L7JoglliBMpuhW;kYXwb*OfT}
z=M!#7EyBDm2NTt*M`B`Poi4V!C!{NSk|`dIppnGmXXt|H&kEYE7&Q?|7M|%<UQw%s
zMGoe$sIo1^T`k52o>nL#u1i10Ji#^kLW*wK+xa9gY`x4dpvkl8EybhnXgnB*`Kl3>
z0dSGV3_tGsF>4LO+`FpMOR<+_&DE@5Y()suJt)y4FBMlUn_a<|AowaP%Gb$iYP#%v
zr?RqSy`cFm|D*5p_><<=R(j(%wD@!nrG{LN-G%X-o^YzFSaK!{qNUl~CHx1f5Me#V
z!re{J=P&b0xgu`rhKXo0k}3{B$|$0G;dCnIjpExz_jub%mYXpeV$KzY1ovIo2e)F2
z#~bXzdASd6NdQPxm-GFs(G&UQkV@j9wG=<IYNb@d`+ZM((_re{&Gq}B>MnXCA>)ep
zuF9Stll)|#5BOi++8i_egp2u&QT?uB_O}`fBE((INQh0<=9y!{yM44uT|M0GDNN52
zL{Q)>t<D!Jb-^6F%8+yHyQuc863=*5dHL3&&M6_1bkvAwQZ=ORuhFG^!@<jY7fFu&
zj1Nk7`pennu~Z+{ps)xP+PqyP-JAp#Ox_`CA^aK)Sf7Y^R`J~XkRErQ$kxZ4p-VHV
zjsqBjxoBShgaaHE>IQpfXjTtt3G1goSL5BqR6^@DXvfip<XV3YjVI%i!~$`Z-~@_S
zGkut<jpm|+?AF&?Uxq%*`G)RAB$=$%ANi5H`KN7m>4ELX)!r-re2L1W{i$T(U44`d
z7r5H4OM?mZ(K0EHzKw@{u>|s#IJwO4Tvx`=eSCz=ZN9txxJv~0k@)#BIVnU(BHC}*
zUmTC^X&$ovx%S=<XGAW4R=z9W!ehYWlT5)N3&9V|NiJ)AT(`B^NA~%p0>+)sd$=c{
zb9H4j?fm5HGnsf_GC^=7d4p$6ZvJjul)T2jxQMQzp?A>7uS(C3*ZPrlWf^Gdho|Hp
zqQ>AM6qwQ`xzQ3&@y0O=zZpJb)yS6z+`|{cMQp!=-#wbzGx)NbET{jeT`n1~x0I0d
ztylpE<-o@*pWU9@32E1*)1-YOMM0<+ReBZw&Qn&Un;N$bk(5#)P6=FPZbXA+sS@{)
zJ$&W?x06Bx1(ySwSgx5m9zLa?;1X%zUN&>~Gza0ma?#a^?s4_-n`?$iVgB8%y!-m|
z<S%Z;zXUl{oq=4EPEYA{Ypry~P0*Cy63KPJrse&E5cpUQw??m)Vw4mK`%&Gqqz1-A
zhHG}^mmq1MsiS23cmxkY-N#<hcjNU-**tG~1h+OXL#^zt#b<H<PeOZ7Gr`(=odkdX
z*N2=?<`j}>I+b6&(p`<@(;bbegPc^hy&L!5c^*@-S<Inw<Q59p+BXOE;H0!lcUP$G
zcQ7qSb4SBz<)l_9g!@(_L7-hLux5Jq`-gf}WbDUUI0-+S_h8q$nbs*xs*<J_bM_Lf
zg|_w|CqurjKBH6BHL}-(QAyjI2~3^qwH1-+5ARJnt+lQszfA5gJuh&UlM3}E@k_zr
z)lZe)`;B6!#)LfY8eOKz%W+(`Ua66^dTVxb`A#8!{&rRbv6h~$dP})I<3^R)^q*Q1
z0`dEm_Ij^lXY76EbG}f%aeacDuORH|8B8&rchAshw;7;)!luh<S~c^g;<eSs$NVr#
zw3UGkAFv%3%i`^vD}Ds>+#6tedQP9wl;pX&fa_$0;~|CY`XXJ3c21E6HR|DQaw`;#
ztX(yN1^msGEBl(L5nOM!TeJ<7CB)%m?bEiGTW|z?&z<YPt!v3{hlmT@U|g_ZDn%@q
z&5gpq@h3M;tlQ=u6wXk%C=jGkzPFh)>Z8~@Q``kd9<>a|yiS+6g8H;??d8wR8<sQQ
zTSFReD)$v!zp)w7h@;&m;+egw4KMB@38xeL=2PQ3wq{U1%X;=BZO1v%acR<xG`A=H
z-IhrZM>G!4L^KdHnlA8P7!+NNU!6`zKpyQr%)PDDQj}bPA^RmHkF))9CNECT=|M8r
zf5IfZ3c)&9KdE<n6++5xl;Ada&D!g%;J_^-O@>D8hKXB7p{?#|@$=?B;Ia&shaF=t
z$&6-rZV$Z%cJZM@hmcINz%Ib-ERK|9l)#OL0N|sCU@GTb+%Z)5S+Y#V+!u<WEE)R6
zJf9Dn4!2B6SLnvy)Xz|0Wf~_uioa>dpS+d)n2O>dgt7X;9`GrXFM}eAgbbI^{>lE!
zw@$NSwk{n2EC9yRx{r$|Km7WzR_<rziYmvmU7{wc#{!Re8wb{zs1TN4Z2ajKEpqF)
z0fG6-h|8$Yrai`z;N>vi9<^luS!@lR58g|930Z3G6q?cA_{E{Z2QTj8+EI|hBDnNo
zBkohCgvNTWr=ka1Y;}^Wa(-$;aBgbC<hF?q=NEk{#AgvgQL4oUGF&A4%fwg{b1vgZ
z38CfX3!2?)#jeWLS3tjR-&DMN=s7#-cy+mef}lt4zOr;fcB9)}lBcn}r*PqYJr%z#
zo8zX697hGb3U7xZaC}|T?d@soO$=#Ta|X)e$9*^KjxEwJb$r`Ha^leXCDWe3fw2?S
zPd<L^Xgh;^)0?+%((NMqGxSqZGEBVgW$mUcFgGGBFE)lPaTI%R?DDGgD3<!QfqxKS
z5gQ=01$Q(A;pStK7FViAt6l`|#Sek75<QnR@qr%{Z9YDJ|AP}pFh^&VVmkS>jSz2O
z{Wdeh39oUv-{-o;nxBu&s?-$Iy7Nkp4HzyrN4bsMZ8O)3ny|CYOpTKJGOB&z6&;wl
z6ZtlzY0?1m^*@_Ph*xFXgV+k32O2Uv=Lzi|_aPCra!Ye<Aq`{Qk@7|v(v8E9=2_YY
zlol+<ML!k&AzIv&EmNorm{bS+g60p!HcG;d&bq<WT)A<5<Y}YT1IM&l3-FA#-PET-
zXD4#H#x~ZgTm&8&P&>TD+G=GrG6|%DD|7b=6H?RQo(*^URY#uvVQE<Poy}1G8mP*t
zeN&w+_hb8AJ>^RGN&nuHY`Lj?$0=TQe=(QL_}r!(*zol%WMHyyoQ4y(f&X6r_J;e|
zHu5apy~eS*_b+}EOuTkWLHnrg8HV>pdcKZKLC!X3@{Id};{tQ8-w62G_P*}oiP(hu
zno3Sfb643<cw<)rHnNu9xaqIt?IiwH=&|sc3)d_B3v|`Bt_#8&OROKPJ(dQmldV|X
z1@YH}E*rxkq9guc9tNyOQrVBwjjVLM<D~byyU_W8`H!DH)Oq%h?J;G5Mh;uK$c1m1
z*2L+yyh}duG43i>%o}$SQk@^IL&$&f_WIMs(LYq9&I_yh+&uA}?@cyN28R4t6KCCW
zE|?RS2+LD<%NLt<AXtpiKGC&nE8&kV@BKVKJNN6=mlmP8j4g569F%+%OZ@WgUT2lv
zafs?>rojC!opSf{loA)$Tub?!G_~MqfBxFFZ7>+INJPLTna_5tsA~4w=b)Ta=CxSP
z!zbfAU8W6I0;Y6V@?%4S!p4a7A<s4q*p?NmM9ZH(6y?}+WQz4+FLhZAScnf4Gc_i(
z2R24NMNN;KdbnNw+4^&3bVbiZ#sgM4vtVn!x=9cd!0=eR!lS}6ROl+K76S*QG9GJe
zXMvk>n`VNgp}LpT)Sjt2d>?hgV|YOpUw$h$K7QX#-5yu>=^XnOicJC8`sXeJ`vEkr
z*Tt_X_)t5qr~}Cvvad^}xpw|Ow%pS*)t5kfadV5d{vlk(Ka>144#{%_b6lsc5P^jF
z_-E5vg0moYlwzRh$raKj8H)4&zL{DAfB4ShAHyCu_<4dZZQScdKM-jmAtd@!x%459
z!)|Ksn-0$O_}%$`r}30_+IV@$>*-iX_DwCj*UO3!3EQ*zpKfe0PeR-)S0NqCR(gVb
z1l|-=RFfYYXS?opG|WPo3C_;p4Bb5jd?^ZjDbD%dV=vPaKl;#BPJU|IL*hAZ^|@V&
z<MWGybRL3STy<r?&|4|gRvx8>>Q3Gmt_aY9!U3xI$at9=EP*PT<;Qt@VfN%j9TkeX
z0>D_drHvB@j^bu!X?KTkyabQvnKdpz<K%J_*(JG!wE@3rhx&(qqq5$A_8oOdO(G}F
zVt+(VL_-8tsGdax{5bLJ_g!NBfMt3NQ92x2ljjUK7yi$0427w`QnXiA@un%hAIoXE
zP)0z|nWu#`nXBXDixSp<4saFF(*9>-u$a%zw>kFOI@oiDUE52Bgn(_|unJ8LO=?5$
z*NR=HDzL)uPi{rTn{rpClW;ANGOFAD@$0j7M$v($cz`;o_3V3c!yHbYnRw^&@#pPS
zqxewVe}1!ciBn8So?{_CrGWgyk`2W(xY|iZLKZza)evuIn3l*PH!)>?LiX=gk)U!I
z4t)Hj?wr%rUi=5c$Oc+dd&_k#BcRz^{*si>_vIM$c9~?;QT3pl8#_NP9lSm=<L2pQ
z`Rqm+Jibnq#OJLXn1TL)iI-41T!HuQ%$SF@;l|O9BMr%YWEN=-lkzzq6cdO58DPBk
z8(yi6k{L?h2=OqNVSBz)Pux@>5z%S)dfm=Eje8%a8V+I%@t`__*kLYxCO5D57-b_#
zVFY^k&vEQwu)I=L9B23EW#Z3A>=;D()ui0~p*k_Y+!NdH>F}hMax0tK(i~zgc_Y10
z(*7xL6DTsP9U>lwpLi#Y5SYllWpAmm*So4~T%_gu&(?BI?<O4&_34=OHW{G`t=mOf
z1FmjbP;_?<-!}G+;r#zUFYp=v?IVR=6$TL;dd;>GM9BM7CwXJw^tu0-2`nI;5YhZ7
zewItbW3eC@==+fhLU@44oPAPLOE?BeG5<NRcU1IG1T&DTPj8yuurSCR><!^WVPh@|
z5Jq*-d*}7ncP{_u1xIxtdcPdJ{3;WiFN+O!nt<&8tMVDa79%;;))rQ~S7aprmj0b`
zPqo)`_s^Zph9p6|6(F-y>(!szuD)RZV-ihcuxr1MTRHUv{&qY4&Yai50lYN2XQ;O;
zSR<&*N?sRS6G4yc?iN;yK)(^Zh@zz|#;1Iic8p|-dvgZDdg?jGh${prH;%2_i9$el
zLj?8ypPhJ0^Kj3Twr`a@Kl?Ltj`4_}nLyBW<F%tXQQMS(cOyJU|Lza&4yv`p{bIJg
zrMa;K?I*-o-88srcSuy!Q@f+5NrDOY?cbN?FqI`4h*z~ONcW5$NvJ|nsY*FTt?;n8
zl<MFWo3-`5ir=`8{Cl=Oih(k`r?Wbkf%%}7j>E@(6?puF!8MCB^(_Z=>t~Fdel;Bv
zCq3`~*A@{k;ti!8?{F;Z0x&K(OVg+iZX>2kR9CmsW$NU7v}3?W@sCEa!4CfxWr5Ml
z{o_&CF<vndb)^||`Qj%8VDoy?B;c@_$o@QEC?CxD*RVkB=sMJ|OJ+Ad)o6R)F$MJT
z#zJ$k_6-Y*u`iJUR)F6kw&UOPCz%i&K+%~!5$bCzbwO>%U`cEp0=FrZFJ90ob#=FF
zZLj)%pNIe7ciW&Zj)<mPt)=iu33N+FV!rMJWtseuG_LW6_g&_PPclwoe_oCk&|v<p
zstN^RG}x|!i%fhIP;j}O1q-V$X<75l9jsC$OWF4=5jSZsN%8lfbuoJ3D_6qTu7qzC
z9x_#e7r6YQlr*AUB7XYm?mRR8@V|oRfv+vyuMrSk(FcgO1cJ?!SGivP{e{Z7P042T
zM2a!xc1ac%bW}A#zc|G`f5Kt*Zg8(U^08ea;!l(>sdfx#?y{VycD6u0|L4I7-KZY=
z^tAV`YnQ+<l;i||r8XrYNE0!n<5zJ;Lz9X39?d*U3qSmK;pisn299V|u(=uX<&=>$
z5h2eI@9|?HQhRlw?o-$8udye?-CMGVFaNCxYJ`vl^DKBPX+P1;H}|6VC2)ZBIjEet
zNSw_!v7ByF3XP2XnO4F7pMy3+9Sl$sEdnH8JGxBpfR!O)Rk|jeZ<M)KN2TSPJaxTs
zLSsAr0|7iCZ)$qa!?~x~i%nfn;jn``lBC?_BKPz8{X%wm{kl@OO8Y;lXkoOx<3%OY
zv&?+sL4rFMEapI;%jkoW!95OBP~dT2WEp*Mi1eRGTt{bwzdB>T$d(F(i~7#Xi5Nqu
zoe|23dUz<n&BydAouYG*mLl6O)F8@#LMcIOJ;=Rg%A+xqEByB36b-aD_-0&3Z9A$a
zW>sNe=w~v7x2I0-e*4d2^j_gqbvmd#aa^DKH)E-5qSga~2{>BfoWm<Zw@FEQ>&xm_
z2is<1kNj0RQ&rM&XP>FLsD$y0T7@_8TE19D_#88u#{<8Fr{9+3O1Qn_g4$#r^02?Z
zBJv^SW@D?37cAO#Kah>b%hACH-TA_TPtTNX8^1K@q<rx1KOsb$K#aOS-D4o9R`fn4
z^)z@W5)MvB%nIgJ!4FBVGIu{O$``c%JXAg9Tt?5?dn_`<-erC^JVFj2#yEuHoT&)U
z`_9hyg(c@SDjfLx_jm%OM0UTPXo;8c!2sSoszMf&H&UEbGTg_`h7{fR0!WzMKY!DK
z(p3BJuSk`sIt7e0uU7_WxLKAZ-Bvq|@<EP8`pZT9EK^J7&^M1F=!Tcmq_mwHB3@zx
zqb1;;4Z?T@N(1ZqxTM3>Ta=<3RvVNtmu1rtSP9abb)$z#{|=^19?9+@diH2!itb^!
zgTZf$aG3#dIvouXaHU&S>fg%H>)}|#%Q1sBHbIc!kkUfn0iV;~P5bKw;o1Gzv9;Vv
zCrBXF{^PfnMDY;~2b9NVbAS_t+lR_Q^lEH@cJc*oUWjBolBBzkwD&)MU&cqxd@%ji
zfKn!eWC@%^cQ7J3_Qyy?DLwNi1Z7Uoswdxgd2fs8wt4WlMg9%0%2(;pja>?4q+Ccy
z)@~thOuytbEH5KDs&8&)f&2I8rg>PX`Wss<A|hg$hiX>_0WmeGf1i10e003;PaUZ2
zqh0@01dr%zYmui0;*3n)4@X0IPWU#-8nXta<+;WeJ$o2APwxD=X%3+dP}ju@qh@l>
z@_evTPjAZ94y}(F`LA3<QU6oaT@<I=91@m0r_9x^y*NC*0e^Xd^(o_la@!)F><HT;
z(l384lO}q3&@pv#Wt2qoYY-iNgBB#=!qr!V4^$>ybCTlzt|XiBHS&)`AvU}}c22KD
z=`&lPEwI;cqy+Ovy|ojl?mChOqHbq6a-+u=(!On%fJo6#={Mso>tkBobsN3ZNA<x5
zzaQXT;l@9Gx<_VxCfK0hkGR&q!!bP4mS}NGrrj1}vToF=`NFWA1R}c9;b0NEJU<fE
z7B5Ar<06jwVqgDim<1)`2P;O@eBI=m(43MeAH)#z;|YMCq8v{C{kutO;)j}3%jYQ(
z=wUjWSLrq$Cy92mo-AC3V`O@H2=#Z5<FJ{m24j(7s=uRsW(`!oen2b<{TZSvI_nUj
zW7h9yFo*2h-T$1}8I<QASG7VuNh0hrN~Ptl3XLg-7^0%iyYt9t4t!WoX<K1-+}Gn9
zG1QpV{UCEOESObal2S4U_rHs5p(Y;RX!${>y$hTbaMJV#NKwp@%m}MYnCL>X+vy4I
z_OTJp;TMjVbkMn;erLa~Y%3dC2=NZ*6~kY)8Sq&Lq&Ds}Uy&QqLOK3b#S;1-nl<52
zuWSn|R;Nd~AW~WSOfBFhxtO^4{JR@m63$(_OR@uB|2>Uh^wMv8jnemHRIu7=wQmO$
zDJ~lv(+5VAlz{lvzw&d6!tM0Iz13@HoO3@ltC*`(p-LcJGhJa+Phck>ydwSf6gn@5
za;Gc^+lGn3&5vy41C#IegbMyjNGP?#BN8%_aEYJ;c&3Q8H6{0%4qY=DjvZhetOH>K
z!Tj7yMmntTc-`I*eMgDePVX+hBv1(T7oAgWxnlsutIfx4#qK1eWaN+%&1+PSB1IFj
z4mxJiAvnrue=enCdPG1;$AH+xCn?-zO8(;SHm%b&&;*{fcX3yC{?I)$beN5qbSnun
zJG^XS+LdE3X}Mf?5{j!EOxMYG>=uC&f4cpSM9C*UZ4sUK37zK@0Ds>@vO3(TzL&n&
zaaw6$v6k%O<%<$WWdi^1+Yl9fgFbfH<EeVNyt$W;!?TAtJp5>n?a9D3UW9hIH{zrk
zFn)e-E@JytN3jV`_>Y648-VJHaSGGW?8Nnt&!FmC*gA0Oi#97?CUzzB2<!+S@f7K}
zqtEzul0iKk3wu4J?|1|)LJ=eFqqyI5>3R3Wl>o|}zsF&v&~`a$Cb`aT`VianEzwsV
z#sRewoTI`cug%hLHp$u1)7i;a!nR7k+h)f!4qIrgJa3qJgPxJa!q|<Li<$%^C;sZ6
z<0K@UBp1$|(IUlKP}~OAnAqIM7rGMTl>to(oYFfleons03R~Z`_<nfC?5e#BppAkw
zrX&vB)}FiYwv>qQC4~j3TUb~~$-ST4F?P60a(Q`qiI+c<#`FrSD(?mDBV~nS&O1ZL
zSGxy)hn3NC=`K@9Se%8Tsm5P0D4gcuqo>_A?8fcNBV*TmNl>I<HmFI=!mz{_g#Ejv
z+&T6E$MVSE%nqPha!1Ct2s<wA{PW~V?3e&3FF_ik5nW9E+==+6wZeXk42a8e2mdZB
z5CsWf#}D|$3D-khvve$YQ>b)c!cLE~2s?=V2{{-wb2OJiVp)iDyMk{)*~x$9ioKJk
zHUz~;w29{gTZK6+dnsDjw2EiC?@p`Lmz1{_XP+P3Ha<_`)=*WkpOlXw;K=XHc=%8*
zV7*OK?bM#!LUmsuMG8!GHF0K!E~sq*$4R5QgV#B%=Wu{hS*TbB9X3U9Mk!lL?nvIF
zK6Si<$I*u8YfO>TL!vRr%QMNdc-Ly$T*{C_i|*(VHk1nN74g1^dJ+u^K<5r(WWaAf
z60Qp6^IJmNM9mjiTBhj2o(RkoB+|w78iL(#W<7Vuf`UypG~rCgZW{nwn<!Nbw#C{Z
z77OegH;x4+Cc4oITeLhO9aJHvUwX_X8|!FY5EnI@6=uKoxtN(^r;b0#XsMgzf6#s*
z0$9?Y*+ZN#Cjb%0)v+j+LvFNxx2OFGy}z-n4%knN`#jv+LUzKK;9jx8rMxTicJ{Mp
zt@0%3&%h%g_#1Ht+n{xR>800O$R$E(+GBQjCz~$QgxJ!qs(nVXi%)wXmh^%zjtZ2a
zEaA~Phf*XVbtl$6ppQQ=HJR{o$MMxuYVjGKfuJD~fV2}xd~13a)Q+y=vSK||%t==R
zD0^SFS@0ZP5<>4-D_07M%>Hw#rJfp~b(55eENDYyX}-$bL8r(e|C7A-lTUeNflR*@
z^Us*x<)=Q#GFdfL1FV=@p?k$NSWZ^hxdQy#98B*S;)nR^-__hipcA|BJz&|k>;x?S
zZaL-H{IlFNU_I?h;T1!*AW_!mLG|)l6ab+;!02gomnGRjW;v<P<5{>f$3ypt^7}yl
zZIKTK0H%_G+{j|TQDdOa3vj#f(wuqoP#))j4~0D2n|*)>fXY|7i>#h2oW8z(%wch5
zm@+8X;1EB2k6hN^loFC~Gkp|2kcD;H7KQ0l>}9hezhZaAy@Ha{qhf5Vr07*7CTb<H
z9mHcXwySr74@OF#qe!Jg<+Isr`%c^$)Cgs07i+9>SJ$5$DLzSc8i!Qaao2@VtzDEc
z=T9a=#pQPfmdr!dZ0kj<+-)W9HZt9FGzxx7%Uf6!DMZ24Slcjp!Vu8ENaYM=&f1H3
zU4nA$y79B&9fi0=o^@$G-d0viIaA8TO8(j*QzV@hUs16Rr?Q3O0RoBv>rq7Y;_01l
zDkexO2#j?-6U_udP_?W?{aF$`CjzfHlIa~J^`VH7@zJUKzQ5-qNBDnXF%ddM#utM&
z0Da$L{^`Ntp4d<AP>!1q!|5_srF0f){bM3v4AYVNL!8y05SE#c4MFa2w;{oU4d?1V
z7l>Jv!QXt~{V}QVU=MzH_xd1yNn-n;%2X0G+Aq2n*Ig1|)a`Wc!`vr9)qoQxFynED
zP#5^$yMGC0Dt73&c9xcoZrk>(UqtvQUSsngai5k2C63SwK@yFHcabXd97feJEPZ>R
zIuHCVGa0VGj=YJ!OrTX8NwST6=C=~+vq%ov?{+O(*x^U#RbWV2We-%g*kV3z?Y3zG
z&N+TVQ`k>H_nG0Qs9M0b9j)AWd0dYZfPRjgxWv*h|F5L@UGclOkh`Nw1oyTfI@dkw
zg&E3C6v`TC>LtYIsbJ81n0lSfN|AcXO}STf4isOvUP3g+Lp9UdE&7Hw5JndLjxeMC
z#<rxSi&QUPCR@J_x3>XcB{VSd%R1r67T8Ik#y8|)<~QmG#<X)EK$XDnB@f8{swiki
z3@e7y;ezS>q@=t1<WcSz6)gGo#<7X0B|6-x>Ycn3Dy;YJ%LP6TQnV+6R_O+@?IsP!
z#K^k#uY}=zS((a#xV5FTM=v4RoNM<~c6I6JbjYO(UnAhox&~zHykMw+h1VE6^rQTb
zsDmWQ=<cm!-ABu(o0b)4vzC=pHO8`ATR9!WNzDgq!v|TgquKZzAd!N09vU3kvBQKh
z{%s!kZ8Sopm`#~vak%2+J#Me^>B3`d36dH|Ki$u18b>&OO7~|udF%Kzf81VE<HZY4
z5jSD#N(z6wxKEt}wE!;LG~QT^0`4@Ixk(a$mn$GH-qBsG!M3$79?bL=AH)=*J%M~d
zD2-#=OWH$~)jyx@*UZt<MUpcmLAn_w{Sq==>-KSrzFLuTUSX4M$Z0B$cq<#s2qzIu
zI&O`Fv+u6A8Rg>=ucP4B<l1^c4mFTGv^K7+q$>^B6~ryHB0j@R2}g=`DMHB8-n`Rw
zcz>2^BKgG00#@c7B`w4PcV=E|Hc=pQ!&)x)4WvkfY|yvQ{rZlFs5y~zx_Q;EMA1i9
z2Wa8smfB(4M0GYi;FLetfh+<R<<9AYx9<ki!<mY}$Bn)OR+c#VKAv~ue^g=0R;5lf
z1=f1&jh;fLUVZjD#pwsFem@6>(9BG`G;C1>V)ftT1T&M$Q3|cyDmPx8Gw0^vUcSY!
zZwoPmfal^j;he-~4&4c{;!W4bNv#I^LONn`3~;6sk)9g%Ld=P(QX=0%@fJlfA)7IY
zEG-a*)!>GW(~Y&kg7qe3Q<gx0aH5jZz>Zl}F&(I$cenZ?*dLikwX-Q@PqDED#gY(Q
zo&FXe4kEnD1FN$yVmm;J7Q)Xxb!s+}Gf4^$Xn+4rGhy2n6FAUt|0ZpP^>gO;o&o$`
zI258TEYEvnga}HZPFViEv7kF;`7TNy02Y#6TY51}4t~7z%R3jAUZSyr(mB>CQe=T9
zu)qy}eNs3zuIcNmI#V}Eqxaj@ZY$Gu@~j6dd#x7I0C}{^BCQ4YHw`C-vTu2eIUs6k
zM4AUo=&EY7`&qkp6>NcCrjM~RuiiTO)ZwkQ(((L(2;)NviJFou)F@#Hv7X7gl8>y)
z?e1o6#a*T35#2t&k*JY};+(J2o%mlvg~t08emnUD8>s4_Z4tHAnMgQ*Zldq?u#F#F
z{UwZ0vLZ=dZdRrovT^mp>UB07>AP76a$nq1Fp3TajFq?tb^}TC4x8R5j1Ab#y$ho0
z56tU$`0D<qVR0zMc74^BSXww!k#kPcbvHLVz+wnSeceDI5fgF9Vdf7^q<PjkQ^?zd
zQNFk-O}Z2z4Z5#a%zVa=Z*((|AcRhw5riqd$#k7Sm8qdSucF)?VxKZr#Sk1C6!v(V
zMP9<x04SS#&v-iUQ~2(#tlk_Fr94MKkR2YE*e1-0^PIBBjO~S4v(4p1bb$zdPasum
z^M#sdNUplzg35g5h=~4KU=c!^mIIsrtDkvHo&-Ncv3j6J8{+lA`IycB2>`+`PKOy%
zA2Qa#RN6aFJ|!NpMq;18M(o5z)4FvI3CBN{`f`0+b`KMV1rc}hxwoQ~{-d~70FRUg
z@wVUs8l;#x;Mb=xdb+4r)!&pSF87*4T^{5FmO+gdcq`yhv(zKxm2~LQBRF9@IALOn
zT@X2G9XjjyE?{B$Dtbz30HF9bZ|=<|<cfKT{fSC;YQ4F3r@)7^9pPO3Q(-hp_&Jbu
zpf=FyA;>#!_B$Ob+UmZkS0apjEV^1`c9mBk9#DVC`{wP1N1$6gkb@je{9twtR`W8%
zOxZ;ItfsE=b!yY|t;m8fP=oWal?BG5NO5+%LAU1m<|iMAUpbs*dJht}b!0&Nk+?HL
zAA8c3g?)41;eyih<2<=Yky)hp6u-b}fe-Q5k!w=~3fTOZHg4;4kT%hpQadQvdLmH!
zQ4Qi(rj4B9Q-WfrKb|L(=fdGuz?_%W)E_xVaKk^jhlAQ^yHyV6=(;Bfg7Pe7W2<{#
zjp?LjE`4pi1H$w7Q%Fd232?)3{>vEivgy1N5HlZbrj58-l!7CZ4%n8iF+WBic^=if
z`vaT;aziS(LRkk*Jxv*NNhUR*r+HphXc~aOEzD;REfNn@%zht4()xpwH`In6JtjeI
zfCnK&!WO)ve3_hTHS?W2s_0t50^5L178$5G2`L@AkwG9c?zpoq5TzI(*_1aELzHv_
z^br?~0^EtIp`ob_ZaPTLj9=)70UpCLB#5kiKH^~X$a)Nb5IYeQ6JXIQw>Kcro!J#|
z4khoG;6KasH>J>O#0=5o=<7j9#nGV{H?L6R{l~qc(A!?0Y)hW;8*o^}%gA%r&zV9(
z^Qsl22W%z%QpzoYMXw3xX$iyT3`y-=cNs0XJGa7g*%xF6i$hY!12H3TX!<Ci7_|e=
zHs9Va{Yt(~KRXGMqNC?Ir37@KJgrlD(nt#^9`}Oi5bk<I9N=NU?&KdwVGam94+_hG
z9Q-!{dv-<D7EPU(iiL|AT@~(v#Wnfaj*25iHv+XFwZ-(F2ixHvb%q~~#D{boj~|-&
zW6Y5i*K!;6Ye+-@Y)&|(-r~G#c89{=oO0zuhYpD-Ux089OIQSv^0aTH0Z&N189V}M
zzu4@<jf>^aubsEv<W|(uAb<(*aZ^AX(}A;7%YRoJIiv@mr4DXn{1D#U6-8nV;l2Vb
z4$o6YP=BQGKBEQag(*AF>C>`m4MFb7p0Ssw+slnYo+3FnmWb@oU<?DiI2qMFL7M5B
z+uk%~F+R>N7!nxx<>SjY^04izf>2#o2M5)aqj+V&;ERRG?4sy#C7@s31Jie)(-ug>
zSR(paoOFh&w_X~vjRpS~CwU^H1vm0>wWvSWW-~_Sg*!_WSrM8y@yI6eqgNBQOJ+r0
z8!R;~p6Vx4k>~j6vfG4V_CTo$+|LuaptuM5{c!}jg<Eck3zGd~96g^iATAqXi%8mZ
zgR9{n`zn<1cbr(%166Lz_LR3#^J_{coqns~bj%U|N{EAdMJsTRR4vxVRip2&`7iw=
z+K7`90c?&~;71D><1bND8CKJg7JCWTHP5L+6p*lfnMg1o!Y)glH#w23y{uSVR_)7T
z=n)MBHBSeveW0)y&ga@-!SzG0$szCAk4kNg?S|aK=6jSr;%N2@Iv}|^=hCLy250zJ
zsm_WvR;|_AV;I11?BL3<`F1Edw%#;|BsxC|e=ys-YZFN4rFwJjotx-P>A^AGY&UKF
z#pS|H--_NwE!hzx0$0Ln@tH1OnINJb9Gq@YZ4N<<x)N0ImUM-U6`FG^&w|C&aXMGT
zHI{;`hd>XDPH~EgfsH?p7awi4><fsu`SMP|pvLDOTs35iy!QguG=S7sb%zB?Jw#_q
zMHX*tCf#{Rw&$_nn*r|t4Eu!BSRUg|!z|xuMjN2qV375lVL)&R7Tqc%<&4icfKBW!
zW@Ox?>NOy=zbxr|CfGSsK~ftMQ<>9k70RZq?J^}9{?}k-RVeb?40EzoHR{QJh*O>%
zceT&F0A^kU$(%pFqXlo#L}PluR3#U}<)df_=XCCY-{;Y08TSk7`B2dszsX!6L?TAI
z?|23hAFONPu9EOVEdaRvB0MU`L$fm#Ls{K?{CxfXe9dDcgKfleHoy<=ekKV+7P`u9
zx|d9LXd$_J`KQgzHFLOgBED8kUl0C^34{25k2@PTdsfeeKGFI5+nZ@F1OvLXU2s99
zau?<Z54SZ))7<<5gF*f*D^f?tS|2`)BaEQ49xUqDjMOB*Zmw9!un{RewQ&jwr*U<l
ziYH#-LlEMwnJ%Zar2fz^!;va6kjl`Lk)8sT4@`Z)LZ%_L%8c-=oahfd9nB15nLuiK
zz>^4e2@d2hjEC6LM_8cNb#wG4Fr3n{?rO0w=DM1CDToF>SA>$j#pwKemgwrpc)HHd
zD4><0Hi32m65jer#q}cJ6HkHU^TjLO<3n;@+3=7bo#h?aL$Fe`yu7?tz61G`{ZjU&
zm0W&}z?DDj-DevS|Gs_Qjt#jy=}?Aqb|$3Ui=J=J(MA~mH~oiFo;K}ykov+C{h8lE
zJ1$eJ^0IQ5h~_1@&#MEMI6gCnXu-QlP(HxoBn*8Wu0ys)8pRu|Y7IHwviFpMSB-1z
z0>_ZOiW`7x;s6MjYZrF<4_;cf2~AJ_dgn=BmVD!8!jP8)qI$~3HwsaQ-59o09){zK
z_H9uEHm~mCp>Dh{EsB=LAq8vZ_A*EGR_r2G&HR=1#|i>`aKWqTsMcl@KrI0qawh4<
zRYYx!Pyjb9dk>xTs;RG#H_fJ1;Vl#7w4%nq$Y-;n42Ikk)|~3W72T0*q2@BRTY^Y}
zui+w)5T}03{BM!q82YbS@a0TkuEmBx>2LWLfODpq-hcYNy#1YdK((7fzE2!zX#00`
z-D~~V=YdP9BfvRc;XyFa9d=KjKvoX?_XcfKo?UluiG1C?6}_NgRD+Da#%3%&!oUL|
zc3H)9hH8enf;Px~H~+Kr({z*G#y#Lrbrb*&ys(r^12=ystl7@<#%5D6(3~~$kGE&O
z){h2lxB$+|9d2$|&GPB!v(TrDrtaN;b^WK;=YiX|W2a6u0Go0SXv%{gyFk!jUqTCL
z)9l}pirw3e<zJolW9_|#2lgfZuKc?|@NT*L3E<|u65z7@>HFS<YlcMv*S#0ITLgg%
zZi_fz>Hj#|g8>w>cbTr`0@q6CUfu=_kmC>M0t?UJ-TiMawtnG$$LD8toBPT6nen3B
z;Q>DnJ>3)kOIt*9Jus#}m(<-Z?_&a0g2lkhGvjvkB+x)ZpXi1>;Tz>S^UEb3$a2Zt
zTRE3=cg5$1Wb3T=hn$_A_I`g8t`T$ax9a_0m-7E^k-Kvo)I$TNvdO@@%wlEq6=2JV
zLjky30=RemTHj&oEx;*)x3=5-fA_unde5ogM@bW~G`Q&eK%aHZ^*2+`#Ct8}ni4XT
zY3W{jZ*h&KLO;DexYV74v?0SmtxQ*GPH<K6A)E==oz1-e@$bFWY~SSWK9}WtW54bG
z@AGS(^KF=^8UR{gdOrG0_0GDJf5QL&O5H!D>saj3r@zzYa)H+>^nhlPVoq~{#{oV>
zgH9-TosjgW{-0H0z{mYRKkF~&tGpj}0C@lRh6@Iw=R!S>ei94bxMPu)RQQ)m^Vgp%
z-wIrsJ6E(L3lv_!mf}QU?vQr`Zny$vkMEpImMwjCVWqQGh0?uh>4Ot5yH6>2)d8x}
z4=?Adu8-O-yMfgYw9jPE#!ApYyXcw73%@rPygLNkfY8A8T<g#L`gyAttoi*7+M{rI
z0BX}%D1!_K)>6_;*K}Fh{i6>zBzsv*eek#P&6`4Cvv%d=lbyiTsVjuj{a?5gDQ%bj
z(^~A4(!=%S%zEI_97kP`Yu2Bux!3*%v?TV=#-CH{&GvskUE4T^HRW#`G=DL&Y|;l#
z$^A~N0k%iMWuVZ8d9D*?%vk~4lBWUOfDVktOTfl-shO&0dhofb|24n<%#8m(^XvEj
zKc9Qv+dpZ2##x724I`VNiHQ?8?K^SY#YH>4Z_X*nslk@Y$^ZYKzjojKX$Ww%ugLXj
z$h#MJPW^r@{;y+0hr`rUR^Z&gApsg)xp7Tc24w$%Owg_qFJLFI^^3{e-35Nvbh&`1
zP5l3Re#?FPD;KJc9h{$gZMDeS{r`R(z5VO=iVrL9*Q(f<_*fn)uGs$|I{wSr>KD$=
zhxWujT6_PPyL*BE-pl7yUx7PL2B7xR%vyC*P-+DySxCA~1O_xuwnZT%UcuoFBF+E@
zSrgLkdm@%Ufi)$}0LJ@aDZdzSydwx>P!76T9t0hIg_$n_8i&}>CJfsP4~b8Q13tj=
zDDB(aD=1E3U}^(xGFkHw($j-GMPStFqoF>UU`Dg)XbD4~!m(;c$QA|$24V180OT_M
ZAAe(=iL{|c@@AkkgQu&X%Q~loCII5V&Wr#6

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/114.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000000000000000000000000000000000000..b590b7608aadbbd0287265e820ab68ecfb2eef70
GIT binary patch
literal 6936
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/120.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff47ff513bd7dd3b14e765f59d6b05a844acbce0
GIT binary patch
literal 7390
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
QN&o-=07*qoM6N<$f+m|c$^ZZW

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/144.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7dc8fd745e0649bf030ba506a678422ecbc12bc
GIT binary patch
literal 9037
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%0AdWgFgLkzAl4W?xQY`
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/152.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000000000000000000000000000000000000..a352b16e19f007dd26d6e53cd6b49ceccc33826f
GIT binary patch
literal 9622
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
M07*qoM6N<$f=DX61poj5

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/167.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000000000000000000000000000000000000..775d0f13a7a0dd1df91e27ce450b4a00aba9a65f
GIT binary patch
literal 10625
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
bjmG<ben@kJSce-X00000NkvXXu0mjf;VYDu

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/180.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000000000000000000000000000000000000..2da8eb5371d8049cae1cdc3d634e3d63fb999b42
GIT binary patch
literal 11415
zcmV;IENIh-P)<h;3K|Lk000e1NJLTq006WA006WI1^@s6J<SF(00001b5ch_0Itp)
z=>PyA07*naRCr$PT?cp-#TGsZBoKP&y-N^Kl%k>nR&3PJ<$;vYrHCjZ7VHJ3BfU!x
z5SofukfMkb5s}`drvd39$@~6ub1q8^WOwiG=H8p#XC6v+cXnp}IdkTe|M;Y(rKOR5
z*(2a3Bj95L+Dm5A?go#54QLw(UNr(XpuK83?atVMwlUyUBVYsCtESWLj16cT170-(
zHlV#~I_=KbfVMH<RU=>n+QjKhqs)C)KICI!t2z7CHlTIPKY+>(R{rN!(E9lJ5dUNW
zT6srCN3HW&AIkC_IzHX&AF%<Q#S{Z@P5={;ua7SSR?T%I^#-M+rZ~V4FP4uF<@U`@
zxqNe}d7M(yQg3;dmx;=@RW;y+H`##BFsVw(3Ge{G8L!0TM7nhCGF`rYnJz?Mp!3le
zC?Y0;!eb)nTKqMNO^l=Xq&P}WNv0dADGW>jWA0qJ$v>AL1^5S0fjkAMP(UFnUZ5Bi
zFIb#P7cNDm3zz1f5(SG>p4@r<)3$(I?M~o@n7w0{Y(NvS6a-LkWt5%(=ZPyP=*Xp`
zbm;scI(qpyosT+C;W6P1+~ky`TL6m%AV0*aheI;sa!7mp>5#l=)A7T9%g_1e@~8ZH
z^HcEx#i@K?IjUZ&I^A6+h-#FsL6wVFqI~}OZkbT*0Jya59NrA_91CbbD>W4$_Mu$9
zH>GewasnN`c!YMH+)cYq@1`RckFpewPl{(8K*HwE<wt(Lxyjep0bb?BkWE*sGdmPI
zpq>8z{Ku{83j;hgm8H8#cwZkM1~Mdf%`!n$uhRY0pmKfwcmLe}&gPxq_VvxN`ge{4
zv~1Z*NgNdyO@Ex+MO%+-rJW~s(b>qe6qgjw(mGFWf0mj6?@cM2eke3a)UjMoKNN~|
z2Ur2{#2bl}lA22S`~#>`u}ajiN&{*V)R-DpsZWIi3f}_m+o?<@eYRV?Hpc)OAi&Nq
z5*3no`_bR%`vaTkw_`i#T=aR~{`2O}LwWr2IPX&)%(8pNlmNwdL6=8Au<*(SmZOKN
zJxI^q(~SQN@C)G2b$mZmssEk@vb#TKwC~k`7PUetjiExU`*S^QI`9J>yL_A{90xQx
zfVmTZvzl-LIQp5CoJ8@-j$Nf{i7M2r_S4kjzUEY;^j)_|ZR|8znG~~X*PVawwSdMJ
zEkMSEZ$7kzLjMS*ZAX8ltMS(;z%MW5_0P+b>q#KK9hjWpPD`VN8;O*V6i)^77Nm#o
zYD66$XirUpnmBhI<=D70IQ4v+*8v);g>0|TIluYqTUxYZDeXPIm#ql}^5kcrdjp8G
z0ylsgn;6Shmbw-0r57LSOwH>)?>tC)Be1;&&|-Fjj*N+dS}|waeER#}zu790-#;Hu
ztXKl{tbR{?28$Oa!nkz1c&)OvsQV*bsdc?pY_So?QD*jbPwcP916u64qF(%P;79uE
z=V|oknSCsYVD3`dnLTlmjQD1;Qv=wE$w^eV!adaYvEKCDz0dONvCzH2mhI7iR&JU5
z|NWaLY?{QnGE|QIdGgyp&SWJBXrYS0i`lrwBQ)gcL3Dq``<%d5>zX%Wp&9)Sj|8-G
zo5TTc@()vJ$?wb9gauc!Es?W^i2xg}dhBE!ALu}Xo*F<!^B29v^O^OV-0KdH1GG{q
zf46@ljrndY9lvy(3g;`#hrOJpBfAPGIUq;JU1it$@Mnkd!BNx@Pm|Uj1!w_tWNajT
zy5VzLxjT&V<o2TgzkGzqHv7^)0*C^H9Xla8ky_o~f<`reg9D~mxAq|0wMPJ&!!Ofa
z!M_~dLZibzpi|+eC@_DZtzPKI@PD2ZTQ))gDi$qI@3ef2o~-qRGkn$)EFo?WXpzb=
z%Z>Yf0!{yUCdU-RyJt&f1JSH_l}KyY@k5&QWHm(8Id@k<+#1jV=8IP^(TEizY4f39
zsA&E`j!+Z3vpG|0zg47hWNZ{$LO$>CDU~f!hE))E2DRG)S_W>{sogYe>1%W@>Kqjb
zC}K-xi`N>QFE}s)%wKf;j2^7|fLnvw?EtL|C|bQcjNV>7ng<Z!lCYcFm-Qn6i42n{
z;$A)o9!<gZ+qmsv(X9Zjv@cKjX)2BVZah0k#I$7nRN5`d2yjS2S_;J^#Lz3vhR~p=
z2D+ua+HC->OeB4O&4)C5>pa$%l?kdgys~!$BqJSqb&tj`(dbrh-;%_ey<g{O-7Nqu
zU<P<!Up|tS{}D<h3KX~XWp_YGCf@)n$d#CI>d>$qecs^{N6sWHt8S2yp6!4ZFsG!Y
z(y%4NY0ciXY|y`vVmnIQ6wmxwI4p)=4`(OL*iK(KEg#tp>TCtHlJnw~C9l$&z3ZuX
z!D2R;-5JSBdv!Xf5sEsl^B0aSKbyHjvJKD-=Cm|+s}5f_f>!(yYD;Dh0kZNlMN+qK
z*pAJ5$XFN7knHGAwgFn~%<rxFfM#!<OC<`HuqAVLAi#h&0qQH)!>M<Zp7eIhQQ2yz
z&K5w!WsQTy<R8DHG2ebk#R?R&qvQ+#R(8H3w{I?HjvDd&Yc$}Aete+E99w-^4rr0g
zt9FOc@MW)a*r$W=#lAdw1Vnef8h@3>b^ekMi`n5Ow-nHlzzTPEx0yXS*AJ{fcBw>9
zhVspChwh9Ro0OCkTG(eEGdw|92}zF?y|fI_=qS8R7q4EVc2hbLVw%B)VFwvmG0oPs
zfjLgNkw7I2mY@{_mQu+=C0SruWzMq%&=Q}4j`f%mLcbo{L4^Yf*?O}@I1>+_RbE%<
z&e3tv^k|JoXim?W+)JyH1S|ox=u%&NH<l*-Fol^l?O0}O&<rpq-AH2Lf!slW&5B)7
z%z23W7}{*GW%{(~fEFEU^WiNNGN%u-`B*Wa*1*NRTM-xafXDk%&9XIVROs7I>N6{H
zFQI<KB*xI(p0ik5TcJ;z3TQd(L0@h&sXcQl+j_G#ivSUd$mo8s+5<GN*KG33<wp`*
z4tn51c?+4oOFH!FL@HgV6s;Pxg4Im3J&C3QT2u`L=p(inDe|_eVLqS%B+%|6S}}Cs
zGUk;=Iu$^TM2VNb9zy%h{>3?&X2;B6mw-TnClP^6W}EU%1GJdvKs7L6;UFrKuZVpJ
zG#|?>0de>P)$Y8I*-Wh~Ad)|?CtRmNi-s~OPcaLG40a1-z0B-Bm6LAGR6R@qw5S>|
zvbUPpmabgC!Uq!D-fTXi0iMX1NP4f$yY$i{UH>By#e9l`;?O0pGMQzu{KZV&Ic3Md
zP7yXJlnUf6V4CV-3ZO+gf3Wr=j?*xEz|4n<XS4vzLPSiYGfw$-+q-}ozaP5zRa&=i
zz3FoV)gwGMg8Dz!hu(PMb*@5S1_`_2fR@1m*IdV`FWQpXqO}0YjP$5l<!aHAz6-eu
z!JQ6ZT$wAKjrHY)LuljQ-&4^7MNQSI@jc0@$rL(ZDcxQ6Znn4>&GlglpfONAW{1$W
zBios4&I%KeMYwUxW-#73+~xJlODhI0r7FcMs{)IF8f>H?bNg^<4xDw&I=GAF1?20q
zd(KexjamoXP(aHThjI^n=MSVJ`3l=$);c3P?uV4aL2ueiU(r*wp3r1T5Gjd6+l$k?
z(y`0OxPGEpLI|L~8h4dube~2~)_Ppix2hQ$LjjFLA69q!DV^xxg+t8EY&%iZOoRS=
z01(6?gWYJz(=Y1+h=BT3_-R%X;S53LFEi#2iw_*twae9_<^7j%>Xwml9)<y0r1R=M
zVKi*XYi#2*YnAJte(!oxBy)@VUf_^Tu{G=IrOe;<qrXzmIlZ}xR%Ue;^}IXdGXQZ^
zY!r=uajfBCriK7oicMlbgC}?3Z3_cp#tJuLK)vN12)zYc=zSII(r4{Iri#TX>XOhh
z9uky4Ys(z^aNWo0HfrO^eXtP0bXud-T@?EAaxP*jWSp+fjUj-R)xGx5^)zJBE4FlY
zbyhSyFH#yQY-2l*p+?mnatYKjmjf3Lrf>Ieq`-WIO<}AODLt{vI4(bDln2oeKnr6&
z^e>p}Y~5J{A`Q4zN!9gnyANI3#+C6mttYi(yEdxn8ok?MA;u=fajlo7{T3Nk-^FD>
z%gWk%WE-36>}Waz5US%9QvEA7DVBMiGxHLveXY#tkN^BkedhP4LIDL$Nt2V^Wp1xo
z)VRi@hDd3b0WBxw0SjKHjR$_P1NYUU#)SLCS^%@yo6X;#-c5Vy28n?BjnGlFZ0B+c
z%xC-|pG|o2*XWtrPtjN1CL3axb_vh|<`Y*=5Vj|8F1c$0{!DqLWT$|I|DBejsAuEu
zx<H+lhQwtbj+ARTF_^B#MRN|Q8SyxH=jy?sRINl+mqG0kpk)<<Ssx|U5FToq>P*3@
zrk4t+5gZ1h@^%e^b%9#ucf}to>9yr=a5$>b^UJ|hv60MX`sy>U==x6O;OGW4Om&dR
z2vck|DVR=2oZ;YoGgh#s*|cxw5df$$7vOcC)nmGD9o11nn%Iko^3tF;Hu8Xo??mi&
z#iA8x&EQq+z87rinM&P&mesrE$X4n(yEh*k5J6>M?lS^7bS0%EQ-EJyT0US2RV`6P
z^Oi2L%R7$$&eRh|0~(_xF&<cWkJW7Il9YA<(2nrGk)fk#>CP1tXb13{f@G;o1z_p%
z+&QE0%HB;&`hA^c6kcYXkh4<%1uxV02R2dR0Apix90>r?)V^U``mFsYE+qiy0<`cf
zARwms_|{CT>X+M`1A{3j@sO8F6kU8$yi1h~92wXVY|4AT&AXZ<ph)R`Xa1s2)4K4Y
zFjBQdKa*2#u#UcA=o)7=U_CJ&x&STe#!m+~Q}22GY*U>H3q*o=5DMDqp^h|h(_{|n
zfzwLQ!AzteBJ!HmeoC_xv_eYb5IdbC2A|Zt=wu390`$9K@6m$oU)!#3g8?lEI_SUi
zd(EZ?sy3uOr}xs3#jnuiYgbrWYX!9<4JwKGx7Q3>$#KtecvSQGBE)__v6H&a=x(?!
zEw1n`jXKkZ!S7oKXgPr*5UJI~U^;o_6y@~;rB|Aoak1}FF#=%njEIe-kAgoSOfd5Q
zkdt{j;xvWK>B|<Sf_V#Qj<G-*6yDqY(QaHHMQg^0s2N>mbfaA-cN+?7wss^ZQl(-Q
zY0Z#T4vSg3B~8VUId9P{p=A*MK6ijRe1#M%TX)tn;91?vpo@v1E{$HKkJ{dpR3ahI
zMV+UYX7!-6k^kzF)B+q>J?<%AM-!-Th6u0W@*zft2+OxE?Z1fXR=8Kwx9L_nq*L>^
zFC?fOwlgIwh^qfRwp|>wF_~ZYS-`?VnHMNye=__Ob(!9ksR6VS_lSw?@w*?Rncb&p
z0?kchKn%4Q--;6pj5G#_ljZFeqo`Mt9=g;H-4YtS4&Utimie8v>T~L+IOp6cHsb<$
z@-u5^#bOmQ1)G3+_o+S9ZB`HFsuL~_wWH;r=!&I<z30(G)gI7vK$P~8(LZPFJVT|l
zBevrzHLKH%rgojAX|d^&(4y18`_y85YdRNw-p=Y)i=r&<!*&~+7)P^uOd}+b-YGs<
z0`ZsaTtRQFcvCZ|zyx|d{yIHz_v199`&3Q95fk3-(|hQ}Y27HmKd)gXJRz0@f5-YE
zVU#aVKFw6Tnk2O7&xbA?Vvc8bE@EyF&MbKib5_KJbA(*q$9k*UY6aA<EgM0hyH-<R
zer?QD4wrKhtr)O`>XfUk3Dgj5AT<x3+@6kHJW2un#$_k5P5MSMdp41GsP*8g3D6=n
z!uG7CSNKq%Z4fO%hle#H+;1)KYfclojAJmX;ZkM_0`g%G8zLQ{&uTfKi<zwJ!(Hh8
zHjaAgY6X<si~2ZIewt=z(2{)Dn2w+63aZit=ub9$PSZEfG_)fghC@R>mjm1ruhU&6
ztFuG`eSjX@@P>WgFjt)x{y_0U;taHY=o$`PP|LJ`i%oiFcgpW?T)>h58i&HSTD+-g
zq4C(IY4Bl6hePJ}rOk(av9nWLfVBV$AVfV9wd61vn-rb4`>bBH{n)R}8>hAilLI`_
zG`7>{)TVxG)!>n{6g-y*eL$HJqqqx&Q~Hs+9%dR~wTn#ip-?&jBY%qtZRkv-9WLqu
zo;kb|V_BhS1wIJkPc7TNwCy~ko!Y}8o?7xb#f0}%?I&qkw<((RRncuh__%iOdc#PC
zWL(MxmZfz=!Ze4Is+Q2QQefCe21D|VMDq2?r7Hr=6(HR1S*&c1-PPe;GUI#Hyi?*e
z5WO~~>m+JerM^B;r*p*hnb)6wI`}gcRG9+^9Xus1g%`p4p<!J7RINmm#rO4Zi|MUZ
z?-=Hfz&BwY5m2>e@Je3jS`LP)0WB|u{S&TF4#aj7cegksFfsUdSO7dF9ZWK|!A&u}
z`_x<boYgD}+#}%Hc62*+pA|v{1GK3fI9N{p-voO8-se;=D8a*DXZLdio>3|X`XdYd
z>pt_TVU-4&?BuEeErYgx-#0W^;{inN#Av<mX8v3h-CyxOdaw1nwB^V)8uRTJ9#xnK
zphg@6K(VOre5zGeySa)@X{jk}PCa-YG;HcjX>thrU!xc4gW&g616p=MFrGFy*lQ?}
zfqDvfY6i5h>SVXe8><+S7)~B!HxGS!FarX-Y;7jBqkp5$c~nXmCNVZKmOX^<6oR!?
zOFa@1IIuo_vf(q;Dgd(>CB;*X(lu!HpcTBssa4xVJ$Y$XPx|%PZ)~M8B0Wo7;IPa0
zX&Rz>k!iAW$bez6W^A6N**m3G`rhe&=Qf?ok3g*Q!oAP&?ZWMbT?A$<Ps^fl5SB+!
z=Lb8|C+$Acq&tcVaQyNKUeH>C;{o7YKDj7t@Jfz$Q>(L@<p!5sBcw@B8r5Q?xqu$N
zYy_>^y;_sa(`Yb5qCkR8?KYXq@7`difG<llaX3I~{C0c?hgo`3t|K!FCC1X?ehaBV
zWo?H<;TQyi6|zg<I#wewF?Qg`P!n7)ZQxIEQUiQTb}Xg0R*yE!FCi*Nn|iJ2%T8m=
z0ko`IWT^anaI@-@w2@$zS{<;pqV^qJqv8T~nz7PP{HXHOX{zz*LYehP^8S>+b7V_v
zj}eyuou_L*rP-8rs|RnYYPCbQc+d!dP5@&HiJh_XEXF@G$-npXpVVP$XTwwuVN^oG
zED~qc?iiX>4$-S%>ohvJTMg(jkdi1mKV(k2WWK@CW*IM;*tb@_ON)M6Y?^w69RY4?
zq~SxC$4=mrUIrNKtI+B7Cbwd|!v?L?l&LNK)=J^Uizx0Y2`#S=I>9~p?}dJX@9xsI
zOZ0E#zjP+@EFC<5kPqWVm6woRs($5qoY<>Yr`H5%>00ZFZRy~J!>UiwYQU=I9(3|r
z!gZSX;#hj2?(_eV%o(L4z;^lCWoj|84Ig^=u%km_-pTF_09{Xvq4I&{n9>&95|GJf
zBhJ#^Gk<bTK-h%w?ONIvi8-qINKJHJqHdjuI76)`x8to^jrmf{WcQT6he8J~Ws6Hh
zYy@4rdWqn7I2(DE&P1H0bJ6GM($z~885_liZ#ah7X6&1rlMRfz<e*x!Y!EMMEte`Q
zhpZ56MJ*=;(}^o5IqgczBx(7mjQ2WHhaxx<ZR86hSa-t#>Q0wPtJz!T&<ATjreXz*
zD_zF1%Quqv8~Q!ohdMscp0{`9g~Q#_oy%$Z&oe0{EtULp`Ki)p@eWA+nD`hjCk!G(
zrL#k+!z#x=qdEYWw1cNRud4Jo028}PQ0W?U`TAv+!ibqpx{>JI^0ClRyc6?*Zxo3v
z?6a=SvGQ5TTmg>=(y`E<S}Cmw&{(-GC&KOhFH@{q0ceNxh^L^^cX2@+KVLuA<FY!%
z<J<5*0I%(o4usRc5hU!&0zDuYe4t7Lo(rYUtkkJ@9N)=>N0U+#9TTHsmw;4-@Iai$
zx}mGNj4_^5f+#ca;F-vnDBhXgUi~hY1<}%Hv=N`2K*(vtVg-PeYJ`j_wjn(nA!-3H
zfChp4T8;UIng9*fbx3GzrAB&&?$l8qwv)zjb_KGZwZuEfy+8c(6ZM_f-;nGY37+|?
z>tuSm_LFQX<g5{g;_1Ak-V7w#cl*DmL5qfHIyB*Z&{vV69aJXB`Cjx1M2yg3p$<U3
zKz<?A0;mH>f<=vQfKd*1YJtSN1Jol2Voe3@o#)&U=Ta`P9IYL)ns*svC3IREPZ)I3
zmJ`}omZ>7<o8bDb>5Gn^YXY+jm;~?inb(iNBjQS#Imz?@Z^X2hrrc4Fm-b~*^`6_8
ze%277D0*%8N4imkVioA<rDH5e0NU`F2)dSVjS`X)I2HpEJ(q88ma1@}=gMX5c|ps9
zFydYbP{P>+fY!oyr%6Jio<}Q-RSrnHRfASgwUSjG+pdqVrZKyjWpkL?P3fpQh&{7L
zWPyFvbrL;Orx~jmSp~&&z`l<!ZTJfz1FvYZ--{4IW(nj!+5%{?BZwX=-)WUPplR@R
z-fWr50lFp!7spA%>7X+9J)?BiVvEf9E|HQSt^0&#ZkesS3^2AmU-G5ZgI7?M;_8SG
z<-3nvK2E`t+GnZzXZ&{MVNdjLCwO%N#@!#2Vn|g>RAn7ni#uMGgjNm!iqRjwaM;j1
zvdjip8FAI1N`1EHW+e@8H&FtFsJJMO<%Z1_l1|M5P2Q;twZtHoDpX2UsHIpa&PQKh
zbqzLaJ-V&CgV4zDlew=|_HJ4|C{)v{H3J%<f_qLG&l9ZtYO!q8DqE962QE{UW0zI0
zMM^K)v4lpgd|S7aMmq@Nf%H(bYsfuEE*+(|lRIcunX>AaH~wB6D-EhNpv8R`s6G&4
zEK~zpCI&U3Hy_$!YWkHp7KSw&N`rM)N6k3V;>HEA5$kZ^+&`MKJMcbHgC=$vPcPJc
zPSvg<Nv}vOHiK=*D*^2S&4Ow`i-a4t^fe0Gvqsb5M(d!n$to#<7WG{~aDR%WLhE~O
zr%P`;`YZLA)r$&f2!zMG97(M))U-xpF20^IjwG}1lY5K~v2=AT-1&JC9Bmr})0hsQ
zYO-!=1~e*+&fYTDy!eQ8UWSr|N^mwZT&ikqkZLALb{ZrpAk0)trZj^(U3!e``~??`
zRAYx;wL6SnTRwsvBx<7H)bzuf?~(A)KI|EO-CRIx4ItM#@Dgd&v}RM9tufL{O<NrA
z;NwH5uAE{%3$2Sq4u?3{jqfs+9t&#1%_`l$O3TEL|NO)pCL-a@^suSvzbD)yDyJTf
zJIxY$&E9qN%92+#OE$Fw>F7)p^=%qLBb$%Vv^v$cA?nlEjpLa}Tx*<%xW55nP}6pP
zs1pY$DKB{M5a~Dn*RLtJPcDylcBma&BkmKGV-lZLp4Wr{)qoZ~_K%ah=zlX_(tMy&
z+ff1Zhr#a=^4zqzy4AKJ<~lHa!VC#FvQ}5VkdnjAjBIJdW;>(pBF_@&hEWEha6loB
z#MELURND`4y-(c!i~BC*Fkv;;BpD0!fKCsbN6Y{~fQUDz-`~KIb*#>-oQ?8Kou^F!
zG(J}r%Ie)=goCbLu48;J^k~FgU`%kq#tnBZ;yBQbeW@P-hf0^q!EbPTmn~98mAzjx
zpv6I8HuI<>_$QX;hs>sjt2Z(Y&=>$YpmmwvjX=+!w`7?lvr2#xd-Bqw{nSsTeJ4gh
z+}_A-1fY56)WEf(T0+ag2Mu<g-HWy#{Z&)+nA+(Qlik;S<`E3*Mw#p~YyT$e&~AEh
zI;dd-Y}G*RM45CS4%-O4(vyD03qlLGoov%)n(iC{ISB+nYb6=cGse=V*O!l^6}v)B
zDblXzyK?F?a)v_U#2e4Qrg?|f1?bRSj@r+G`HZjqEb+#3dd{N8H6GF2A+11=w59XW
zpg3zw$v2WrIU8vGuAF*5+o0p3X?*7|snz{0G|#^#K+9?Kz_|m|-lT#-u9$4}f<UD7
z)Ssr)r{9dB;s&N`>HVgh{2b<E<;%+`sC1Af3x{TvLk@;0ozP-JE4p~~vL=#kHIw9u
zQC-dZGrLC)a5(V7*@7fjSSf6;p577F_uNh9(Q;gpf-BZ)I1p+Ev{(k97MNN0IVv`a
z^f1fo8%D=dBBj6G{~ZlnIM_7Dkt^Tm?avCG0s_Af0H($MEMucd<xoz%SsZs_wga^+
z4C~5_XR{|%1`t-9ZAZ4dl&)p=w|e9IWp@VYChC&wajIzsv`o5L%tVs$Trh7z<}8L=
z+A2^>-}e7|fI3d?tl4|$jUcnKPndf+sq_{M(xq~UPJ_$~WPpQ!B#)o5lm-&fHnYcc
zdc0;+T`N`ZL?G!Dwos{KUNnE8<`Tqu+s?_)N!nEvaB&P?$zE2i`m-)TE7gusE8n5T
zJC^8n8{cjMC43NpKkv4B+fqPF%mvD<Azcgn$6C|1axyUW_Fd-urANBa=+^q@T(iod
z1oRIFex$w&1`tXr7#Xu5r`<AzOVhfcVH^mhXSM1bT+!X;ZCgO2*Szmix|ZH=$Z5~r
z+?A)%<24`CEyQ#IT69`au!6lE;hugPlTNdmFtJBZ{@+A;{@!PGcQC7VGW)%l@u1Iv
z5&x*c#U=H8lQ%yD0fu6mC6LrHB#bM0={+~;0yLZNQd2p5V+6a5R~l~S5|3e{Y7fzZ
z-g9-Ca9ja_Na>#sZKja9{itw2L672@cBSuDKP%qB&JT8=kK2CelJL?EXyt_Wp4-n9
z6PJJ*^ton7-eoq4vS|A)7)YBA{9w3hWi@czwLKxHoYQM2HLme!_5fORT6ot`<_&Su
zd2$=eNUG!sM#3yEt;|WTOrlLe;L7N!d)65)TD%hT`04QuDqGSmp_PZjFE@^(Nk2?c
z%^0t)tB$+m^!s^-PpN&wwl1w+E$zy^vJ-u};d7d{c_tOJ&3Jl-@wU&1GX+JThBh1Q
z^8C64Xjcl=s2vr_-$U?y*q~4<Q>2Wg`m~twqT{34?j9K%>73%~CIA2oMM*?KRIrh%
zpv6_&NBcfvV)H5`D!V+lE&-Ykhv}(Vj@S<9nS~5B;fa)nMWty_W18J#hNI2&B0*Mw
zL8SE3-<Q)Hp>LY96Isy@cWZ-VH{!3-vvr=KDP1SJ3}*DtWkAbhZ#}Y&ddv<njZq0C
z+~7Wb`N;t^{MliuNM4MZKw(|NArVw)fBn0k^84qvqw!oEU^(>9?KPVoz3X9@)eS=c
zjh6@~1txpnSxmONa$;J?15z18i>P?o<)O~1N>gZU<97GU!u{>o4(c|mhbif2Mt!R%
zyoV3`NpV!S!o9S#|03d|d>KgN_4LDK39URFuKRO6b0F)@pw6lTQUE75DV7UUwrdc~
ztJ*5{L(F(Xm%K`A_pUSC_MTP$z3KOI*hiQss&DCutjlaX3<0#1Fi1{KrnZwi($Pyt
zHP!aeGEu^Z5tkH4Z?$-n!wki<XSPXCSeMR(pP|;1U~x&c)3vlrUi!UU<tjOz?kaT`
ztsJ<F582=@QB$!itL6*=v{Fj1*}Im8E`HTCDb0FP`qqSlVo2j2^u`OXvw6=7X)Tgu
z{HBRCZsP<FZ#6QGC94VZhTn^HMsfPq^;#Mxoek5WWso5$F}bKJs)w#t%VbH>OPJ9f
zss1p%*XCWSUa}g$!c1VxZUEM$;K?26eAETQ!)LXOgQwlABr`|cb7lpXT<Mcx5?U#x
ze?0gzp-7L>QFxhk6axY}E))am|3n|^`fyif-Eji@HsyTv44NE%g^Y3a?ltu4ve#@~
zTEk#Un$`5~UlEEg8KpbRCm0H7yj1Mcz2@|xUk-0ECB`G;_&MmfZct3Zb-Jf~9SUjE
zlb*ZxS%+?>s39oz4b|#uB8?^TOLTN3H>~?}11<b@5!XM2NzrB%%^KC1CkUS=H5wD*
zHuU5SX4Q&mfd1$FL25sxlQZ)ms}FJY_o9NtCB|_YPo46$DY$+cLJ@fIqbV;X_3iE2
zRZ`;0J*aKH@$XHvYEKx~x5k1&VM`m#>Sj;k+@WgJDOcMw0L>CHJ+$=W4WH2rj(;$&
zEOAytCqM+SAxRNqTfb60Y7+D)-CyZ`s$8rRQxvGVP{H<8_$k_RdM|A|vW@xgP$Lil
zG@NvhmS#Iw)C?pDEYr(dhcxL$Z?zc77NT6f+Di1PY07X3jYegwM*0$XE-qfZXnDe^
z02|U8z)Vd|;lOcZ!Bi|(fyxJ#r_zN>QK5jsj=JSUl$e~r%%`B&1-~=$CGqXCiLq=&
z0r#E6aoC(4YT)I#M<jE}LM1t(4(A>Dd-ZQocc&?UR!Zqj2Y#e}^9LAGmRMbvZoNxX
z5&SI<AOJYZ?&9AwOY4%qLuFR~+<pvTM>)APN=<dt54SIEBOuvF4vOSvrV?<P2512g
zI>SVWe}r;S4~pny=fwv@6>e7LfiOG2*VEgEssYn#+XiiPm$%k32Brd9K!Ny+Hj~@a
z<!hHY3Bca2wM>!c-V3#l&oKpy)9RN)+1X~6sv)CfDxg{QNDnUs6H$*jA$CxY=i*cI
zmrDVtIX!1klb|N1sv4F7TB&-B`+fqA|9&DBFHk(&RS(UxV?Us21fXhw+hovF13BE+
zXa~yeKE`wjjfQcMf+-JI&pExBHxBgyvs<6mG(+~ysz(5hrs(*q^l<fuX>PBXd}gsK
zBGM8-D^-t6*Dh1LDIM9Ko7dK-RfEJ+ZWO(_Sb?InV!$#sjhf*R%vK34jf=wtj*6}`
zx^wM5uB2t>=XnZV@A#dtAOXCn2DY&GT&iEWz9o9I@}n%1(9)>rQe4b^>2MBUvMWY;
zKAy!CiX6c&JB^_>^;%h`H)kuL(YO?JpYqc*`rKIp!mj7%$*_jMAtEM%UVm;l4Sce{
zr8%G34rrz2<NdWC5y;bFtCYf(o;<NR@!P@9dgXdJ^=jOM-fi_(wn%16&32hhvJ|Jp
z>38_D5$s7UZiCw6)&syCem$HzG;B{}I)2JJvxMnpM`tY8p_QFf>dr$K52H1E*V&-X
z4ixBYQ^4H%{+5JvD#;5pB70lsC%Mkcp|@dqPAnW?&L6g9xD9Go2h^hH#c|TAUP~I+
z=?f?4V0MBTUC&kteG9049C6emR*a<Of2^buwl~otXlic;2SE4{IyP)ipLO`yk+ht4
zGkID28;yIyEdY(~h@{5gj1GIB=5CwM(RspJWL%f+H|ZS#iBv@NT(2fQ=$)2t-7;@_
z-)rP^ZUblmH2@4}3)oD@eLs;3<jv1TeC!B4Bd1;ayD%s4At2dd*fT@fG$&=Hvs=w@
z3$xwrhE(D{u&sseT1D@y9?iERZOZ1q&<;c+o<M8{vVJfp@3$FE!S!34N)_SCH@lUD
zR(3=@iaSsIL9Z@*olsn!1DaB@H$lLa!S=*wargt3aQVP;^kv5})SycJY_&6IHHK~r
zXneSU8ekr={7u?&WGm~{xNH?9tEqME_YTU2G%g7BSk0#NS^G~o(8#JVP`zL8)__)m
z8Uu++0W*J@?W7N|!%y{2`<<VIRE|%IXZLmA$9vN&&4%!~#@)e;Ub#J>MH<Tq`^SHN
zBDl-XM4q9*e1SHVfPt8nO!=tTD5_k%G8e#X8q~y*80;oyxvaYD5rAe3NP3b04km~j
z_+-Op1Y$_!D1z+8meyHKwF;@69M3s`!S&kE$mXv*D-}4h-aX^;7(mN#D!0A$e{Ntk
z<Yf41Dw40Tb6fO`p?8n31X$tFLWW7T5>;sUbHnJld!FTw^8^(m<0yI@pjld{IruTK
zMPhq|&3f6+6)asqVq!BIWxZHLy#Uu7n4mg8*og)`>EKUsNBeTtJ#yUPk$}!jTK{=w
zA5GXai7g>G)SzmX4ebBIK!6Mf2_$fnpvHufYWG&S$77|kvX>qWXpz>CD5B?myZ<|y
zv3V8&;5G-{&8c>B{w0C)FNyB2SeN=e)`yzadD;o&%m^ygN=A3N&*K3t1F765aX>_h
z*Zge@=)n1Z*vtoVMOaF5nzs=P9Xl0Dcz_12cDdTr{n2iOkWcxYsBi89N>{$aYXF^@
z8UhZx4g0>K#lJ6QiJh93Mg{WZ=ZVAu@Ydv9EL>&m1^)ZKiuX~MhdR*<b)R?gW_#kH
zFDtNn9iTG<Hh>HA_2oNP(Dq}$G3hp9L+~S+%AO8x0WqX)VsauoMhXTL<Z>My8n$C^
zp9B$kBamg@y%x}{Un^|a(%~bQjuOm$-~YXdj$b*!DhOzD{d4;>A&MtSZUHg+2E8~w
zDUKy`)e=>yS)He-<$cYmM(G+(p=M_7nXDwIRloOYKr06k1lx#1m$DKG$qDq^@!x6V
z{*C<Sxu|nY!VRuyIBSsWh|8S-t^_c?3z9hDMk4pAY?0E`s9Ga>rq0v!aP>yKNN;{W
znL;jZ6-c$TlVbp_JUl|ZP<p?>j=JmAZrXBqEA2eFi_S!x;VP$Km<PCTazx*>fjhjx
z=5R&(utD`!+Fv+7l2Ve{*3P?%UtX$MtRgk2jOqkU=z%H?oa~->9QP;}fEG}A^1V3@
z&@x#{zC9(lagaQ8@i3R4*mHUh9lCIsE<|5sD*+Cbhz$n7@dGKIvDl}?JviFQ9P-Yh
zMVS<vl+t*x)W9ks;j*yOlqy`3f=UNb{mS*2mFVs=LAR9G0O;9b;md`FJsFp}zdgqS
zS~+4$2TaDe1stwUhM%G%7mv`v3y10W<>PcV@+?KfL{dy*3|9kigtEf2;IJ-;J=X^%
z<rIZN<=}~hk(QRq&xuMSrZX%QIE7Hqvs_?Vs$Q}>)hrXlKb4DDVmjhmRVfESk2lzm
zb)#7Epbh8@qbNCy8B4h-Z^O0^E(#D&UWmRx7p`99fT_rs2tsvR038b<=|(aKO#!?P
zEy9;o9e-5M@(*C(f(or@{y;8nRJu?pDqXlV|CB6LBGckVvH-M}s51gAp70JE&{@oq
z65tL{I;60g3wo>r&<<T2&mun(d=_dh<<6nDl!lu3dh<Otpmofy=*gL7q^p&j85fFt
z2J61~C;d>U<MVR#BQ~H-oc`NcL2~MW&BUR0zS;(~6{BpoVc7`SfVOO??S`xv0UOX(
zjI!N^Wg}n%+Onax8?s^qY(QHv%61!;jerek%ZA!+$choL0d2)7+ih4j0ydy68)~~D
lD@MQuv=yUlw_(``{2!-KW_lal1X%z8002ovPDHLkV1jfb983TJ

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/20.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000000000000000000000000000000000000..a02a3585dda02fea50c666c7780b8fc7d1adb4bd
GIT binary patch
literal 1016
zcmV<U0|)$xP)<h;3K|Lk000e1NJLTq000yK000yS1^@s6jfou%00001b5ch_0Itp)
z=>Px&vPnciR5(wim3?fJRTRd5Z@abYy0u~1S`wX38ukalO=3XE7D<LA4rPvQO$H*G
zN&f&;91sy0Gk%msB-8N`iPI@2?vstl#2_*1RCFC#Wcm+IN=&AbHH5itv|ZP}uerC(
zb=^ozJblxo=ic|Z=RD7IPZdqmG!i1JM$zl^iRoFt@3cpW2h`9IkD@3{Mkeui`?)+k
z$cW#E0@y8f^0V`J$gu)rk`Y;pA|A0Ci+=&dq5u-najBEW-VgBlyhPLpilUQwO;btI
zCE>6;a6SAi&gJE|^E2;CKv9|a7Hu5pJV<MQ2WCSmCWC2C+oGC4I6!bJh;w-bhss}<
z^oU~QN8qWNicZn7w|yU<^tE8O+EG;%k&h4YQaBREkYteSqk&O2uB_y+vrg_67)m4>
z(ZmT|1KqsXybGJf##D4_Ze@xhI}kh`-`v2vU!UasFBjwi^_6e2;lWb5uBe)-O-@Zx
z(on|m&0$iKQ)K&6ptumHkKP(3C-Yv~wzrUGOrz|$ldC>2i){|NU+Bb`Y>c)1{cjg}
zy0Hptss&ZkWcky|i8l3$Uh-D5Y(2eKdPz4~xUl<kdIrx?-Mm|J*i_X>VQxVT@Yt6p
zIC8$8%=An`;gIAgszoIyk!S>e&`(ZQ4&T1~6`pJTtb4nJ_HE6qSyDvN;k8`3KE(dV
z_wwAD?J>Zbu3DP=S}_~VWSBEJ@zhb=J$3YXJ>)LTW$9f@ID7dVuRKx1V|m4_JyOj5
zcQ0jKUNI-Xd5>SO5AjUl7Tzd(H3oQ~tCluTyJW1kq=qd8oB84DkCYy(U`Nq52~==s
zH4~u;QVprnGD3`CIEck$!5<uF)2d3`Wv|V&T>r&8(sv)bK4jTF4@h2iHdjj}7iHbY
zpMU=)Z;{}4+IP|>DBPI1!JbEV@%$q@Zi_N>k*X$_++0`TmN!6HXZYqHtZ&#rG#ZiW
zOGK1e4iMmDfiX_GnkZacFk_q2qvg^94x58hTbo#DwMz<`zWWIGXLVRjR_U`uD}|;)
zWM^b^c4t@2Hq*vFGtf<S%O28F(#T5Bl2r<m5BxsBr$6;b<r4=}vOXD~-$%oy`Wa)#
zU%i*w_tENUV}W@A<Dqd0Ab3hoNuSlG$mw)CM#e^Xa@9uOjK6w`!(o5tK{_s-mLM_S
znA56I_f|MS<q9Y6`G!MmG$oF&_wo9!%|E_ui*T*pdgt*qP4s*Nc5wJ-M*JgEU%SOd
mes(@9|I2`lSMUG)1^ffw75%_&mm!A$0000<MNUMnLSTYc%<TsN

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/29.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000000000000000000000000000000000000..9332bbfbebe3a53fd8331ba4594b5513619d9ca2
GIT binary patch
literal 1537
zcmV+c2LAbpP)<h;3K|Lk000e1NJLTq0012T0012b1^@s6R+DEB00001b5ch_0Itp)
z=>Px)yGcYrR7gv$SA9&>br}Eres{<5a(4o9XSPU!Y3h7|nYE?P<x7zmrlOgSbZId{
zL{!q6b8T(;f^R@*Xv~t-0z_q^)}XYqf2`&U!=`}?UFwm%9B_AVznAtr=kGe+$@#tA
zAKdrl^SpgN&x4?<s)_*?9Z^&TfB>B+_Bbsow5LK8L<oW~&~p&_1683yQ55Jzo$n!8
zk>PN+!XtSQpf|uAXzsBuiXsH`4c;dxc}AAgdeHU&l{Mev;?0Zr(_V*WXEQvq2L_!1
zVZot@vBhA@$QLnd><kPw4dpxj_q)5^D=2wG-nDnM<KTrt6kjUE-R8S&M1Vek_b7}M
zc1e-pkvbV<c<68}n!FJ2PG5x(V+gc&1_ad(UcG${8%sVw&EMBKgaoE}0RJiw;EPD7
z)QMJiE5<xI2HO{Xf{Bq6dIj#{sRsDdjh~TLv<4kg2TXw`$g&K|??8(pKwpQ;!A9;&
z&cn1(Q+ojWK(!oPyHky&1<4#Pqu$6D2D_Y{PUr+38|vzGfePwaN)g6AHLgpJ8I*EE
zA3B(n{|4$BZuxRDSU|e_@q&+V{*NDV_S!kv%vLnJS`cH6L22682nq<|il$m%P%W&v
zmHF6tZWpX(D<oMO6rNtxb2X>VNWq5qb#Qh#vAl34F4td1Sa2BbwcJD2tLu?IE6o>X
zK~WTy(3{$ukg#_i=Yt*^Ob+QD@tATyA#yx+FUdw^cqHl{+{S`Wlh7%7_#G<5inXT@
z781r4FL-2+N+6||j$=ddCWMECb;%=zq&EWy(Cz8q^TgL1_ii#*zgSfWlQ9JORr`^B
zb{A|G8|<xiWG~*%bdnSaf+R~SRb0l=bvS*w0z-m__&_yJh@bwz8b_(v4lLi#9xN+(
z3-=xOv1Q(7yfb|z^ExqS0fP{Y5+=++?y^0QRpq~&Cg#jXZNn`D8jKtQTEsgl0Lrfh
zOrFcC%zMv8O~R3s!+bWcG9Ozjc3{$oIFzNAu=np3rQ^HmN*E0Rh#EQq<rycu!a{{a
zg)nDNqBoy9Jy#k1wmv=+&qq&2@_`i$PR5Y@MVKOZ-{E#(OX6m{J#7UV+Zr)zXFTWk
z@Tx<wnj=7kdGhyD%mn(L$t*``aHtp5?yz$axjk;Skis!_<P;oQ`8j)$RlEr&emlv$
zTl&HhHiqPJ_qTfyHzE#+v2#&tuR~Q$72Hw>7mnNG;zBZr21u%eAVVNduPukoV)cSH
zIh&F2&{GnGCT9~qTfPso$Ij$jQrW+rn*=g0efDase`PHS&L70~GuaH#;%b2)h%g&X
zoCeCH*5)W`^tUC*($!Pq>1#Rjaf@>r$RRwwx){$sG0N9X_Ww|TZ52BZZVJcK;gR_3
zpL(y#h@ww>HTB}2%7OzH1FG^EYc$F;%Dg$16j{{?BGw$qM8%ae2n`8EySp97QollM
z<V1d0yEs2@A#;$HL2u}{XKKnqAT7=o%#BSz&eGk?3?ENRE*(c!@kZFpUS4IsoPmtl
z>6{nxMlb4E-ck>*=AJoN#Ujwg_9pCHybVbjPrEA;6%plu3hGG8ml!>KG#jl+C4pAf
zRKa94Jse^BR!jeUc2OjM?Io^}iVPbv3~lZ<R+~);?_<W8mwXMN^w%<MF55CFP@-Q$
zYXh?4yJ>IFF0%x+4YjZYTDa>F@1i22Sk78q4%9b#b2`w{CXZ<AGbl~_re~M&pJ}S^
zRO8Ku{gf(M6LeN3(L1j6H+0ck1W3jbZH}fCVSI1>RI}QDav%vKsiTHWz}oVTqP;IN
zMyJzpYKZUo$+`Vc4&8yT+`fv9B_HDYBg{x+c}CjG?XI`sY`|&oz=cAT_)UWbeE`!(
z>ooKzMMRqh7f(*&F7v;pLH{uJoO^#kt-Tf`o7&t<0v=<F##EkrXFmGes{!{l;S-lx
n%=HFX9_NJbUn-CLf0=&)noXIn@XrfI00000NkvXXu0mjfZ9~tL

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/40.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ad24730ab6915664a8aa18a40d4856a13c59e94
GIT binary patch
literal 2282
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
Ef^H;I^#A|>

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/50.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1d873799721bafa570d571928cb82f24243e3c5
GIT binary patch
literal 2776
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/57.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000000000000000000000000000000000000..27d7e8599f82bec5a73d750fa766450e5e123a2e
GIT binary patch
literal 3230
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
Q@&Et;07*qoM6N<$f(#8)YXATM

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/58.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000000000000000000000000000000000000..71395ffb8e585642c602bcab0d2ff455ce62f0e1
GIT binary patch
literal 3346
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/60.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e12676f4f3bcb1190676377db77be2f213f30c9
GIT binary patch
literal 3369
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/72.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a3720e633247927765e8dbdcaf1d49366ff0264
GIT binary patch
literal 4256
zcmV;R5MS?!P)<h;3K|Lk000e1NJLTq002k;002k`1^@s6RqeA!00001b5ch_0Itp)
z=>Px_T1iAfRCr$PTnBWNRTlmxlSv~5LP9aLm0e*eitZlQ1}LyfOK2j>LLwy+dH_L0
z5v*&$MM@AM2qI0SCJ?MEpf0+{T~HChRhJS$3<;$7WY2decbu6_3n_zV{q-C@nScIy
z?|b)t_q+GL_ZuoJD=YEq<rD$KuK>BW4zB~G23!eSLpH!5BR3e#|Mk|@pa2n!ipmP}
z#9@GskB>+5uBfPh0_bD#X;9GW9UujTmcYr`U%5qj$ScZ4K}i8h%S+{BlhF@B{y_){
z2u84faJBCcWInecz^XTZDk>{cSy=(2kI^#0O9k0DcJ>%PKl25SpF4pwS?S2k%S3*0
zK1#|;EY`(|`}z6_I8B4Y(Yk4CbZprH*S6}4&R2CpSWuYdndKGbVo{F3_sBfm+*IcP
zsl_NTIfXemaN;1|{px)jK79n|v(KZXyaYyr5xz!W`1<&YtBExT@0gv5RzlY*t0+Th
zc^N7y%i(AAL-VlaxS?$~^y$<GJv($qXke&JkwDdlMb#-l9Hats^1>;+@y|E0?~8pn
zopnYgALthdlhI`15P~Ui$iEIq+F<4?C2HPJaEnTc<o-6{t<mq=z8G=iaI}kPX93FE
zYHMpnbpjAqo0H%_KW6`kRR`8!*S~ioD?ba3{2IaE<S*k??x@Y6t=*}(v>5p%`DhZ<
z1cPsgL442gxT<kW0Z%!qHoqmoq_#T9+G^H)v>q$>uM&_#143ak`l7swP-{C-N8cw{
zMuU&IU`|mknuj(+!tL?6|F$?;Fzc~h?(f$MARWMeGfv{MT?_HyHy;VH`uqCJ;OyPz
zatG<j_sC^*znsEcbid|SJTYVeu8zFA)*xLrKnl)VU%rh;cPzlAf=dVs3`2QkxtO;%
zF0(}$kzJTAk?yIXkE37LzO@3W#sFFS_bdBX<N1Ay5NHaNuuRadgo`9i*-%(oh&lac
zVZ!YX2>&Th)?|z|0*K%+^l|{trM-X^e_x64M&T9$uE`JA_r0o%7$_$7O29+?XPc#f
zkID(pMo=Sw)UBRNTZE+dS0ExJLI7(>uJLSI=DReVxsZDSQ+iLroc<5i*xft^NWock
zAQ?}k{uL3yO|J--vern>z@x=q$jik1=y{0mIj%+^c?6Jx^Ul$Ck+6OW!U98uh`nt&
zbfe<3Vo}f(pqdEV1Epe<s(xi$68_w|kH;Xn1&BY&0i3#U3PYFQgW|Fh(KpTpQxg}c
z&Al8`VM!s{MYcn3Q7$raG7uaP?9{4xKa=4AlRtJ$c@u4#wvjow%i&xCBsNlEwv@Q!
zvH0Y>PbK&9cC_*_7(^UWp{GpSiTvU`j9WVa=X1`B4s$j>x*DzMmfzltb>r7aienJc
zc7C}8NL_3FKQ>_gjs-%>W#whHS@=5nE?1pav+Dkr(d+kj$TL|P824&Cm;<`9Bqqot
z?Wc!5iBUI?bn9wP0b;p=$o`a@f#{b8i>BZTcuNE-vK&K3?gh;0_aLVBnPjmR{{4rG
zKVal5u{fXe69P>E4rxGAkn(b=H>FPBiO7&hbHsB}xpWRtMTKaFCsUrrnh)2aX``l6
zdhq6@mJ@S*H2!w)3&JTRXI^UU$IgC@kt;`wqIb5SOiMEJGcmr$SUeg%59Olm99K6T
z0;J@Xo|TU1B}3%Ly<Hn72n498v<ThWT!%#?o<mfVDA8eBy5$0L@~KDmVEU$+XdKko
zDId`jj7FnaQL84coD#M}fOIup*!Lom{{FJ4Wp5L+S}s8%(ME+wVa=FV@Vn-}a|qHy
zTOY>O&$gq96Od?KRN0ezO~mYevz&5KHGmkgs2lQ%@-XnF!N|zXfXUb7RqoLoN~Hy@
zB(FFRks%S-IAJ~7Hf?LM0Li&vkjc~f2_}izo;&%>(y~%{#-7C8LhQW9-czapq}G%6
z#ao!NVVX-bZ3sT%fEhWNd|F2*f|OH~gAOgO!Ip%LLb@slEz$Sm*YVh{$DMirt%y~K
zWq(<M0oV0&XhqckQvONYGz%$5_MmZ4nAhBk;IL}gBCG}4Mzq0!;|I~CQ4`B}C|DWM
z?)%fdcy{>H7FW|UF8L~E=}?JotTxzN5dq3B$i~2K{jp@^Vuw6r1CW{+HO7F&gM{fB
zCA<~dHEJb~S%up>_CVsMnb>_e)dnQBg0<t4(X&GjixsF9tv;{@Pw)AwLn~72B<On+
zcZ&$NcQYG+^r2MDv8%_Rk$)qvr4*bvTS9XO%)!JvCRieA{JI3}KYmd1LG5I)r`9>D
z6Shv=ETNqfr;elIX8D&~N*5*I_W2|KmRFpQ_2XZ~&A+{=nwvQUXx08?JhS&%uSGAl
z3RVM?MlY>$DT8PglJB6U!;qDiWeFa7|LXf!qIaiWmPsmIOnQAP-ah({x#DS8)YE7-
zxBna@-0^^C0L|F^pqO$^`G>1f+a#8&&(&@n-Wq!ncbP4ss`aB5o_b_2rf-^I2_V8H
zh1s~P%bi#;dYOewv_Q7?pWE=zoAVHE#b4ISoDI#GZUgbs$QNxSgD7nKt_G{gcPEX&
z(e$GT@(c2K!W<+!q$EQrR5>tbPof^bOOXA1O_(3^2nJmrV?&<00K=2+#nB(Wk};Au
zsGRx#4A~6bT8`m3{&W6Y3|&6lVdl=y>7retI%C_EH>#SKKabP`kdhN8Ibd;&L<djx
z55c)ua0!2GdjsZ0&&Bg;i}2aWe@SNT&Z4v%YO}GSDztOpYsRj|9UXgGR#vTO(<hrT
zZ~J@;4QNDqIW7r(I`tB1pygGjBr!{d;!M^VsQ_399o0ij#7WfldZ-#e=PsQSfyF`;
zI|S~EV(R}iZ{|nro_b31=G7}iNm;RoIR*tCJSWEvYE+Y}uzT7Lv!zru1T}jfylj}c
z7!UH3Ss733GZi!MnqJLVN$wwfy&s{0A(DIP#qY9r=kMz$X-7*o9<2nU1t2A~?|%9Y
zLzWHqDEH!^C<*@9?hjZWzg8rHCXh3?%$Dw|vwVmvM{Dicsw+BO)lte71ePnTdxIzj
zIqBu2DCGKAoAij6N8<3QBLXZ-4|#=o=+Ut|X5BRdr!r5A{yCj_8tE5*z=?Awq`By9
z(Fw}Vsc)ivv-UPFT@9eG&m9*IGWnQXT8|m|a^alaQ@5j4cq>aN=4a^_(?z7Qv|!Ii
zw2s`uT*Tfw8jlQ|Yw73HZ64qKlvtr8lXTtui-^5-6doVEK+*;RcJ|Uane_UPH-HPu
zDj~zVUQAkPeH@?Jx_spx0`ABocu#3XDYi|11HW(C(G5UnkK^tY?g3Jhp51pACik9b
z6CRZ(mc5sRMQ<&Z0>73@tbP9NS$h#+3Xtj`LpXt?{yOyCrwFccH-3-Nhnf4i>>njH
zC@41XC8FCo;z|3>Swh$@YUpNw%CLR%7Ibt6kS8vt*29M3-Wj_Q5gZ|VGbqe>>0nqh
zre-;N>8$v;S-km(YyF|!4cMHp!LnMMFhO6q>j|v?$3{y?=5G-shJLy*OB8eyvlujQ
zq^gU{>|)!{zS-4|El7!p<{PtQh*Ras!Km)&+vQFqS?Lbzfm&;pX&VzQ>4Abv%h{Wl
zf@YzSHU%sG_BZGMBi&l-?Ro^nnxyLj6wx_VRKfiOsfoMLGOUGTl2(9N<{0qOAgS9r
z3-jt;j|_Ym<9m*^bX)BQtq~?Rd5jP+L#PzEs;r2`b8a%A`%vgDerGAReENn*@}SND
z(y~Wrq=b2mq+0fHSPvSud<4F#5@C*XjD~iq*1lcua$0QC$jB{sj5xF!OBk;LiJJ_l
znpt<E#84elR{*$sjta%Dt-1(F+g~;SY59^_bIOsuPE!qyLa&ZpjUFAkyX*|8t39&)
zF)&J5mn%3p<riP0NqDNEE0?<1RP2lITjW_Tw(^5jcsA{MH-)Bbtc+cbJG=bZB|z$C
z>@>tIVRxj+MvG{kRUiD~&U%zjDIMkwoQnr~j`s|pL*IUa*yOPiYMr?lAG#psQQY4>
z&M61!0M&|;559^gQ=YL2`<_gqKJQUJd_8_0{?z_P*8nL|Q;?CUDbgI(bJZ+kx<#8a
zU^gvX4f_n$Y+rw$@x4uys!sr1JzF$cd8xFtC|5!PLR=Tj_%NL;%L#jqq{&V#dtT5=
z94l~XGg73^A|cbou>rNB_l~`f2i8sWdaYaCi=~c1*AK+v`y4N{)1v*}&(kn<W1`cE
zXsBN>Xg<c=7U#BwYYl$<+5~)XoQb1%`~2z&%SSCm|7#s@)vF%nt1?-0+h>r|vWK-5
zrA*%`yyDK)^mFdAAC`2F+kCG+UC+|?35}G(97{9W^0NNjS~U(;QTOT88?VHzusKTL
zY;x*qPo+KslD4;6+CMiACt-HKnVvTetzCf`bM%tIl94;(7tOfuyXjs$Gweyhh1y2*
zC3~Qhuvt^4h4L_qr-iw?v?y8&$H?@e6<gR&0*%|v3!bdBf<#MNIC#FK4hpoRWRinp
z=^^ECDp>yx3nCZ&T*RtNARIkQH!qCqJ{I$1E@SfoAF2~$3cw0uesKYOjn22fnB6T$
z>cO$MjFMV1tAWlg^3di_w_w|6J7IECr>PI1bO(NrUm#Ma@4Ec$FC3im#fC#0!BoNB
z1}cI?t;0T3vye!1YjZ8SM0F9M{7nJU??07!3SXT05?`ht759?;j&=uG>H`>krf#6(
zCiBs^jB*=&J=%iDa%NoeI2`)+klWC#hfOHJSPvo}S<(q9S^<7WlT-}}XhY^+{5^``
zo7&$bjY7`L-R5%7H*sd3mevV-<*s&=>PiVHKIRiZj)>Y_x1+ADNH=k^?z3acR<w=y
zc}Iv#we87iA9b~Nzj_Y|uT8e}up81fY6F;BFgenb1lz3+ax|DLbtAbaz|pn1k^Ir<
zhaG0@wYDIAz%ThI!sOnQ@KAjoMUc?{i#^OT(E?7r9%fOHxVfA^#M6Z@q`fE+>B>D0
z^&lqP9^Wv>p{#vX-EH5OZ^<TemJPHtQdg}QPx!@#P^}Ksv7<|^<Em!v$@ATYc~=in
zkiO6OFXr!Dh>yPc7@+|nVoeRXr<y{7-Ba!-p!n=@&24yM$U^)kvYlHY=nkY>0c5SV
zX*KIUehn)>SS>r<2~@)#>dis((B`rmE$+5hQD3@%?m(!sDCX=z*2f*$cwBuT8M_Xr
zNXfSTkA)XV7k2RV=40V48@IT!j)gnoCI0Q?g_Bh;7I+({vrdbm4)6<*w<lO1f~)C^
z1vG`>_t;NkC2+)z_n=)wTNz4SSj}Y#MNiFCH$qXI@nY_C@Wh9B_t<-~RprO3S5x>H
zjN*c}ucqKP%q?bGrM{Yio1tVU313YS+8o{5UWYq7^VJkRep#=kum({#7AR2sjC+!K
z*yQu{s+XH&o<U}QmSp+*auX)Ad|3dAo^4=xxk<Ry%T1y>NuAtUyc!JL8B#y*8LBl&
zyR$5{D9!Ti@8^+%+`_!7*W;8}vVCrC2@VL6SLE1V3VwaO%*6h;>K!2KAGFzr`0ERn
z+}W1-a}|{i-~RId_KGggAiJ{eYET!uvZn6YX#NMiI_bZT{$95L0000<MNUMnLSTaT
C%|(0w

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/76.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000000000000000000000000000000000000..93a8c0dca2cecd5cf724fcd56a88347cb87e9141
GIT binary patch
literal 4507
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

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/80.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000000000000000000000000000000000000..627736770128d5e760cce2e28ac18357e1f74277
GIT binary patch
literal 4634
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
Q+5i9m07*qoM6N<$f_B{zR{#J2

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/87.png b/TraccarClient/Images.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000000000000000000000000000000000000..c25052d78fdde19b8ec4f62abb6b4f75a30d0bf2
GIT binary patch
literal 5268
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
a@c#g9w-LXf)Ek}v0000<MNUMnLSTZe4_wdy

literal 0
HcmV?d00001

diff --git a/TraccarClient/Images.xcassets/AppIcon.appiconset/Contents.json b/TraccarClient/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..65b74d7
--- /dev/null
+++ b/TraccarClient/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1 @@
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]}
\ No newline at end of file
diff --git a/TraccarClient/Images.xcassets/Brand.colorset/Contents.json b/TraccarClient/Images.xcassets/Brand.colorset/Contents.json
new file mode 100644
index 0000000..1b244fc
--- /dev/null
+++ b/TraccarClient/Images.xcassets/Brand.colorset/Contents.json
@@ -0,0 +1,38 @@
+{
+  "colors" : [
+    {
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0x32",
+          "green" : "0x7D",
+          "red" : "0x2E"
+        }
+      },
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0x05",
+          "green" : "0x50",
+          "red" : "0x00"
+        }
+      },
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/TraccarClient/Images.xcassets/Contents.json b/TraccarClient/Images.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/TraccarClient/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/TraccarClient/InAppSettings.bundle/Root.plist b/TraccarClient/InAppSettings.bundle/Root.plist
new file mode 100644
index 0000000..97c1a60
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/Root.plist
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>Type</key>
+			<string>PSToggleSwitchSpecifier</string>
+			<key>Title</key>
+			<string>Service status</string>
+			<key>Key</key>
+			<string>service_status_preference</string>
+			<key>DefaultValue</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>AutocapitalizationType</key>
+			<string>None</string>
+			<key>AutocorrectionType</key>
+			<string>No</string>
+			<key>IsSecure</key>
+			<false/>
+			<key>Key</key>
+			<string>device_id_preference</string>
+			<key>KeyboardType</key>
+			<string>Alphabet</string>
+			<key>Title</key>
+			<string>Device identifier</string>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+		</dict>
+		<dict>
+			<key>DefaultValue</key>
+			<string>http://demo.traccar.org:5055</string>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Server URL</string>
+			<key>Key</key>
+			<string>server_url_preference</string>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSMultiValueSpecifier</string>
+			<key>Title</key>
+			<string>Location accuracy</string>
+			<key>Key</key>
+			<string>accuracy_preference</string>
+			<key>DefaultValue</key>
+			<string>medium</string>
+			<key>Titles</key>
+			<array>
+				<string>High</string>
+				<string>Medium</string>
+				<string>Low</string>
+			</array>
+			<key>Values</key>
+			<array>
+				<string>high</string>
+				<string>medium</string>
+				<string>low</string>
+			</array>
+		</dict>
+		<dict>
+			<key>KeyboardType</key>
+			<string>NumberPad</string>
+			<key>DefaultValue</key>
+			<string>300</string>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Frequency</string>
+			<key>Key</key>
+			<string>frequency_preference</string>
+		</dict>
+		<dict>
+			<key>KeyboardType</key>
+			<string>NumberPad</string>
+			<key>DefaultValue</key>
+			<string></string>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Distance</string>
+			<key>Key</key>
+			<string>distance_preference</string>
+		</dict>
+		<dict>
+			<key>KeyboardType</key>
+			<string>NumberPad</string>
+			<key>DefaultValue</key>
+			<string></string>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Angle</string>
+			<key>Key</key>
+			<string>angle_preference</string>
+		</dict>
+        <dict>
+            <key>Type</key>
+            <string>PSToggleSwitchSpecifier</string>
+            <key>Title</key>
+            <string>Offline buffering</string>
+            <key>Key</key>
+            <string>buffer_preference</string>
+            <key>DefaultValue</key>
+            <true/>
+        </dict>
+	</array>
+</dict>
+</plist>
diff --git a/TraccarClient/InAppSettings.bundle/de.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/de.lproj/Root.strings
new file mode 100644
index 0000000..694cf5f
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/de.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Dienststatus";
+"Device identifier" = "Gerätekennung";
+"Server URL" = "Server URL";
+"Location accuracy" = "Positionsgenauigkeit";
+"High" = "Hoch";
+"Medium" = "Mittel";
+"Low" = "Niedrig";
+"Frequency" = "Frequenz";
+"Distance" = "Entfernung";
+"Angle" = "Winkel";
diff --git a/TraccarClient/InAppSettings.bundle/en.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/en.lproj/Root.strings
new file mode 100644
index 0000000..5e8f08c
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/en.lproj/Root.strings
@@ -0,0 +1,11 @@
+"Service status" = "Service status";
+"Device identifier" = "Device identifier";
+"Server URL" = "Server URL";
+"Location accuracy" = "Location accuracy";
+"High" = "High";
+"Medium" = "Medium";
+"Low" = "Low";
+"Frequency" = "Frequency";
+"Distance" = "Distance";
+"Angle" = "Angle";
+"Offline buffering" = "Offline buffering";
diff --git a/TraccarClient/InAppSettings.bundle/es.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/es.lproj/Root.strings
new file mode 100644
index 0000000..41223f6
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/es.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Estado del servicio";
+"Device identifier" = "Identificador de dispositivo";
+"Server URL" = "URL del servidor";
+"Location accuracy" = "Precisión";
+"High" = "Alto";
+"Medium" = "Medio";
+"Low" = "Bajo";
+"Frequency" = "Frecuencia de rastreo";
+"Distance" = "Distancia";
+"Angle" = "Ángulo";
diff --git a/TraccarClient/InAppSettings.bundle/fr.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/fr.lproj/Root.strings
new file mode 100644
index 0000000..4e420ca
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/fr.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Statut";
+"Device identifier" = "Identifiant de l\'appareil";
+"Server URL" = "URL du serveur";
+"Location accuracy" = "Precision de la localisation";
+"High" = "Haut";
+"Medium" = "Moyen";
+"Low" = "Bas";
+"Frequency" = "Fréquence";
+"Distance" = "Distance";
+"Angle" = "Angle";
diff --git a/TraccarClient/InAppSettings.bundle/it.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/it.lproj/Root.strings
new file mode 100644
index 0000000..64e7247
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/it.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Stato del servizio";
+"Device identifier" = "Identificativo dispositivo";
+"Server URL" = "Server URL";
+"Location accuracy" = "Accuratezza posizione";
+"High" = "Alta";
+"Medium" = "Media";
+"Low" = "Bassa";
+"Frequency" = "Frequenza";
+"Distance" = "Distanza";
+"Angle" = "Angolo";
diff --git a/TraccarClient/InAppSettings.bundle/ja.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/ja.lproj/Root.strings
new file mode 100644
index 0000000..21cdbdb
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/ja.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "サービスステータス";
+"Device identifier" = "デバイス ID";
+"Server URL" = "サーバー URL";
+"Location accuracy" = "位置情報の精度";
+"High" = "高";
+"Medium" = "中";
+"Low" = "低";
+"Frequency" = "周期";
+"Distance" = "距離";
+"Angle" = "角度";
diff --git a/TraccarClient/InAppSettings.bundle/ko.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/ko.lproj/Root.strings
new file mode 100644
index 0000000..e37f2a6
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/ko.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "서비스상태";
+"Device identifier" = "장치 식별자";
+"Server URL" = "Server URL";
+"Location accuracy" = "Location accuracy";
+"High" = "High";
+"Medium" = "Medium";
+"Low" = "Low";
+"Frequency" = "주기";
+"Distance" = "Distance";
+"Angle" = "Angle";
diff --git a/TraccarClient/InAppSettings.bundle/nl.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/nl.lproj/Root.strings
new file mode 100644
index 0000000..e97f2c3
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/nl.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Server status";
+"Device identifier" = "Toestelidentificatie";
+"Server URL" = "Server URL";
+"Location accuracy" = "Locatienauwkeurigheid";
+"High" = "Hoog";
+"Medium" = "Gemiddeld";
+"Low" = "Laag";
+"Frequency" = "Frequentie";
+"Distance" = "Afstand";
+"Angle" = "Hoek";
diff --git a/TraccarClient/InAppSettings.bundle/pl.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/pl.lproj/Root.strings
new file mode 100644
index 0000000..28edf5d
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/pl.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Status usługi";
+"Device identifier" = "Identyfikator urzÄ…dzenia";
+"Server URL" = "URL Serwera";
+"Location accuracy" = "Dokładność lokalizacji";
+"High" = "Wysoka";
+"Medium" = "Åšrednia";
+"Low" = "Niska";
+"Frequency" = "Częstotliwość";
+"Distance" = "Dystans";
+"Angle" = "KÄ…t";
diff --git a/TraccarClient/InAppSettings.bundle/pt-BR.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/pt-BR.lproj/Root.strings
new file mode 100644
index 0000000..f87b852
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/pt-BR.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Status do Serviço";
+"Device identifier" = "Identificador do dispositivo";
+"Server URL" = "URL do Servidor";
+"Location accuracy" = "Precisão de localização";
+"High" = "Alto";
+"Medium" = "Médio";
+"Low" = "Baixo";
+"Frequency" = "Invervalo";
+"Distance" = "Distância";
+"Angle" = "Ângulo";
diff --git a/TraccarClient/InAppSettings.bundle/pt.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/pt.lproj/Root.strings
new file mode 100644
index 0000000..036a8cb
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/pt.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Status do Serviço";
+"Device identifier" = "Identificador único";
+"Server URL" = "URL do Servidor";
+"Location accuracy" = "Precisão de localização";
+"High" = "Alto";
+"Medium" = "Médio";
+"Low" = "Baixo";
+"Frequency" = "Invervalo";
+"Distance" = "Distância";
+"Angle" = "Ângulo";
diff --git a/TraccarClient/InAppSettings.bundle/ru.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/ru.lproj/Root.strings
new file mode 100644
index 0000000..6a0beb1
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/ru.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "Состояние сервиса";
+"Device identifier" = "Идентификатор устройства";
+"Server URL" = "URL сервера";
+"Location accuracy" = "Точность местоположения";
+"High" = "Высокая";
+"Medium" = "Средняя";
+"Low" = "Низкая";
+"Frequency" = "Частота";
+"Distance" = "Расстояние";
+"Angle" = "Угол";
diff --git a/TraccarClient/InAppSettings.bundle/zh.lproj/Root.strings b/TraccarClient/InAppSettings.bundle/zh.lproj/Root.strings
new file mode 100644
index 0000000..7a8ff61
--- /dev/null
+++ b/TraccarClient/InAppSettings.bundle/zh.lproj/Root.strings
@@ -0,0 +1,10 @@
+"Service status" = "定位";
+"Device identifier" = "设备编码";
+"Server URL" = "服务器地址";
+"Location accuracy" = "位置精度";
+"High" = "高";
+"Medium" = "中";
+"Low" = "低";
+"Frequency" = "定位频率(秒)";
+"Distance" = "距离";
+"Angle" = "角度";
diff --git a/TraccarClient/LaunchScreen.xib b/TraccarClient/LaunchScreen.xib
new file mode 100644
index 0000000..9922a47
--- /dev/null
+++ b/TraccarClient/LaunchScreen.xib
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <navigationBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jyO-lQ-xCZ">
+                    <rect key="frame" x="0.0" y="0.0" width="375" height="64"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="64" id="TfC-6h-A1k"/>
+                    </constraints>
+                    <color key="barTintColor" name="Brand"/>
+                </navigationBar>
+            </subviews>
+            <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="jyO-lQ-xCZ" secondAttribute="trailing" id="BVV-Jp-FLs"/>
+                <constraint firstItem="jyO-lQ-xCZ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Ra4-bu-wwa"/>
+                <constraint firstItem="jyO-lQ-xCZ" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="frB-PI-Vg3"/>
+            </constraints>
+            <point key="canvasLocation" x="499" y="433"/>
+        </view>
+    </objects>
+    <resources>
+        <namedColor name="Brand">
+            <color red="0.2627450980392157" green="0.62745098039215685" blue="0.27843137254901962" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>
diff --git a/TraccarClient/MainViewController.swift b/TraccarClient/MainViewController.swift
new file mode 100644
index 0000000..19b59b4
--- /dev/null
+++ b/TraccarClient/MainViewController.swift
@@ -0,0 +1,80 @@
+//
+// Copyright 2013 - 2021 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import UIKit
+import InAppSettingsKit
+
+class MainViewController: IASKAppSettingsViewController {
+    
+    var settingsObserver: NSObjectProtocol?
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        title = NSLocalizedString("Traccar Client", comment: "")
+        showCreditsFooter = false
+        neverShowPrivacySettings = true
+    }
+    
+    override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        self.settingsObserver = NotificationCenter.default.addObserver(forName: nil, object: nil, queue: nil) { (notification) in
+            self.didChangeSetting(notification)
+        }
+    }
+    
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
+        if let observer = self.settingsObserver {
+            NotificationCenter.default.removeObserver(observer)
+        }
+    }
+    
+    func showError(_ message: String) {
+        let alert = UIAlertController(title: nil, message: NSLocalizedString(message, comment: ""), preferredStyle: .alert)
+        let defaultAction = UIAlertAction(title: "OK", style: .default, handler: {(_ action: UIAlertAction) -> Void in
+            UserDefaults.standard.setValue(nil, forKey: "service_status_preference")
+        })
+        alert.addAction(defaultAction)
+        present(alert, animated: true)
+    }
+
+    func didChangeSetting(_ notification: Notification) {
+        if let status = notification.userInfo?["service_status_preference"] as? Bool {
+            if status && AppDelegate.instance.trackingController == nil {
+                let userDefaults = UserDefaults.standard
+                let url = userDefaults.string(forKey: "server_url_preference")
+                let frequency = userDefaults.integer(forKey: "frequency_preference")
+                
+                let candidateUrl = NSURL(string: url!)
+                
+                if candidateUrl == nil || candidateUrl?.host == nil || (candidateUrl?.scheme != "http" && candidateUrl?.scheme != "https") {
+                    self.showError("Invalid server URL")
+                } else if frequency <= 0 {
+                    self.showError("Invalid frequency value")
+                } else {
+                    StatusViewController.addMessage(NSLocalizedString("Service created", comment: ""))
+                    AppDelegate.instance.trackingController = TrackingController()
+                    AppDelegate.instance.trackingController?.start()
+                }
+            } else if !status && AppDelegate.instance.trackingController != nil {
+                StatusViewController.addMessage(NSLocalizedString("Service destroyed", comment: ""))
+                AppDelegate.instance.trackingController?.stop()
+                AppDelegate.instance.trackingController = nil
+            }
+        }
+    }
+    
+}
diff --git a/TraccarClient/NetworkManager.swift b/TraccarClient/NetworkManager.swift
new file mode 100644
index 0000000..92e93b1
--- /dev/null
+++ b/TraccarClient/NetworkManager.swift
@@ -0,0 +1,82 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+import SystemConfiguration
+
+protocol NetworkManagerDelegate: AnyObject {
+    func didUpdateNetwork(online: Bool)
+}
+
+class NetworkManager : NSObject {
+    
+    weak var delegate: NetworkManagerDelegate?
+    
+    //var reachability: SCNetworkReachability
+    
+    override init() {
+        /*var zeroAddress = sockaddr_in()
+        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
+        zeroAddress.sin_family = sa_family_t(AF_INET)
+
+        reachability = withUnsafePointer(to: &zeroAddress, {
+            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
+                SCNetworkReachabilityCreateWithAddress(nil, $0)
+            }
+        })!*/
+
+        super.init()
+    }
+
+    func online() -> Bool {
+        /*var flags: SCNetworkReachabilityFlags = []
+        SCNetworkReachabilityGetFlags(reachability, &flags)
+        return NetworkManager.online(for: flags)*/
+        return true
+    }
+    
+    func start() {
+        /*var context = SCNetworkReachabilityContext(version: 0, info: Unmanaged.passUnretained(self).toOpaque(), retain: nil, release: nil, copyDescription: nil)
+        SCNetworkReachabilitySetCallback(reachability, { (reachability, flags, pointer) in
+            let networkManager = Unmanaged<NetworkManager>.fromOpaque(pointer!).takeUnretainedValue()
+            networkManager.delegate?.didUpdateNetwork(online: NetworkManager.online(for: flags))
+        }, &context)
+        SCNetworkReachabilityScheduleWithRunLoop(reachability, CFRunLoopGetCurrent(), CFRunLoopMode.defaultMode.rawValue)*/
+    }
+    
+    func stop() {
+        /*SCNetworkReachabilityUnscheduleFromRunLoop(reachability, CFRunLoopGetCurrent(), CFRunLoopMode.defaultMode.rawValue)*/
+    }
+
+    static func online(for flags: SCNetworkReachabilityFlags) -> Bool {
+        if !flags.contains(.reachable) {
+            return false
+        }
+        if !flags.contains(.connectionRequired) {
+            return true
+        }
+        if flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic) {
+            if !flags.contains(.interventionRequired) {
+                return true
+            }
+        }
+        if flags.contains(.isWWAN) {
+            return true
+        }
+        return false
+    }
+
+}
diff --git a/TraccarClient/Position.swift b/TraccarClient/Position.swift
new file mode 100644
index 0000000..694a40c
--- /dev/null
+++ b/TraccarClient/Position.swift
@@ -0,0 +1,53 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+import CoreData
+import CoreLocation
+
+public class Position: NSManagedObject {
+    
+    @NSManaged public var deviceId: String?
+    @NSManaged public var time: NSDate?
+    @NSManaged public var latitude: NSNumber?
+    @NSManaged public var longitude: NSNumber?
+    @NSManaged public var altitude: NSNumber?
+    @NSManaged public var speed: NSNumber?
+    @NSManaged public var course: NSNumber?
+    @NSManaged public var battery: NSNumber?
+    @NSManaged public var charging: Bool
+    @NSManaged public var accuracy: NSNumber?
+    
+    public convenience init(managedObjectContext context: NSManagedObjectContext) {
+        let entityDescription = NSEntityDescription.entity(forEntityName: "Position", in: context)
+        self.init(entity: entityDescription!, insertInto: context)
+    }
+    
+    public func setLocation(_ location: CLLocation) {
+        time = location.timestamp as NSDate
+        latitude = location.coordinate.latitude as NSNumber
+        longitude = location.coordinate.longitude as NSNumber
+        altitude = location.altitude as NSNumber
+        if location.speed >= 0 {
+            speed = location.speed * 1.94384 as NSNumber // knots from m/s
+        }
+        if location.course >= 0 {
+            course = location.course as NSNumber
+        }
+        accuracy = location.horizontalAccuracy as NSNumber
+    }
+
+}
diff --git a/TraccarClient/PositionProvider.swift b/TraccarClient/PositionProvider.swift
new file mode 100644
index 0000000..a16dc65
--- /dev/null
+++ b/TraccarClient/PositionProvider.swift
@@ -0,0 +1,127 @@
+//
+// Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import UIKit
+import CoreLocation
+
+protocol PositionProviderDelegate: AnyObject {
+    func didUpdate(position: Position)
+}
+
+class PositionProvider: NSObject, CLLocationManagerDelegate {
+
+    weak var delegate: PositionProviderDelegate?
+    
+    var locationManager: CLLocationManager
+    var lastLocation: CLLocation?
+
+    var deviceId: String
+    var interval: Double
+    var distance: Double
+    var angle: Double
+    
+    var pendingStart = false
+    
+    override init() {
+        let userDefaults = UserDefaults.standard
+        deviceId = userDefaults.string(forKey: "device_id_preference")!
+        interval = userDefaults.double(forKey: "frequency_preference")
+        distance = userDefaults.double(forKey: "distance_preference")
+        angle = userDefaults.double(forKey: "angle_preference")
+
+        locationManager = CLLocationManager()
+        
+        super.init()
+
+        locationManager.delegate = self
+
+        locationManager.pausesLocationUpdatesAutomatically = false
+        
+        switch userDefaults.string(forKey: "accuracy_preference") ?? "medium" {
+        case "high":
+            locationManager.desiredAccuracy = kCLLocationAccuracyBest
+        case "low":
+            locationManager.desiredAccuracy = kCLLocationAccuracyKilometer
+        default:
+            locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
+        }
+
+        if #available(iOS 9.0, *) {
+            locationManager.allowsBackgroundLocationUpdates = true
+        }
+    }
+    
+    func startUpdates() {
+        switch CLLocationManager.authorizationStatus() {
+        case .authorizedAlways:
+            locationManager.startUpdatingLocation()
+        default:
+            pendingStart = true
+            locationManager.requestAlwaysAuthorization()
+        }
+    }
+    
+    func stopUpdates() {
+        locationManager.stopUpdatingLocation()
+    }
+    
+    func getBatteryStatus() -> BatteryStatus {
+        let device = UIDevice.current
+        if device.batteryState != .unknown {
+            return BatteryStatus(
+                level: device.batteryLevel * 100,
+                charging: device.batteryState == .charging || device.batteryState == .full
+            )
+        } else {
+            return BatteryStatus(level: 0, charging: true)
+        }
+    }
+    
+    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
+        switch status {
+        case .authorizedAlways, .authorizedWhenInUse:
+            if pendingStart {
+                pendingStart = false
+                locationManager.startUpdatingLocation()
+            }
+        default:
+            break
+        }
+    }
+    
+    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
+        if let location = locations.last {
+            if lastLocation == nil
+                || location.timestamp.timeIntervalSince(lastLocation!.timestamp) >= interval
+                || (distance > 0 && DistanceCalculator.distance(fromLat: location.coordinate.latitude, fromLon: location.coordinate.longitude, toLat: lastLocation!.coordinate.latitude, toLon: lastLocation!.coordinate.longitude) >= distance)
+                || (angle > 0 && fabs(location.course - lastLocation!.course) >= angle) {
+                
+                let position = Position(managedObjectContext: DatabaseHelper().managedObjectContext)
+                position.deviceId = deviceId
+                position.setLocation(location)
+                let batteryStatus = getBatteryStatus()
+                position.battery = batteryStatus.level as NSNumber
+                position.charging = batteryStatus.charging
+                delegate?.didUpdate(position: position)
+                lastLocation = location
+            }
+        }
+    }
+    
+    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
+    }
+
+}
diff --git a/TraccarClient/ProtocolFormatter.swift b/TraccarClient/ProtocolFormatter.swift
new file mode 100644
index 0000000..8730dfa
--- /dev/null
+++ b/TraccarClient/ProtocolFormatter.swift
@@ -0,0 +1,65 @@
+//
+// Copyright 2016 - 2021 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+
+public class ProtocolFormatter: NSObject {
+    
+    public static func formatPostion(_ position: Position, url: String, alarm: String? = nil) -> URL? {
+        var components = URLComponents(string: url)
+
+        var query = String()
+        
+        if let deviceId = position.deviceId {
+            query += "id=\(deviceId)&"
+        }
+        if let time = position.time {
+            query += "timestamp=\(Int(time.timeIntervalSince1970))&"
+        }
+        if let latitude = position.latitude {
+            query += String(format: "lat=%.06f&", latitude.doubleValue)
+        }
+        if let longitude = position.longitude {
+            query += String(format: "lon=%.06f&", longitude.doubleValue)
+        }
+        if let speed = position.speed {
+            query += "speed=\(speed)&"
+        }
+        if let course = position.course {
+            query += "bearing=\(course)&"
+        }
+        if let altitude = position.altitude {
+            query += "altitude=\(altitude)&"
+        }
+        if let accuracy = position.accuracy {
+            query += "accuracy=\(accuracy)&"
+        }
+        if let battery = position.battery {
+            query += "batt=\(battery)&"
+        }
+        if position.charging {
+            query += "charge=true&"
+        }
+        if let alarm = alarm {
+            query += "alarm=\(alarm)&"
+        }
+        components?.query = String(query.dropLast())
+
+        // use queryItems for iOS 8
+        return components?.url
+    }
+
+}
diff --git a/TraccarClient/RequestManager.swift b/TraccarClient/RequestManager.swift
new file mode 100644
index 0000000..5085462
--- /dev/null
+++ b/TraccarClient/RequestManager.swift
@@ -0,0 +1,29 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+
+public class RequestManager: NSObject {
+    
+    public static func sendRequest(_ url: URL, completionHandler handler: @escaping (Bool) -> Void) {
+        var request = URLRequest(url: url)
+        request.httpMethod = "POST"
+        NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main, completionHandler: {(response, data, connectionError) -> Void in
+            handler(data != nil)
+        })
+    }
+
+}
diff --git a/TraccarClient/StatusViewController.swift b/TraccarClient/StatusViewController.swift
new file mode 100644
index 0000000..95cdd89
--- /dev/null
+++ b/TraccarClient/StatusViewController.swift
@@ -0,0 +1,81 @@
+//
+// Copyright 2014 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import UIKit
+
+class StatusViewController: UITableViewController {
+    
+    static let LIMIT = 20
+    static var statusViewController: StatusViewController?
+    
+    static var messages = [String]()
+    
+    class func addMessage(_ message: String) {
+        let formatter = DateFormatter()
+        formatter.dateFormat = "HH:mm - "
+
+        messages.append(formatter.string(from: Date()) + (message))
+
+        if messages.count > LIMIT {
+            messages.remove(at: 0)
+        }
+
+        statusViewController?.tableView.reloadData()
+    }
+    
+    class func clearMessages() {
+        messages.removeAll()
+
+        statusViewController?.tableView.reloadData()
+    }
+
+    @IBAction func clear(_ sender: UIBarButtonItem) {
+        StatusViewController.clearMessages()
+    }
+    
+    override func viewDidLoad() {
+        tableView.tableFooterView = UIView()
+    }
+    
+    override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        StatusViewController.statusViewController = self
+    }
+    
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
+        StatusViewController.statusViewController = nil
+    }
+
+    override func numberOfSections(in tableView: UITableView) -> Int {
+        return 1
+    }
+    
+    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return StatusViewController.messages.count
+    }
+    
+    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cellIdentifier: String = "status"
+        var cell: UITableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)
+        if cell == nil {
+            cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier)
+        }
+        cell?.textLabel?.text = StatusViewController.messages[indexPath.row]
+        return cell!
+    }
+
+}
diff --git a/TraccarClient/TraccarClient-Info.plist b/TraccarClient/TraccarClient-Info.plist
new file mode 100644
index 0000000..296861d
--- /dev/null
+++ b/TraccarClient/TraccarClient-Info.plist
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>Traccar Client</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
+	<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+	<string>This is a tracking application and therefore requires access to location services</string>
+	<key>NSLocationAlwaysUsageDescription</key>
+	<string>This is a tracking application and therefore requires access to location services</string>
+	<key>NSLocationWhenInUseUsageDescription</key>
+	<string>This is a tracking application and therefore requires access to location services</string>
+	<key>UIApplicationShortcutItems</key>
+	<array>
+		<dict>
+			<key>UIApplicationShortcutItemTitle</key>
+			<string>Start service</string>
+			<key>UIApplicationShortcutItemType</key>
+			<string>org.traccar.client.start</string>
+		</dict>
+		<dict>
+			<key>UIApplicationShortcutItemTitle</key>
+			<string>Stop service</string>
+			<key>UIApplicationShortcutItemType</key>
+			<string>org.traccar.client.stop</string>
+		</dict>
+		<dict>
+			<key>UIApplicationShortcutItemTitle</key>
+			<string>Send SOS</string>
+			<key>UIApplicationShortcutItemType</key>
+			<string>org.traccar.client.sos</string>
+		</dict>
+	</array>
+	<key>UIBackgroundModes</key>
+	<array>
+		<string>location</string>
+	</array>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>MainStoryboard</string>
+	<key>UIMainStoryboardFile~ipad</key>
+	<string>MainStoryboard</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UIStatusBarStyle</key>
+	<string>UIStatusBarStyleLightContent</string>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
+</dict>
+</plist>
diff --git a/TraccarClient/TraccarClient-Prefix.pch b/TraccarClient/TraccarClient-Prefix.pch
new file mode 100644
index 0000000..936fe15
--- /dev/null
+++ b/TraccarClient/TraccarClient-Prefix.pch
@@ -0,0 +1,15 @@
+//
+// Prefix header for all source files of the 'TraccarClient' target in the 'TraccarClient' project
+//
+
+#import <Availability.h>
+
+#ifndef __IPHONE_5_0
+#warning "This project uses features only available in iOS SDK 5.0 and later."
+#endif
+
+#ifdef __OBJC__
+    #import <UIKit/UIKit.h>
+    #import <Foundation/Foundation.h>
+    #import <CoreData/CoreData.h>
+#endif
diff --git a/TraccarClient/TraccarClient.xcdatamodeld/TraccarClient.xcdatamodel/contents b/TraccarClient/TraccarClient.xcdatamodeld/TraccarClient.xcdatamodel/contents
new file mode 100644
index 0000000..4960488
--- /dev/null
+++ b/TraccarClient/TraccarClient.xcdatamodeld/TraccarClient.xcdatamodel/contents
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21D62" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
+    <entity name="Position" representedClassName=".Position" syncable="YES">
+        <attribute name="accuracy" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES"/>
+        <attribute name="altitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="battery" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="charging" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
+        <attribute name="course" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="deviceId" optional="YES" attributeType="String"/>
+        <attribute name="latitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="longitude" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="speed" optional="YES" attributeType="Double" defaultValueString="0.0" usesScalarValueType="NO"/>
+        <attribute name="time" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
+    </entity>
+    <elements>
+        <element name="Position" positionX="-45" positionY="-9" width="128" height="179"/>
+    </elements>
+</model>
\ No newline at end of file
diff --git a/TraccarClient/TrackingController.swift b/TraccarClient/TrackingController.swift
new file mode 100644
index 0000000..56a832c
--- /dev/null
+++ b/TraccarClient/TrackingController.swift
@@ -0,0 +1,150 @@
+//
+// Copyright 2013 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import Foundation
+import CoreLocation
+
+class TrackingController: NSObject, PositionProviderDelegate, NetworkManagerDelegate, CLLocationManagerDelegate {
+    
+    static let RETRY_DELAY: UInt64 = 30 * 1000;
+    
+    var online = false
+    var waiting = false
+    var stopped = false
+
+    let positionProvider = PositionProvider()
+    let locationManager = CLLocationManager()
+    let databaseHelper = DatabaseHelper()
+    let networkManager = NetworkManager()
+    let userDefaults = UserDefaults.standard
+
+    let url: String
+    let buffer: Bool
+    
+    override init() {
+        online = networkManager.online()
+        url = userDefaults.string(forKey: "server_url_preference")!
+        buffer = userDefaults.bool(forKey: "buffer_preference")
+
+        super.init()
+
+        positionProvider.delegate = self
+        locationManager.delegate = self
+        networkManager.delegate = self
+    }
+    
+    func start() {
+        self.stopped = false
+        if self.online {
+            read()
+        }
+        positionProvider.startUpdates()
+        locationManager.startMonitoringSignificantLocationChanges()
+        networkManager.start()
+    }
+    
+    func stop() {
+        networkManager.stop()
+        locationManager.stopMonitoringSignificantLocationChanges()
+        positionProvider.stopUpdates()
+        self.stopped = true
+    }
+
+    func didUpdate(position: Position) {
+        StatusViewController.addMessage(NSLocalizedString("Location update", comment: ""))
+        if buffer {
+            write(position)
+        } else {
+            send(position)
+        }
+    }
+    
+    func didUpdateNetwork(online: Bool) {
+        StatusViewController.addMessage(NSLocalizedString("Connectivity change", comment: ""))
+        if !self.online && online {
+            read()
+        }
+        self.online = online
+    }
+    
+    //
+    // State transition examples:
+    //
+    // write -> read -> send -> delete -> read
+    //
+    // read -> send -> retry -> read -> send
+    //
+    
+    func write(_ position: Position) {
+        let context = DatabaseHelper().managedObjectContext
+        if context.hasChanges {
+            try? context.save()
+        }
+        if self.online && self.waiting {
+            read()
+            self.waiting = false
+        }
+    }
+    
+    func read() {
+        if let position = databaseHelper.selectPosition() {
+            if (position.deviceId == userDefaults.string(forKey: "device_id_preference")) {
+                send(position)
+            } else {
+                delete(position)
+            }
+        } else {
+            self.waiting = true
+        }
+    }
+    
+    func delete(_ position: Position) {
+        databaseHelper.delete(position: position)
+        read()
+    }
+    
+    func send(_ position: Position) {
+        if let request = ProtocolFormatter.formatPostion(position, url: url) {
+            RequestManager.sendRequest(request, completionHandler: {(_ success: Bool) -> Void in
+                if success {
+                    if self.buffer {
+                        self.delete(position)
+                    }
+                } else {
+                    StatusViewController.addMessage(NSLocalizedString("Send failed", comment: ""))
+                    if self.buffer {
+                        self.retry()
+                    }
+                }
+            })
+        } else {
+            StatusViewController.addMessage(NSLocalizedString("Send failed", comment: ""))
+            if buffer {
+                self.retry()
+            }
+        }
+    }
+    
+    func retry() {
+        let deadline = DispatchTime.now() + Double(TrackingController.RETRY_DELAY * NSEC_PER_MSEC) / Double(NSEC_PER_SEC)
+        DispatchQueue.main.asyncAfter(deadline: deadline, execute: {() -> Void in
+            if !self.stopped && self.online {
+                self.read()
+            }
+        })
+    }
+
+}
diff --git a/TraccarClient/de.lproj/Localizable.strings b/TraccarClient/de.lproj/Localizable.strings
new file mode 100644
index 0000000..7838aa5
--- /dev/null
+++ b/TraccarClient/de.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar Client";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Übertragung fehlerhaft";
+"Location update" = "Positionsupdate";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/de.lproj/MainStoryboard.strings b/TraccarClient/de.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..e721081
--- /dev/null
+++ b/TraccarClient/de.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar Client";
+"eKa-7m-jq1.title" = "Status";
+"gEG-ov-HEk.title" = "Über";
+"He4-eJ-a31.title" = "Leeren";
+"drL-Ag-IYB.text" = "Echtzeit GPS Ortung für Android Geräte. Kompatibel mit Traccar Server und anderen Ortungsservern.";
+"2Hh-sN-c9g.text" = "Dieses Programm ist frei und Open Source. Es ist unter Apache Lizenz Version 2.0 lizenziert und ist auf GitHub verfügbar.";
+"jF9-Ub-rRP.text" = "Für weitere Informationen besuchen Sie www.traccar.org/client";
diff --git a/TraccarClient/en.lproj/MainStoryboard.strings b/TraccarClient/en.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..0ec39b8
--- /dev/null
+++ b/TraccarClient/en.lproj/MainStoryboard.strings
@@ -0,0 +1,3 @@
+"TDj-2j-wEh.text" = "Traccar Client";
+"eKa-7m-jq1.title" = "Status";
+"He4-eJ-a31.title" = "Clear";
diff --git a/TraccarClient/es.lproj/Localizable.strings b/TraccarClient/es.lproj/Localizable.strings
new file mode 100644
index 0000000..ca7946d
--- /dev/null
+++ b/TraccarClient/es.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Cliente Traccar";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Falló el envío";
+"Location update" = "Actualización de localización";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/es.lproj/MainStoryboard.strings b/TraccarClient/es.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..8648329
--- /dev/null
+++ b/TraccarClient/es.lproj/MainStoryboard.strings
@@ -0,0 +1,8 @@
+"TDj-2j-wEh.text" = "Cliente Traccar";
+"eKa-7m-jq1.title" = "Estado";
+"gEG-ov-HEk.title" = "Acerca de…";
+"He4-eJ-a31.title" = "Limpiar";
+"drL-Ag-IYB.text" = "Rastreador GPS en tiempo real para dispositivos Android. Compatible con Servidor Traccar y otros sistemas de rastreo.";
+"2Hh-sN-c9g.text" = "Esta aplición es gratuíta y de código abierto. El código fuente está bajo la Licencia Apache Versión 2 y disponible en Github.";
+"jF9-Ub-rRP.text" = "Para más información visite
+www.traccar.org/client";
diff --git a/TraccarClient/fr.lproj/Localizable.strings b/TraccarClient/fr.lproj/Localizable.strings
new file mode 100644
index 0000000..7785509
--- /dev/null
+++ b/TraccarClient/fr.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Client Traccar";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "L’envoi a échoué";
+"Location update" = "Localisation mise à jour";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/fr.lproj/MainStoryboard.strings b/TraccarClient/fr.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..5f4114c
--- /dev/null
+++ b/TraccarClient/fr.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Client Traccar";
+"eKa-7m-jq1.title" = "Etat";
+"gEG-ov-HEk.title" = "A propos";
+"He4-eJ-a31.title" = "Effacer";
+"drL-Ag-IYB.text" = "Suivi GPS en temps réels pour appareils Android. Compatible avec le serveur Traccar ainsi que d\'autres plateformes de suivi.";
+"2Hh-sN-c9g.text" = "Cette application open source est gratuite. Le code source est disponible sur GitHub est sous licence Apache Version 2.0.";
+"jF9-Ub-rRP.text" = "Pour plus d’information, visitez le site: \nwww.traccar.org/client";
diff --git a/TraccarClient/it.lproj/Localizable.strings b/TraccarClient/it.lproj/Localizable.strings
new file mode 100644
index 0000000..f564adb
--- /dev/null
+++ b/TraccarClient/it.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar Client";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Invio fallito";
+"Location update" = "Aggiornamento posizione";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/it.lproj/MainStoryboard.strings b/TraccarClient/it.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..cf670ea
--- /dev/null
+++ b/TraccarClient/it.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar Client";
+"eKa-7m-jq1.title" = "Stato";
+"gEG-ov-HEk.title" = "Informazioni";
+"He4-eJ-a31.title" = "Pulisci";
+"drL-Ag-IYB.text" = "Real time GPS tracker per dispositivi Android. Compatibile con Traccar Server e altri sistemi di tracking.";
+"2Hh-sN-c9g.text" = "Questa applicazione è libera e open source, il codice sorgente è sotto licenza Apache License Version 2.0 e disponibile su GitHub.";
+"jF9-Ub-rRP.text" = "Per maggiori informazioni visitate \nwww.traccar.org/client";
diff --git a/TraccarClient/ja.lproj/Localizable.strings b/TraccarClient/ja.lproj/Localizable.strings
new file mode 100644
index 0000000..085c411
--- /dev/null
+++ b/TraccarClient/ja.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar クライアント";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "送信に失敗しました";
+"Location update" = "位置情報更新";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/ja.lproj/MainStoryboard.strings b/TraccarClient/ja.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..511a88e
--- /dev/null
+++ b/TraccarClient/ja.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar クライアント";
+"eKa-7m-jq1.title" = "ステータス";
+"gEG-ov-HEk.title" = "アプリについて";
+"He4-eJ-a31.title" = "クリア";
+"drL-Ag-IYB.text" = "Android デバイス用のリアルタイム GPS トラッカーです。 Traccar サーバーや他のトラッキングシステムと互換性があります。";
+"2Hh-sN-c9g.text" = "このアプリケーションは無料のオープンソースで、ソースコードは Apache ライセンス バージョン 2.0 でライセンスされます。 GitHub で利用可能です。";
+"jF9-Ub-rRP.text" = "詳細は visit\nwww.traccar.org/client";
diff --git a/TraccarClient/ko.lproj/Localizable.strings b/TraccarClient/ko.lproj/Localizable.strings
new file mode 100644
index 0000000..d323218
--- /dev/null
+++ b/TraccarClient/ko.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar 고객";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "보내기 실패";
+"Location update" = "위치 수정";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/ko.lproj/MainStoryboard.strings b/TraccarClient/ko.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..ca3b01e
--- /dev/null
+++ b/TraccarClient/ko.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar 고객";
+"eKa-7m-jq1.title" = "상태";
+"gEG-ov-HEk.title" = "관하여";
+"He4-eJ-a31.title" = "초기화";
+"drL-Ag-IYB.text" = "안드로이드 장치를위한 실시간 GPS 추적기. Traccar 서버 및 기타 추적 시스템과 호환됩니다.";
+"2Hh-sN-c9g.text" = "이 응용 프로그램은 무료이며 오픈 소스이며, 소스 코드는 Apache License Version 2.0에서 사용이 허가되며 GitHub에서 사용할 수 있습니다.";
+"jF9-Ub-rRP.text" = "더 자세한 정보는  \www.traccar.org/client 를 방문하십시오.";
diff --git a/TraccarClient/nl.lproj/Localizable.strings b/TraccarClient/nl.lproj/Localizable.strings
new file mode 100644
index 0000000..81fa125
--- /dev/null
+++ b/TraccarClient/nl.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar client";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Verzenden mislukt";
+"Location update" = "Locatie update";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/nl.lproj/MainStoryboard.strings b/TraccarClient/nl.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..ede2035
--- /dev/null
+++ b/TraccarClient/nl.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar client";
+"eKa-7m-jq1.title" = "Status";
+"gEG-ov-HEk.title" = "Over ons";
+"He4-eJ-a31.title" = "Wis";
+"drL-Ag-IYB.text" = "Real time GPS tracker voor Android apparaten. Compatibel met de Traccar server en andere tracking systemen.";
+"2Hh-sN-c9g.text" = "Deze toepassing is gratis en open source, de broncode is beschikbaar onder de Apache Licentie versie 2.0 op GitHub.";
+"jF9-Ub-rRP.text" = "Voor meer informatie bezoek\nwww.traccar.org/client";
diff --git a/TraccarClient/pl.lproj/Localizable.strings b/TraccarClient/pl.lproj/Localizable.strings
new file mode 100644
index 0000000..fee3d1e
--- /dev/null
+++ b/TraccarClient/pl.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar Klient";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Wysłanie nieudane";
+"Location update" = "Aktualizacja lokalizacji";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/pl.lproj/MainStoryboard.strings b/TraccarClient/pl.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..5f2182d
--- /dev/null
+++ b/TraccarClient/pl.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar Klient";
+"eKa-7m-jq1.title" = "Status";
+"gEG-ov-HEk.title" = "O Traccar";
+"He4-eJ-a31.title" = "Wyczyść";
+"drL-Ag-IYB.text" = "Monitor GPS dla urządzeń Android. Kompatybilny z serwerem Traccar oraz innymi platformami śledzącymi.";
+"2Hh-sN-c9g.text" = "Ta aplikacja jest darmowa i otwartoźródłowa. Kod źródłowy jest licencjonowany Apache License Version 2.0 i jest dostępny na GitHub.";
+"jF9-Ub-rRP.text" = "Więcej informacji - odwiedź\nwww.traccar.org/client";
diff --git a/TraccarClient/pt-BR.lproj/Localizable.strings b/TraccarClient/pt-BR.lproj/Localizable.strings
new file mode 100644
index 0000000..10c227e
--- /dev/null
+++ b/TraccarClient/pt-BR.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Cliente Traccar";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Falha no envio";
+"Location update" = "Localização atualizada";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/pt-BR.lproj/MainStoryboard.strings b/TraccarClient/pt-BR.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..061dffa
--- /dev/null
+++ b/TraccarClient/pt-BR.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Cliente Traccar";
+"eKa-7m-jq1.title" = "Status";
+"gEG-ov-HEk.title" = "Sobre";
+"He4-eJ-a31.title" = "Limpar";
+"drL-Ag-IYB.text" = "Rastreador GPS em tempo real para dispositivos Android. Compatível com o Traccar Server e outros sistemas de rastreamento.";
+"2Hh-sN-c9g.text" = "Esta aplicação é livre e de código aberto, o código fonte é licenciado sob a licença Apache Versão 2.0 e disponível no GitHub.";
+"jF9-Ub-rRP.text" = "Para mais informações visite\nwww.traccar.org/client";
diff --git a/TraccarClient/pt.lproj/Localizable.strings b/TraccarClient/pt.lproj/Localizable.strings
new file mode 100644
index 0000000..10c227e
--- /dev/null
+++ b/TraccarClient/pt.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Cliente Traccar";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Falha no envio";
+"Location update" = "Localização atualizada";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/pt.lproj/MainStoryboard.strings b/TraccarClient/pt.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..5fb390e
--- /dev/null
+++ b/TraccarClient/pt.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Cliente Traccar";
+"eKa-7m-jq1.title" = "Estado";
+"gEG-ov-HEk.title" = "Sobre";
+"He4-eJ-a31.title" = "Limpar";
+"drL-Ag-IYB.text" = "Localizador GPS em tempo real para dispositivos Android. Compatível com servidor Traccar e outros sistemas de localização.";
+"2Hh-sN-c9g.text" = "Esta aplicação é livre e de código aberto, o código fonte é licenciado sob a licença Apache Versão 2.0 e disponível no GitHub.";
+"jF9-Ub-rRP.text" = "Para mais informações visite \nwww.traccar.org/client";
diff --git a/TraccarClient/ru.lproj/Localizable.strings b/TraccarClient/ru.lproj/Localizable.strings
new file mode 100644
index 0000000..79fa773
--- /dev/null
+++ b/TraccarClient/ru.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar Клиент";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "Ошибка отправки";
+"Location update" = "Обновление местоположения";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/ru.lproj/MainStoryboard.strings b/TraccarClient/ru.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..39ee6fb
--- /dev/null
+++ b/TraccarClient/ru.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar Клиент";
+"eKa-7m-jq1.title" = "Состояние";
+"gEG-ov-HEk.title" = "О программе";
+"He4-eJ-a31.title" = "Очистить";
+"drL-Ag-IYB.text" = "Трекер для Android устройств. Совместим с Traccar сервером и другими мониторинговыми системами.";
+"2Hh-sN-c9g.text" = "Это приложение распростаняется бесплатно, исходный код распростаняется по лицензии Apache License Version 2.0 и доступен на GitHub.";
+"jF9-Ub-rRP.text" = "Для получения дополнительной информации посетите\nwww.traccar.org/client";
diff --git a/TraccarClient/zh.lproj/Localizable.strings b/TraccarClient/zh.lproj/Localizable.strings
new file mode 100644
index 0000000..a424ae1
--- /dev/null
+++ b/TraccarClient/zh.lproj/Localizable.strings
@@ -0,0 +1,9 @@
+"Traccar Client" = "Traccar定位端";
+"Service created" = "Service created";
+"Service destroyed" = "Service destroyed";
+"Send failed" = "发送失败";
+"Location update" = "位置更新";
+"Connectivity change" = "Connectivity change";
+"Invalid server address" = "Invalid server address";
+"Invalid server port" = "Invalid server port";
+"Invalid frequency value" = "Invalid frequency value";
diff --git a/TraccarClient/zh.lproj/MainStoryboard.strings b/TraccarClient/zh.lproj/MainStoryboard.strings
new file mode 100644
index 0000000..fc16c54
--- /dev/null
+++ b/TraccarClient/zh.lproj/MainStoryboard.strings
@@ -0,0 +1,7 @@
+"TDj-2j-wEh.text" = "Traccar定位端";
+"eKa-7m-jq1.title" = "定位状态";
+"gEG-ov-HEk.title" = "关于";
+"He4-eJ-a31.title" = "清除";
+"drL-Ag-IYB.text" = "Android设备的实时GPS跟踪器。兼容Traccar服务器和其他跟踪系统。";
+"2Hh-sN-c9g.text" = "此应用免费且开源。源码许可为Apache V2.0,在GitHub上发布。";
+"jF9-Ub-rRP.text" = "更多信息请访问www.traccar.org/client";
diff --git a/TraccarClientTests/CoreDataTests.swift b/TraccarClientTests/CoreDataTests.swift
new file mode 100644
index 0000000..be123ba
--- /dev/null
+++ b/TraccarClientTests/CoreDataTests.swift
@@ -0,0 +1,36 @@
+//
+// Copyright 2015 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import XCTest
+import CoreData
+
+class CoreDataTests: XCTestCase {
+
+    var managedObjectContext: NSManagedObjectContext?
+    var managedObjectModel: NSManagedObjectModel?
+    var persistentStoreCoordinator: NSPersistentStoreCoordinator?
+    
+    override func setUp() {
+        let modelURL = Bundle.main.url(forResource: "TraccarClient", withExtension: "momd")
+        managedObjectModel = NSManagedObjectModel(contentsOf: modelURL!)
+
+        persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel!)
+        
+        managedObjectContext = NSManagedObjectContext()
+        managedObjectContext?.persistentStoreCoordinator = persistentStoreCoordinator
+    }
+
+}
diff --git a/TraccarClientTests/DatabaseHelperTests.swift b/TraccarClientTests/DatabaseHelperTests.swift
new file mode 100644
index 0000000..359868d
--- /dev/null
+++ b/TraccarClientTests/DatabaseHelperTests.swift
@@ -0,0 +1,39 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import XCTest
+import TraccarClient
+
+class DatabaseHelperTests: CoreDataTests {
+    
+    func testFormatPosition() {
+        let databaseHelper = DatabaseHelper(managedObjectContext: managedObjectContext!)
+
+        XCTAssertNil(databaseHelper.selectPosition())
+
+        let position = Position(managedObjectContext: managedObjectContext!)
+        position.deviceId = "123456789012345"
+        position.time = Date(timeIntervalSince1970: 0) as NSDate
+
+        XCTAssertNotNil(databaseHelper.selectPosition())
+
+        databaseHelper.delete(position: position)
+
+        XCTAssertNil(databaseHelper.selectPosition())
+    }
+
+    
+}
diff --git a/TraccarClientTests/Info.plist b/TraccarClientTests/Info.plist
new file mode 100644
index 0000000..ba72822
--- /dev/null
+++ b/TraccarClientTests/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>
diff --git a/TraccarClientTests/ProtocolFormatterTests.swift b/TraccarClientTests/ProtocolFormatterTests.swift
new file mode 100644
index 0000000..1f7bb3f
--- /dev/null
+++ b/TraccarClientTests/ProtocolFormatterTests.swift
@@ -0,0 +1,32 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import XCTest
+import TraccarClient
+
+class ProtocolFormatterTests: CoreDataTests {
+
+    func testFormatPosition() {
+        let position = Position(managedObjectContext: managedObjectContext!)
+        position.deviceId = "123456789012345"
+        position.time = Date(timeIntervalSince1970: 0) as NSDate
+
+        let url = ProtocolFormatter.formatPostion(position, url: "http://localhost:5055")
+
+        XCTAssertEqual("http://localhost:5055?id=123456789012345&timestamp=0&lat=0.000000&lon=0.000000&speed=0&bearing=0&altitude=0&accuracy=0&batt=0", url?.absoluteString)
+    }
+
+}
diff --git a/TraccarClientTests/RequestManagerTests.swift b/TraccarClientTests/RequestManagerTests.swift
new file mode 100644
index 0000000..432a756
--- /dev/null
+++ b/TraccarClientTests/RequestManagerTests.swift
@@ -0,0 +1,33 @@
+//
+// Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+import XCTest
+import TraccarClient
+
+class RequestManagerTests: XCTestCase {
+
+    func testSendRequest() {
+        let expectation: XCTestExpectation? = self.expectation(description: "sendRequest")
+
+        RequestManager.sendRequest(URL(string: "http://www.google.com")!, completionHandler: {(success) -> Void in
+            XCTAssertTrue(success)
+            expectation?.fulfill()
+        })
+
+        waitForExpectations(timeout: 5, handler: nil)
+    }
+
+}
diff --git a/translate.py b/translate.py
new file mode 100755
index 0000000..d8a2d10
--- /dev/null
+++ b/translate.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+
+import os
+import optparse
+import urllib2
+import json
+import base64
+import re
+import codecs
+import xml.etree.ElementTree
+
+parser = optparse.OptionParser()
+parser.add_option('-u', '--user', dest='username', help='transifex user login')
+parser.add_option('-p', '--password', dest='password', help='transifex user password')
+
+(options, args) = parser.parse_args()
+
+if not options.username or not options.password:
+    parser.error('User name and password are required')
+
+os.chdir(os.path.dirname(os.path.abspath(__file__)) + '/TraccarClient')
+
+def request(url):
+    req = urllib2.Request(url)
+    auth = base64.encodestring("%s:%s" % (options.username, options.password)).replace("\n", "")
+    req.add_header("Authorization", "Basic %s" % auth)
+    return urllib2.urlopen(req)
+
+mapping_en = {}
+
+def load_en():
+    data = request('https://www.transifex.com/api/2/project/traccar/resource/client/translation/en?file').read().decode('utf-8')
+    for entry in xml.etree.ElementTree.fromstring(data).findall('string'):
+        mapping_en[entry.attrib['name']] = entry.text.replace('Android', 'iOS')
+
+load_en()
+
+regex = re.compile(r'"([^"]+)" = "([^"]+)";')
+
+def write_storyboard(code, mapping):
+    in_file = codecs.open('en.lproj/MainStoryboard.strings', 'r', 'utf-8')
+    out_file = codecs.open(code + '.lproj/MainStoryboard.strings', 'w', 'utf-8')
+    for line in in_file:
+        match = regex.match(line)
+        if match:
+            out_file.write('"' + match.group(1) + '" = "' + mapping.get(match.group(2), match.group(2)) + '";\n')
+    out_file.close()
+    in_file.close()
+
+def write_strings(code, mapping):
+    in_file = codecs.open('Base.lproj/Localizable.strings', 'r', 'utf-8')
+    out_file = codecs.open(code + '.lproj/Localizable.strings', 'w', 'utf-8')
+    for line in in_file:
+        match = regex.match(line)
+        if match:
+            out_file.write('"' + match.group(1) + '" = "' + mapping.get(match.group(2), match.group(2)) + '";\n')
+    out_file.close()
+    in_file.close()
+
+def write_settings(code, mapping):
+    filename = 'InAppSettings.bundle/' + code + '.lproj/Root.strings'
+    if not os.path.exists(os.path.dirname(filename)):
+        os.makedirs(os.path.dirname(filename))
+    in_file = codecs.open('InAppSettings.bundle/en.lproj/Root.strings', 'r', 'utf-8')
+    out_file = codecs.open(filename, 'w', 'utf-8')
+    for line in in_file:
+        match = regex.match(line)
+        if match:
+            out_file.write('"' + match.group(1) + '" = "' + mapping.get(match.group(2), match.group(2)) + '";\n')
+    out_file.close()
+    in_file.close()
+
+for directory in os.walk('.'):
+    match = re.match(r"([a-z]{2}(?:-[A-Z]{2})?)\.lproj", directory[0][2:])
+    if match:
+        code = match.group(1)
+        if code != 'en':
+            mapping = {}
+            data = request('https://www.transifex.com/api/2/project/traccar/resource/client/translation/' + code.replace('-', '_') + '?file').read()
+            for entry in xml.etree.ElementTree.fromstring(data).findall('string'):
+                mapping[mapping_en[entry.attrib['name']]] = entry.text
+            write_storyboard(code, mapping)
+            write_strings(code, mapping)
+            write_settings(code, mapping)
+            print code
-- 
GitLab