diff --git a/Classes/Internal/CommandID.swift b/Classes/Internal/CommandID.swift index 9a536f7..d49c22d 100644 --- a/Classes/Internal/CommandID.swift +++ b/Classes/Internal/CommandID.swift @@ -72,7 +72,10 @@ internal enum CommandID: UInt8 { case gaugeDisplay = 0x70 case gaugeSave = 0x71 - + case gaugeDelete = 0x72 + case gaugeList = 0x73 + case gaugeGet = 0x74 + case pageSave = 0x80 case pageGet = 0x81 case pageDelete = 0x82 @@ -91,13 +94,13 @@ internal enum CommandID: UInt8 { case rConfigID = 0xA2 case setConfigID = 0xA3 -// case cfgWrite = 0xD0 -// case cfgRead = 0xD1 -// case cfgSet = 0xD2 -// case cfgList = 0xD3 -// case cfgRename = 0xD4 -// case cfgDelete = 0xD5 -// case cfgDeleteOldest = 0xD6 -// case cfgFreeSpace = 0xD7 -// case cfdGetNb = 0xD8 + case cfgWrite = 0xD0 + case cfgRead = 0xD1 + case cfgSet = 0xD2 + case cfgList = 0xD3 + case cfgRename = 0xD4 + case cfgDelete = 0xD5 + case cfgDeleteLessUsed = 0xD6 + case cfgFreeSpace = 0xD7 + case cfdGetNb = 0xD8 } diff --git a/Classes/Internal/Data+HexEncodedString.swift b/Classes/Internal/Data+HexEncodedString.swift index 65dc6d3..2e5e5fc 100644 --- a/Classes/Internal/Data+HexEncodedString.swift +++ b/Classes/Internal/Data+HexEncodedString.swift @@ -18,3 +18,16 @@ extension Data { return map { String(format: "%02hhx", $0) }.joined() } } + +extension StringProtocol { + var hexaData: Data { .init(hexa) } + var hexaBytes: [UInt8] { .init(hexa) } + private var hexa: UnfoldSequence { + sequence(state: startIndex) { startIndex in + guard startIndex < self.endIndex else { return nil } + let endIndex = self.index(startIndex, offsetBy: 2, limitedBy: self.endIndex) ?? self.endIndex + defer { startIndex = endIndex } + return UInt8(self[startIndex..> 24) + let secondByte = UInt8(truncatingIfNeeded: self >> 16) + let thirdByte = UInt8(truncatingIfNeeded: self >> 8) + let fourthByte = UInt8(truncatingIfNeeded: self) + return [firstByte, secondByte, thirdByte, fourthByte] + } internal static func fromUInt16ByteArray(bytes: [UInt8]) -> Int { guard bytes.count >= 2 else { return 0 } diff --git a/Classes/Public/ActiveLookTypes.swift b/Classes/Public/ActiveLookTypes.swift index 99bba9f..4c40d45 100644 --- a/Classes/Public/ActiveLookTypes.swift +++ b/Classes/Public/ActiveLookTypes.swift @@ -16,9 +16,10 @@ limitations under the License. import Foundation /// Available test patterns -public enum TestPattern: UInt8 { +public enum DemoPattern: UInt8 { case fill = 0x00 - case rect = 0x01 + case cross = 0x01 + case image = 0x02 } /// Available states for the glasses' green LED @@ -38,14 +39,14 @@ public enum SensorMode: UInt8 { /// Rotation / orientation of text being displayed public enum TextRotation: UInt8 { - case topLR = 0x00 - case topRL = 0x01 - case rightTB = 0x02 - case rightBT = 0x03 - case bottomRL = 0x04 - case bottomLR = 0x05 - case leftBT = 0x06 - case leftTB = 0x07 + case bottomRL = 0x00 + case bottomLR = 0x01 + case leftBT = 0x02 + case leftTB = 0x03 + case topLR = 0x04 + case topRL = 0x05 + case rightTB = 0x06 + case rightBT = 0x07 } /// The Flow Control state. diff --git a/Classes/Public/ConfigurationDescription.swift b/Classes/Public/ConfigurationDescription.swift new file mode 100644 index 0000000..18e457e --- /dev/null +++ b/Classes/Public/ConfigurationDescription.swift @@ -0,0 +1,68 @@ +/* + +Copyright 2021 Microoled +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 + +/// Information about free space. +public class ConfigurationDescription { + + /// The configuration name + public let name: String + + /// The configuration size + public let size: UInt32 + + /// The configuration version + public let version: UInt32 + + /// The configuration usage count + public let usageCnt: UInt8 + + /// The configuration install count + public let installCnt: UInt8 + + /// The configuration flag for system configuration + public let isSystem: Bool + + init(_ name: String, _ size: UInt32, _ version: UInt32, _ usageCnt: UInt8, _ installCnt: UInt8, _ isSystem: Bool) { + self.name = name + self.size = size + self.version = version + self.usageCnt = usageCnt + self.installCnt = installCnt + self.isSystem = isSystem + } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> [ConfigurationDescription] { + var results: [ConfigurationDescription] = [] + let offset = 0 + while (offset < data.count) { + let subData = data.suffix(from: offset) + let nameSize = subData.firstIndex(of: 0) ?? 0 + + guard subData.count >= nameSize+11 else { return results } + + let name = String(decoding: Array(subData[0...nameSize-1]), as: UTF8.self) + let size = UInt32.fromUInt32ByteArray(bytes: Array(subData[nameSize+1...nameSize+4])) + let version = UInt32.fromUInt32ByteArray(bytes: Array(subData[nameSize+5...nameSize+8])) + let usageCnt = subData[nameSize+9] + let installCnt = subData[nameSize+10] + let isSystem = subData[nameSize+11] != 0 + + results.append(ConfigurationDescription(name, size, version, usageCnt, installCnt, isSystem)) + } + return results + } +} diff --git a/Classes/Public/ConfigurationElementsInfo.swift b/Classes/Public/ConfigurationElementsInfo.swift new file mode 100644 index 0000000..bfe701d --- /dev/null +++ b/Classes/Public/ConfigurationElementsInfo.swift @@ -0,0 +1,60 @@ +/* + +Copyright 2021 Microoled +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 + +/// Information about free space. +public class ConfigurationElementsInfo { + + /// The configuration version + public let version: UInt32 + + /// The number of image in this configuration + public let nbImg: UInt8 + + /// The number of layout in this configuration + public let nbLayout: UInt8 + + /// The number of font in this configuration + public let nbFont: UInt8 + + /// The number of page in this configuration + public let nbPage: UInt8 + + /// The number of gauge in this configuration + public let nbGauge: UInt8 + + init(_ version: UInt32, _ nbImg: UInt8, _ nbLayout: UInt8, _ nbFont: UInt8, _ nbPage: UInt8, _ nbGauge: UInt8) { + self.version = version + self.nbImg = nbImg + self.nbLayout = nbLayout + self.nbFont = nbFont + self.nbPage = nbPage + self.nbGauge = nbGauge + } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> ConfigurationElementsInfo { + guard data.count >= 9 else { return ConfigurationElementsInfo(0, 0, 0, 0, 0, 0) } + + let version = UInt32.fromUInt32ByteArray(bytes: Array(data[0...3])) + let nbImg = data[4] + let nbLayout = data[5] + let nbFont = data[6] + let nbPage = data[7] + let nbGauge = data[8] + + return ConfigurationElementsInfo(version, nbImg, nbLayout, nbFont, nbPage, nbGauge) + } +} diff --git a/Classes/Public/FontInfo.swift b/Classes/Public/FontInfo.swift new file mode 100644 index 0000000..56199f8 --- /dev/null +++ b/Classes/Public/FontInfo.swift @@ -0,0 +1,41 @@ +/* + +Copyright 2021 Microoled +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 + +/// Data describing a font that can be saved on the device. +public class FontInfo { + + /// The id of the font + public let id: UInt8 + + /// The height of characters in pixels + public let height: UInt8 + + public init(id: UInt8, height: UInt8) { + self.id = id + self.height = height + } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> [FontInfo] { + var results: [FontInfo] = [] + var offset = 0 + while (offset < data.count) { + results.append(FontInfo(id: data[offset], height: data[offset+1])) + offset += 2 + } + return results + } +} diff --git a/Classes/Public/FreeSpace.swift b/Classes/Public/FreeSpace.swift new file mode 100644 index 0000000..ae65d5c --- /dev/null +++ b/Classes/Public/FreeSpace.swift @@ -0,0 +1,40 @@ +/* + +Copyright 2021 Microoled +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 + +/// Information about free space. +public class FreeSpace { + + /// The total available space + public let totalSize: UInt32 + + /// The available free space + public let freeSpace: UInt32 + + init(_ totalSize: UInt32, _ freeSpace: UInt32) { + self.totalSize = totalSize + self.freeSpace = freeSpace + } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> FreeSpace { + guard data.count >= 8 else { return FreeSpace(0, 0) } + + let totalSpace = UInt32.fromUInt32ByteArray(bytes: Array(data[0...3])) + let freeSpace = UInt32.fromUInt32ByteArray(bytes: Array(data[4...7])) + + return FreeSpace(totalSpace, freeSpace) + } +} diff --git a/Classes/Public/GaugeInfo.swift b/Classes/Public/GaugeInfo.swift new file mode 100644 index 0000000..d85180b --- /dev/null +++ b/Classes/Public/GaugeInfo.swift @@ -0,0 +1,65 @@ +/* + +Copyright 2021 Microoled +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 + +/// Information about free space. +public class GaugeInfo { + + /// The x coordinate of the gauge + public let x: Int + + /// The y coordinate of the gauge + public let y: Int + + /// The radius of the gauge + public let r: UInt16 + + /// The internal radius of the gauge + public let rin: UInt16 + + /// The start angle of the gauge + public let start: UInt8 + + /// The end angle of the gauge + public let end: UInt8 + + /// The orientation of the gauge + public let clockwise: Bool + + init(_ x: Int, _ y: Int, _ r: UInt16, _ rin: UInt16, _ start: UInt8, _ end: UInt8, _ clockwise: Bool) { + self.x = x + self.y = y + self.r = r + self.rin = rin + self.start = start + self.end = end + self.clockwise = clockwise + } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> GaugeInfo { + guard data.count >= 10 else { return GaugeInfo(0, 0, 0, 0, 0, 0, false) } + + let x = Int.fromUInt16ByteArray(bytes: Array(data[0...1])) + let y = Int.fromUInt16ByteArray(bytes: Array(data[2...3])) + let r = UInt16.fromUInt16ByteArray(bytes: Array(data[4...5])) + let rin = UInt16.fromUInt16ByteArray(bytes: Array(data[6...7])) + let start = data[8] + let end = data[9] + let clockwise = data[10] != 0 + + return GaugeInfo(x, y, r, rin, start, end, clockwise) + } +} diff --git a/Classes/Public/Glasses.swift b/Classes/Public/Glasses.swift index 3b247d5..1361c85 100644 --- a/Classes/Public/Glasses.swift +++ b/Classes/Public/Glasses.swift @@ -312,6 +312,33 @@ public class Glasses { } + // MARK: - Utility commands + /// Check if firmware is at least + /// - Parameter version: the version to compare to + public func isFirmwareAtLeast(version: String) -> Bool { + let gVersion = self.getDeviceInformation().firmwareVersion + guard gVersion != nil else { return false } + if (gVersion ?? "" >= "v\(version).0b") { + return true + } else { + return false + } + } + + /// Compare the firmware against a certain version + /// - Parameter version: the version to compare to + public func compareFirmwareAtLeast(version: String) -> ComparisonResult { + let gVersion = self.getDeviceInformation().firmwareVersion + return (gVersion ?? "").compare("v\(version).0b") + } + + /// load a configuration file + public func loadConfiguration(cfg: [String]) -> Void { + for line in cfg { + sendBytes(bytes: line.hexaBytes) + } + } + // MARK: - General commands /// Power the device on or off. @@ -336,9 +363,15 @@ public class Glasses { sendCommand(id: .demo) } + /// Display the test pattern from demo command fw 4.0 + /// - Parameter pattern: The demo pattern. 0: Fill screen. 1: Rectangle with a cross in it. 2: Image + public func demo(pattern: DemoPattern) { + sendCommand(id: .demo, withValue: pattern.rawValue) + } + /// Display the test pattern - /// - Parameter pattern: The test pattern. 0: Fill screen. 1: Rectangle with a cross in it - public func test(pattern: TestPattern) { + /// - Parameter pattern: The demo pattern. 0: Fill screen. 1: Rectangle with a cross in it + public func test(pattern: DemoPattern) { sendCommand(id: .test, withValue: pattern.rawValue) } @@ -622,8 +655,8 @@ public class Glasses { /// Save a 4bpp image of the specified width. /// - Parameter imageData: The data representing the image to save - public func imgSave(imageData: ImageData) { - var firstChunkData: [UInt8] = [] + public func imgSave(id: UInt8, imageData: ImageData) { + var firstChunkData: [UInt8] = [id] firstChunkData.append(contentsOf: imageData.size.asUInt8Array) firstChunkData.append(contentsOf: imageData.width.asUInt8Array) @@ -655,6 +688,11 @@ public class Glasses { sendCommand(id: .imgDelete, withValue: id) } + /// Delete all images + public func imgDeleteAll() { + sendCommand(id: .imgDelete, withValue: 0xFF) + } + /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED public func imgStream(imageData: ImageData, x: Int16, y: Int16) { // TODO Infer size from data length @@ -670,10 +708,10 @@ public class Glasses { // MARK: - Font commands /// WARNING: CALLBACK NOT WORKING as of 3.7.4b - public func fontlist() { - // TODO Handle callback - // TODO For now, no data is returned with invalid length. - sendCommand(id: .fontList) + public func fontlist(_ callback: @escaping ([FontInfo]) -> Void) { + sendCommand(id: .fontList) { (commandResponseData: [UInt8]) in + callback(FontInfo.fromCommandResponseData(commandResponseData)) + } } /// Save a font to the specified font id @@ -710,7 +748,12 @@ public class Glasses { public func fontDelete(id: UInt8) { sendCommand(id: .fontDelete, withValue: id) } - + + /// Delete all the font + public func fontDeleteAll() { + sendCommand(id: .fontDelete, withValue: 0xFF) + } + // MARK: - Layout commands @@ -726,6 +769,11 @@ public class Glasses { sendCommand(id: .layoutDelete, withValue: id) } + /// Delete all layouts + public func layoutDeleteAll() { + sendCommand(id: .layoutDelete, withValue: 0xFF) + } + /// Display the specified layout with the specified text as its value /// - Parameters: /// - id: The id of the layout to display @@ -742,11 +790,17 @@ public class Glasses { sendCommand(id: .layoutClear, withValue: id) } -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func layoutList() { -// // TODO Handle callback once working -// sendCommand(id: .layoutList) -// } + /// Get the list of layouts + /// - Parameter callback: A callback called asynchronously when the device answers + public func layoutList(_ callback: @escaping ([Int]) -> Void) { + sendCommand(id: .layoutList) { (commandResponseData: [UInt8]) in + var results: [Int] = [] + commandResponseData.forEach { b in + results.append(Int(b & 0x00FF)) + } + callback(results) + } + } /// Redefine the position of a layout. The new position is saved. /// - Parameters: @@ -776,11 +830,15 @@ public class Glasses { sendCommand(id: .layoutDisplayExtended, withData: data) } -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func layoutGet(id: UInt8) { -// // TODO Handle callback -// sendCommand(id: .layoutGet, withValue: id) -// } + /// Get a layout + /// - Parameters: + /// - id: The id of the layout to get + /// - callback: A callback called asynchronously when the device answers + public func layoutGet(id: UInt8, _ callback: @escaping (LayoutParameters) -> Void) { + sendCommand(id: .layoutGet, withData: [id]) { (commandResponseData: [UInt8]) in + callback(LayoutParameters.fromCommandResponseData(commandResponseData)) + } + } // MARK: - Gauge commands @@ -818,45 +876,95 @@ public class Glasses { sendCommand(id: .gaugeSave, withData: data) } - + + /// Delete the specified gauge + /// - Parameter id: The id of the gauge to delete + public func gaugeDelete(id: UInt8) { + sendCommand(id: .gaugeDelete, withValue: id) + } + + /// Delete all gauge + public func gaugeDeleteAll() { + sendCommand(id: .gaugeDelete, withValue: 0xFF) + } + + /// Get the list of gauge + /// - Parameter callback: A callback called asynchronously when the device answers + public func gaugeList(_ callback: @escaping ([Int]) -> Void) { + sendCommand(id: .gaugeList) { (commandResponseData: [UInt8]) in + var results: [Int] = [] + commandResponseData.forEach { b in + results.append(Int(b & 0x00FF)) + } + callback(results) + } + } + + /// Get a gauge + /// - Parameters: + /// - id: The id of the gauge to get + /// - callback: A callback called asynchronously when the device answers + public func gaugeGet(id: UInt8, _ callback: @escaping (GaugeInfo) -> Void) { + sendCommand(id: .gaugeGet, withData: [id]) { (commandResponseData: [UInt8]) in + callback(GaugeInfo.fromCommandResponseData(commandResponseData)) + } + } // MARK: - Page commands + /// Save a page + public func pageSave(id: UInt8, layoutIds: [UInt8], xs: [Int16], ys: [UInt8]) { + let pi = PageInfo(id, layoutIds, xs, ys) + sendCommand(id: .pageSave, withData: pi.payload) + } + + /// Get a page + /// - Parameters: + /// - id: The id of the page to get + /// - callback: A callback called asynchronously when the device answers + public func pageGet(id: UInt8, _ callback: @escaping (PageInfo) -> Void) { + sendCommand(id: .pageGet, withData: [id]) { (commandResponseData: [UInt8]) in + callback(PageInfo.fromCommandResponseData(commandResponseData)) + } + } + + /// Delete a page + public func pageDelete(id: UInt8) { + sendCommand(id: .pageDelete, withValue: id) + } -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func pageSave() { -// // TODO Define interface with list of [Layout+LayoutX+LayoutY] -// // TODO Implement command -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func pageGet(id: UInt8) { -// // TODO -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func pageDelete(id: UInt8) { -// // TODO -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func pageDisplay() { -// // TODO Define interface -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func pageClear(id: UInt8) { -// // TODO -// } + /// Delete all pages + public func pageDeleteAll() { + sendCommand(id: .pageDelete, withValue: 0xFF) + } - /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED - public func pageList() { - // TODO Handle callback once working - sendCommand(id: .pageList) + + /// Display a page + public func pageDisplay(id: UInt8, texts: [String]) { + var withData: [UInt8] = [] + texts.forEach { text in + withData += Array(text.utf8) + } + sendCommand(id: .pageDisplay, withData: withData) + } + + /// Clear a page + public func pageClear(id: UInt8) { + sendCommand(id: .pageClear, withValue: id) + } + + /// List a page + public func pageList(_ callback: @escaping ([Int]) -> Void) { + sendCommand(id: .pageList) { (commandResponseData: [UInt8]) in + var results: [Int] = [] + commandResponseData.forEach { b in + results.append(Int(b & 0x00FF)) + } + callback(results) + } } // MARK: - Statistics commands - /// Get number of pixel activated on display /// - Parameter callback: A callback called asynchronously when the device answers public func pixelCount(_ callback: @escaping (Int) -> Void) { @@ -931,53 +1039,60 @@ public class Glasses { sendCommand(id: .setConfigID, withValue: number) } -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgWrite(name: String, version: Int32, password: String) { -// // Not working with 3.7.4b -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgRead(name: String) { -// sendCommand(id: .cfgRead) -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgSet(name: String) { -// // TODO -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgList() { -// // TODO Handle callback -// sendCommand(id: .cfgList) -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgRename(oldName: String, newName: String, password: String) { -// // TODO -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgDelete(name: String) { -// // TODO -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgDeleteOldest() { -// sendCommand(id: .cfgDeleteOldest) -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgFreeSpace() { -// // TODO Handle callback -// sendCommand(id: .cfgFreeSpace) -// } -// -// /// WARNING: NOT TESTED / NOT FULLY IMPLEMENTED -// public func cfgGetNb() { -// // TODO Handle callback -// sendCommand(id: .cfdGetNb) -// } + /// Write a new configuration + public func cfgWrite(name: String, version: Int, password: String) { + let withData = Array(name.utf8) + version.asUInt8Array + Array(password.utf8) + sendCommand(id: .cfgWrite, withData: withData) + } + + /// Read a configuration + public func cfgRead(name: String, callback: @escaping (ConfigurationElementsInfo) -> Void) { + sendCommand(id: .cfgRead, withData: Array(name.utf8)) { (commandResponseData) in + callback(ConfigurationElementsInfo.fromCommandResponseData(commandResponseData)) + } + } + + /// Set the configuration + public func cfgSet(name: String) { + sendCommand(id: .cfgSet, withData: Array(name.utf8)) + } + + /// List of configuration + public func cfgList(callback: @escaping ([ConfigurationDescription]) -> Void) { + sendCommand(id: .cfgList) { (commandResponseData) in + callback(ConfigurationDescription.fromCommandResponseData(commandResponseData)) + } + } + + /// Rename a configuration + public func cfgRename(oldName: String, newName: String, password: String) { + let withData = Array(oldName.utf8) + Array(newName.utf8) + Array(password.utf8) + sendCommand(id: .cfgRename, withData: withData) + } + + /// Delete a configuration + public func cfgDelete(name: String) { + sendCommand(id: .cfgDelete, withData: Array(name.utf8)) + } + + /// Delete least used configuration + public func cfgDeleteLessUsed() { + sendCommand(id: .cfgDeleteLessUsed) + } + + /// get available free space + public func cfgFreeSpace(callback: @escaping (FreeSpace) -> Void) { + sendCommand(id: .cfgFreeSpace) { (commandResponseData) in + callback(FreeSpace.fromCommandResponseData(commandResponseData)) + } + } + + /// get number of configuration + public func cfgGetNb(callback: @escaping (Int) -> Void) { + sendCommand(id: .cfdGetNb) { (commandResponseData) in + callback(Int(commandResponseData[0])) + } + } // MARK: - Notifications diff --git a/Classes/Public/LayoutParameters.swift b/Classes/Public/LayoutParameters.swift index 205acc1..75ec930 100644 --- a/Classes/Public/LayoutParameters.swift +++ b/Classes/Public/LayoutParameters.swift @@ -58,6 +58,7 @@ public class LayoutParameters { public let textOpacity: Bool // TODO Add additional commands + public var subCommands: [UInt8] public init( id: UInt8, @@ -87,13 +88,100 @@ public class LayoutParameters { self.textY = textY self.textRotation = textRotation self.textOpacity = textOpacity + self.subCommands = [] } + public func addSubCommandBitmap(id: UInt8, x: Int16, y: Int16) -> LayoutParameters { + self.subCommands.append(0x00) + self.subCommands.append(id) + self.subCommands += x.asUInt8Array + self.subCommands += y.asUInt8Array + return self + } + + public func addSubCommandCirc(x: UInt16, y: UInt16, r: UInt16) -> LayoutParameters { + self.subCommands.append(0x01) + self.subCommands += x.asUInt8Array + self.subCommands += y.asUInt8Array + self.subCommands += r.asUInt8Array + return self + } + + public func addSubCommandCircf(x: UInt16, y: UInt16, r: UInt16) -> LayoutParameters { + self.subCommands.append(0x02) + self.subCommands += x.asUInt8Array + self.subCommands += y.asUInt8Array + self.subCommands += r.asUInt8Array + return self + } + + public func addSubCommandColor(c: UInt8) -> LayoutParameters { + self.subCommands.append(0x03) + self.subCommands.append(c) + return self + } + + public func addSubCommandFont(f: UInt8) -> LayoutParameters { + self.subCommands.append(0x04) + self.subCommands.append(f) + return self + } + + public func addSubCommandLine(x1: UInt16, y1: UInt16, x2: UInt16, y2: UInt16) -> LayoutParameters { + self.subCommands.append(0x05) + self.subCommands += x1.asUInt8Array + self.subCommands += y1.asUInt8Array + self.subCommands += x2.asUInt8Array + self.subCommands += y2.asUInt8Array + return self + } + + public func addSubCommandPoint(x: UInt8, y: UInt16) -> LayoutParameters { + self.subCommands.append(0x06) + self.subCommands.append(x) + self.subCommands += y.asUInt8Array + return self + } + + public func addSubCommandRect(x1: UInt16, y1: UInt16, x2: UInt16, y2: UInt16) -> LayoutParameters { + self.subCommands.append(0x07) + self.subCommands += x1.asUInt8Array + self.subCommands += y1.asUInt8Array + self.subCommands += x2.asUInt8Array + self.subCommands += y2.asUInt8Array + return self + } + + public func addSubCommandRectf(x1: UInt16, y1: UInt16, x2: UInt16, y2: UInt16) -> LayoutParameters { + self.subCommands.append(0x08) + self.subCommands += x1.asUInt8Array + self.subCommands += y1.asUInt8Array + self.subCommands += x2.asUInt8Array + self.subCommands += y2.asUInt8Array + return self + } + + public func addSubCommandText(x: UInt16, y: UInt16, txt: String) -> LayoutParameters { + self.subCommands.append(0x09) + self.subCommands += x.asUInt8Array + self.subCommands += y.asUInt8Array + self.subCommands.append(UInt8(txt.count)) + self.subCommands += Array(txt.utf8) + return self + } + + public func addSubCommandGauge(gaugeId: UInt8) -> LayoutParameters { + self.subCommands.append(0x0A) + self.subCommands.append(gaugeId) + return self + } + + internal func toCommandData() -> [UInt8] { var data: [UInt8] = [] data.append(self.id) - data.append(0x00) // Extra command data length. TODO Compute once implemented + data.append(UInt8(self.subCommands.count)) data.append(contentsOf: self.x.asUInt8Array) data.append(self.y) data.append(contentsOf: self.width.asUInt8Array) @@ -106,8 +194,29 @@ public class LayoutParameters { data.append(self.textY) data.append(self.textRotation.rawValue) data.append(self.textOpacity ? 0x01 : 0x00) - // TODO Append extra command data once implemented + data.append(contentsOf: self.subCommands) return data } + + internal static func fromCommandResponseData(_ data: CommandResponseData) -> LayoutParameters { + guard data.count >= 10 else { return LayoutParameters(id: 0, x: 0, y: 0, width: 0, height: 0, foregroundColor: 0, backgroundColor: 0, font: 0, textValid: false, textX: 0, textY: 0, textRotation: .topLR, textOpacity: false) } + + let id = 0 + let x = UInt16.fromUInt16ByteArray(bytes: Array(data[1...2])) + let y = data[3] + let width = UInt16.fromUInt16ByteArray(bytes: Array(data[4...5])) + let height = data[6] + let foregroundColor = data[7] + let backgroundColor = data[8] + let font = data[9] + let textValid = data[10] != 0x00 + let textX = UInt16.fromUInt16ByteArray(bytes: Array(data[11...12])) + let textY = data[13] + let textRotation = TextRotation(rawValue: data[12]) ?? .topLR + let textOpacity = data[15] != 0x00 + + return LayoutParameters(id: UInt8(id), x: x, y: y, width: width, height: height, foregroundColor: foregroundColor, backgroundColor: backgroundColor, font: font, textValid: textValid, textX: textX, textY: textY, textRotation: textRotation, textOpacity: textOpacity) + } + } diff --git a/Classes/Public/PageInfo.swift b/Classes/Public/PageInfo.swift new file mode 100644 index 0000000..03443b7 --- /dev/null +++ b/Classes/Public/PageInfo.swift @@ -0,0 +1,47 @@ +/* + +Copyright 2021 Microoled +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 + +/// Information about a page. +public class PageInfo { + + /// The page id + public let id: UInt8 + + /// The page payload + public let payload: [UInt8] + + init(_ id: UInt8, _ layoutIds: [UInt8], _ xs: [Int16], _ ys: [UInt8]) { + self.id = id + var payload: [UInt8] = [id] + for i in (0.. PageInfo { + guard data.count >= 1 else { return PageInfo(0, [], [], []) } + return PageInfo(data) + } +} diff --git a/Example/ActiveLookSDK.xcodeproj/project.pbxproj b/Example/ActiveLookSDK.xcodeproj/project.pbxproj index 71037bc..75c441a 100644 --- a/Example/ActiveLookSDK.xcodeproj/project.pbxproj +++ b/Example/ActiveLookSDK.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 4A81AC79268B1F330038DC70 /* ConfigDemo-4.0.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4A81AC77268B1F320038DC70 /* ConfigDemo-4.0.txt */; }; + 4A81AC7A268B1F330038DC70 /* ConfigSystem ActiveLookApp-3.7.txt in Resources */ = {isa = PBXBuildFile; fileRef = 4A81AC78268B1F330038DC70 /* ConfigSystem ActiveLookApp-3.7.txt */; }; 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; @@ -45,6 +47,8 @@ 1FBEE7D55113BC0EFFAE408F /* Pods-ActiveLookSDK_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ActiveLookSDK_Tests.release.xcconfig"; path = "Target Support Files/Pods-ActiveLookSDK_Tests/Pods-ActiveLookSDK_Tests.release.xcconfig"; sourceTree = ""; }; 2883C312A9DC4A12A6A7D788 /* Pods_ActiveLookSDK_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ActiveLookSDK_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3B5835CD2E5B0F3DB00FA0AE /* ActiveLookSDK.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = ActiveLookSDK.podspec; path = ../ActiveLookSDK.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 4A81AC77268B1F320038DC70 /* ConfigDemo-4.0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "ConfigDemo-4.0.txt"; sourceTree = ""; }; + 4A81AC78268B1F330038DC70 /* ConfigSystem ActiveLookApp-3.7.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "ConfigSystem ActiveLookApp-3.7.txt"; sourceTree = ""; }; 4DF3C0802BFC743CF75A66A3 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 607FACD01AFB9204008FA782 /* ActiveLookSDK_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ActiveLookSDK_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -97,9 +101,19 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 4A81AC76268B1EFF0038DC70 /* Assets */ = { + isa = PBXGroup; + children = ( + 4A81AC77268B1F320038DC70 /* ConfigDemo-4.0.txt */, + 4A81AC78268B1F330038DC70 /* ConfigSystem ActiveLookApp-3.7.txt */, + ); + path = Assets; + sourceTree = ""; + }; 607FACC71AFB9204008FA782 = { isa = PBXGroup; children = ( + 4A81AC76268B1EFF0038DC70 /* Assets */, 607FACF51AFB993E008FA782 /* Podspec Metadata */, 607FACD21AFB9204008FA782 /* Example */, 607FACE81AFB9204008FA782 /* Tests */, @@ -286,12 +300,12 @@ TargetAttributes = { 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = M93MNXR86B; + DevelopmentTeam = Q6RY2SP3A4; LastSwiftMigration = 0900; }; 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; - DevelopmentTeam = M93MNXR86B; + DevelopmentTeam = Q6RY2SP3A4; LastSwiftMigration = 1220; TestTargetID = 607FACCF1AFB9204008FA782; }; @@ -322,7 +336,9 @@ buildActionMask = 2147483647; files = ( 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, + 4A81AC7A268B1F330038DC70 /* ConfigSystem ActiveLookApp-3.7.txt in Resources */, 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, + 4A81AC79268B1F330038DC70 /* ConfigDemo-4.0.txt in Resources */, 6D08115A260895370000FF32 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -567,7 +583,7 @@ baseConfigurationReference = C81A328DB7A951CCF6A77D89 /* Pods-ActiveLookSDK_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = M93MNXR86B; + DEVELOPMENT_TEAM = Q6RY2SP3A4; INFOPLIST_FILE = ActiveLookSDK/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; @@ -583,7 +599,7 @@ baseConfigurationReference = F55477437C104300E1C1792E /* Pods-ActiveLookSDK_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = M93MNXR86B; + DEVELOPMENT_TEAM = Q6RY2SP3A4; INFOPLIST_FILE = ActiveLookSDK/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; @@ -598,7 +614,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 83200256C08053AF7A006996 /* Pods-ActiveLookSDK_Tests.debug.xcconfig */; buildSettings = { - DEVELOPMENT_TEAM = M93MNXR86B; + DEVELOPMENT_TEAM = Q6RY2SP3A4; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", @@ -621,7 +637,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 1FBEE7D55113BC0EFFAE408F /* Pods-ActiveLookSDK_Tests.release.xcconfig */; buildSettings = { - DEVELOPMENT_TEAM = M93MNXR86B; + DEVELOPMENT_TEAM = Q6RY2SP3A4; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", diff --git a/Example/ActiveLookSDK/ConfigurationCommandsViewController.swift b/Example/ActiveLookSDK/ConfigurationCommandsViewController.swift index 3198fb0..6d3d1d9 100644 --- a/Example/ActiveLookSDK/ConfigurationCommandsViewController.swift +++ b/Example/ActiveLookSDK/ConfigurationCommandsViewController.swift @@ -51,32 +51,31 @@ class ConfigurationCommandsViewController : CommandsTableViewController { // MARK: - Actions func readDefaultConfig() { - glasses.readConfigID(number: 1, callback: { (config: Configuration) in - let alert = UIAlertController(title: "Configuration info", message: "Number: \(config.number)\nConfig ID: \(config.id)", preferredStyle: .alert) + glasses.cfgRead(name: "A.LooK", callback: { (config: ConfigurationElementsInfo) in + let alert = UIAlertController(title: "Configuration info", message: "Version: \(config.version)\nnb layout: \(config.nbLayout)", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true) }) } func writeTestConfig() { - let testConfig = Configuration(number: 3, id: 1234) - glasses.writeConfigID(configuration: testConfig) + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") } func readTestConfig() { - glasses.readConfigID(number: 3, callback: { (config: Configuration) in - let alert = UIAlertController(title: "Configuration info", message: "Number: \(config.number)\nConfig ID: \(config.id)", preferredStyle: .alert) + glasses.cfgRead(name: "DemoApp", callback: { (config: ConfigurationElementsInfo) in + let alert = UIAlertController(title: "Configuration info", message: "Version: \(config.version)\nnb layout: \(config.nbLayout)", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true) }) } func setTestConfig() { - glasses.setConfigID(number: 3) + glasses.cfgSet(name: "DemoApp") } func setDefaultConfig() { - glasses.setConfigID(number: 1) + glasses.cfgSet(name: "A.LooK") } // func configCount() { diff --git a/Example/ActiveLookSDK/FontCommandsViewController.swift b/Example/ActiveLookSDK/FontCommandsViewController.swift index 60aca9c..0e77734 100644 --- a/Example/ActiveLookSDK/FontCommandsViewController.swift +++ b/Example/ActiveLookSDK/FontCommandsViewController.swift @@ -51,8 +51,11 @@ class FontCommandsViewController : CommandsTableViewController { // MARK: - Actions func fontList() { - // TODO Callback when working - glasses.fontlist() + glasses.fontlist() { (fonts: [FontInfo]) in + let alert = UIAlertController(title: "Font count", message: "\(fonts.count) ", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true) + } } func selectFont1() { @@ -68,15 +71,21 @@ class FontCommandsViewController : CommandsTableViewController { } func saveCustomFont() { - glasses.writeConfigID(configuration: Configuration(number: 1, id: 0)) + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") glasses.fontSave(id: 4, fontData: FontData(height: 14, data: customFontData)) } func selectCustomFont() { + glasses.cfgSet(name: "DemoApp") glasses.fontSelect(id: 4) + glasses.txt(x: 100, y: 100, rotation: .leftTB, font: 0x04, color: 0x0F, string: "01") + glasses.txt(x: 100, y: 100, rotation: .leftBT, font: 0x04, color: 0x0F, string: "23") + glasses.txt(x: 100, y: 100, rotation: .rightTB, font: 0x04, color: 0x0F, string: "45") + glasses.txt(x: 100, y: 100, rotation: .rightBT, font: 0x04, color: 0x0F, string: "67") } func deleteCustomFont() { + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") glasses.fontDelete(id: 4) } } diff --git a/Example/ActiveLookSDK/GaugeCommandsViewController.swift b/Example/ActiveLookSDK/GaugeCommandsViewController.swift index 649576e..b8771e4 100644 --- a/Example/ActiveLookSDK/GaugeCommandsViewController.swift +++ b/Example/ActiveLookSDK/GaugeCommandsViewController.swift @@ -43,20 +43,24 @@ class GaugeCommandsViewController : CommandsTableViewController { // MARK: - Actions func createGauge() { + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") glasses.gaugeSave(id: 1, x: 152, y: 128, externalRadius: 40, internalRadius: 20, start: 2, end: 14, clockwise: true) } func displayGauge30() { + glasses.cfgSet(name: "DemoApp") glasses.clear() glasses.gaugeDisplay(id: 1, value: 30) } func displayGauge70() { + glasses.cfgSet(name: "DemoApp") glasses.clear() glasses.gaugeDisplay(id: 1, value: 70) } func displayGauge100() { + glasses.cfgSet(name: "DemoApp") glasses.clear() glasses.gaugeDisplay(id: 1, value: 100) } diff --git a/Example/ActiveLookSDK/GeneralCommandsViewController.swift b/Example/ActiveLookSDK/GeneralCommandsViewController.swift index d6a152e..bbbba5c 100644 --- a/Example/ActiveLookSDK/GeneralCommandsViewController.swift +++ b/Example/ActiveLookSDK/GeneralCommandsViewController.swift @@ -34,6 +34,7 @@ class GeneralCommandsViewController : CommandsTableViewController { "Set max grey level", "Test pattern 1", "Test pattern 2", + "Test pattern 3", "Get battery level", "Get version", "Enable debug mode", @@ -52,8 +53,9 @@ class GeneralCommandsViewController : CommandsTableViewController { self.clear, self.setLowGreyLevel, self.setMaxGreylevel, - self.displayTestPattern1, - self.displayTestPattern2, + self.displayDemoPattern1, + self.displayDemoPattern2, + self.displayDemoPattern3, self.getBatteryLevel, self.getVersion, self.enableDebugMode, @@ -88,12 +90,16 @@ class GeneralCommandsViewController : CommandsTableViewController { glasses.grey(level: 15) } - func displayTestPattern1() { + func displayDemoPattern1() { glasses.test(pattern: .fill) } - func displayTestPattern2() { - glasses.test(pattern: .rect) + func displayDemoPattern2() { + glasses.test(pattern: .cross) + } + + func displayDemoPattern3() { + glasses.test(pattern: .image) } func getBatteryLevel() { diff --git a/Example/ActiveLookSDK/GlassesTableViewController.swift b/Example/ActiveLookSDK/GlassesTableViewController.swift index 244f16a..28677de 100644 --- a/Example/ActiveLookSDK/GlassesTableViewController.swift +++ b/Example/ActiveLookSDK/GlassesTableViewController.swift @@ -74,10 +74,27 @@ class GlassesTableViewController: UITableViewController { self.connecting = false self.connectionTimer?.invalidate() - - let viewController = CommandsMenuTableViewController(glasses) - self.navigationController?.pushViewController(viewController, animated: true) - + + if (glasses.isFirmwareAtLeast(version: "4.0")) { + /*if (glasses.compareFirmwareAtLeast(version: "4.0").rawValue > 0) { + let alert = UIAlertController(title: "Update application", message: "The glasses firmware is newer. Check the store for an application update.", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) + self.present(alert, animated: true) + // } else { + // if let filePath = Bundle.main.path(forResource: "ConfigDemo-4.0", ofType: "txt") { + // do { + // let cfg = try String(contentsOfFile: filePath) + // glasses.loadConfiguration(cfg: cfg.components(separatedBy: "\n")) + // } catch {} + // } + }*/ + let viewController = CommandsMenuTableViewController(glasses) + self.navigationController?.pushViewController(viewController, animated: true) + } else { + let alert = UIAlertController(title: "Update glasses firmware", message: "The glasses firmware is not up to date.", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) + self.present(alert, animated: true) + } }, onGlassesDisconnected: { [weak self] in guard let self = self else { return } diff --git a/Example/ActiveLookSDK/ImageCommandsViewController.swift b/Example/ActiveLookSDK/ImageCommandsViewController.swift index 9de8816..b8c9901 100644 --- a/Example/ActiveLookSDK/ImageCommandsViewController.swift +++ b/Example/ActiveLookSDK/ImageCommandsViewController.swift @@ -23,6 +23,10 @@ class ImageCommandsViewController : CommandsTableViewController { let testImageData: [UInt8] = [0x11, 0x32, 0x43, 0x55, 0x76, 0x88, 0xA9, 0x0A, 0x21, 0x32, 0x44, 0x65, 0x77, 0x98, 0xA9, 0x0B, 0x21, 0x43, 0x54, 0x66, 0x87, 0x98, 0xBA, 0x0B, 0x32, 0x43, 0x55, 0x76, 0x88, 0xA9, 0xBA, 0x0C, 0x32, 0x44, 0x65, 0x77, 0x98, 0xA9, 0xBB, 0x0C, 0x43, 0x54, 0x66, 0x87, 0x98, 0xBA, 0xCB, 0x0D, 0x43, 0x65, 0x76, 0x88, 0xA9, 0xBA, 0xCC, 0x0D, 0x44, 0x65, 0x77, 0x98, 0xA9, 0xBB, 0xDC, 0x0E, 0x54, 0x66, 0x87, 0x98, 0xBA, 0xCB, 0xDD, 0x0E, 0x65, 0x76, 0x88, 0xA9, 0xBA, 0xCC, 0xED, 0x0E] + let testImage1bppWidth: UInt16 = 15 + + let testImage1bppData: [UInt8] = [0xC0, 0x01, 0x30, 0x06, 0x08, 0x08, 0x04, 0x10, 0x02, 0x20, 0x01, 0x40, 0x01, 0x40, 0x81, 0x40, 0x62, 0x21, 0x1C, 0x1E] + // MARK: - Life cycle override func viewDidLoad() { @@ -37,6 +41,7 @@ class ImageCommandsViewController : CommandsTableViewController { "Display image 4", "Display image at the bottom of the screen", "Save test image", + "Save test image 1 bpp", "Delete image", "Clear" ] @@ -49,6 +54,7 @@ class ImageCommandsViewController : CommandsTableViewController { self.displayImage4, self.displayImageBottomScreen, self.saveImage, + self.saveImage1bpp, self.deleteImage, self.clear ] @@ -66,32 +72,42 @@ class ImageCommandsViewController : CommandsTableViewController { } func displayImage1() { + glasses.cfgSet(name: "DemoApp") glasses.imgDisplay(id: 0, x: 152, y: 128) } func displayImage2() { + glasses.cfgSet(name: "DemoApp") glasses.imgDisplay(id: 1, x: 152, y: 128) } func displayImage3() { + glasses.cfgSet(name: "DemoApp") glasses.imgDisplay(id: 2, x: 152, y: 128) } func displayImage4() { + glasses.cfgSet(name: "DemoApp") glasses.imgDisplay(id: 3, x: 152, y: 128) } func displayImageBottomScreen() { + glasses.cfgSet(name: "DemoApp") glasses.imgDisplay(id: 0, x: 152, y: 0) } func saveImage() { - glasses.writeConfigID(configuration: Configuration(number: 1, id: 0)) - glasses.imgSave(imageData: ImageData(width: testImageWidth, data: testImageData)) + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") + glasses.imgSave(id: 0, imageData: ImageData(width: testImageWidth, data: testImageData)) } - + + func saveImage1bpp() { + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") + glasses.imgSave1bpp(imageData: ImageData(width: testImage1bppWidth, data: testImage1bppData)) + } + func deleteImage() { - glasses.writeConfigID(configuration: Configuration(number: 1, id: 0)) + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") glasses.imgDelete(id: 0) } } diff --git a/Example/ActiveLookSDK/LayoutCommandsViewController.swift b/Example/ActiveLookSDK/LayoutCommandsViewController.swift index 588361e..1157531 100644 --- a/Example/ActiveLookSDK/LayoutCommandsViewController.swift +++ b/Example/ActiveLookSDK/LayoutCommandsViewController.swift @@ -124,9 +124,8 @@ class LayoutCommandsViewController : CommandsTableViewController { textY: 50, textRotation: .bottomRL, textOpacity: true - ) - - glasses.writeConfigID(configuration: Configuration(number: 1, id: 0)) + ).addSubCommandLine(x1: 0, y1: 0, x2: 200, y2: 50) + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") glasses.layoutSave(parameters: layoutParameters) } diff --git a/Example/ActiveLookSDK/PageCommandsViewController.swift b/Example/ActiveLookSDK/PageCommandsViewController.swift index 456abe4..dfcabf9 100644 --- a/Example/ActiveLookSDK/PageCommandsViewController.swift +++ b/Example/ActiveLookSDK/PageCommandsViewController.swift @@ -25,14 +25,44 @@ class PageCommandsViewController : CommandsTableViewController { super.viewDidLoad() title = "Page commands" - commandNames = ["List pages"] - commandActions = [self.listPages] + commandNames = [ + "List pages", + "Save page", + "Display page", + "Delete page" + ] + commandActions = [ + self.listPages, + self.pageSave, + self.pageDisplay, + self.pageDelete + ] } // MARK: - Actions func listPages() { - glasses.pageList() + glasses.pageList() { (pages: [Int]) in + let alert = UIAlertController(title: "Page count", message: "\(pages.count) ", preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) + self.present(alert, animated: true) + } + } + + func pageSave() { + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") + glasses.pageSave(id: 1, layoutIds: [1, 2], xs: [0, 50], ys: [0, 50]) + } + + func pageDisplay() { + glasses.cfgSet(name: "DemoApp") + glasses.pageDisplay(id: 1, texts: ["AA", "BB"]) + } + + func pageDelete() { + glasses.cfgSet(name: "DemoApp") + glasses.cfgWrite(name: "DemoApp", version: 1, password: "42") + glasses.pageDelete(id: 1) } } diff --git a/Example/Assets/ConfigDemo-4.0.txt b/Example/Assets/ConfigDemo-4.0.txt new file mode 100644 index 0000000..8b1a51e --- /dev/null +++ b/Example/Assets/ConfigDemo-4.0.txt @@ -0,0 +1,544 @@ +FFD0001544656D6F41707000000000020000002AAA +FF61000600AA +FF61000603AA +FF600025070F0098C8007A1E0F000101004E1D040100000058000A040109002D001D0125AA +FF6000160A00001ECD0079190F0001010050160401AA +FF6000160900000000012FFF0F00020100FF500401AA +FF6000160500000000012FFF0F00030100E08C0401AA +FF60002C0216000000012FFF0F000201011869040104020900FA00A50E506C6561736520436F6E6E656374AA +FF6000160400000000012FFF0F00020100FF800401AA +FF60001C0B06001E5500F43C0F00030100AA310401000100BC0008AA +FF6000280D12001E5500F43C0F00030100A5310401000200BC00080401090043001D046B6D2F68AA +FF6000280E12001E5500F43C0F00030100A5310401000300BC00080401090043001D046B6D2F68AA +FF6000260C10001E5500F43C0F00030100A5310401000400BC0008040109003E001D026B6DAA +FF600025130F001E5500F43C0F00030100A5310401000500BC0008040109003E001D016DAA +FF6000300F1A001E5500F43C0F00030100A5310401000600BC0008040109003E0032046D696E2F09003E001D026B6DAA +FF6000271511001E5500F43C0F00030100A5310401000700BC0008040109003E001D0342504DAA +FF600025120F001E5500F43C0F00030100A5310401000800BC0008040109003E001D016DAA +FF6000271711001E5500F43C0F00030100A5310401000900BC0008040109003E001D0352504DAA +FF6000271811001E5500F43C0F00030100A5310401000A00BC0008040109003E001D0342504DAA +FF600025190F001E5500F43C0F00030100A5310401000B00BC0008040109003E001D0157AA +FF6000281112001E5500F43C0F00030100A5310401000C00BC0008040109003E001D046B43616CAA +FF6000271011001E5500F43C0F00030100A5310401000D00BC0008040109003E001D0352504DAA +FF600025160F001E5500F43C0F00030100A5310401000E00BC0008040109003E001D0157AA +FF6000251A0F001E5500F43C0F00030100A5310401000F00BC0008040109003E001D016DAA +FF60002A1B14001E5500F43C0F00030100A5310401001000BC00080401090050001D066B43616C2F68AA +FF6000271411001E5500F43C0F00030100A5310401001100BC0008040109003E001D036D2F68AA +FF6000271C11001E5500F43C0F00030100A5310401001200BC0008040109003E001D0352504DAA +FF6000271D11001E5500F43C0F00030100A5310401001300BC0008040109003E001D0342504DAA +FF6000251E0F001E5500F43C0F00030100A5310401001400BC0008040109003E001D0157AA +FF6000281F12001E5500F43C0F00030100A5310401001500BC0008040109003E001D046B6D2F68AA +FF6000262010001E5500F43C0F00030100A5310401001600BC0008040109003E001D025041AA +FF6000252A0F001E5500F43C0F00030100A5310401002C00BC0008040109003E001D0157AA +FF600030421A001E5500F43C0F00030100A5310401002E00BC0008040109003E0032046D696E2F09003E001D026B6DAA +FF6000272111001E5500F43C0F00030100A5310401000200BC00080401090043001D036D7068AA +FF6000272211001E5500F43C0F00030100A5310401000300BC00080401090043001D036D7068AA +FF6000262310001E5500F43C0F00030100A5310401000400BC0008040109003E001D026D69AA +FF6000262410001E5500F43C0F00030100A5310401000500BC0008040109003E001D026674AA +FF600030251A001E5500F43C0F00030100A5310401000600BC0008040109003E0032046D696E2F09003E001D026D69AA +FF6000262610001E5500F43C0F00030100A5310401000800BC0008040109003E001D026674AA +FF6000262710001E5500F43C0F00030100A5310401000F00BC0008040109003E001D026674AA +FF6000282812001E5500F43C0F00030100A5310401001100BC0008040109003E001D0466742F68AA +FF6000272911001E5500F43C0F00030100A5310401001500BC0008040109003E001D036D7068AA +FF600030431A001E5500F43C0F00030100A5310401002E00BC0008040109003E0032046D696E2F09003E001D026D69AA +FF6000162B00009891007A3C0F0003010071340401AA +FF60001C2C06009891007A3C0F00030100573404010017005A0012AA +FF60001C2D06009891007A3C0F00030100573404010018005A0012AA +FF60001C2E06009891007A3C0F00030100573404010019005A0012AA +FF60001C2F06009891007A3C0F0003010057340401001A005A0012AA +FF60001C3006009891007A3C0F0003010057340401001B005A0012AA +FF60001C3106009891007A3C0F0003010050340401001C005A0012AA +FF60001C3206009891007A3C0F0003010057340401001D005A0012AA +FF60001C3306009891007A3C0F0003010050340401001E005A0012AA +FF60001C3406009891007A3C0F0003010050340401001F005A0012AA +FF60001C3506009891007A3C0F00030100503404010020005A0012AA +FF60001C3606009891007A3C0F00030100573404010021005A0012AA +FF60001C3706009891007A3C0F00030100503404010022005A0012AA +FF60001C3806009891007A3C0F00030100503404010023005A0012AA +FF60001C3906009891007A3C0F00030100573404010024005A0012AA +FF60001C3A06009891007A3C0F00030100503404010025005A0012AA +FF60001C3B06009891007A3C0F000301005A3404010026005A0012AA +FF60001C3C06009891007A3C0F00030100503404010027005A0012AA +FF60001C3D06009891007A3C0F00030100503404010028005A0012AA +FF60001C3E06009891007A3C0F00030100503404010029005A0012AA +FF60001C3F06009891007A3C0F0003010057340401002A005A0012AA +FF60001C4006009891007A3C0F0003010057340401002B005A0012AA +FF60001C4106009891007A3C0F0003010050340401002D005A0012AA +FF60001C4406009891007A3C0F0003010050340401002F005A0012AA +FF600025450F001E5500F43C0F00030100A5310401003000BC0008040109003E001D0157AA +FF60001C4606009891007A3C0F00030100503404010031005A0012AA +FF60001C47060079CD0014190F0000010000000001003200030003AA +FF60001C48060079CD0014190F0000010000000001003300030003AA +FF60001C4906008DCD0014190F0000010000000001003400030003AA +FF43000600AA +FF41000C000000010E001EAA +FF41006900408878777766665655554444340100F7FFFFEEDDCDCCBBABAA9989783600FCAAAA999989887877676656556700FC0000001000010000000000007786FD00000000000000000000000087FEFF00CBCDCCBBBBAA999989780087EEFF00FAFFFFFFDEDDBDAA +FF410069BCBB9A0097EEFE00FAFFFFFFEFDEDDCCBBAB0098EDEE00FAFFFFFFEFEEDDCCBCAB0098DDEE00FAFFFFFFFFEEDEDDCCAB00A8DCED00FAFFFFFFFFEFDEDDCCBC00A9CCDD00F9FFFFFFFFFFDEDDCDBC00A9CADC00C9CCCCDDCDCCBCBBAB9A00B963CA000000AA +FF41004B000000000000000000B900C8000000000000000000000000BA00B8889899A9AAAAAAAA9A999988CB00A4CBDCEDEEFFFFFFFFFFEFEEDD9C002055667777888888888888777705AA +FF41000C0100000422002EAA +FF41006900000000001000003165878888782510000000000000000000000000011042768888999999A9680100000000000000000000001052768888999999A9AAAA7A0200000000000000000000427688784603003075A9AABB6A00000000000000001031768758AA +FF41006902000000001020A7BBBB290000000000000010658758010000000001000010B7CBBC040000000000006187680200000000000000000020C9CC5B000000000010868805000000000000000000000070CCCD04000000007188480000000000000000000000AA +FF4100690000C6DD2C000000008688040000100000000000000000000060DDBD000100418858000000000000000000000000110000D8EE080000819807000000001100000000000000000000B0EE2D00009689020000EA07000000000000000000000030EDAE0010AA +FF4100699859000000FC7F000000000000000000000000F9EF03509918000000E4FF070000000000000000000001E1FF0A80990600000040FE7F0000000010010000000000A0FF0D92A90200000000E4FF070000000001000000000040FF4FA58A000000000040FEAA +FF4100697F1000000000000000000000FD9FA77A100000000000E4FF0700000000000000000000FBCFA85A00000000001040FE7F00000100000000000000F8DFA93B00000000000000E4FF07000000000000000000F5EFBA1B0000000000000040FE7F0000000000AA +FF41006900000000F1FFBB0B0000000000000001E4FF000000000000000000F0FFBB0B010000000000001050FF010000000000000000F0FFBB1C100000000000000050FF010000000000000000F1EFCB4C000000000000000050FF010000000000000010F5DFCA6CAA +FF410069000000000000000050FF010000000000000000F8CEC99C000000000000000050FF110000000000000000EAAEC7BD000000000000000050FF010000000000000000EC8ED3DD030000000000000050FF010000000000000030EE3DB0DD0900000000000000AA +FF41006950FF110000000000000090DE0B80DD1D0000100000000050FF0100000000000000C1DD0820ED8E0000000000000050FF0100000001000000D8CD0200EADE0300000000000050FF0100000000000020DC8C0000D2FE0C00000000000150FF010000000000AA +FF41006900A0CC2B000080FF9F00000000000050FF01100000000000C7BC06000000FCFF08000000000030FF00000000000060CC9B10000000E3FF8F00000000000055010000000000B6BB2A0000000050FEFF09000000000000000000000070BBAB030000000000AA +FF410069E6FFCF0301000100000000000020B9AB3900000000000050FEFF9E010110000001000010B7BB9A0301000000010000C3FFFFAE03000000000030A7BBAA28000000000000000000E8FFFFCE7A04004086BABBAA590000000001000000001030EAEEEEEEDDAA +FF41003FCDCCCCBBAB6902000000000000000000001020C9EEDDDDCCCCBBAB6801000000000000000000000000000183BACCCCAB89260010000000000000AA +FF41000C0200000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000010001000000000000000000000000000000000000000000100000000010000AA +FF410069000010000000000000000000001044343333222212111111111111111101000000000000F7FFEFCDBC9A8978675655444433332212000000000000FBFFEFCDBC9A8978675655444433332212000000000000D5EEDECCAB99887766554544343323221200AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000000000000000000000000000000000001000000000000000AA +FF4100690000000000000010000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7BCAB9A88776655454433332322221101AA +FF410069100000000000FFFFDECDAB9A8877665555444433232212000000000000FEFFDECDAB9A8877665555444433232212000000000000949989786756454433332322221211110100000000000000000000000000000000000000000000000100000000000000AA +FF41006900000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000001000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070EEEECDBC9A8978665645444433332212010000000000C0FFFFDEBCAB9978676655454434AA +FF41006933232201000000000080FFFFDEBCAB99786766554544343323220100000000000042443433232212111111111111111111000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C0300000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000010000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000001000000100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100AA +FF4100690000000000007099897756454433232222111101000000000000000000F5FFDEBC9A896756554434332201000000000000000000E3FFDEBC9A78675645443423220100000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000001000100000000000000000000000000000000100000000000001000000000000000000000000010000000000AA +FF410069000000000000000060AA997867564534332322121101000000000000000000E0FFDEBCAA896756554434332212000001000000000000C0EEDDBC9A7867554544332322110000000000000000010001000000000000000000000000000010000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010000000100000000100000001100000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000000100000000000000008188776655443323222211111100000000000000000000FBFFDEBC9A786756454433232201000000000000000000FAFFDEBC9A786756454433232201000000000000000000000000000000000100000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C0400000422002EAA +FF41006900000000000000000000000000000000107516000000000000000000000000000000000000000050885800000000000000000000000000000000000000106088690000000000000000000000000000000000000000309828000000000000000000000000AA +FF410069000000000032110100420100000000000000000000000000000000407717001100000000000000000000000000000000010070884800001000000000000000000000000000000000007088280000A3061010000000000000000000000000000030870500AA +FF41006930BA6B0000000000000000000100002055020000000000A3BBCB0700000000000000000000006187070000000041BACBCC7C000000000000000000000083880801000000A3CB7CDBDD070000000000000000000081980710000030CACC06C3ED8E000000AA +FF41006900000010110000105501000000B3CC6C1040ECEE08000000000041760300000000000030CBCC060000D4FF8F0000000000748807000000000000A0CC7C00000040FEFF0500000000858817000000000000C7DC0700000000E5FF0C000000007188020000AA +FF41006900000010DB9D000000000071FF6F00000010010000000000000061DD2D0000A6280000FDBF00000000000000000000000090ED0B00B0FFEF0500F8DF000000000003110000000000B0EE0900F9FFFF0D00F3EF00000000705A100000000000C0EE1800FCAA +FF410069FFFF2F00E0EE00000000A7BB050000001000B0FF0900FCFFFF1F00E2DE00000070BBBB6B0000000000B0FF0B00F8FFFF0C00E7CE000000B7BBCBCC060000000080FF1E00B0FFDF0400DAAD000070BBABB4DC6D0000000010FFAF000085160040DD6C0000AA +FF410069B7CB1A40DCDD0700000000FAFF0600000000B2CC0A0070CBAC0100D5EE7E00000000E2FF8E00000040CBBC0500B7CC1A000050EDEF0600000050FEFF8C0261C9BC6B1050CBAC01001000E5FF2E00000001E6EEEEDECDBCAB0600A0CC2B0000000060FFAFAA +FF4100690000000040EBDECDCCAB480001C6DD040100000000FAEF020000000050B9CCAB58000000D9AD0001A4AB0200E1FF08000000000000000000000000DC7D0060FEFF3E00B0FF0B000000000000000000000000ED2E00D0FFFFBF1091FF0C00000000000000AA +FF4100690000000010EE0E00F0FFFFDF0180FF0C000000000000000000000000ED3F00E0FFFFCF0090EE0B000000000000000000001000FD8F00B0FFFF7F00B0EE09000000000000001000000000FBDF0010FBEF0900D2DE06000000000000000000000000F6FF07AA +FF4100690010040000DACD00000000000000000000000000C0FF5E0000001070DD7C0100000000000000000000000050FFEF08000010D9CC1A0000000000000000000000000000F7FFDF6975C9CDAC02000000000000000000000000000070FEEEEEDDCDBC290000AA +FF41003F0000000000000000000000000000B4EEDECDBC6A01000000000000000000000000000000000084BAAB6801000000000000000000000000000000AA +FF41000C0500000422002EAA +FF410069436576878888889899A9AABBBBCCDCDDEDEEEEFFFFFFCF6576778888889899A9AABBBBCCCCDDEDEEFEFFFFFFFFEF7477878888889899AAAABBCBCCDCDDEDEEFEFFFFFFEF9E7188040000000000000000000010000010000000B0EE1D5088070000000000AA +FF410069000000000000000000000000E7EE062188480000000000000000000000000000000020EDBE000086880000000000000000000000000001000090DE3D0000829905000000000000000000000000000000D5DD08000060A919100100000010000000000000AA +FF410069000000DBBD01000020AA6A000000000000000000000010000070CD5C01000000B7AB01000000000000C7AD0100000000C1CC0900000000B2CB07000001000070FFFF1C00000000C9BC030000000080CC1B0000000000E1FFFFBE00000040CC7B00000000AA +FF4100690020DC8D0000100000FAEFEBEE0A0000A0BB19010001000000D9DD0100000060FF9FB0DE8D0001B6AB04000000000000D2EE09100000D1EF1C10DBCD0620AA7A0000000000000090FE1E000100EAEE0500B2CC5B80AA290000000000000020FEAF000050AA +FF410069EE9E001030BBABA79A050000000000000000FAEF0200C0EE1C000000A4AA9A89000000000000000010E2FF0900E8DD0600000140999928000000000000000000A0FF2D40DD9D000000000041350000000000000000000020EE9EB0DD2C00000000000000AA +FF4100690000000000000000000000E9DEDCCD06000000000000000000000000000000000000C2DDCD9C0000000000000000000000000000000000000040CACC18000000000000000000000000000000000000000020140000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000D00D000000000000000000000000000000000000010000F33F0000AA +FF41006910000000000000000000000000000000000000F33F000000000000000000000000000000000000000000F43F000100000000000000000000000000000000000010F43F000000000000000000000000000000000000000000F43F00000000000000000000AA +FF4100690000000000000000000000F43F000000000000000000000000000000000000000000F43F000000000000000000000000000000000000000010F43F00000000000000000000000000000000000010CB03F43F21BB01000000000000000000000000000000AA +FF41006980FF3DF43FD2FF0800000000000000000000000000000040FFDFF54FFDFF0500000000000000000000000000000000F6FFFEDFFF7F000000000000000000000000000000000070FFFFFFFF06000000000000000000000000000000001000F7FFFF6F0000AA +FF41003F000000000000000000000000000000000070FFFF060000000000000000000000000000000000000000E67E000000000000000000000000000000AA +FF41000C0600000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000163460100000000000000000000000000000010B87D0010769889060010000000000000000000000070ECFFDE01307798AA5B0000000000000001000001AA +FF4100690000F7FFFFEE08508746A73B00000000000064000000000100E5CEB8EE0C7187030000000000000050DA0B0000000000200250EE3E7388000000000000000080EC0E0000000000000000ED8E7578000000000100000091FD0E0000000000000100EAAD86AA +FF410069580000000000000000A0FE0D0000000000000000E8BD87490000000000000010A0FF0C0000000000000100D6CD87290000000000000000A0FF0C0000000000000010D3CD98190000000000000010A0FF0B0000000000000000D1CD981A00000000000000AA +FF41006900A0FF0A0000000000000000D1CD983A000000000000000090FF090100000000000000D3CDA85B000000000000000080FF070000000000000000D5BCA87B000000000000000060FF060000000000000000D7ACB79B000000000000000040FF0400000000AA +FF41006900000000C99CB5BB000000000000000010EF010010000000000000CB6CB2CC052004100000000000EE000000000000400240CC2BA0DC39EA7E000000000000DD000000000000E79D92CC0A70DCDDEE8F000000000000BD000000000000E7DDCCCC0610DCAA +FF410069EDCE07000000000000AB00000000000060DCCDBC0100D8EE0800000000000000450000000000000081CC7C0000C1EE1C000000000000000001000000000000B1CC1A000070EEBF000010010000000000000000000000C9CC05000000EAFF0A0000000000AA +FF410069000000000000000080CD8C00000000C1FFAF00000000000000000000000000D8CD1A0000000130FDFF2C0000000100660000000000A1DDBC020000000000D4FFEF0700000050FF0500000060DCDD3B00000000000030FDFFCF05000070FF07000040DBDDAA +FF410069AD0200000000000000A0FFFFCF180070FF170081ECEEDD08100100000000000000D6FFFFFFBDA9FF9ACBEEEEDE5B0000000000000000010000D8FFFFFFFFFFFFFFEEEE7C00100000000000000000000000B7FEFFFFFFFFEFDE6A00000000000000000000AA +FF410069000000000050B9DCDDCD9B0500000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C0700000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000AA +FF41006900003154140010000000000000000000000000000000000020545566030000000000000000000000000000000000105355667667010001001000000000000000000000000042555622767747000000000000000000000000000000305566140051878805AA +FF41006900000000000000000000000000105465360000007488780100100000000000000000000041655601000000208788380000000000000000000000206566040000000000618888041000000000000000000053663600001000000010848858000000000000AA +FF410069000001306666030000001000000030989906000000000001000064662600000000000000000082AA7A000000000000003065661100000000011000000020B9BB0800000000000000000001000000A304000000000091CC8C001000000000000100000010AA +FF41006900FB0D000000000010CADD08000000000000000000000020FF6F000001000100B1ED7E0000EBEEEEEEEEEE070010A0FFCF00007777771720ECEF0500FDFFFFFFFFFF0D0000E09FFF05B0FFFFFFCF00E4FF0D000030444444F55F0000F80EFB0CF5DFDDDDAA +FF4100698D1070FF9F100000000000C0BF0000FD0AF54FFD0C0000000000FBEE03000000100060FF0260FF02C0DFFF030000000000D2EE0A212200000000FD09C0BF0050FF9F00000000000070DE3D847800000000F90EF35F0000FC0D00000000000000DC8D8658AA +FF41006900000000E17FFA0D0001C50500000000000000D8AD873810100000B0CFFE070000000000000000000100C4BC88180000000040FFEF000000100000000000000000C0BC88080000000000FC9F000000000000000000000000B0BB88180000000000F72F00AA +FF4100691000000010000000000000B1AB883900000000009007000000000000000000000000B49B976900000000000000000000000000000000000000B78AA59A00000001000001000055000000000000000000A95AA1BB060000000000000080EE070000000000AA +FF410069000060AA1970BB3B00000000000000D4EE4D0000000000000093AA0610CBBC03010000000030ECDEBD03000000000020A9990100C5DD6D0000000000C6DEDDDD5B0000000000939949000080EEFE5B000000A5DDDD78CCCC4900000073999905000000E7AA +FF410069FFFFCDABCBDEDD7C00B7BCBB8A77989A99590010000060FDFFEFEEEEDDBD040040B9BBAAAA9A997903000000000070ECEEEEDDAD0600000050A8AAAA99790400000001000000108699680100000000001064664501000001000101000010000000000000AA +FF41003F01000010000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000AA +FF41000C0800000422002EAA +FF410069536576878888889999AAAABBBBCCCCDDDDEEEEFFFFFFCF6577878888889999AAAABBBBCCCCDDDDEEEEFFFFFFFFEF7387888888989999AAAABBBBCCCCDDDDEEEEFFFFFFFFAF6088180000000000000000000000000000000000B0FF1E1088680000000000AA +FF410069000000000000000000000000F6FF080084980400000100000000000000000001000000FCDF100070992900000000000000000000000000000070FF6F000020998A000000000000000000000000000000D1FF0C010000A5AA050000000000000000000000AA +FF410069000000F9EF0400000080BB2A0000000040EB9D00000000000020FEAF0000000020BA9C00000000D4FFFF090000000000A0EF2D0000000000C6CC07000040FDFFFF5F0000000100E4EE09000000000090DC3C0000D4FF8FFEDF0100000100EBCE01000000AA +FF410069000030DCBD0140FDFF08F7FF0B01000060EE7E00000000000000D7EE08D3FF8F00B0FF7F000000C0DE0B00000000000000B0EEAEFEFF090010FDEF030000D7DD050000010000000030FEFFFF9F000001E5FF0B0010DC9D000000000000000000F7FFFF09AA +FF41006900000080EF8E0080CD3C00000000000000000050DB6C0000000000EBDE04C2CC080000001000000000000000000000000000D2DD4BC9AB01000000000000001010000000000000000060DDCCBB6B00000000000000000000000000010010000001C8BBABAA +FF41006918000000000000010000000000000000000000005099681100000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069100000000010000000000000000000000000000000000000000000002044444444444444020100000000000000000000000000F2FFFFFFFFFFFFFF2F000000000000001A000000000000B0CCCCCCCCCCCCCC0B00000000000000EF070000000000000000AA +FF41006900000000000000000000000000FFCF040000000010100000000000010000000000000000FFFFAF0110000100000000000000000000000000000000FFFFFF7E00000000000000000000000000000000000000FFFFFFFF4C000000A1CCCCCCCCCC1A000000AA +FF4100690000000000FFFFFFFFFF0A0000F9FFFFFFFFFF9F0000000000000000FFFFFFFFEF070100F8FFFFFFFFFF8F0000000000000000FFFFFFFF1A000000608888888888070000000000000000FFFFFF4C00000000000001000000001000000000000000FFFF7EAA +FF4100690000001010000000000000000000000000000000FFAF010000000000000000000000000000000000000000CF0400000010000000000000000000000000000000000007000000000000D1EEEEEEEEEEEEEE1D0000000000000000000000000000D1EEEEEEAA +FF41003FEEEEEEEE1D0000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000AA +FF41000C0900000422002EAA +FF410069F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000102003110000000000000000000000000000000000000173500776200100AA +FF4100690100000000000000000000010000103686989989940600000000000000000000000000002032889999A9AABA260900000000000000000000000000408898896776A8BBBB090000000000000000000000005073986802000010A6CC5B3A00000000000000AA +FF41006900000000509899180001000080CCDD1B00000000000000000000206299767A00000000C66BDD2C0600000000000000000050987910A905000040CC05E8EE0C00000000000000000100981900B54B0000B19D00B0EE0400000000000000000066AA060080AA +FF410069AB6347DA1C0040FFBC03000000000000000095AA010010CBDCDDDD050000FCBF010000000000000000908A000000C9DDDDDE020000F94F000000000000000050A87B100040DD4BA3EE090000F4DF0A0000000000000030B76B000080DD1300FC0D0000F0AA +FF410069CF060000000000000000B36C0000A0DD0000FB2E0000F09F000000000000000060CA7C0094ECEE0630FEFF7C00F1EF0A0000040000000030C69CB8EDDEFEAEEAFFFEFFBEF88F0500605F0000000000B0DDDD9C05F7FFFFAF40C9FEFF1E0000508F000000AA +FF4100690000DADD28000060FDEF08000060EEDE0200109F000000000034ED0B000001E05F00000080EE47000000AF000000000030ED6E000000E04F000000D3DD050000109F0000000000A0EBEF040000D02F010010DB9D0A0000508F00000000000080FF5E0000AA +FF410069D00F0000B3CD09100000905F000000000000D0FEFF0900C00E0060DCAC2B000000C00E0000000000006091FFEF5AC00E83DBCC1914000000F10C00000000000000B0DDFFFFEEDEDDCC8A0900000000F807000000000000005012DEEEEEDDCDBA14030000AA +FF4100690010DE100000000000000000300BD6B98B8A600400100000A07F000000000000000010000085700965000000000000F60C000000000000000000000000000000000000100050EF030000000000000000000000000000000000000000F74E000000000000AA +FF4100690000000000000000000000D10B01A1EF040000000000000000000000000000001000FC0881FE2C0000000000000000000000000000000000A0BFB9FE7E000000010000000000000000000000000000F8FFFF7C1000000000000000000000000000000000AA +FF41003F0000D3CF04001000000000000000000000000000000000000010FC0B000000000000000000000000000000000000000000A02F00000000000001AA +FF41000C0A00000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000100000001000000000000000000000000000000000000000000001000000000001000000000000000000000000000100001100000000AA +FF41006900000000000000000000000000000000003155140000000000010000000000000000000000000010546667030000000000000000000000000000000001005366558758000000000000000000000000000000000041653600848827000000000000000000AA +FF410069000000000000106566020021878904000000000000000000000000000063761510000060995900100000001000000000000000307647000000000095AA07000000000000000000000000747703000000000030BA8B000000000010000000000050772700AA +FF410069000000000001A3CC09000000000000000000003144010000400300000010DAAD000000000000000000000000000000F20D00000100B1ED0A0000000000003066666645020000F97F0000000020EC8F000000000000E0FFFFFFFF0D0000EEDF00C7CCCC0AAA +FF410069E4FF06000000000170999999C97F0070AFFB16FEEEEE0C60FF0D00000000000000000041CF00D02FF4AC9F00000001F99F00000000000000000000FC04F50BC1FF0D00100000C0EF02000000104077010000F70AFB0550FF060000000060EE0800001000AA +FF4100697089000000D03EDF0000AA000000000000EC0B00000000807900000090DF7F100000010000000000DA0C00000000916A00000020FF0E010000000001000000D80C01001000907A00000001FB09000000000000000000C80B00000000908B00000000A401AA +FF410069000000000000000000B90A0000000080AB000000000000000000000000000000BA180000000060CC06000000000010BB01000000000050AB050000000010DB2C0100000000B0EF0A1000000000929A010000000000D6CD0200100000E9EE8E0000000010AA +FF410069A84900000000000090EE7D000000B3EECDDD3A00000094990600000000000000FAFFAD89CAEECE33DCCC7966879969100000000001000080FEFFFFEEEE2A0092BCBBAA9A890500000000000000000091ECEECD4900000073A99A78150000000000000000AA +FF41006900000000200000000000000001000000000000000000001000000000000000000000000000100100000000000000000000000100000000000000001000000000000000000000000110000000000000000000010000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000AA +FF41000C0B00000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000010000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000004214000000000000000000000000000000000000001020765800000000000000000000000000000000000000006187780000000000000000000000000000000000000010867768000000000000000000AA +FF41006900000000000000000000508883490000000000000000000000000000000000000084589319000000000000000000000000000000000000209807A509000000000000000000000000000000000000718901A8080000000000000000000000000000000000AA +FF41006900964900B906000010000000000000000000000000001030990620BB030001000000000000000000000000000000918A0060BC000000000000000000000000000000000000A73A0080AC000000000000000000000000000000000040BA0600B08D40B89CAA +FF4100690000000000000000000000001000A19B0000C1BDEDFEFF0800000000000000000000000000B83B0000D6EEEEBDFF0A01000000000000000000000150BB061000E9BC38A0FF05000000000000000000000000B29C100000250000F69F0000000000000000AA +FF4100690000000000C92B000000000010FD1D00000000000000000000000070CC060000100000A0EF05000000000000000000000000C49D000000000000E59F00000000000000000000000000DB2C1060C9070010FD1C00000000000000000000000070DD76CAFEAA +FF410069FF040090EE0500000000000000000000000080EEFEFFFFEF0000E59E0000000000000000000000000030FDEFACB7CF0000EC1C0000000000000000000000000000610400D09F0190DE050010000000000000000000000000000000F16F00D58D00000000AA +FF4100690000000000000000000000000000E70E00DB1B000000000000000000000000000000010000EA0C80CC04000000000000000000000000000000001000EB09C48C00000000000000000000000000000000000000DD06BA1A00000000000000000000000000AA +FF410069000000000050CD72AB0400000000000000000000000000000000000070ACA46A00000000000000000000000000000000000000908BA91800000000000000000000000000000000000000A09A890200000100000000000000000000000000000000909948AA +FF41003F00000000000000000000000000000000000000105188050000010000000000000000000000000000000000001110000000000000000000000000AA +FF41000C0C00000422002EAA +FF41006900000000000000515600000000856803000000000000000000000000005187880101000088887904000000000000000000000020878888010000008898997902000000000000000010007388886800000001978999AA4900000000000000001031888888AA +FF4100694800000000967983AAAB050000000000000000728838881800000000968A00A5BB5B0000000000000010878813880800000000A69A0040CACC0500000001010050883800881800000000A79A0000B3CC1B10010000000083880500875800000000B88B00AA +FF4100690050DC9D00000000000087780000859804000010BA7B000000D8DD04000000003088280100819959000060BB3B000000C0EE0A0000000060880700003099AA0500A1CB0901000070EE2E0001000081880310000093AA6A01C8CC0500000000FD8F000000AA +FF4100690084880000000030B9BB64CC9C0000100000FACF1000000186680001000000A2BBCACC1B0000000000F7EF100000008749000000000040CCCCCD040100000000F3FF000000009829000000000000CADC4C000000000000E0FF0300001099090000000000AA +FF41006901D79C01000000000000E0FF040000209909000000000000300100000000000000E0FF04000030AA09000000100000000000000000000000F0FF03000020AA0A000000000000000000000000000000F4EF10000000BA2B00000000000000000000000000AA +FF4100690000F7DF00000000B95B000000000000000000000000000000FBBF00001000B89C010000000000000010690000000000FD7F00000000C6CC0100010000000000A0FF0500000060EF1E00000000B1DC0800000000000000B0FF0B000000C0EE0B00000000AA +FF41006980DD3C00000000000000B0FF2F000000E5EE050000000011DCAE00000000000000A0FF8F000000ECBE000000000000E7EE08000000000001A0FFCF000080EE5D000000000000B0FE6E000000000000B0FFDF0000D4DD0900010000000020FDEF05000000AA +FF4100691100C0FFEF0410DCCD0200000000000000F5FF3E0000000000E0EFEE08A0DD5C000000000000000080FFDF0100000000E6EEEE0AD9CD08000000000000000100F9FF0C00000000EACEDE8CCD9C00001000000000000000A0FF9F00001010ED7EDDCDCC19AA +FF4100690000000000000000000000FBFF05000080EE1DCACC9B010001000000000000000000D2FF0D0100C0DD0992BB1800000000000000000000000060FE8F0000D8CD0201000000000000000000000000000000EACE0020DC8C00000000000000000000000000AA +FF41006900000000E3EE03A0CC1B0000000000000000000000000000000000C0DE07C7CC06000000000000000000000000000000000090DD49CC8B00000000000000000000000000000000000080CDA9BB2A10000000000000000000000000000000000060CCBBABAA +FF41003F0400000000000000000000000000000000000020BBAB5A0000000000000000000000000000000000000000949A05000000000000000000000000AA +FF41000C0D00000422002EAA +FF4100690000000000000033004710160010000000000000000000000000000121007620685129300500000000000000000000000000007243879899997A930900100000000000000000000010028188999999AAAABA077200000110000000000000004057889899AA +FF4100699999AABABB9BBA0100000000000000000000208898894601003096BBCB8C000000000000000000007374988905000000000093CCCC980B00000000000000007198998901000000000060CCDCDD070000000000000000719969A9170010000000C49CDBDDAA +FF410069060000000000000176969905A65A0000000021DB1BC2EDAD2D0000000000008399790080AA03000000A0DD1540EDEE0A0000000000007099190030BA1A000000D89D0000E8EE1300000000005194AA050000B79B001360DD1C0001D0FF9B070000000093AA +FF410069AA9A000000A0CCCADDCBDD05000090FFFF0B0000000010A87A00000030CCDCDDDD9E00100020FF7F000010000000AA4B00000051DCDDDDEEBE00000000FD9F000000000088BB0A000000A0DD6C20EAEE06000000FBEF7D0000000097BB0A000000D2DD05AA +FF41006900C0FF0B000000F9EF6C0000000050BB0A000000D5CD000190FF0C000000F8CF100100008B50CB0A000040EADE0000A0FF7E000000F8CF00100000DFCACC0B0082DBEEEE0800E2FFFFBE0601F9FF8E000000EE66CC1CA6DDEEEEFEAE86FEFFFFFFDF4AFBAA +FF410069BF48001000FD00DBCDDDEEAC46FEFFFFFFAF94ECFFFFFE7E00000000FD60DCDDBD380000E5FFFFFF0A0010B7FDEE9E03000000FDD4DCDD0200000010E9FF6B00110000A0EEDD0A000010FE10D1EE0900100000B0FF0000100000D3EE1700000000EF00A0AA +FF410069EE4E00000010B0FF0000000000EACD0100000040DF00E9FEDF01000000A0EF1000000070DDCD2B01000090AF0097F7FF0C000000A0EF00110000D6DD4A18000000C06F0000B0FFCF02000090DF00000070DDCC0200000000F30E0000F7FEFF7E010090DFAA +FF410069000020D9CCBB0800000000FA0B0000B7B1FFFF6C0080CE0030C8CDBC540700001020FF0400000051FFFFFFBDA9CE97DBCDCC7B0000000000B0BF00010000B06EFCFFEFEEEEDDCDCC6AA70100000000F73E000000013003E3EDEEEEDDDDCCBA0720000000AA +FF4100690040FE07000000000000E723DBBBCDAA3B70080100000000E3AF000000010000001000BB007C403B10010000000050FE0C00000000000000010034014800040000C8000000F8BF0010000000000000000000000000000070FF0200C4FF09000000000000AA +FF41006900000000000000001000F58F00B6FF7E0000000000000000000000000000000030FE9BEBFF9F0000010000000000000000000000000000D1FFFFFF8C010100000000000000000000000000000000C2FFAD38000001000000000000000000000000000000AA +FF41003F0100FB8F00000000000000000000000000000000000000000090FF08000011000000000000000000000000000000000000E70B00000000000010AA +FF41000C0E00000422002EAA +FF41006900000000000000000000000000315504000000000000000000000000000000000000000063773800000000000000000000000000000000000000307688580000000000000000000000000000000000000072888758000000000000000000000000000000AA +FF410069000000108668963900000000000000000000000000000000000050881798090000000000000000000000000000000000008488239908000000000000000000000000000000000021885950AA07000000000000000000000000000001000171990770AA05AA +FF410069000000000000000000000000000000000096890190AA010000000000000000000000000000000040993900A1AB000000000000000000000000000000000081A90600B58B0000000000000000000000000000000100978A0000B76C000000000000000000AA +FF4100690000000000000050AA2A0000C93C0000000000000000000000000000000092AA060000CB0B00000000000000000000000000000010A88A000040DC0A0095BB07000000000000000000000060BA2A000070DD99DBEEFF6F0000000000000000000000A3BBAA +FF410069050010A0DDEEEEFFFFBF0000000000000000010000B98B000000C0EEEEEF9CFBBF0000000000000000000070BB1B000000E3DE8B0460FF5F00000000000000000000B4CC0500010184030000E1FF0A00000000000000000010CA8C0000000000000000FAAA +FF410069DF0100000000000000000080CC1B0000000000000060FF5F00000000000000000000C5CC0500000000000001D1FF0A00000000000000001010DB8D0000000000000000FADF0100000000000000001090DD0B0000009401000050FE6E0000000000000000AA +FF4100690000D6DD0420A7ECFF000000D0EF0A10000000000000000000DA9EB8EDFFFFDF000000E9CE0100000000000000000000EBEEFEFFFFFFAF000050EE5E0000000000000000000000E7FEFFDF8BFC7F0000C0EE09000000000000000000000070CC6A0000FDAA +FF4100691F0000E8CE0110000000000000000000000000000020FF0D1040DD5D0000000000000000000000000000000070FF0B00B0DD0900000000000000000000000000000000A0EF0701D8BD0100000000000000000000000000000000C0EE0340CC5C00000000AA +FF41006900000000000000000000000000D0CE00A0CC080000000000000000000000000000000000E5AD00C7AC010000000000000000000000000000000000D88D30BB5B000000000010000000000000000000000000DA4C90BB0800000000000000000000000000AA +FF4100690000000000CB0BB79A01000000000000000000000000000000000030CC49AA4910000000000000000000000000000000000060BB979A0600000000000000000000000000000000000080ABA8790100000000000000000000000000000000000080AA9928AA +FF41003F00000000000000000000000000000000000000609988040000000000000000000000000000000000000010864700000000000000000000000000AA +FF41000C0F00000422002EAA +FF4100694355667677888888889999AAAABABBCBCCDCDDDDEEEEBE55667787888888889999AAAABABBCBCCCCDDDDEEEEFFFF64778788888888889999AAAABABBCBCCCCDDDDEEEEFFDF728703000000000000000000000000000000000030FF8F6088070000000000AA +FF410069000000001100000000000000A0FF0E2088480000000000000000000000000000000000E1FF090086780000000000000000000000000000000000F8EF021082880500000000000000000000000100000001FDBF0000609918000000000000100000000000AA +FF41006900000060FF4E0000109969000000000000001000000001000010C0EF0B100000A69A010000000000100000000000000000E4EE0600000091AA070000000000001000000000000000EACE0000000060BB2B0000000110C96B10000000000020ED7E001000AA +FF4100690010BA8B00000000B0FEFF06000000000080DE1C0000000000C7CC03000000E9FFFF0D1001000001C0DD080000000000B1DC09000070FECFFF8F0100000010D7CD02000000000070DD4D1000E4FF1DFBEF0100000000DB9D00100000000000DCBE0010FDAA +FF410069FF05E4FF0900000040CD4C00000000000000E7EE15B0FF7F00A0EF2E00000091CC0A00000000000000C0FE0CF8FF0A0020EDAE000000C2CC050000000000000060FFBFFFDF010000E8DE040000C8AB000000000000000000FCFFFF3E100000C0DD0A0010AA +FF410069BB6B000000000000000000E4FFEF0600001060DD5C0060BB1A00000000000000000020A8390000000100CAAC0090AA070000000000000000000000000000000000C4BC06A49A02000000000000000010000000000000000080BB2AA87900000000000000AA +FF410069000000000000000000000020AAAA9A3910000000000000000000000000000000000000A69A990700000000000000000000000000000000000000509868010000000000000000000000D46E000000000000010000001000000000000000000040FEFF0600AA +FF410069000000000000000000000000000000000000E4FFFF6F00000000000000000000000000000000000040FEFFFFFF060000000000000000000000000000000000E4FFFEEFFF6F0000000000000000000000000000000010FEEFF57FFDFF0500000000000000AA +FF410069000000000000000060FF5EF07FD2FF0A00000000000000000000000000000000DB05F07F20DC04000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000AA +FF410069100000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F001000AA +FF41003F000000000000000000000000000000000000F07F000000000000000000000000000000000000010000D04E000000000000000000000000000000AA +FF41000C1000000422002EAA +FF41006900004176886703000000000000000000000000000000001040877876987911100000000000000000000000000000008558010040B82A00000000000000000000000000000040780200000080AC00000000000000000000000000000081284300000000EAAA +FF41006918000000000000000000000000000085058405000010E20D000000000000000000000000000087015069000000B05F0000000000000000000000000000880000C7080100809F0000000000B70100000000000000890000807E000060AF0000000080FF04AA +FF410069000000000000009A0000009F0000709F00000000F78F0000000000000000BA0000009F0000907E00010080FF080100010000000000D90500008E0001C01D000000F88F000000100000000000D50C00007D0001D709000080FF08000000000000000000B0AA +FF410069AF00005B0041BC030010F88F1000000000000000000020FD3B001300B65B000080FF080000100000000000000000D3EF7B65A8AB040000F88F00000000000000000001000000D8EECDAB27000080FF080000000000000000100000000000746714000000AA +FF410069F88F100000740600008736001010000000000000000081FF080000728807001088991710000000000010000000F88F000030878806000098A89A03000000000000000080FF080000727888030000A856BA3B0000000000000000F78F1000008717880300AA +FF41006900A806A3BC0100000000000080FF08010050880287060010BA0530DC09000000000000F88F00000081580093690050BB0100E72D000000010080FF0800000084181060AA07A19C0000D09F0000000000F88F0000000086060000A66BC92B0000A0DF0000AA +FF410069000080FF08000000008804000070CCCC06000060EF00000000F88F00100010109901000010CB6C00000020FF00000070FF0800000000209900000000960300010000FF000000908F000000000030AA00000100000000000040FF00000000000000000001AA +FF41006910BA01000000000000010080DF0000000000000000000000BA061000000020060000B0BF0000000000000000000000C80A00000000C08F1000E17E0000000000000000000010D55D01000001C0DF0000E90D0000000000000000000000A0CE02000000B0AA +FF410069FF0530ED08000000000000000000000040FD0C000000C0FF19B0BD01000000000000000000000000F7AF000000D0EF0BD85C0000000000000000000000000090FF090001E3EE7DCD070000000000000000000000000000FB6F0000E9DCCD8C0000000000AA +FF41006900000000000000000000C0DF0210DD97CC0800000000000000000000000000000030FE0990CD01450000000000000000000000000000000000E90DC37C00001000000000000000000000000000000000D24DCA0A00000000000000000000000000000000AA +FF41003F000100C0ADBC0300000000000000000000000000000000000000A0BC6B100000000000000000000000000000000000000040AA06000000000010AA +FF41000C1100000422002EAA +FF4100690000000000000000D61C000000000000000000000000000000000100000060FF7F0000000000000000000000000010000000000000F6FF3E0000000000000000000000000000000000000070FFEF0500000000000000000000000000600500000000F6FFAA +FF4100695E0000000000000000000000000000FB9F00000060FFEF050000000000000000000000000000FFEF000000F6FF5E000000000000000000000000000000FFEF000070FFEF05010000000000000000000000000000FFEF0000F7FF5E000000000000000000AA +FF41006900000000000000FFEF0070FFEF0500000000000000000000000000000000FFEF00F7FF5E0000000001000000000000000000000000FFEF70FFEF050000000000000000000000000000000000FFEFF7FF5E000000000000000000000000000000000000FFAA +FF410069FFFFEF05000000000000000000000000000000000000FFFFFF5E00000000000000000000000000000000000000FFFFFFABAAAA8A00000001000000000000000000000000FFFFFFFFFFFFFF0A000000000000000000000000000000FFFFFFFFFFFFFF0D00AA +FF4100690000000000000000000000000000FCFFFFFFFFFFFF09000000000000000000000000000000709999999999690000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000110100000000000000000000000000000000000000000000000001000000000100000010000000000000000000100000A79A89775645443333222211110000AA +FF4100690000000000000040FFEFCDAB99786655454433231200000000000000000010EDDEBCAA8977565544343322120000000000000000000000000000000000000000000000000000000000000000000111000000110010000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000A69A8977665544333322221111AA +FF41006900000000000000000000FEEFCDAB9A786755454433232201000000000000000000EBEECDAB897756554434332212010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000100001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000100000000000000000000108878AA +FF41003F6756453433222212111101000000000000000000B0FFEFCDAB89776655443433221200000000000000000190FFEFCDAB89776655443433221200AA +FF41000C1200000422002EAA +FF41006900000000000000000001623007530100000000000000000000000000000000101684766877500400000000000000000000000000002022889999A9AAA8060000000000000050A9CB081000004088989988A9BABB590A000000000000E0FFFF0B00006084AA +FF410069986804000094CBCC080000000000003084FF0B000060987902000000A09BCC7C1B010000000000F4DD0C105083990700000000C609D7DD09001000001000FCD40D005099897A00000010CB0470ED3B050000000040BF900A01409917A918010180AC0000AA +FF410069EAEE0A00000000B14F000030889A01A29B0101C25D0000D2DF0000000000D00D000000A57A0030CA9ACBDC0B0000A0FF9A00000000F30A000010A53A0000B4CCDDDD3C000030FF8E00000000F706000090BA0A0000A0DD8AEBBE000000FE0C00000000F9AA +FF41006904010000B9090000D1AD00A0EE010000FCBE04000000FA00000030BA090000D46D0070FFAC1600FCAE02000000FA000000A2CB0A0000E39E00A0FFFFFFCEFD0D00000000F902100000C90B0081EDEE48F9EFBADCFEFFBE00000000F707000030DA2D70ECAA +FF410069DEFEFFFF6F000020FE8B00000000F20A000090DB9DEBCE07E7FFEF07100170EE0600000000D00D000000C0EEBE060000E68F000000C0DE5C00000000A04F000000D6EE09000000B09F000000E78D150000000030BF00000098FD5E00000090BF000040DDAA +FF4100695D000000001000FB05000000F8EF05000060CF0000C4CDA9010000000000E31D100000CEFF8E000010CE0060DC8C0000000000000080BF00000002FBFF7C0000DC50DACCA90100000000000000FA0B000000BEFEFFBE9ADCDCCC7B300000000000000000AA +FF410069B0CF02000005F6FEEEEEDDCD8B8700000000000000000000F90C000000A8B1CDCDCC791A1000000000000000000000500600001000A1077BA004150000000000000000000000000010000000000025300100000000000000000000000001001000000000AA +FF41006900000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000110000000000000000000000010100000100000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000004018000100000000000010810500000000000000000000E0EF050000000000000050FE0E00000000000000000000E0FF9F00000000000000F9FF0E1000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000000FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010000000000000000000000000000000000000080EE0800000100000000000000AA +FF41000C1300000422002EAA +FF41006900000000000000000000104402000010000000000000000000000000000000001053655601000000000100000000000000000000000000416566873700010000000000000000000000000000002065561186880500000000000000000000000000000010AA +FF41006964660400408868010001000000000000000000000000517626000000729938000000000000000000000000002065570100000010A7AA04000000000000000000000100627705000100000060BA6B000000000000000000000030764700000000000000B5AA +FF410069CC06000000000000000000005166030000100010000050CC7D000000000010001000000000000000D01B01000000C5DD070000000000000000001000000000F74F0000000050ED5E001000100000C0EEEEEEEE1B0000FDBF0093999906E7EF0300000001AA +FF41006900A0DDDDDDED4F0050BFFD03FCFFFF0E90FF0B00001000000000000060BF00B05FF78BBF66660400FB7F00000000000000000000ED01F30DD0EF2E00000010E3DF00000000002044010000F909FA0770FF080000000080EE07000000006089010000E10DAA +FF410069EE0000DD000000000010ED0A000000008079000000B0AF9F000000000000000000DA0B00000000907A00000040FF2F000000000000000000D90C00000000906A00000000FC1B000000000000010000C80B00001000908B00000000D60400010000000000AA +FF4100690000C80A0001000090AB000000000000000000000001000000BA090000000070CC040000000000007800000000000030AB060000000020CC0A000000000080FF080000000000809A020000000000D99D0000100000E5EE5D0000000001A7690000000000AA +FF41006900B1EE2A00001080EEEEDE07100000719A1800000000000030FDEF6A0084ECEE67DDAC37006399890200000000000000C2FFFFEFEFEE6C00B5CCBBAA9A9917000000001000000000C6FFEFEE8C010010A7ABAA9947000000000000000000000072884700AA +FF41006900000000425514000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000100AA +FF410069000000000000000000004018000000110000000000810511000000000000000000E0EF050000000000000050FE0E00000000000000000010E0FF9F00000000000000F9FF0E0000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000010FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010100000000000000000000000000000000000080EE0800000100000000000000AA +FF41000C1400000422002EAA +FF41006900000000000000000000000000104301000000000000000000000000000000000000000051760600000000000000000000000000000000000010007588080000000000000000000000000000000000000040888607000000000000000000000000000000AA +FF41006900000000835897070001000000000000000000000000000000001088079805000000000000000000000000000000000000708822AA020000000000000000000000000000000000009549509A000000000000000000000000000000100000309906808B00AA +FF4100690000000000000000000000000000000000818900A07B000000000000000000000000000000100000A73900B14C000000000000000000000000000000000040AA0600C50C0000000000000000000000000000000000918A0000D80A61C91A000000000000AA +FF4100690000000000000000B82A1000DBCCEEFFBF1000000000000000000000000050BB061000EDEEEFEDCF00000000000000000000000100A29B000050DEAC16F69F00000000000000000000000000C92B000040060010FE0D00000000000000000000000070CCAA +FF410069160000000000A0FF04000000000000000000000000C49C000000000000F69F00000000000000000000000000DA1B000000000110FD0C00000000000000000000000080DD0500729A1000A0EF05000100000000000000000000D29D85DBFF9F0000E59E00AA +FF410069000000000000000000000000E5DEFEFFFF5F0010EC0C00000000000000000000000000C0FEEF9CF90E0090DE040000000000000000000000000010770200FB0C00D58D000000000000000000000010000000000000FD0A10DC1B00010000000000000000AA +FF4100690000000000000010EE0680CD04000000000000000000000000000000000060DE01C48C00000000000000000000000000000000000090BE00CA1A000000000000000000000000001000000000B09D70BC04000000000000000000000000000000000000C0AA +FF4100696CB47B00100000000000000000000000000000000000C42CAA1900000010000000000000000000000000000000B77A9A0300000000000000000000000000001000000000B899590010000000000000000000000000000000100000A89906000000010000AA +FF410069000000000000000000006007000084780100000000930310000000000000000000F4CF030011130001000080FF0C00000000000000000000F4FF7E00001000100010FBFF0C0000000000000000000070FEFF1A0000000000E5FFBF020000000000000000AA +FF410069000000C2FFDF0400000090FFFF0800000000000000000000000000F9FF8F000030FCFF4D000000000000000000000000000050FDFF2B00E7FFAF00000000000000000000000001000000B1FFEFB6FFEF070000000000000000000000000000000000F7FFAA +FF41003FFFFF3C00000000000000000000000000001000000040FDFF9F0000000000000000000000000000000000000000A0DF0600000000000000000000AA +FF41000C1500000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1DDBC9A88675645443333221201000000000000000000F6FFDEBC9A896756554434332201000100000000000000B0CCAB9A7867554444AA +FF41006933232212010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000AA +FF4100690000000000000000000000000000000000000000001100000000000000000000000000000010000000000000000000A0DDCDAB89776655443433222201000000000000000000F0FFDEBCAA89775655443433221200000000000000100090CCBB9A886756AA +FF41006945443323221201000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000100001000AA +FF41006900000000000000000000100000000010000000000000000000000000000000000000000000000000000000001000000000001000000000000000C6CCAB8978665544333323221101000000000000000000FCFFDEBC9A7867564544332322010000000000AA +FF41006900000000D7DDBC9A8867564544333322120100100000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000AA +FF41006900000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000004018000100000000000000810500000000000000000001E0EF050000000000000050FE0E00000000000000000000E0FF9F00000000000000F9FF0E0000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000010FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010100000000000000000000000000000000000080EE0800000100000000000000AA +FF41000C1600000422002EAA +FF41006900000000000000000000103302000000000000000000000000000000000010000041652600000000000000000000000000000000000000006476570000000000000000000000000000000000000000747768000000000000000000000000000000000000AA +FF41006900007388380001000000000000000000000000000000000000308803000000000000000000000000000000000000000010880200110000000000000000000000000000000000002088020000000000000000000000000000000000001000209801000000AA +FF410069000000000000000000000000000000000020991200000000000000000000000000000000000000002099020000000000000000000000000000000000000000209902000000000000000000000000000000000010000020AA020000000000000000000000AA +FF41006900000000000000000020AA0200000000000000000000000000900B000000000020AA0200000000000000000000000000B00D000000000020BA0200000000000000001001008A00B00D00B600000020BB020000000100000000000000F909C34E60CF0000AA +FF4100690020BB02000040CBCCCCDDDD9C000090CFFFFFFC1C00000020CB020000E4FFFFFFFFFFFF1D0000FCFFFFEF1101000020CC020000FC4B44440300D6AF0040FFFFFFFF0800000020CC030000FD000000000030EFA8CAFFFFFFFFADAA011020CC130000FC07AA +FF4100690000000000EEDCEDFFFFFFFFDFDD030030DD030000F7EF0900000070DF0060FFFFFFFF0A00000030DD03000080FE0C0000B5FC6F0000FDFFFFFF0300000030DD03000000F23E0000FCEF080060FFFFFFFF0900000030ED03000000B0DF05B2EF170000F6AA +FF4100691CD9AF939F00000030EE0300000011FCFFFF6E000000CC01B00D00E910000030EE030000000090EDBD040000000000B00D001000000030EE0300000000000000000000000000A00D000000000030FF031000010000000000000000000020040000000000AA +FF41006930FF03100000000000000000000000000000000000000131FF03001000000000000000000000000001000000000030FF03000000000000000000000000000000000000000030FF03000000000000000000000000000000000110000030FF030000000000AA +FF41006900000000000000000000000000000030FF03000000000000000000000000000000000000100030EF03000000000000000000000000000001000000000193EE390000000000000000000000000000000000000090EEDDCD07000000000000000000000000AA +FF410069000000000000D0DECDCC0A00000000000000000000000000000000000080DDCCBB0600000000000000000000000000000000001000CBBB8A0000000000000000000000000000000000000001B5AA39000000000000000000000000000000000000000070AA +FF41003F99060000000000000000000000000000000000000000207801000000000000000000000000000000000000000010340001000000000000000000AA +FF41000C17000001C2001EAA +FF41006900000000000000000000000000000000000000000000000100000000100000000000000000000000001000000000000000010000000100000000001000000000100000000000000000000000000000000000000000000000000000000000C8AB99785645AA +FF410069343323221100000000FEEFBD9A7867554434231200000001A69A7867554433232212110000000000000000000000000000000010000000010000000000000000000000000000000100000000000000000001000100000001000000001000000100000000AA +FF41006900000000000000000000FEEFBC9A7866554434231200000000FDDEBC897856454433221200000000000000000001000000000000000010000000000000001000000000000000000000000000000000010000000000010000000000000000000000001000AA +FF410069000001000010000000000000000000000001A79A78675544332322121100000000FEEFBD9A7867554434231210001000C8AB8978564534332312110000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C18000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000654534231211111100100000000070FFCD9A785645342301000000000020AA8967453423221101000000000000000000000100000000000100010000000000000000000000000000000000AA +FF4100690000000000001100000000408867453423221111000000000000C0EFBD9A77564433220100000010004088674534232211110000000000000000000000000100000000000000000000000000000000000000000000001000000000000000000000010000AA +FF41006900000000867856443322121101000000000000FEDEAB785645342312010000000000756745342212111101000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C19000001C2001EAA +FF4100690000000000000000000010760301000000000000000000000040880600000000000000000000000010760200000000000000000000720600000000000000000010000000861800520000000000000000000000730610B906000000000000004047000000AA +FF41006992CB7C000000000000008178000020CA9BDD0710000001000050470000A1BC04E98E00000010750200000010CA4C00A0FF08000040880400000081CC040000FB4F0000207701000010C26D000000D0BF0000010000000000D70C50ED0B70DF0000002500AA +FF410069000000E90AD0FF8F10EF0000609A02000010FA1AE0FFAF00EE0000B6BB2A000000F90DB0FF6F60CE0060BBB8BC020000F46F10A906A09D00B68C40DC2C0000C0EF040000C83B60CB0800D4DF010030FE9E35A6BC06B29C000050FE0B0000C4EEDDBC5A01AA +FF410069C80B000000F73F100000A7BB790200DB06A0DE06D08F0000000000000000DD01F7FF0EB0AF0000000000000000EE00FAFF0FA0AE0000000000000001FD06F5FF0CC08E0000000000000000FB0C609B01D53D1000000000000000F59F000030DC09000000AA +FF410037000000000090FF7C54C8AC02000000000000000000E9EEDECC290000000000000000000040B9BC5900000000000000000000AA +FF41000C1A000001C2001EAA +FF410069547687888899AABBCCDCEDFEFFFFDF7587888898A9BABBCCDDEEFEFFFFCE83180000000000000000000000E65E70580000000000000000000010EC0A40880100010100000000000080CD1200A807000000000000000010D37D0010A52A00000001810600AA +FF4100690100CA0A0000908C00000010FDAF000050BC04000050CC020000A0EFEE0800A17B00000000DB0A0000E57EE96D00B71910000001E63E0000EC0B90CC34AA0500000000D0BF0090DE0300B99A7A000000000070FF03D47D0000819A28000001000000FC0AAA +FF410069DB0A0000004301000000000100E6ADCD030000000000000000000000A0DD6C00000000110010000000000000760400000000000000000000000000000000000000000000000000000000001000100000000000000000000000DA00000000000000000000AA +FF41006900000000EC0000000000000000000000000000EC0010000000000000000000000000EC0000000000000000000000000000EC0000000000000000000000000000EC000000000000000000000000E03DECB05E00000000000000000000D0DFECFB3F000000AA +FF4100370000000000001020FDFFFF060000000000000000000000D2FF6F00000000000000000000000020ED06000000000000000000AA +FF41000C1B000001C2001EAA +FF41006900000000000000000010011000000100000000000000000000000000000000000010001000100000100000000000000000000000100000000000000040772500000000000000000092EC096198BA010000000000000010FEEF1D73188600000010A60100AA +FF41006900009AD47E85060100000020FB0700000000B0AE86050000000030FD060000000070CE97030000000120FE040010000050CD98010000000010FF000000000010DDA8010000000000FF000000000010CDA9030000000000EE000000000040CDB906000000AA +FF4100690101DD000100000060ACB8090000000000CD0000000000909CC50B9501000000BC0000001059B06CC1BDEE031000009B00000030DDCA1B91ED6B000000006800000000B5CD0820ED0900000000000000000080BC0200E87E100000000000000100C67C00AA +FF41006900B1EF071000000000000060CC09000011FC9F00000099000000D8AD01000000B1FF7D0000EE0000C6DD190000000000E9FFBE58EE74DAEE7C00000000000020FAFFFFFFFFEE9D020000000000000010B7EDFFDE6B010000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000C1C000001C2001EAA +FF41006900000000000000000000000100000000000000000000000010000000000000000000000010321100000000000000100000000041552500000000000000000000003055557715000000000000000000105446107578010000000000000000516603003087AA +FF41006948000000000010002065150000007288050000000000006356010000001096690001001000406604000001000060AA0700000000413410004005000000B68C0000000000000000D00E00000060DC0800CABCBBAB0100F59F00434404E87E00DCDDDDFD09AA +FF41006900ECEC60FFFF6FB0EF03000000C00D30AFF6D86D660500FD0B000000706FA02FD0FF06000000E55E75050000CEE10B70BF00000000A0AD87030000F9F90500280000000050BD88010000F2CF0000000100000010BC88001100B07F0010001000000000BBAA +FF41006998020000400A0000000000000020ABA7060000000000000001000010608AA61A0010010030CC0200000000915AA19C00000000B0DE0A00000010A71850DC3B000030EBCDAD02000072990400E7FF8B97DBDD56CC8B56769949000160FDEFEEDD4A0093BBAA +FF410037AA9A790300000060BAAB49000000738767030000000000000000000000000000000000000001000000000000001000000000AA +FF41000C1D000001C2001EAA +FF4100696477888898A9AABBCBDCDDEEFFFFEF7588888899AABABBCCDDEDEEFFFFDF71580000010000000000000000F66F40880200000000000000000000FC0C00970800000000000000000070EF0400926A000000200301000000D0AF000060BB140000E7BF0000AA +FF4100690001F92D000000C90A0070FEFF09000020ED08000000C28D00F7BFF95F0000A0CE0000000070EE75FF0BC0DF0100D36D0000000100FBFEBF0030FE1A00DA0A0000000000D3FF0B0001E76E50CC0400100000000046000000A0CEA38C0000000000000000AA +FF41006900000010CBBC2A000000000000000000000000938A040000000000000000000010000000000000000000000000000000000000000000000000000001000000000001000000000000010060EEEEEEEEEE06000000004C0100002099999999990200000000AA +FF410069FF1A00000000000000000000000000FFEF07000000000000010000000000FFFFCF0400A0CCCCCC0A0000000000FFFFFF2D00F5FFFFFF5F0000000000FFFFAF010080999999080000000000FFCF04000000000000000000000000EF070000000000000000AA +FF41003700000000001A00000040CBCCCCCCBC14000000000001010050CCCCCCCCCC0500000000000000000000000000000000000000AA +FF41000C1E000001C2001EAA +FF410069FBFFFFFFFFFFFFFFFFFFFFFFFFFFEFFBFFFFFFFFFFFFFFFFFFFFFFFFFFDF00000000001010000000000001000000000000000000000000000000001000000100000000010000000000000000000000000115171603000000000000000010117598A99937AA +FF41006901000000000000010072987886B9BB0300000010000000509738001050CC9B00000000000000646979000090ABAD070000000000009607A50500D715EC09000000000050A803807B889D00F69D0000000000108A0010DCDD1D00D01E0000001000818B00AA +FF410069709DA47E00B1CF0000000000507B00A01D40AF00B04F0000000000A18C94EC8EA0FFADB4BF008002000010CCCD7AFDFF7DDBEF0D00D007000080DC0510B2AF0100E77C00D009000000E91B00703F0000DB0700C008000000C9AF00601F00909D0610E007AA +FF410069000000B0FE4C500F40CA7A0000F20100000010E6FFAC9ECBAC120000D9000000001054CBEEDDAC370200108E010000010000054A4A18030000B00D00000000000000000210000000E90400000000000000000000A100A16E0000000000000000000000CBAA +FF41003791DE1400000000000000000000A0EFDF08000000000000001010000070BF0100000000000000000000000000E50600000000AA +FF41000C1F000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000100000000000000000010000000010000000000000000000000000000000000000000100000001000000000000000000001110000000000000000000000100020650400AA +FF4100690000000000000000000010646578020000010000000000010052460085480000000000000000003066030030980600100000001000007416000000928B0000000000000050670100000010C91A010000000000000000600B0000A1AD0000000070AAAA7AAA +FF41006900C07F204414FB0A10000090CCCCED00F4DBE1EF9FD16F100000000000E008CBF3DC000041DE000000303600A01D6FB06F000000E907000060190030AF0D3008000000D20A000080090000FC090000001000C00A0000800A0000D6010000000000B00900AA +FF41006900804B000000100000000000B3070000409C00000010CC01000000A803000000DA090000B1EE1A0000607A00001000C2CF3885EDABBD375298180000000020FBFFEF8D00B7AB9A6901000000000030A87901001165560100000000001000000000000010AA +FF4100370000000000000000000000000010000000000000000000000001000000000000000000000000000000000000000000000000AA +FF41000C20000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000010000000001000000000000004126AA +FF41006900000000000000000000000000755800000000000000000000000050683900000000000000000000000083660900000000000000000000002088810900100000000000000000007039A1080000000000000000000000A505B40600000000000000000000AA +FF410069308A10C80133000000000000000000902A00CADAFE070000000000000001B70600ECCDFB0900000001010000409B00105910EE0200000000000000A12B010000A07F0000000000000100D806000000F60B01000000000000509D83DB0A10DD0201000000AA +FF41006900000080DEFFFF08907E000000000000000020BB59F903D50A0000000000001000100000DC00CB020000000000000000000000BD806C0000000000000000000000308EC4090000000000000000000000704DAA020000000000000000000000917B4A0010AA +FF41003700000000000000000000A0990600000000000000000000000080790100000000000000000000000021150000000000000000AA +FF41000C21000001C2001EAA +FF41006900000000405700007068031000000000000020877800008098790200000001000073885800008079A95A1000000000208876380000706A93BB0500000000716880280000807A10C94C00000000851770580000906B00A0BD00000020880340990400B43BAA +FF4100690030ED07000060780001975A00C90A0000E90C00008048000070BA65CC050001F33F00008208000000B8CB8C000000D08F00009407010000B1DC09000000B0AF00009507000000807B00100000B0AF0000A607100000000000000010B0AF0000A6080000AA +FF41006900000000000000C08F0100B509000000000000000001E05F0000B22B0000100000B4040000F60D0000A08C0000000000FA0B0000EB0A010060DD0300000000F92E1040EE04100000EB1C00000100F98F00B0AE00000000E4BF00000000FABF00D93C0000AA +FF410069000070FF09000000FCCE60DD070000000000F98F000100EEDEC68C000000000000A0FF050070CEDBCC1900000000000100FC0D00C08DC68B0111000000000000E37F00D72C1002000000000000000090BE20CC070000000000000000000020DE91AC0100AA +FF41003700000000000000000000DCC84B000000000000000000000000CABB06000000000000000000000000A56A0000000000000000AA +FF41000C22000001C2001EAA +FF410069100000004032061600000000000000000000507387895967000000000000000041839899AAAA8B75000000000000107098784554A7BB6C11000000000070977902000000C6CC7B000000001061999714000010CADA3D0100000040984991290000807DB1AA +FF410069DE0C000000009806509B0000D70A40FE07000000859A0100C88989DD0300FACE000000818A0000B1DCDD8E0000F54F000100966B0000D5ADD9BE0000E0AF051000A74B0000DA0A40FE0200D0CF060010A13C0020EB0800FE0700D08F0100D8CA5C71DBEEAA +FF4100692C90FFEF4AD0EF0700F7A0BDDCCDE9EFFEBFEBFFEC3E0000F5B5DD7A0160FEFF0A0095ED9E0000F575ED050000C03F010000EC790000F830ED1D0000C00F000181DD070000DA70EABF0000B00F0000D68D080000BD00C0FF3C00B00E0071CC3B0000406FAA +FF41006900B0F8EF3AA00D60DB9C560000B01D1000E4FDEFDDCDDDBC69000010F607000062E0ECEEDDBC5A31000040BE0000000090B0996B1A44010000E41D00000000005131061410990070DE03000000000000000000708F60FC1B00000000000000000001F5BDAA +FF410037FD6D0001000000000000000001FBCF4A000000000000000000000000C18F0000000000000000000000000000EA0000000000AA +FF41000C23000001C2001EAA +FF4100690000000000000000206502000000000000000000000000628706000000000000000000010010868705000000000000000000000060689704000000000000000000000085189801010000000000000000003088239A00100000000000000000008159508BAA +FF41006900000000000000000000009607806B00000000000000000000409A11A12C00000000000000000000925A00C10B00000000000000000000A80800D67ACADE0500000000000051AB0100D9EEFEFE0B000000000000A25B0000EBBD48FD08000000000000C9AA +FF4100690800003700A0CF00000000000170BC0100000000F54E000000000000C44C0000000010FD09000000000010DB0800500500A0CF00000000000080BD73DAFF0710E54E000000000000A0DEFEFFFF0200EC0800000000000060EDBD59DF0090BE1000000000AA +FF410069000001000080BF00D44D00000000000000000000A08F01DB0800000000000001000100C03E80AC0000000000000100000000D10CC43B0000000000000000000000D50ABA070100000000000000000000C8779B010000000000000000000000BAA6390000AA +FF41003700000000000000000010AA99050000000000000000000000009A690000000010000000000000000086160000000001000000AA +FF41000C24000001C2001EAA +FF41006954768788888899AABABBCCDCDDEEDF65778788889899AABBCBCCDDEDFEEF74170000000000000000000000D0AF71580000000000000000000000F63F40880100001000000000000000FC0B00970600000000000000000040EE0500942900000000000000AA +FF4100690000A0CE0000808A000000000000000000D17E000040BB030000D69E00000001E80C000000C9090130FDFF06000000DC08000000C44D10C1DFFB0D000060CD01000000A0BD00FA4EE38F1100A08C0000000041EE86FF0790DE0100C43B0000000000FBFEAA +FF410069AF0010EC0800B8080100000000E4FF0C0000D72C10BB0400000000002077000000A08C708A000000000000000001000140BB945A000000000000000000000000A89A1800000000000000000001001071880300000000000020ED07000000000000000000AA +FF410069000100D2FF6F000000000000000000000020FDFFFF0700000000000000000000C0EFFBFA5F00000000000000000000D03DFBA07F000000000000000000000000FB0000000000000000000000000000FB0000010000000000000000000000FB0000010000AA +FF410037000000000000000000FB0000010000000000000000000000FB0000000000000000000000000000E901000000000000000000AA +FF41000C25000001C2001EAA +FF410069006287780400000001000000000000306713638A0000000000000000000082150001C40810001000000100000066710300701E00000000000000000048305900018E0000004200000000002900D503009D000031CE00000000004A00D004008D0000E32DAA +FF41006900000000009A00D004403D0030DE020000000000E705B003A00900E32D000000000000B07E3030AA0230DE0200000000000000E9BDBB2800E32D00000000000000001076250040DE02107501505801100000000000E42D00718801609949000100000040AA +FF410069DE0210777700503AB90500000000E42D0051388601600AB11C00000040DE020081069318A109409D000000E42D00008502509AC80500DC000040DE020000860100C68C0000FA0010E12D00000088000091070000F90100B10200000088000001000000EAAA +FF41006900000000000000A8000000700200DC00000000000110C6060000F01B509E00000001000000C02C0100E00EB02D0000000000000050CE0000F15FD8070000000000000000F80B00E8AE9C000000000000000000A08F00CBCB1900000000000000000010DCAA +FF410037617D520100000000000000000000E5B61A000000000000000000000000C0BB04000000000000000000000000805A00000001AA +FF41000C26000001C2001EAA +FF4100690000000010E70800000000000000000000000070FF09000000000000000000000000F7BF000000000000000000EB060070FF0B000000000000000000FF0B00F7BF00001000000000000000FF0B70FF0B00000000000000000000FF0BF7BF000000000000AA +FF4100690000000000FF7BFF0B0100100000000000000000FFFDBF000000000000000000000000FFFF0B000000000000000000000000FFFFEEEE7E00000000000000000000FFFFFFFFCF00000000000000000000C8CCCCCC5C001000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000707867453423221111000010000000F1EFBC8A6755443312000000000000506756442322111111000000000000100000000000000000AA +FF410069000000000010000000000000000000000010000000000000100000000000000010B49A78564533231211100000000000F8DFAC89675544231200000000100030343322111111110100000000000000000000000000000000000000000000000000001000AA +FF4100370000100100000001000000000000100000000000000000001070AB89674534332211010000000000B0FFBD9A785644332201AA +FF41000C27000001C2001EAA +FF4100690000000000104164630100000010000010000000428799A9970000000000C5DD060011878977A8BB790000000093FD08008479020050BB9C1800000070CE096097390000A029DB09000000D099085179A70400C703D2BE000000E501009519806B87AC10AA +FF41006980AF040001C90010A40810C9DDAD0010FF080000AB0010B80600D948EB0500FD0700009C0020B80600DB00F7AD27FC090000AC0020C80760ED17FCEDFFFF080000BB0000D849EBECFFCF0030DE070000D80000C6ED6B30FA0C0070CE040000F10500C4BEAA +FF4100690000D00C00C15D020000B00C0021FD0801B00C10DA5B000000208E0040EBBF02800DB4BC0100000000F70800C0FDCE99BDCC590200000000809F0020D4EDDECD4A0600000000000085000021777929050000000000000000100000001200000000000000AA +FF410069000000100000000000000100000000000001000000000000000000000000000000000000000001000000000000000000A03C0000000000C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000C28000001C2001EAA +FF410069000001000000105402000000000000000000000000527657000000000000000000000041662287161000000000000000001065150061990400000000000000006237000000A55A0000000000000030770200001040BB0600000000010030240030080000AA +FF410069B47D000000002044441410B04F001030EC06000000B0FEFFDF00E1BDB0DD8DE53E000100000001F205D9F5E8774870CF000000101300B00B9EC09F000000EB040000603900517F1E600B001000E509000070090000FD0A0000000000C00A000080090000AA +FF410069F8040000000000B00A0000801B000050001000000000B2080000608C000000009900000000A705000010DB05000080EE070000408901000000D59E0130EACD8D021096390000000060FEDEEDCE33CAAB998903000000000091DCBC071050987815100000AA +FF410069000000000000000000000000000000000000000010000000000000000000000001000000000000000000000000000000A03C0010000100C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000C29000001C2001EAA +FF4100690000000000000001105400000000000000000000001000518702010000000000000000000000858601000000000000000000000040688700000000000000000000010082177900000000000000000000010097326B00000000000000000000006059603BAA +FF4100690000000000000000000000A308900B1000000000000000000010A902B09BEB3D0000000000000010705B00D2EEDD7F0000000000000000B50800A527E21E0000000000000011BB01000000FB0600000000000000905C00000160AF0000000000000000D6AA +FF41006909957B00D12D0000000000000000DAECFF5F00EA060000000000000000D6BDC80E609E0000000000000000000000D00CC11C0100000000000000000000E109C9050000000000000000000000E6568C000000000000000000000000C9A11A000000000000AA +FF410069000001000000AAA8040000000000000000000000009B6A000000000000000000000000109A1700000000000000000000B01B0065020000C409000000000010D0EF0500000080FF1B00000000000030FD9F001020FCAF010000001000000090FF3C00E6EFAA +FF41003706000000000000000000E5EFA6FF2B0000000000001000000010FBFF9F00000000000000000000000080DE05000000000000AA +FF41000C2A000001C2001EAA +FF4100690000000000000100000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000070EEBD8A675544332201000000000040CC9B785645342312011000000000000000000010AA +FF410069000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000C0EFBD9A675644332201000000000070AB8967453433221101000000000000000000000000100000000000000000000000AA +FF4100690000000000000000000000100000010000000000010000000000000000423423121111111100000000000000FEDEAB785645342312000000000000A889675534332211010000000000000000000000000000000100000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000A03C0000000010C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000C2B000001C2001EAA +FF41006900000000000010430100000000000000000000000040760600000100000000000000000150870600001000000000000000000010770200000000000000000000000000770100000000000000000000000000770010000000000000000000000000870000AA +FF41006900000000000000000000000088000000010000000000100000000088000000010000000000B30000000098000000000000006004D4001700009900000000000010705DEA972D0000990100D7DDDDDD1A00F8FFEF030000AA0040CFABAABABE00FAFFFF04AA +FF4100690000AA00800E010000E8DCFFFFFFDE0900BA0040CF070000E900FAFFFF030000BB0000E60C00D99F00F9FFEF140000BB0001708F70CF06803DE9862D0000CC000100FAFF0B005003D400160000CC000000103600000100A200000010DC00010000000000AA +FF41006900000000001000DD0000000000000000000100000000DD0000000000000000000100000001DD0000000000000000000010000000CC0000100000010000000000000080DD07000000000000000000000000E9DD7C000000000000000000000000D6BC4B00AA +FF410037000000000000000000000080AB07010100000000000000000000208901000000000000000000000000004400000000000000AA +FF41000C2C00000422002EAA +FF410069000000000040ECFF5D00100000000000001054150000000000000000E3FFEDFF05000000000000005176680000000000000000FB3E10FC0C000000000000107587880000000000000000FD0A00D70B000000000000408787880000100000000000FD0A00AA +FF4100690000000000000000838884790000000000000001FA2E000000000000000020875895690000010000000000D2EF1C001000000000007088069739100000000000000050FF2F00000000000000858801A80900000050CC04CB08E2BF170000010000003098AA +FF4100693910AA09000000A0EF50FF05F90D0000000000000081990650AA07000000E09FA0CF00FB0C00A6170000000097890070BB05000000F51EE07F00FA1E00FC090000004099290090BB01000000FA0AF60D00E3EFDBEF0300000092AA0500B0AB00000000FEAA +FF41006902FB080060FDFF7E00000100A78A0000C49C0000001067007600000020560000010050AA190000C77C00000000000000000000000010000000A2AA050000C94D0072CA1A000000000000000000000000A98B000000DB7CCAEEFFBF000000000000000000AA +FF410069100060BB1A000030DDEEEEFEFFFF0000000100000100000000B3BB05000070EDEEEEADF8FF0000000000000000000000B98C000000A0EEAC1700FDBF0000000000000000000070CB1A0000007016000090FF2E00000000100000000000B4CC0500000000AA +FF410069000000F4FF0700000000000000100010CA8C0000000000000000FCBF0000000000000000000080CC1B0000000000000080FF2E00000000000000000000C5CD1400000000001000E3FF0700000000000000000010DB8D0000006107000000FBBF00000000AA +FF41006900000000000090DD0B0083DBFF0B000070FF3D00000000000000000000D0DD97DBFFFFFF070000D2EE0700000000000000000000D0EEFEFFFFFFFF020000EBBE0000000000000000000000A0EEFFEFACF7DF000060EE3D000000000000000000000010C9AA +FF4100699B0400F6BF0000D2DE0700000000000000000000000000000000F98F0000DAAD0000010000000000000000000000000000FC4F0060DD3C0000000000000000000000000010000000FD0D00C1CD070010000000000000000000010000000030EE0B00D9ACAA +FF410069011000000000000000000000000000000080EE0950CC4B1000000000000000000000000000000000A0DE15B1BC070000000000000000000000000000000000C0CD01C89B000000000000000000000000000000000000D1BD40BB3A000000000000000000AA +FF410069000000000000000000C68CA1AB06000000000000000000000000000000000000C86BA78A00010000000000000000000000000000000000B95BAA2900000000000000000000000000000000000000BA999905000000000000000000000000000000000000AA +FF41003F00AA9969000000000000000000000000000000000000000098891700000000000000000000000000000000000000007268020000000000000000AA +FF41000C2D000001C2001EAA +FF41006900000080FE9E000000000041560001000000F45CFB050000000074880110000000F805A2050001003078880000000000F60900000100008248890000000000A0DF00000000108755790000A0198BD09E000000006079705A0000F5896FF5084100000094AA +FF41006928902B0010EAC10DF30AF90000109804B10A0000AEF207A0EFAF0000707A00C50900003883000074040000A51900C80700000000000000000020AA0400DA86DBAE00000000000000807B0000DCEEEFFF00000000000000B61A0040EEAC86DF0000000000AA +FF4100690030CB0400400600E36F000000000000A08C0000100000FB0B000001000000C70B0000000070DF02000000000040CC0400720000E27E000000000000A08D85DBEF0000FB0B000000000000C0DEFFFFCF0060DE0200000000000090EEADA79F00D17E0000AA +FF4100690000000000000000C05F00D90A01000000000001000000E00E50CD0200000000000001000000E40CB16C0000000000000000000000E809C8090010000000000000000000DA46AB020000000000000000101000CBA16B000000000000000000000020ACA7AA +FF410037080000000000000000000000509B89010000000000000000000000609A480000000000000000000000001087050000000000AA +FF41000C2E00000422002EAA +FF410069F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000100000000000000000000000000000000000AA +FF41006901000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000AA +FF4100690000516603000000000000000000000030C96D0000100000007398AA0500100000000000000010FCFFCE0000000000007568B90700100100310000000030FFCCEE0400000000108606200000000010D80A000000003440EE091000000030870400000000AA +FF4100690030EB0D000100001000EC0B00000000408801000000000030FD0C000000000000EA0C00000000508800000000001020FE0B000000000001D82D00000000608800001000000011FF0A000000010000D74D00000000708900000010000100FF0900000000AA +FF4100690000D65D00000010708900000000000000FE18000000000000D74C00000000709A00000000000000FE06000000000000D82C0010000060BA00000000000000FD04000000000000C90B0000100050CB05000000000000FC02000010000110CB0A00000000AA +FF41006920CB18301000000000EB00000000001330CC080000000000CA5CEB0A00000000DA0000000040CE88CC040000000000D7EDEE0800000000B90000000020DCCDAC000000000000C1ED3A000000000075000000000070CC6C00000000000070EE0B00000000AA +FF4100690000000000000051CC0A00000000000000EB8F0000000000000000000000C2BC0400000000000001E3FF0800000000000000000020DB7C000000000000000060FE9F000000015200000000C4CD08000000000000000001F7FF4C100000FC04000080DD9DAA +FF4100690000000000000000010060FEFF4B0000FD060081ECDD080000000000000000000000B2FFFFAD47FD67B9EEDE5B00000000000000000000000000C6FFFFFFFFFFEFEE8C010000000000000000000000000000A4FDFFFFFFDF7B0000000000000000000000AA +FF41006900000000000110869978030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000100000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000001000000000000000000000000000000000000000000001000000010000000000000000AA +FF41000C2F000001C2001EAA +FF410069FBFFFFFFFFFFFFFFFFFFFFFFFFFFEFFBFFFFFFFFFFFFFFFFFFFFFFFFFFDF00000000000000000000000001000000000000000000000000000000001000000100000000000000000000000000000000000000000000000000000000000010000000000000AA +FF41006900000000000000010000000000000000000000100000410200000000000000206800001100859902000000000000FBDF010010107784020000940000009AEA070000305801000000F904000000E40A0000403800000010FB01000000D00B000060190000AA +FF4100690000FC00000000C00B0000601A00000000EC00000000B00B0000604A00000000DB00000000C00A0000507B00000001CA00000000C309000010AB93030000B900000058C806000001DAED04000097000000DBBC01000000D52C00000042000000907C0000AA +FF4100690000B09E00000000001000C61B0010000020FD09000000000060CC040000000010D4CF0400C90010D96C00001000000020FCCF38DB62DABE040000000000000070FDFFFFFFCE1800000000000000000040B9CC9B05000000000000000000000000000000AA +FF4100370000000000000000000010100010000000000000000000000000000000000000000000000000000000001000000000000000AA +FF41000C3000000422002EAA +FF410069000001000010010000000000000000000010641500000000705F0000D11B0000000000000000000051766800000000E0EF0000F82F000000000000000000007488880000000010FE0C50FF06000000000000000000409865790000000000F57FF1AF0100AA +FF410069000000000000000092898149000000000090FFFD1E000000000000000000109718A22A000000000000FFFF05000000000000000000619904A61A0000000031C8FFFF9D250000000000000000946900A90800000083FCFFFFFFFFEF4A0000000000001099AA +FF4100691910BA06000000F7FF9FF27FD4FF8F00000000000081A90320BB04000000911A00F05F00702D000000000000965A0050BC02000000000000F05F000000000000000030A91700809C01000000000000F05F000000000000000091BA0100A18C0100000000AA +FF4100690000F06F0000000000000000A74B0000B36D00000000000000E05F0000000000000040BB080000D54C0000000000000020120000000000000091AB020000E71C0041B907000000000000000000000010B75B000010EA3BD8FEFF8F000000000000000000AA +FF410069000050CC08000010DCFEFFFFEDFF0000000000000000000000B1CB01000030EEFFCF58F2DF0000000000000000000000C95C00000090EF591100FB5F0000000000000000000050CC070000005002000060FF0A00000000000000000000B2BC0100000000AA +FF410069000000E2EF0200000000000000000000DA4E0000000000000000FA7F0000000000000000000060DE090000000000000050FF0C00000000000000000000D3BD0100000000000000E1FF0200000000000000000010DA5E0000004005000000F97F00000000AA +FF41006900000000000070EE061051D9FF07000050FF1B00000000000000000000D1DE52D8FFFFFF020000D1FF0300000000000000000000D1EEFDFFFFFFFF000000FA7F000000000000000000000080FFFFDF6AE1BF000030EF0C000000000000000000000000A6AA +FF410069470100F27F0000C1DE0300000000000000000000000000000000F63F0000E77E0000000000000000000000000000000000FA1F0020EE1C0000000000000000000000000000000000FE0B00C0DD010000000000000000000000000000000010FF0700E68DAA +FF410069000000000000000000000000000000000050FF0420DC1A000000000000000000000000000000000090CE0291BD030000000000000000000000000000000000B1AE01C67C000000000000000000000000000000000000C18D20BC0B000000000000000000AA +FF410069000000000000000000C35CA0BB03000000000000000000000000000000000000D51BB55A00000000000000000000000000000000000010C829AA1800000000000000000000000000000000000010BA779A02000000000000000000000000000000000000AA +FF41003F10AA99490000000000000000000000000000000000000010A7981600000000000000000000000000000000000000005158010000000000000000AA +FF41000C31000001C2001EAA +FF41006900000000000000000000003046000000EF00F20A0000000000007388000000F508FE02000000000020688700000070BF2F00000000000081186800000051FF2E0000000000008721490000B5FFFFFF9F010000004059602A0000F84AF763FC0200000092AA +FF41006908901B00000000F7021000000010A901B10900000000F80300000000604A00B30600000000D60200000000A30800C60310000000000000000010BA0100D963E97E00000000000000804B0000DCEECFFF00000000000000B4080030CE6931CF0000000000AA +FF4100690010CB0100200300E00F000000000000904C0000000000F907000000000000C5090000000030CF00000000000010CC0000410100D02E000000000000A03D61D9DF0000E807000000000000D0CEFFFF8F0030CE0000000000000050EE7A625F00C02D0000AA +FF4100690000000000000100A02F00D70700000000000000000000E00E20BD0000000000000000000000E209B02C0000000000000000000000E505C6060000000000000000000000D811AB000000000000000000000000CB902A0000000000000000000000106CA4AA +FF410037050000000000000000000000407B89000000000000000000000000409A180000000000000000000000000076000000000000AA +FF41000C32000000A80010AA +FF4100690000002112000000000010546501000000004136A319000000108403407A00000040590000A5030000A1179229611700108901FAAF107701701A008228009206A20600100100602AA60100F22F00106A780100F33F0010A9780100F33F0010A9580000F3AA +FF4100493F0000C7570000F43F0000D8770100F44F0010BB940300F55F00407E911900F55F00D11E308B01100120FC0500C48C3453E95F000030D9EEFEBF02000000206556020000AA +FF41000C33000000A80010AA +FF41006900000011110000000000105345010000000030569506100100007203702AD11D002068001098FB1B00911A0000D1CF0110A8020000F56E00703A000060DF8503A2060040F43F8019A60100F2FF07303A770010FE9F00107B770010FE9F00107B4700B0BFAA +FF4100491B0000A94700F71C010000B96780CF01000010AC86F72F000000406EB2FF05000000C11DF3AF01000010FB05FCBC5B1231E76F009841DBEEEEBF03000000317667030000AA +FF41000C34000000A80010AA +FF4100690000000000000000A0BB2A0010B9BB09F0FF5F0010FFFF0FE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F00AA +FF41004910FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EF0FF5F0010FFFF0F9099190010979908AA +FF6500090B001E91AA +FF6500090C001E55AA +FF6500090D001E55AA +FF6500090E001E19AA +FF6500090F001E55AA +FF65000913001E19AA +FF65000915001E19AA +FF23001800003200FA03E80BB81770232827102EE03A98AA +FF230008010064AA +FF230008020014AA +FF20000601AA +FF10000608AA +FFD0001544656D6F41707000000000030000002AAA +FFD2000D44656D6F41707000AA \ No newline at end of file diff --git a/Example/Assets/ConfigSystem ActiveLookApp-3.7.txt b/Example/Assets/ConfigSystem ActiveLookApp-3.7.txt new file mode 100644 index 0000000..40d297d --- /dev/null +++ b/Example/Assets/ConfigSystem ActiveLookApp-3.7.txt @@ -0,0 +1,544 @@ +FFA1000D01000000002F0000AA +FF61000600AA +FF61000603AA +FF600025070F0098C8007A1E0F000101004E1D040100000058000A040109002D001D0125AA +FF6000160A00001ECD0079190F0001010050160401AA +FF6000160900000000012FFF0F00020100FF500401AA +FF6000160500000000012FFF0F00030100E08C0401AA +FF60002C0216000000012FFF0F000201011869040104020900FA00A50E506C6561736520436F6E6E656374AA +FF6000160400000000012FFF0F00020100FF800401AA +FF60001C0B06001E5500F43C0F00030100AA310401000100BC0008AA +FF6000280D12001E5500F43C0F00030100A5310401000200BC00080401090043001D046B6D2F68AA +FF6000280E12001E5500F43C0F00030100A5310401000300BC00080401090043001D046B6D2F68AA +FF6000260C10001E5500F43C0F00030100A5310401000400BC0008040109003E001D026B6DAA +FF600025130F001E5500F43C0F00030100A5310401000500BC0008040109003E001D016DAA +FF6000300F1A001E5500F43C0F00030100A5310401000600BC0008040109003E0032046D696E2F09003E001D026B6DAA +FF6000271511001E5500F43C0F00030100A5310401000700BC0008040109003E001D0342504DAA +FF600025120F001E5500F43C0F00030100A5310401000800BC0008040109003E001D016DAA +FF6000271711001E5500F43C0F00030100A5310401000900BC0008040109003E001D0352504DAA +FF6000271811001E5500F43C0F00030100A5310401000A00BC0008040109003E001D0342504DAA +FF600025190F001E5500F43C0F00030100A5310401000B00BC0008040109003E001D0157AA +FF6000281112001E5500F43C0F00030100A5310401000C00BC0008040109003E001D046B43616CAA +FF6000271011001E5500F43C0F00030100A5310401000D00BC0008040109003E001D0352504DAA +FF600025160F001E5500F43C0F00030100A5310401000E00BC0008040109003E001D0157AA +FF6000251A0F001E5500F43C0F00030100A5310401000F00BC0008040109003E001D016DAA +FF60002A1B14001E5500F43C0F00030100A5310401001000BC00080401090050001D066B43616C2F68AA +FF6000271411001E5500F43C0F00030100A5310401001100BC0008040109003E001D036D2F68AA +FF6000271C11001E5500F43C0F00030100A5310401001200BC0008040109003E001D0352504DAA +FF6000271D11001E5500F43C0F00030100A5310401001300BC0008040109003E001D0342504DAA +FF6000251E0F001E5500F43C0F00030100A5310401001400BC0008040109003E001D0157AA +FF6000281F12001E5500F43C0F00030100A5310401001500BC0008040109003E001D046B6D2F68AA +FF6000262010001E5500F43C0F00030100A5310401001600BC0008040109003E001D025041AA +FF6000252A0F001E5500F43C0F00030100A5310401002C00BC0008040109003E001D0157AA +FF600030421A001E5500F43C0F00030100A5310401002E00BC0008040109003E0032046D696E2F09003E001D026B6DAA +FF6000272111001E5500F43C0F00030100A5310401000200BC00080401090043001D036D7068AA +FF6000272211001E5500F43C0F00030100A5310401000300BC00080401090043001D036D7068AA +FF6000262310001E5500F43C0F00030100A5310401000400BC0008040109003E001D026D69AA +FF6000262410001E5500F43C0F00030100A5310401000500BC0008040109003E001D026674AA +FF600030251A001E5500F43C0F00030100A5310401000600BC0008040109003E0032046D696E2F09003E001D026D69AA +FF6000262610001E5500F43C0F00030100A5310401000800BC0008040109003E001D026674AA +FF6000262710001E5500F43C0F00030100A5310401000F00BC0008040109003E001D026674AA +FF6000282812001E5500F43C0F00030100A5310401001100BC0008040109003E001D0466742F68AA +FF6000272911001E5500F43C0F00030100A5310401001500BC0008040109003E001D036D7068AA +FF600030431A001E5500F43C0F00030100A5310401002E00BC0008040109003E0032046D696E2F09003E001D026D69AA +FF6000162B00009891007A3C0F0003010071340401AA +FF60001C2C06009891007A3C0F00030100573404010017005A0012AA +FF60001C2D06009891007A3C0F00030100573404010018005A0012AA +FF60001C2E06009891007A3C0F00030100573404010019005A0012AA +FF60001C2F06009891007A3C0F0003010057340401001A005A0012AA +FF60001C3006009891007A3C0F0003010057340401001B005A0012AA +FF60001C3106009891007A3C0F0003010050340401001C005A0012AA +FF60001C3206009891007A3C0F0003010057340401001D005A0012AA +FF60001C3306009891007A3C0F0003010050340401001E005A0012AA +FF60001C3406009891007A3C0F0003010050340401001F005A0012AA +FF60001C3506009891007A3C0F00030100503404010020005A0012AA +FF60001C3606009891007A3C0F00030100573404010021005A0012AA +FF60001C3706009891007A3C0F00030100503404010022005A0012AA +FF60001C3806009891007A3C0F00030100503404010023005A0012AA +FF60001C3906009891007A3C0F00030100573404010024005A0012AA +FF60001C3A06009891007A3C0F00030100503404010025005A0012AA +FF60001C3B06009891007A3C0F000301005A3404010026005A0012AA +FF60001C3C06009891007A3C0F00030100503404010027005A0012AA +FF60001C3D06009891007A3C0F00030100503404010028005A0012AA +FF60001C3E06009891007A3C0F00030100503404010029005A0012AA +FF60001C3F06009891007A3C0F0003010057340401002A005A0012AA +FF60001C4006009891007A3C0F0003010057340401002B005A0012AA +FF60001C4106009891007A3C0F0003010050340401002D005A0012AA +FF60001C4406009891007A3C0F0003010050340401002F005A0012AA +FF600025450F001E5500F43C0F00030100A5310401003000BC0008040109003E001D0157AA +FF60001C4606009891007A3C0F00030100503404010031005A0012AA +FF60001C47060079CD0014190F0000010000000001003200030003AA +FF60001C48060079CD0014190F0000010000000001003300030003AA +FF60001C4906008DCD0014190F0000010000000001003400030003AA +FF43000600AA +FF41000B0000010E001EAA +FF41006900408878777766665655554444340100F7FFFFEEDDCDCCBBABAA9989783600FCAAAA999989887877676656556700FC0000001000010000000000007786FD00000000000000000000000087FEFF00CBCDCCBBBBAA999989780087EEFF00FAFFFFFFDEDDBDAA +FF410069BCBB9A0097EEFE00FAFFFFFFEFDEDDCCBBAB0098EDEE00FAFFFFFFEFEEDDCCBCAB0098DDEE00FAFFFFFFFFEEDEDDCCAB00A8DCED00FAFFFFFFFFEFDEDDCCBC00A9CCDD00F9FFFFFFFFFFDEDDCDBC00A9CADC00C9CCCCDDCDCCBCBBAB9A00B963CA000000AA +FF41004B000000000000000000B900C8000000000000000000000000BA00B8889899A9AAAAAAAA9A999988CB00A4CBDCEDEEFFFFFFFFFFEFEEDD9C002055667777888888888888777705AA +FF41000B00000422002EAA +FF41006900000000001000003165878888782510000000000000000000000000011042768888999999A9680100000000000000000000001052768888999999A9AAAA7A0200000000000000000000427688784603003075A9AABB6A00000000000000001031768758AA +FF41006902000000001020A7BBBB290000000000000010658758010000000001000010B7CBBC040000000000006187680200000000000000000020C9CC5B000000000010868805000000000000000000000070CCCD04000000007188480000000000000000000000AA +FF4100690000C6DD2C000000008688040000100000000000000000000060DDBD000100418858000000000000000000000000110000D8EE080000819807000000001100000000000000000000B0EE2D00009689020000EA07000000000000000000000030EDAE0010AA +FF4100699859000000FC7F000000000000000000000000F9EF03509918000000E4FF070000000000000000000001E1FF0A80990600000040FE7F0000000010010000000000A0FF0D92A90200000000E4FF070000000001000000000040FF4FA58A000000000040FEAA +FF4100697F1000000000000000000000FD9FA77A100000000000E4FF0700000000000000000000FBCFA85A00000000001040FE7F00000100000000000000F8DFA93B00000000000000E4FF07000000000000000000F5EFBA1B0000000000000040FE7F0000000000AA +FF41006900000000F1FFBB0B0000000000000001E4FF000000000000000000F0FFBB0B010000000000001050FF010000000000000000F0FFBB1C100000000000000050FF010000000000000000F1EFCB4C000000000000000050FF010000000000000010F5DFCA6CAA +FF410069000000000000000050FF010000000000000000F8CEC99C000000000000000050FF110000000000000000EAAEC7BD000000000000000050FF010000000000000000EC8ED3DD030000000000000050FF010000000000000030EE3DB0DD0900000000000000AA +FF41006950FF110000000000000090DE0B80DD1D0000100000000050FF0100000000000000C1DD0820ED8E0000000000000050FF0100000001000000D8CD0200EADE0300000000000050FF0100000000000020DC8C0000D2FE0C00000000000150FF010000000000AA +FF41006900A0CC2B000080FF9F00000000000050FF01100000000000C7BC06000000FCFF08000000000030FF00000000000060CC9B10000000E3FF8F00000000000055010000000000B6BB2A0000000050FEFF09000000000000000000000070BBAB030000000000AA +FF410069E6FFCF0301000100000000000020B9AB3900000000000050FEFF9E010110000001000010B7BB9A0301000000010000C3FFFFAE03000000000030A7BBAA28000000000000000000E8FFFFCE7A04004086BABBAA590000000001000000001030EAEEEEEEDDAA +FF41003FCDCCCCBBAB6902000000000000000000001020C9EEDDDDCCCCBBAB6801000000000000000000000000000183BACCCCAB89260010000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000010001000000000000000000000000000000000000000000100000000010000AA +FF410069000010000000000000000000001044343333222212111111111111111101000000000000F7FFEFCDBC9A8978675655444433332212000000000000FBFFEFCDBC9A8978675655444433332212000000000000D5EEDECCAB99887766554544343323221200AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000000000000000000000000000000000001000000000000000AA +FF4100690000000000000010000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7BCAB9A88776655454433332322221101AA +FF410069100000000000FFFFDECDAB9A8877665555444433232212000000000000FEFFDECDAB9A8877665555444433232212000000000000949989786756454433332322221211110100000000000000000000000000000000000000000000000100000000000000AA +FF41006900000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000001000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070EEEECDBC9A8978665645444433332212010000000000C0FFFFDEBCAB9978676655454434AA +FF41006933232201000000000080FFFFDEBCAB99786766554544343323220100000000000042443433232212111111111111111111000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B00000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000010000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000001000000100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100AA +FF4100690000000000007099897756454433232222111101000000000000000000F5FFDEBC9A896756554434332201000000000000000000E3FFDEBC9A78675645443423220100000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000001000100000000000000000000000000000000100000000000001000000000000000000000000010000000000AA +FF410069000000000000000060AA997867564534332322121101000000000000000000E0FFDEBCAA896756554434332212000001000000000000C0EEDDBC9A7867554544332322110000000000000000010001000000000000000000000000000010000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010000000100000000100000001100000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000000100000000000000008188776655443323222211111100000000000000000000FBFFDEBC9A786756454433232201000000000000000000FAFFDEBC9A786756454433232201000000000000000000000000000000000100000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000000000107516000000000000000000000000000000000000000050885800000000000000000000000000000000000000106088690000000000000000000000000000000000000000309828000000000000000000000000AA +FF410069000000000032110100420100000000000000000000000000000000407717001100000000000000000000000000000000010070884800001000000000000000000000000000000000007088280000A3061010000000000000000000000000000030870500AA +FF41006930BA6B0000000000000000000100002055020000000000A3BBCB0700000000000000000000006187070000000041BACBCC7C000000000000000000000083880801000000A3CB7CDBDD070000000000000000000081980710000030CACC06C3ED8E000000AA +FF41006900000010110000105501000000B3CC6C1040ECEE08000000000041760300000000000030CBCC060000D4FF8F0000000000748807000000000000A0CC7C00000040FEFF0500000000858817000000000000C7DC0700000000E5FF0C000000007188020000AA +FF41006900000010DB9D000000000071FF6F00000010010000000000000061DD2D0000A6280000FDBF00000000000000000000000090ED0B00B0FFEF0500F8DF000000000003110000000000B0EE0900F9FFFF0D00F3EF00000000705A100000000000C0EE1800FCAA +FF410069FFFF2F00E0EE00000000A7BB050000001000B0FF0900FCFFFF1F00E2DE00000070BBBB6B0000000000B0FF0B00F8FFFF0C00E7CE000000B7BBCBCC060000000080FF1E00B0FFDF0400DAAD000070BBABB4DC6D0000000010FFAF000085160040DD6C0000AA +FF410069B7CB1A40DCDD0700000000FAFF0600000000B2CC0A0070CBAC0100D5EE7E00000000E2FF8E00000040CBBC0500B7CC1A000050EDEF0600000050FEFF8C0261C9BC6B1050CBAC01001000E5FF2E00000001E6EEEEDECDBCAB0600A0CC2B0000000060FFAFAA +FF4100690000000040EBDECDCCAB480001C6DD040100000000FAEF020000000050B9CCAB58000000D9AD0001A4AB0200E1FF08000000000000000000000000DC7D0060FEFF3E00B0FF0B000000000000000000000000ED2E00D0FFFFBF1091FF0C00000000000000AA +FF4100690000000010EE0E00F0FFFFDF0180FF0C000000000000000000000000ED3F00E0FFFFCF0090EE0B000000000000000000001000FD8F00B0FFFF7F00B0EE09000000000000001000000000FBDF0010FBEF0900D2DE06000000000000000000000000F6FF07AA +FF4100690010040000DACD00000000000000000000000000C0FF5E0000001070DD7C0100000000000000000000000050FFEF08000010D9CC1A0000000000000000000000000000F7FFDF6975C9CDAC02000000000000000000000000000070FEEEEEDDCDBC290000AA +FF41003F0000000000000000000000000000B4EEDECDBC6A01000000000000000000000000000000000084BAAB6801000000000000000000000000000000AA +FF41000B00000422002EAA +FF410069436576878888889899A9AABBBBCCDCDDEDEEEEFFFFFFCF6576778888889899A9AABBBBCCCCDDEDEEFEFFFFFFFFEF7477878888889899AAAABBCBCCDCDDEDEEFEFFFFFFEF9E7188040000000000000000000010000010000000B0EE1D5088070000000000AA +FF410069000000000000000000000000E7EE062188480000000000000000000000000000000020EDBE000086880000000000000000000000000001000090DE3D0000829905000000000000000000000000000000D5DD08000060A919100100000010000000000000AA +FF410069000000DBBD01000020AA6A000000000000000000000010000070CD5C01000000B7AB01000000000000C7AD0100000000C1CC0900000000B2CB07000001000070FFFF1C00000000C9BC030000000080CC1B0000000000E1FFFFBE00000040CC7B00000000AA +FF4100690020DC8D0000100000FAEFEBEE0A0000A0BB19010001000000D9DD0100000060FF9FB0DE8D0001B6AB04000000000000D2EE09100000D1EF1C10DBCD0620AA7A0000000000000090FE1E000100EAEE0500B2CC5B80AA290000000000000020FEAF000050AA +FF410069EE9E001030BBABA79A050000000000000000FAEF0200C0EE1C000000A4AA9A89000000000000000010E2FF0900E8DD0600000140999928000000000000000000A0FF2D40DD9D000000000041350000000000000000000020EE9EB0DD2C00000000000000AA +FF4100690000000000000000000000E9DEDCCD06000000000000000000000000000000000000C2DDCD9C0000000000000000000000000000000000000040CACC18000000000000000000000000000000000000000020140000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000D00D000000000000000000000000000000000000010000F33F0000AA +FF41006910000000000000000000000000000000000000F33F000000000000000000000000000000000000000000F43F000100000000000000000000000000000000000010F43F000000000000000000000000000000000000000000F43F00000000000000000000AA +FF4100690000000000000000000000F43F000000000000000000000000000000000000000000F43F000000000000000000000000000000000000000010F43F00000000000000000000000000000000000010CB03F43F21BB01000000000000000000000000000000AA +FF41006980FF3DF43FD2FF0800000000000000000000000000000040FFDFF54FFDFF0500000000000000000000000000000000F6FFFEDFFF7F000000000000000000000000000000000070FFFFFFFF06000000000000000000000000000000001000F7FFFF6F0000AA +FF41003F000000000000000000000000000000000070FFFF060000000000000000000000000000000000000000E67E000000000000000000000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000163460100000000000000000000000000000010B87D0010769889060010000000000000000000000070ECFFDE01307798AA5B0000000000000001000001AA +FF4100690000F7FFFFEE08508746A73B00000000000064000000000100E5CEB8EE0C7187030000000000000050DA0B0000000000200250EE3E7388000000000000000080EC0E0000000000000000ED8E7578000000000100000091FD0E0000000000000100EAAD86AA +FF410069580000000000000000A0FE0D0000000000000000E8BD87490000000000000010A0FF0C0000000000000100D6CD87290000000000000000A0FF0C0000000000000010D3CD98190000000000000010A0FF0B0000000000000000D1CD981A00000000000000AA +FF41006900A0FF0A0000000000000000D1CD983A000000000000000090FF090100000000000000D3CDA85B000000000000000080FF070000000000000000D5BCA87B000000000000000060FF060000000000000000D7ACB79B000000000000000040FF0400000000AA +FF41006900000000C99CB5BB000000000000000010EF010010000000000000CB6CB2CC052004100000000000EE000000000000400240CC2BA0DC39EA7E000000000000DD000000000000E79D92CC0A70DCDDEE8F000000000000BD000000000000E7DDCCCC0610DCAA +FF410069EDCE07000000000000AB00000000000060DCCDBC0100D8EE0800000000000000450000000000000081CC7C0000C1EE1C000000000000000001000000000000B1CC1A000070EEBF000010010000000000000000000000C9CC05000000EAFF0A0000000000AA +FF410069000000000000000080CD8C00000000C1FFAF00000000000000000000000000D8CD1A0000000130FDFF2C0000000100660000000000A1DDBC020000000000D4FFEF0700000050FF0500000060DCDD3B00000000000030FDFFCF05000070FF07000040DBDDAA +FF410069AD0200000000000000A0FFFFCF180070FF170081ECEEDD08100100000000000000D6FFFFFFBDA9FF9ACBEEEEDE5B0000000000000000010000D8FFFFFFFFFFFFFFEEEE7C00100000000000000000000000B7FEFFFFFFFFEFDE6A00000000000000000000AA +FF410069000000000050B9DCDDCD9B0500000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000AA +FF41006900003154140010000000000000000000000000000000000020545566030000000000000000000000000000000000105355667667010001001000000000000000000000000042555622767747000000000000000000000000000000305566140051878805AA +FF41006900000000000000000000000000105465360000007488780100100000000000000000000041655601000000208788380000000000000000000000206566040000000000618888041000000000000000000053663600001000000010848858000000000000AA +FF410069000001306666030000001000000030989906000000000001000064662600000000000000000082AA7A000000000000003065661100000000011000000020B9BB0800000000000000000001000000A304000000000091CC8C001000000000000100000010AA +FF41006900FB0D000000000010CADD08000000000000000000000020FF6F000001000100B1ED7E0000EBEEEEEEEEEE070010A0FFCF00007777771720ECEF0500FDFFFFFFFFFF0D0000E09FFF05B0FFFFFFCF00E4FF0D000030444444F55F0000F80EFB0CF5DFDDDDAA +FF4100698D1070FF9F100000000000C0BF0000FD0AF54FFD0C0000000000FBEE03000000100060FF0260FF02C0DFFF030000000000D2EE0A212200000000FD09C0BF0050FF9F00000000000070DE3D847800000000F90EF35F0000FC0D00000000000000DC8D8658AA +FF41006900000000E17FFA0D0001C50500000000000000D8AD873810100000B0CFFE070000000000000000000100C4BC88180000000040FFEF000000100000000000000000C0BC88080000000000FC9F000000000000000000000000B0BB88180000000000F72F00AA +FF4100691000000010000000000000B1AB883900000000009007000000000000000000000000B49B976900000000000000000000000000000000000000B78AA59A00000001000001000055000000000000000000A95AA1BB060000000000000080EE070000000000AA +FF410069000060AA1970BB3B00000000000000D4EE4D0000000000000093AA0610CBBC03010000000030ECDEBD03000000000020A9990100C5DD6D0000000000C6DEDDDD5B0000000000939949000080EEFE5B000000A5DDDD78CCCC4900000073999905000000E7AA +FF410069FFFFCDABCBDEDD7C00B7BCBB8A77989A99590010000060FDFFEFEEEEDDBD040040B9BBAAAA9A997903000000000070ECEEEEDDAD0600000050A8AAAA99790400000001000000108699680100000000001064664501000001000101000010000000000000AA +FF41003F01000010000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001000AA +FF41000B00000422002EAA +FF410069536576878888889999AAAABBBBCCCCDDDDEEEEFFFFFFCF6577878888889999AAAABBBBCCCCDDDDEEEEFFFFFFFFEF7387888888989999AAAABBBBCCCCDDDDEEEEFFFFFFFFAF6088180000000000000000000000000000000000B0FF1E1088680000000000AA +FF410069000000000000000000000000F6FF080084980400000100000000000000000001000000FCDF100070992900000000000000000000000000000070FF6F000020998A000000000000000000000000000000D1FF0C010000A5AA050000000000000000000000AA +FF410069000000F9EF0400000080BB2A0000000040EB9D00000000000020FEAF0000000020BA9C00000000D4FFFF090000000000A0EF2D0000000000C6CC07000040FDFFFF5F0000000100E4EE09000000000090DC3C0000D4FF8FFEDF0100000100EBCE01000000AA +FF410069000030DCBD0140FDFF08F7FF0B01000060EE7E00000000000000D7EE08D3FF8F00B0FF7F000000C0DE0B00000000000000B0EEAEFEFF090010FDEF030000D7DD050000010000000030FEFFFF9F000001E5FF0B0010DC9D000000000000000000F7FFFF09AA +FF41006900000080EF8E0080CD3C00000000000000000050DB6C0000000000EBDE04C2CC080000001000000000000000000000000000D2DD4BC9AB01000000000000001010000000000000000060DDCCBB6B00000000000000000000000000010010000001C8BBABAA +FF41006918000000000000010000000000000000000000005099681100000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069100000000010000000000000000000000000000000000000000000002044444444444444020100000000000000000000000000F2FFFFFFFFFFFFFF2F000000000000001A000000000000B0CCCCCCCCCCCCCC0B00000000000000EF070000000000000000AA +FF41006900000000000000000000000000FFCF040000000010100000000000010000000000000000FFFFAF0110000100000000000000000000000000000000FFFFFF7E00000000000000000000000000000000000000FFFFFFFF4C000000A1CCCCCCCCCC1A000000AA +FF4100690000000000FFFFFFFFFF0A0000F9FFFFFFFFFF9F0000000000000000FFFFFFFFEF070100F8FFFFFFFFFF8F0000000000000000FFFFFFFF1A000000608888888888070000000000000000FFFFFF4C00000000000001000000001000000000000000FFFF7EAA +FF4100690000001010000000000000000000000000000000FFAF010000000000000000000000000000000000000000CF0400000010000000000000000000000000000000000007000000000000D1EEEEEEEEEEEEEE1D0000000000000000000000000000D1EEEEEEAA +FF41003FEEEEEEEE1D0000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000AA +FF41000B00000422002EAA +FF410069F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000102003110000000000000000000000000000000000000173500776200100AA +FF4100690100000000000000000000010000103686989989940600000000000000000000000000002032889999A9AABA260900000000000000000000000000408898896776A8BBBB090000000000000000000000005073986802000010A6CC5B3A00000000000000AA +FF41006900000000509899180001000080CCDD1B00000000000000000000206299767A00000000C66BDD2C0600000000000000000050987910A905000040CC05E8EE0C00000000000000000100981900B54B0000B19D00B0EE0400000000000000000066AA060080AA +FF410069AB6347DA1C0040FFBC03000000000000000095AA010010CBDCDDDD050000FCBF010000000000000000908A000000C9DDDDDE020000F94F000000000000000050A87B100040DD4BA3EE090000F4DF0A0000000000000030B76B000080DD1300FC0D0000F0AA +FF410069CF060000000000000000B36C0000A0DD0000FB2E0000F09F000000000000000060CA7C0094ECEE0630FEFF7C00F1EF0A0000040000000030C69CB8EDDEFEAEEAFFFEFFBEF88F0500605F0000000000B0DDDD9C05F7FFFFAF40C9FEFF1E0000508F000000AA +FF4100690000DADD28000060FDEF08000060EEDE0200109F000000000034ED0B000001E05F00000080EE47000000AF000000000030ED6E000000E04F000000D3DD050000109F0000000000A0EBEF040000D02F010010DB9D0A0000508F00000000000080FF5E0000AA +FF410069D00F0000B3CD09100000905F000000000000D0FEFF0900C00E0060DCAC2B000000C00E0000000000006091FFEF5AC00E83DBCC1914000000F10C00000000000000B0DDFFFFEEDEDDCC8A0900000000F807000000000000005012DEEEEEDDCDBA14030000AA +FF4100690010DE100000000000000000300BD6B98B8A600400100000A07F000000000000000010000085700965000000000000F60C000000000000000000000000000000000000100050EF030000000000000000000000000000000000000000F74E000000000000AA +FF4100690000000000000000000000D10B01A1EF040000000000000000000000000000001000FC0881FE2C0000000000000000000000000000000000A0BFB9FE7E000000010000000000000000000000000000F8FFFF7C1000000000000000000000000000000000AA +FF41003F0000D3CF04001000000000000000000000000000000000000010FC0B000000000000000000000000000000000000000000A02F00000000000001AA +FF41000B00000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000100000001000000000000000000000000000000000000000000001000000000001000000000000000000000000000100001100000000AA +FF41006900000000000000000000000000000000003155140000000000010000000000000000000000000010546667030000000000000000000000000000000001005366558758000000000000000000000000000000000041653600848827000000000000000000AA +FF410069000000000000106566020021878904000000000000000000000000000063761510000060995900100000001000000000000000307647000000000095AA07000000000000000000000000747703000000000030BA8B000000000010000000000050772700AA +FF410069000000000001A3CC09000000000000000000003144010000400300000010DAAD000000000000000000000000000000F20D00000100B1ED0A0000000000003066666645020000F97F0000000020EC8F000000000000E0FFFFFFFF0D0000EEDF00C7CCCC0AAA +FF410069E4FF06000000000170999999C97F0070AFFB16FEEEEE0C60FF0D00000000000000000041CF00D02FF4AC9F00000001F99F00000000000000000000FC04F50BC1FF0D00100000C0EF02000000104077010000F70AFB0550FF060000000060EE0800001000AA +FF4100697089000000D03EDF0000AA000000000000EC0B00000000807900000090DF7F100000010000000000DA0C00000000916A00000020FF0E010000000001000000D80C01001000907A00000001FB09000000000000000000C80B00000000908B00000000A401AA +FF410069000000000000000000B90A0000000080AB000000000000000000000000000000BA180000000060CC06000000000010BB01000000000050AB050000000010DB2C0100000000B0EF0A1000000000929A010000000000D6CD0200100000E9EE8E0000000010AA +FF410069A84900000000000090EE7D000000B3EECDDD3A00000094990600000000000000FAFFAD89CAEECE33DCCC7966879969100000000001000080FEFFFFEEEE2A0092BCBBAA9A890500000000000000000091ECEECD4900000073A99A78150000000000000000AA +FF41006900000000200000000000000001000000000000000000001000000000000000000000000000100100000000000000000000000100000000000000001000000000000000000000000110000000000000000000010000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000AA +FF41000B00000422002EAA +FF410069F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF01000000000000000000000000000000000000010000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000004214000000000000000000000000000000000000001020765800000000000000000000000000000000000000006187780000000000000000000000000000000000000010867768000000000000000000AA +FF41006900000000000000000000508883490000000000000000000000000000000000000084589319000000000000000000000000000000000000209807A509000000000000000000000000000000000000718901A8080000000000000000000000000000000000AA +FF41006900964900B906000010000000000000000000000000001030990620BB030001000000000000000000000000000000918A0060BC000000000000000000000000000000000000A73A0080AC000000000000000000000000000000000040BA0600B08D40B89CAA +FF4100690000000000000000000000001000A19B0000C1BDEDFEFF0800000000000000000000000000B83B0000D6EEEEBDFF0A01000000000000000000000150BB061000E9BC38A0FF05000000000000000000000000B29C100000250000F69F0000000000000000AA +FF4100690000000000C92B000000000010FD1D00000000000000000000000070CC060000100000A0EF05000000000000000000000000C49D000000000000E59F00000000000000000000000000DB2C1060C9070010FD1C00000000000000000000000070DD76CAFEAA +FF410069FF040090EE0500000000000000000000000080EEFEFFFFEF0000E59E0000000000000000000000000030FDEFACB7CF0000EC1C0000000000000000000000000000610400D09F0190DE050010000000000000000000000000000000F16F00D58D00000000AA +FF4100690000000000000000000000000000E70E00DB1B000000000000000000000000000000010000EA0C80CC04000000000000000000000000000000001000EB09C48C00000000000000000000000000000000000000DD06BA1A00000000000000000000000000AA +FF410069000000000050CD72AB0400000000000000000000000000000000000070ACA46A00000000000000000000000000000000000000908BA91800000000000000000000000000000000000000A09A890200000100000000000000000000000000000000909948AA +FF41003F00000000000000000000000000000000000000105188050000010000000000000000000000000000000000001110000000000000000000000000AA +FF41000B00000422002EAA +FF41006900000000000000515600000000856803000000000000000000000000005187880101000088887904000000000000000000000020878888010000008898997902000000000000000010007388886800000001978999AA4900000000000000001031888888AA +FF4100694800000000967983AAAB050000000000000000728838881800000000968A00A5BB5B0000000000000010878813880800000000A69A0040CACC0500000001010050883800881800000000A79A0000B3CC1B10010000000083880500875800000000B88B00AA +FF4100690050DC9D00000000000087780000859804000010BA7B000000D8DD04000000003088280100819959000060BB3B000000C0EE0A0000000060880700003099AA0500A1CB0901000070EE2E0001000081880310000093AA6A01C8CC0500000000FD8F000000AA +FF4100690084880000000030B9BB64CC9C0000100000FACF1000000186680001000000A2BBCACC1B0000000000F7EF100000008749000000000040CCCCCD040100000000F3FF000000009829000000000000CADC4C000000000000E0FF0300001099090000000000AA +FF41006901D79C01000000000000E0FF040000209909000000000000300100000000000000E0FF04000030AA09000000100000000000000000000000F0FF03000020AA0A000000000000000000000000000000F4EF10000000BA2B00000000000000000000000000AA +FF4100690000F7DF00000000B95B000000000000000000000000000000FBBF00001000B89C010000000000000010690000000000FD7F00000000C6CC0100010000000000A0FF0500000060EF1E00000000B1DC0800000000000000B0FF0B000000C0EE0B00000000AA +FF41006980DD3C00000000000000B0FF2F000000E5EE050000000011DCAE00000000000000A0FF8F000000ECBE000000000000E7EE08000000000001A0FFCF000080EE5D000000000000B0FE6E000000000000B0FFDF0000D4DD0900010000000020FDEF05000000AA +FF4100691100C0FFEF0410DCCD0200000000000000F5FF3E0000000000E0EFEE08A0DD5C000000000000000080FFDF0100000000E6EEEE0AD9CD08000000000000000100F9FF0C00000000EACEDE8CCD9C00001000000000000000A0FF9F00001010ED7EDDCDCC19AA +FF4100690000000000000000000000FBFF05000080EE1DCACC9B010001000000000000000000D2FF0D0100C0DD0992BB1800000000000000000000000060FE8F0000D8CD0201000000000000000000000000000000EACE0020DC8C00000000000000000000000000AA +FF41006900000000E3EE03A0CC1B0000000000000000000000000000000000C0DE07C7CC06000000000000000000000000000000000090DD49CC8B00000000000000000000000000000000000080CDA9BB2A10000000000000000000000000000000000060CCBBABAA +FF41003F0400000000000000000000000000000000000020BBAB5A0000000000000000000000000000000000000000949A05000000000000000000000000AA +FF41000B00000422002EAA +FF4100690000000000000033004710160010000000000000000000000000000121007620685129300500000000000000000000000000007243879899997A930900100000000000000000000010028188999999AAAABA077200000110000000000000004057889899AA +FF4100699999AABABB9BBA0100000000000000000000208898894601003096BBCB8C000000000000000000007374988905000000000093CCCC980B00000000000000007198998901000000000060CCDCDD070000000000000000719969A9170010000000C49CDBDDAA +FF410069060000000000000176969905A65A0000000021DB1BC2EDAD2D0000000000008399790080AA03000000A0DD1540EDEE0A0000000000007099190030BA1A000000D89D0000E8EE1300000000005194AA050000B79B001360DD1C0001D0FF9B070000000093AA +FF410069AA9A000000A0CCCADDCBDD05000090FFFF0B0000000010A87A00000030CCDCDDDD9E00100020FF7F000010000000AA4B00000051DCDDDDEEBE00000000FD9F000000000088BB0A000000A0DD6C20EAEE06000000FBEF7D0000000097BB0A000000D2DD05AA +FF41006900C0FF0B000000F9EF6C0000000050BB0A000000D5CD000190FF0C000000F8CF100100008B50CB0A000040EADE0000A0FF7E000000F8CF00100000DFCACC0B0082DBEEEE0800E2FFFFBE0601F9FF8E000000EE66CC1CA6DDEEEEFEAE86FEFFFFFFDF4AFBAA +FF410069BF48001000FD00DBCDDDEEAC46FEFFFFFFAF94ECFFFFFE7E00000000FD60DCDDBD380000E5FFFFFF0A0010B7FDEE9E03000000FDD4DCDD0200000010E9FF6B00110000A0EEDD0A000010FE10D1EE0900100000B0FF0000100000D3EE1700000000EF00A0AA +FF410069EE4E00000010B0FF0000000000EACD0100000040DF00E9FEDF01000000A0EF1000000070DDCD2B01000090AF0097F7FF0C000000A0EF00110000D6DD4A18000000C06F0000B0FFCF02000090DF00000070DDCC0200000000F30E0000F7FEFF7E010090DFAA +FF410069000020D9CCBB0800000000FA0B0000B7B1FFFF6C0080CE0030C8CDBC540700001020FF0400000051FFFFFFBDA9CE97DBCDCC7B0000000000B0BF00010000B06EFCFFEFEEEEDDCDCC6AA70100000000F73E000000013003E3EDEEEEDDDDCCBA0720000000AA +FF4100690040FE07000000000000E723DBBBCDAA3B70080100000000E3AF000000010000001000BB007C403B10010000000050FE0C00000000000000010034014800040000C8000000F8BF0010000000000000000000000000000070FF0200C4FF09000000000000AA +FF41006900000000000000001000F58F00B6FF7E0000000000000000000000000000000030FE9BEBFF9F0000010000000000000000000000000000D1FFFFFF8C010100000000000000000000000000000000C2FFAD38000001000000000000000000000000000000AA +FF41003F0100FB8F00000000000000000000000000000000000000000090FF08000011000000000000000000000000000000000000E70B00000000000010AA +FF41000B00000422002EAA +FF41006900000000000000000000000000315504000000000000000000000000000000000000000063773800000000000000000000000000000000000000307688580000000000000000000000000000000000000072888758000000000000000000000000000000AA +FF410069000000108668963900000000000000000000000000000000000050881798090000000000000000000000000000000000008488239908000000000000000000000000000000000021885950AA07000000000000000000000000000001000171990770AA05AA +FF410069000000000000000000000000000000000096890190AA010000000000000000000000000000000040993900A1AB000000000000000000000000000000000081A90600B58B0000000000000000000000000000000100978A0000B76C000000000000000000AA +FF4100690000000000000050AA2A0000C93C0000000000000000000000000000000092AA060000CB0B00000000000000000000000000000010A88A000040DC0A0095BB07000000000000000000000060BA2A000070DD99DBEEFF6F0000000000000000000000A3BBAA +FF410069050010A0DDEEEEFFFFBF0000000000000000010000B98B000000C0EEEEEF9CFBBF0000000000000000000070BB1B000000E3DE8B0460FF5F00000000000000000000B4CC0500010184030000E1FF0A00000000000000000010CA8C0000000000000000FAAA +FF410069DF0100000000000000000080CC1B0000000000000060FF5F00000000000000000000C5CC0500000000000001D1FF0A00000000000000001010DB8D0000000000000000FADF0100000000000000001090DD0B0000009401000050FE6E0000000000000000AA +FF4100690000D6DD0420A7ECFF000000D0EF0A10000000000000000000DA9EB8EDFFFFDF000000E9CE0100000000000000000000EBEEFEFFFFFFAF000050EE5E0000000000000000000000E7FEFFDF8BFC7F0000C0EE09000000000000000000000070CC6A0000FDAA +FF4100691F0000E8CE0110000000000000000000000000000020FF0D1040DD5D0000000000000000000000000000000070FF0B00B0DD0900000000000000000000000000000000A0EF0701D8BD0100000000000000000000000000000000C0EE0340CC5C00000000AA +FF41006900000000000000000000000000D0CE00A0CC080000000000000000000000000000000000E5AD00C7AC010000000000000000000000000000000000D88D30BB5B000000000010000000000000000000000000DA4C90BB0800000000000000000000000000AA +FF4100690000000000CB0BB79A01000000000000000000000000000000000030CC49AA4910000000000000000000000000000000000060BB979A0600000000000000000000000000000000000080ABA8790100000000000000000000000000000000000080AA9928AA +FF41003F00000000000000000000000000000000000000609988040000000000000000000000000000000000000010864700000000000000000000000000AA +FF41000B00000422002EAA +FF4100694355667677888888889999AAAABABBCBCCDCDDDDEEEEBE55667787888888889999AAAABABBCBCCCCDDDDEEEEFFFF64778788888888889999AAAABABBCBCCCCDDDDEEEEFFDF728703000000000000000000000000000000000030FF8F6088070000000000AA +FF410069000000001100000000000000A0FF0E2088480000000000000000000000000000000000E1FF090086780000000000000000000000000000000000F8EF021082880500000000000000000000000100000001FDBF0000609918000000000000100000000000AA +FF41006900000060FF4E0000109969000000000000001000000001000010C0EF0B100000A69A010000000000100000000000000000E4EE0600000091AA070000000000001000000000000000EACE0000000060BB2B0000000110C96B10000000000020ED7E001000AA +FF4100690010BA8B00000000B0FEFF06000000000080DE1C0000000000C7CC03000000E9FFFF0D1001000001C0DD080000000000B1DC09000070FECFFF8F0100000010D7CD02000000000070DD4D1000E4FF1DFBEF0100000000DB9D00100000000000DCBE0010FDAA +FF410069FF05E4FF0900000040CD4C00000000000000E7EE15B0FF7F00A0EF2E00000091CC0A00000000000000C0FE0CF8FF0A0020EDAE000000C2CC050000000000000060FFBFFFDF010000E8DE040000C8AB000000000000000000FCFFFF3E100000C0DD0A0010AA +FF410069BB6B000000000000000000E4FFEF0600001060DD5C0060BB1A00000000000000000020A8390000000100CAAC0090AA070000000000000000000000000000000000C4BC06A49A02000000000000000010000000000000000080BB2AA87900000000000000AA +FF410069000000000000000000000020AAAA9A3910000000000000000000000000000000000000A69A990700000000000000000000000000000000000000509868010000000000000000000000D46E000000000000010000001000000000000000000040FEFF0600AA +FF410069000000000000000000000000000000000000E4FFFF6F00000000000000000000000000000000000040FEFFFFFF060000000000000000000000000000000000E4FFFEEFFF6F0000000000000000000000000000000010FEEFF57FFDFF0500000000000000AA +FF410069000000000000000060FF5EF07FD2FF0A00000000000000000000000000000000DB05F07F20DC04000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000AA +FF410069100000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F000000000000000000000000000000000000000000F07F001000AA +FF41003F000000000000000000000000000000000000F07F000000000000000000000000000000000000010000D04E000000000000000000000000000000AA +FF41000B00000422002EAA +FF41006900004176886703000000000000000000000000000000001040877876987911100000000000000000000000000000008558010040B82A00000000000000000000000000000040780200000080AC00000000000000000000000000000081284300000000EAAA +FF41006918000000000000000000000000000085058405000010E20D000000000000000000000000000087015069000000B05F0000000000000000000000000000880000C7080100809F0000000000B70100000000000000890000807E000060AF0000000080FF04AA +FF410069000000000000009A0000009F0000709F00000000F78F0000000000000000BA0000009F0000907E00010080FF080100010000000000D90500008E0001C01D000000F88F000000100000000000D50C00007D0001D709000080FF08000000000000000000B0AA +FF410069AF00005B0041BC030010F88F1000000000000000000020FD3B001300B65B000080FF080000100000000000000000D3EF7B65A8AB040000F88F00000000000000000001000000D8EECDAB27000080FF080000000000000000100000000000746714000000AA +FF410069F88F100000740600008736001010000000000000000081FF080000728807001088991710000000000010000000F88F000030878806000098A89A03000000000000000080FF080000727888030000A856BA3B0000000000000000F78F1000008717880300AA +FF41006900A806A3BC0100000000000080FF08010050880287060010BA0530DC09000000000000F88F00000081580093690050BB0100E72D000000010080FF0800000084181060AA07A19C0000D09F0000000000F88F0000000086060000A66BC92B0000A0DF0000AA +FF410069000080FF08000000008804000070CCCC06000060EF00000000F88F00100010109901000010CB6C00000020FF00000070FF0800000000209900000000960300010000FF000000908F000000000030AA00000100000000000040FF00000000000000000001AA +FF41006910BA01000000000000010080DF0000000000000000000000BA061000000020060000B0BF0000000000000000000000C80A00000000C08F1000E17E0000000000000000000010D55D01000001C0DF0000E90D0000000000000000000000A0CE02000000B0AA +FF410069FF0530ED08000000000000000000000040FD0C000000C0FF19B0BD01000000000000000000000000F7AF000000D0EF0BD85C0000000000000000000000000090FF090001E3EE7DCD070000000000000000000000000000FB6F0000E9DCCD8C0000000000AA +FF41006900000000000000000000C0DF0210DD97CC0800000000000000000000000000000030FE0990CD01450000000000000000000000000000000000E90DC37C00001000000000000000000000000000000000D24DCA0A00000000000000000000000000000000AA +FF41003F000100C0ADBC0300000000000000000000000000000000000000A0BC6B100000000000000000000000000000000000000040AA06000000000010AA +FF41000B00000422002EAA +FF4100690000000000000000D61C000000000000000000000000000000000100000060FF7F0000000000000000000000000010000000000000F6FF3E0000000000000000000000000000000000000070FFEF0500000000000000000000000000600500000000F6FFAA +FF4100695E0000000000000000000000000000FB9F00000060FFEF050000000000000000000000000000FFEF000000F6FF5E000000000000000000000000000000FFEF000070FFEF05010000000000000000000000000000FFEF0000F7FF5E000000000000000000AA +FF41006900000000000000FFEF0070FFEF0500000000000000000000000000000000FFEF00F7FF5E0000000001000000000000000000000000FFEF70FFEF050000000000000000000000000000000000FFEFF7FF5E000000000000000000000000000000000000FFAA +FF410069FFFFEF05000000000000000000000000000000000000FFFFFF5E00000000000000000000000000000000000000FFFFFFABAAAA8A00000001000000000000000000000000FFFFFFFFFFFFFF0A000000000000000000000000000000FFFFFFFFFFFFFF0D00AA +FF4100690000000000000000000000000000FCFFFFFFFFFFFF09000000000000000000000000000000709999999999690000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000110100000000000000000000000000000000000000000000000001000000000100000010000000000000000000100000A79A89775645443333222211110000AA +FF4100690000000000000040FFEFCDAB99786655454433231200000000000000000010EDDEBCAA8977565544343322120000000000000000000000000000000000000000000000000000000000000000000111000000110010000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000A69A8977665544333322221111AA +FF41006900000000000000000000FEEFCDAB9A786755454433232201000000000000000000EBEECDAB897756554434332212010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000100001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000100000000000000000000108878AA +FF41003F6756453433222212111101000000000000000000B0FFEFCDAB89776655443433221200000000000000000190FFEFCDAB89776655443433221200AA +FF41000B00000422002EAA +FF41006900000000000000000001623007530100000000000000000000000000000000101684766877500400000000000000000000000000002022889999A9AAA8060000000000000050A9CB081000004088989988A9BABB590A000000000000E0FFFF0B00006084AA +FF410069986804000094CBCC080000000000003084FF0B000060987902000000A09BCC7C1B010000000000F4DD0C105083990700000000C609D7DD09001000001000FCD40D005099897A00000010CB0470ED3B050000000040BF900A01409917A918010180AC0000AA +FF410069EAEE0A00000000B14F000030889A01A29B0101C25D0000D2DF0000000000D00D000000A57A0030CA9ACBDC0B0000A0FF9A00000000F30A000010A53A0000B4CCDDDD3C000030FF8E00000000F706000090BA0A0000A0DD8AEBBE000000FE0C00000000F9AA +FF41006904010000B9090000D1AD00A0EE010000FCBE04000000FA00000030BA090000D46D0070FFAC1600FCAE02000000FA000000A2CB0A0000E39E00A0FFFFFFCEFD0D00000000F902100000C90B0081EDEE48F9EFBADCFEFFBE00000000F707000030DA2D70ECAA +FF410069DEFEFFFF6F000020FE8B00000000F20A000090DB9DEBCE07E7FFEF07100170EE0600000000D00D000000C0EEBE060000E68F000000C0DE5C00000000A04F000000D6EE09000000B09F000000E78D150000000030BF00000098FD5E00000090BF000040DDAA +FF4100695D000000001000FB05000000F8EF05000060CF0000C4CDA9010000000000E31D100000CEFF8E000010CE0060DC8C0000000000000080BF00000002FBFF7C0000DC50DACCA90100000000000000FA0B000000BEFEFFBE9ADCDCCC7B300000000000000000AA +FF410069B0CF02000005F6FEEEEEDDCD8B8700000000000000000000F90C000000A8B1CDCDCC791A1000000000000000000000500600001000A1077BA004150000000000000000000000000010000000000025300100000000000000000000000001001000000000AA +FF41006900000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000110000000000000000000000010100000100000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000004018000100000000000010810500000000000000000000E0EF050000000000000050FE0E00000000000000000000E0FF9F00000000000000F9FF0E1000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000000FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010000000000000000000000000000000000000080EE0800000100000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000104402000010000000000000000000000000000000001053655601000000000100000000000000000000000000416566873700010000000000000000000000000000002065561186880500000000000000000000000000000010AA +FF41006964660400408868010001000000000000000000000000517626000000729938000000000000000000000000002065570100000010A7AA04000000000000000000000100627705000100000060BA6B000000000000000000000030764700000000000000B5AA +FF410069CC06000000000000000000005166030000100010000050CC7D000000000010001000000000000000D01B01000000C5DD070000000000000000001000000000F74F0000000050ED5E001000100000C0EEEEEEEE1B0000FDBF0093999906E7EF0300000001AA +FF41006900A0DDDDDDED4F0050BFFD03FCFFFF0E90FF0B00001000000000000060BF00B05FF78BBF66660400FB7F00000000000000000000ED01F30DD0EF2E00000010E3DF00000000002044010000F909FA0770FF080000000080EE07000000006089010000E10DAA +FF410069EE0000DD000000000010ED0A000000008079000000B0AF9F000000000000000000DA0B00000000907A00000040FF2F000000000000000000D90C00000000906A00000000FC1B000000000000010000C80B00001000908B00000000D60400010000000000AA +FF4100690000C80A0001000090AB000000000000000000000001000000BA090000000070CC040000000000007800000000000030AB060000000020CC0A000000000080FF080000000000809A020000000000D99D0000100000E5EE5D0000000001A7690000000000AA +FF41006900B1EE2A00001080EEEEDE07100000719A1800000000000030FDEF6A0084ECEE67DDAC37006399890200000000000000C2FFFFEFEFEE6C00B5CCBBAA9A9917000000001000000000C6FFEFEE8C010010A7ABAA9947000000000000000000000072884700AA +FF41006900000000425514000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000100AA +FF410069000000000000000000004018000000110000000000810511000000000000000000E0EF050000000000000050FE0E00000000000000000010E0FF9F00000000000000F9FF0E0000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000010FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010100000000000000000000000000000000000080EE0800000100000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000104301000000000000000000000000000000000000000051760600000000000000000000000000000000000010007588080000000000000000000000000000000000000040888607000000000000000000000000000000AA +FF41006900000000835897070001000000000000000000000000000000001088079805000000000000000000000000000000000000708822AA020000000000000000000000000000000000009549509A000000000000000000000000000000100000309906808B00AA +FF4100690000000000000000000000000000000000818900A07B000000000000000000000000000000100000A73900B14C000000000000000000000000000000000040AA0600C50C0000000000000000000000000000000000918A0000D80A61C91A000000000000AA +FF4100690000000000000000B82A1000DBCCEEFFBF1000000000000000000000000050BB061000EDEEEFEDCF00000000000000000000000100A29B000050DEAC16F69F00000000000000000000000000C92B000040060010FE0D00000000000000000000000070CCAA +FF410069160000000000A0FF04000000000000000000000000C49C000000000000F69F00000000000000000000000000DA1B000000000110FD0C00000000000000000000000080DD0500729A1000A0EF05000100000000000000000000D29D85DBFF9F0000E59E00AA +FF410069000000000000000000000000E5DEFEFFFF5F0010EC0C00000000000000000000000000C0FEEF9CF90E0090DE040000000000000000000000000010770200FB0C00D58D000000000000000000000010000000000000FD0A10DC1B00010000000000000000AA +FF4100690000000000000010EE0680CD04000000000000000000000000000000000060DE01C48C00000000000000000000000000000000000090BE00CA1A000000000000000000000000001000000000B09D70BC04000000000000000000000000000000000000C0AA +FF4100696CB47B00100000000000000000000000000000000000C42CAA1900000010000000000000000000000000000000B77A9A0300000000000000000000000000001000000000B899590010000000000000000000000000000000100000A89906000000010000AA +FF410069000000000000000000006007000084780100000000930310000000000000000000F4CF030011130001000080FF0C00000000000000000000F4FF7E00001000100010FBFF0C0000000000000000000070FEFF1A0000000000E5FFBF020000000000000000AA +FF410069000000C2FFDF0400000090FFFF0800000000000000000000000000F9FF8F000030FCFF4D000000000000000000000000000050FDFF2B00E7FFAF00000000000000000000000001000000B1FFEFB6FFEF070000000000000000000000000000000000F7FFAA +FF41003FFFFF3C00000000000000000000000000001000000040FDFF9F0000000000000000000000000000000000000000A0DF0600000000000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1DDBC9A88675645443333221201000000000000000000F6FFDEBC9A896756554434332201000100000000000000B0CCAB9A7867554444AA +FF41006933232212010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000AA +FF4100690000000000000000000000000000000000000000001100000000000000000000000000000010000000000000000000A0DDCDAB89776655443433222201000000000000000000F0FFDEBCAA89775655443433221200000000000000100090CCBB9A886756AA +FF41006945443323221201000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000100001000AA +FF41006900000000000000000000100000000010000000000000000000000000000000000000000000000000000000001000000000001000000000000000C6CCAB8978665544333323221101000000000000000000FCFFDEBC9A7867564544332322010000000000AA +FF41006900000000D7DDBC9A8867564544333322120100100000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000AA +FF41006900000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000AA +FF410069000000000000000000004018000100000000000000810500000000000000000001E0EF050000000000000050FE0E00000000000000000000E0FF9F00000000000000F9FF0E0000000000000000000040FDFF3C0000000000D3FFDF040000000000000000AA +FF410069000000B0FFEF0700000070FEFF0A00000000000000000000000100E7FFAF000010FBFF6E000000000000000000000000000030FDFF4D00D4FFCF0300000000000000000000000000100090FFFF88FFFF090000000000000000000000000000000000E5FFAA +FF41003FFFFF5E00000000000000000000000000000000000010FBFFBF010100000000000000000000000000000000000080EE0800000100000000000000AA +FF41000B00000422002EAA +FF41006900000000000000000000103302000000000000000000000000000000000010000041652600000000000000000000000000000000000000006476570000000000000000000000000000000000000000747768000000000000000000000000000000000000AA +FF41006900007388380001000000000000000000000000000000000000308803000000000000000000000000000000000000000010880200110000000000000000000000000000000000002088020000000000000000000000000000000000001000209801000000AA +FF410069000000000000000000000000000000000020991200000000000000000000000000000000000000002099020000000000000000000000000000000000000000209902000000000000000000000000000000000010000020AA020000000000000000000000AA +FF41006900000000000000000020AA0200000000000000000000000000900B000000000020AA0200000000000000000000000000B00D000000000020BA0200000000000000001001008A00B00D00B600000020BB020000000100000000000000F909C34E60CF0000AA +FF4100690020BB02000040CBCCCCDDDD9C000090CFFFFFFC1C00000020CB020000E4FFFFFFFFFFFF1D0000FCFFFFEF1101000020CC020000FC4B44440300D6AF0040FFFFFFFF0800000020CC030000FD000000000030EFA8CAFFFFFFFFADAA011020CC130000FC07AA +FF4100690000000000EEDCEDFFFFFFFFDFDD030030DD030000F7EF0900000070DF0060FFFFFFFF0A00000030DD03000080FE0C0000B5FC6F0000FDFFFFFF0300000030DD03000000F23E0000FCEF080060FFFFFFFF0900000030ED03000000B0DF05B2EF170000F6AA +FF4100691CD9AF939F00000030EE0300000011FCFFFF6E000000CC01B00D00E910000030EE030000000090EDBD040000000000B00D001000000030EE0300000000000000000000000000A00D000000000030FF031000010000000000000000000020040000000000AA +FF41006930FF03100000000000000000000000000000000000000131FF03001000000000000000000000000001000000000030FF03000000000000000000000000000000000000000030FF03000000000000000000000000000000000110000030FF030000000000AA +FF41006900000000000000000000000000000030FF03000000000000000000000000000000000000100030EF03000000000000000000000000000001000000000193EE390000000000000000000000000000000000000090EEDDCD07000000000000000000000000AA +FF410069000000000000D0DECDCC0A00000000000000000000000000000000000080DDCCBB0600000000000000000000000000000000001000CBBB8A0000000000000000000000000000000000000001B5AA39000000000000000000000000000000000000000070AA +FF41003F99060000000000000000000000000000000000000000207801000000000000000000000000000000000000000010340001000000000000000000AA +FF41000B000001C2001EAA +FF41006900000000000000000000000000000000000000000000000100000000100000000000000000000000001000000000000000010000000100000000001000000000100000000000000000000000000000000000000000000000000000000000C8AB99785645AA +FF410069343323221100000000FEEFBD9A7867554434231200000001A69A7867554433232212110000000000000000000000000000000010000000010000000000000000000000000000000100000000000000000001000100000001000000001000000100000000AA +FF41006900000000000000000000FEEFBC9A7866554434231200000000FDDEBC897856454433221200000000000000000001000000000000000010000000000000001000000000000000000000000000000000010000000000010000000000000000000000001000AA +FF410069000001000010000000000000000000000001A79A78675544332322121100000000FEEFBD9A7867554434231210001000C8AB8978564534332312110000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000654534231211111100100000000070FFCD9A785645342301000000000020AA8967453423221101000000000000000000000100000000000100010000000000000000000000000000000000AA +FF4100690000000000001100000000408867453423221111000000000000C0EFBD9A77564433220100000010004088674534232211110000000000000000000000000100000000000000000000000000000000000000000000001000000000000000000000010000AA +FF41006900000000867856443322121101000000000000FEDEAB785645342312010000000000756745342212111101000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B000001C2001EAA +FF4100690000000000000000000010760301000000000000000000000040880600000000000000000000000010760200000000000000000000720600000000000000000010000000861800520000000000000000000000730610B906000000000000004047000000AA +FF41006992CB7C000000000000008178000020CA9BDD0710000001000050470000A1BC04E98E00000010750200000010CA4C00A0FF08000040880400000081CC040000FB4F0000207701000010C26D000000D0BF0000010000000000D70C50ED0B70DF0000002500AA +FF410069000000E90AD0FF8F10EF0000609A02000010FA1AE0FFAF00EE0000B6BB2A000000F90DB0FF6F60CE0060BBB8BC020000F46F10A906A09D00B68C40DC2C0000C0EF040000C83B60CB0800D4DF010030FE9E35A6BC06B29C000050FE0B0000C4EEDDBC5A01AA +FF410069C80B000000F73F100000A7BB790200DB06A0DE06D08F0000000000000000DD01F7FF0EB0AF0000000000000000EE00FAFF0FA0AE0000000000000001FD06F5FF0CC08E0000000000000000FB0C609B01D53D1000000000000000F59F000030DC09000000AA +FF410037000000000090FF7C54C8AC02000000000000000000E9EEDECC290000000000000000000040B9BC5900000000000000000000AA +FF41000B000001C2001EAA +FF410069547687888899AABBCCDCEDFEFFFFDF7587888898A9BABBCCDDEEFEFFFFCE83180000000000000000000000E65E70580000000000000000000010EC0A40880100010100000000000080CD1200A807000000000000000010D37D0010A52A00000001810600AA +FF4100690100CA0A0000908C00000010FDAF000050BC04000050CC020000A0EFEE0800A17B00000000DB0A0000E57EE96D00B71910000001E63E0000EC0B90CC34AA0500000000D0BF0090DE0300B99A7A000000000070FF03D47D0000819A28000001000000FC0AAA +FF410069DB0A0000004301000000000100E6ADCD030000000000000000000000A0DD6C00000000110010000000000000760400000000000000000000000000000000000000000000000000000000001000100000000000000000000000DA00000000000000000000AA +FF41006900000000EC0000000000000000000000000000EC0010000000000000000000000000EC0000000000000000000000000000EC0000000000000000000000000000EC000000000000000000000000E03DECB05E00000000000000000000D0DFECFB3F000000AA +FF4100370000000000001020FDFFFF060000000000000000000000D2FF6F00000000000000000000000020ED06000000000000000000AA +FF41000B000001C2001EAA +FF41006900000000000000000010011000000100000000000000000000000000000000000010001000100000100000000000000000000000100000000000000040772500000000000000000092EC096198BA010000000000000010FEEF1D73188600000010A60100AA +FF41006900009AD47E85060100000020FB0700000000B0AE86050000000030FD060000000070CE97030000000120FE040010000050CD98010000000010FF000000000010DDA8010000000000FF000000000010CDA9030000000000EE000000000040CDB906000000AA +FF4100690101DD000100000060ACB8090000000000CD0000000000909CC50B9501000000BC0000001059B06CC1BDEE031000009B00000030DDCA1B91ED6B000000006800000000B5CD0820ED0900000000000000000080BC0200E87E100000000000000100C67C00AA +FF41006900B1EF071000000000000060CC09000011FC9F00000099000000D8AD01000000B1FF7D0000EE0000C6DD190000000000E9FFBE58EE74DAEE7C00000000000020FAFFFFFFFFEE9D020000000000000010B7EDFFDE6B010000000000000000000000000000AA +FF4100370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA +FF41000B000001C2001EAA +FF41006900000000000000000000000100000000000000000000000010000000000000000000000010321100000000000000100000000041552500000000000000000000003055557715000000000000000000105446107578010000000000000000516603003087AA +FF41006948000000000010002065150000007288050000000000006356010000001096690001001000406604000001000060AA0700000000413410004005000000B68C0000000000000000D00E00000060DC0800CABCBBAB0100F59F00434404E87E00DCDDDDFD09AA +FF41006900ECEC60FFFF6FB0EF03000000C00D30AFF6D86D660500FD0B000000706FA02FD0FF06000000E55E75050000CEE10B70BF00000000A0AD87030000F9F90500280000000050BD88010000F2CF0000000100000010BC88001100B07F0010001000000000BBAA +FF41006998020000400A0000000000000020ABA7060000000000000001000010608AA61A0010010030CC0200000000915AA19C00000000B0DE0A00000010A71850DC3B000030EBCDAD02000072990400E7FF8B97DBDD56CC8B56769949000160FDEFEEDD4A0093BBAA +FF410037AA9A790300000060BAAB49000000738767030000000000000000000000000000000000000001000000000000001000000000AA +FF41000B000001C2001EAA +FF4100696477888898A9AABBCBDCDDEEFFFFEF7588888899AABABBCCDDEDEEFFFFDF71580000010000000000000000F66F40880200000000000000000000FC0C00970800000000000000000070EF0400926A000000200301000000D0AF000060BB140000E7BF0000AA +FF4100690001F92D000000C90A0070FEFF09000020ED08000000C28D00F7BFF95F0000A0CE0000000070EE75FF0BC0DF0100D36D0000000100FBFEBF0030FE1A00DA0A0000000000D3FF0B0001E76E50CC0400100000000046000000A0CEA38C0000000000000000AA +FF41006900000010CBBC2A000000000000000000000000938A040000000000000000000010000000000000000000000000000000000000000000000000000001000000000001000000000000010060EEEEEEEEEE06000000004C0100002099999999990200000000AA +FF410069FF1A00000000000000000000000000FFEF07000000000000010000000000FFFFCF0400A0CCCCCC0A0000000000FFFFFF2D00F5FFFFFF5F0000000000FFFFAF010080999999080000000000FFCF04000000000000000000000000EF070000000000000000AA +FF41003700000000001A00000040CBCCCCCCBC14000000000001010050CCCCCCCCCC0500000000000000000000000000000000000000AA +FF41000B000001C2001EAA +FF410069FBFFFFFFFFFFFFFFFFFFFFFFFFFFEFFBFFFFFFFFFFFFFFFFFFFFFFFFFFDF00000000001010000000000001000000000000000000000000000000001000000100000000010000000000000000000000000115171603000000000000000010117598A99937AA +FF41006901000000000000010072987886B9BB0300000010000000509738001050CC9B00000000000000646979000090ABAD070000000000009607A50500D715EC09000000000050A803807B889D00F69D0000000000108A0010DCDD1D00D01E0000001000818B00AA +FF410069709DA47E00B1CF0000000000507B00A01D40AF00B04F0000000000A18C94EC8EA0FFADB4BF008002000010CCCD7AFDFF7DDBEF0D00D007000080DC0510B2AF0100E77C00D009000000E91B00703F0000DB0700C008000000C9AF00601F00909D0610E007AA +FF410069000000B0FE4C500F40CA7A0000F20100000010E6FFAC9ECBAC120000D9000000001054CBEEDDAC370200108E010000010000054A4A18030000B00D00000000000000000210000000E90400000000000000000000A100A16E0000000000000000000000CBAA +FF41003791DE1400000000000000000000A0EFDF08000000000000001010000070BF0100000000000000000000000000E50600000000AA +FF41000B000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000100000000000000000010000000010000000000000000000000000000000000000000100000001000000000000000000001110000000000000000000000100020650400AA +FF4100690000000000000000000010646578020000010000000000010052460085480000000000000000003066030030980600100000001000007416000000928B0000000000000050670100000010C91A010000000000000000600B0000A1AD0000000070AAAA7AAA +FF41006900C07F204414FB0A10000090CCCCED00F4DBE1EF9FD16F100000000000E008CBF3DC000041DE000000303600A01D6FB06F000000E907000060190030AF0D3008000000D20A000080090000FC090000001000C00A0000800A0000D6010000000000B00900AA +FF41006900804B000000100000000000B3070000409C00000010CC01000000A803000000DA090000B1EE1A0000607A00001000C2CF3885EDABBD375298180000000020FBFFEF8D00B7AB9A6901000000000030A87901001165560100000000001000000000000010AA +FF4100370000000000000000000000000010000000000000000000000001000000000000000000000000000000000000000000000000AA +FF41000B000001C2001EAA +FF410069FDFFFFFFFFFFFFFFFFFFFFFFFFFFDFFCFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000010000000001000000000000004126AA +FF41006900000000000000000000000000755800000000000000000000000050683900000000000000000000000083660900000000000000000000002088810900100000000000000000007039A1080000000000000000000000A505B40600000000000000000000AA +FF410069308A10C80133000000000000000000902A00CADAFE070000000000000001B70600ECCDFB0900000001010000409B00105910EE0200000000000000A12B010000A07F0000000000000100D806000000F60B01000000000000509D83DB0A10DD0201000000AA +FF41006900000080DEFFFF08907E000000000000000020BB59F903D50A0000000000001000100000DC00CB020000000000000000000000BD806C0000000000000000000000308EC4090000000000000000000000704DAA020000000000000000000000917B4A0010AA +FF41003700000000000000000000A0990600000000000000000000000080790100000000000000000000000021150000000000000000AA +FF41000B000001C2001EAA +FF41006900000000405700007068031000000000000020877800008098790200000001000073885800008079A95A1000000000208876380000706A93BB0500000000716880280000807A10C94C00000000851770580000906B00A0BD00000020880340990400B43BAA +FF4100690030ED07000060780001975A00C90A0000E90C00008048000070BA65CC050001F33F00008208000000B8CB8C000000D08F00009407010000B1DC09000000B0AF00009507000000807B00100000B0AF0000A607100000000000000010B0AF0000A6080000AA +FF41006900000000000000C08F0100B509000000000000000001E05F0000B22B0000100000B4040000F60D0000A08C0000000000FA0B0000EB0A010060DD0300000000F92E1040EE04100000EB1C00000100F98F00B0AE00000000E4BF00000000FABF00D93C0000AA +FF410069000070FF09000000FCCE60DD070000000000F98F000100EEDEC68C000000000000A0FF050070CEDBCC1900000000000100FC0D00C08DC68B0111000000000000E37F00D72C1002000000000000000090BE20CC070000000000000000000020DE91AC0100AA +FF41003700000000000000000000DCC84B000000000000000000000000CABB06000000000000000000000000A56A0000000000000000AA +FF41000B000001C2001EAA +FF410069100000004032061600000000000000000000507387895967000000000000000041839899AAAA8B75000000000000107098784554A7BB6C11000000000070977902000000C6CC7B000000001061999714000010CADA3D0100000040984991290000807DB1AA +FF410069DE0C000000009806509B0000D70A40FE07000000859A0100C88989DD0300FACE000000818A0000B1DCDD8E0000F54F000100966B0000D5ADD9BE0000E0AF051000A74B0000DA0A40FE0200D0CF060010A13C0020EB0800FE0700D08F0100D8CA5C71DBEEAA +FF4100692C90FFEF4AD0EF0700F7A0BDDCCDE9EFFEBFEBFFEC3E0000F5B5DD7A0160FEFF0A0095ED9E0000F575ED050000C03F010000EC790000F830ED1D0000C00F000181DD070000DA70EABF0000B00F0000D68D080000BD00C0FF3C00B00E0071CC3B0000406FAA +FF41006900B0F8EF3AA00D60DB9C560000B01D1000E4FDEFDDCDDDBC69000010F607000062E0ECEEDDBC5A31000040BE0000000090B0996B1A44010000E41D00000000005131061410990070DE03000000000000000000708F60FC1B00000000000000000001F5BDAA +FF410037FD6D0001000000000000000001FBCF4A000000000000000000000000C18F0000000000000000000000000000EA0000000000AA +FF41000B000001C2001EAA +FF4100690000000000000000206502000000000000000000000000628706000000000000000000010010868705000000000000000000000060689704000000000000000000000085189801010000000000000000003088239A00100000000000000000008159508BAA +FF41006900000000000000000000009607806B00000000000000000000409A11A12C00000000000000000000925A00C10B00000000000000000000A80800D67ACADE0500000000000051AB0100D9EEFEFE0B000000000000A25B0000EBBD48FD08000000000000C9AA +FF4100690800003700A0CF00000000000170BC0100000000F54E000000000000C44C0000000010FD09000000000010DB0800500500A0CF00000000000080BD73DAFF0710E54E000000000000A0DEFEFFFF0200EC0800000000000060EDBD59DF0090BE1000000000AA +FF410069000001000080BF00D44D00000000000000000000A08F01DB0800000000000001000100C03E80AC0000000000000100000000D10CC43B0000000000000000000000D50ABA070100000000000000000000C8779B010000000000000000000000BAA6390000AA +FF41003700000000000000000010AA99050000000000000000000000009A690000000010000000000000000086160000000001000000AA +FF41000B000001C2001EAA +FF41006954768788888899AABABBCCDCDDEEDF65778788889899AABBCBCCDDEDFEEF74170000000000000000000000D0AF71580000000000000000000000F63F40880100001000000000000000FC0B00970600000000000000000040EE0500942900000000000000AA +FF4100690000A0CE0000808A000000000000000000D17E000040BB030000D69E00000001E80C000000C9090130FDFF06000000DC08000000C44D10C1DFFB0D000060CD01000000A0BD00FA4EE38F1100A08C0000000041EE86FF0790DE0100C43B0000000000FBFEAA +FF410069AF0010EC0800B8080100000000E4FF0C0000D72C10BB0400000000002077000000A08C708A000000000000000001000140BB945A000000000000000000000000A89A1800000000000000000001001071880300000000000020ED07000000000000000000AA +FF410069000100D2FF6F000000000000000000000020FDFFFF0700000000000000000000C0EFFBFA5F00000000000000000000D03DFBA07F000000000000000000000000FB0000000000000000000000000000FB0000010000000000000000000000FB0000010000AA +FF410037000000000000000000FB0000010000000000000000000000FB0000000000000000000000000000E901000000000000000000AA +FF41000B000001C2001EAA +FF410069006287780400000001000000000000306713638A0000000000000000000082150001C40810001000000100000066710300701E00000000000000000048305900018E0000004200000000002900D503009D000031CE00000000004A00D004008D0000E32DAA +FF41006900000000009A00D004403D0030DE020000000000E705B003A00900E32D000000000000B07E3030AA0230DE0200000000000000E9BDBB2800E32D00000000000000001076250040DE02107501505801100000000000E42D00718801609949000100000040AA +FF410069DE0210777700503AB90500000000E42D0051388601600AB11C00000040DE020081069318A109409D000000E42D00008502509AC80500DC000040DE020000860100C68C0000FA0010E12D00000088000091070000F90100B10200000088000001000000EAAA +FF41006900000000000000A8000000700200DC00000000000110C6060000F01B509E00000001000000C02C0100E00EB02D0000000000000050CE0000F15FD8070000000000000000F80B00E8AE9C000000000000000000A08F00CBCB1900000000000000000010DCAA +FF410037617D520100000000000000000000E5B61A000000000000000000000000C0BB04000000000000000000000000805A00000001AA +FF41000B000001C2001EAA +FF4100690000000010E70800000000000000000000000070FF09000000000000000000000000F7BF000000000000000000EB060070FF0B000000000000000000FF0B00F7BF00001000000000000000FF0B70FF0B00000000000000000000FF0BF7BF000000000000AA +FF4100690000000000FF7BFF0B0100100000000000000000FFFDBF000000000000000000000000FFFF0B000000000000000000000000FFFFEEEE7E00000000000000000000FFFFFFFFCF00000000000000000000C8CCCCCC5C001000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000707867453423221111000010000000F1EFBC8A6755443312000000000000506756442322111111000000000000100000000000000000AA +FF410069000000000010000000000000000000000010000000000000100000000000000010B49A78564533231211100000000000F8DFAC89675544231200000000100030343322111111110100000000000000000000000000000000000000000000000000001000AA +FF4100370000100100000001000000000000100000000000000000001070AB89674534332211010000000000B0FFBD9A785644332201AA +FF41000B000001C2001EAA +FF4100690000000000104164630100000010000010000000428799A9970000000000C5DD060011878977A8BB790000000093FD08008479020050BB9C1800000070CE096097390000A029DB09000000D099085179A70400C703D2BE000000E501009519806B87AC10AA +FF41006980AF040001C90010A40810C9DDAD0010FF080000AB0010B80600D948EB0500FD0700009C0020B80600DB00F7AD27FC090000AC0020C80760ED17FCEDFFFF080000BB0000D849EBECFFCF0030DE070000D80000C6ED6B30FA0C0070CE040000F10500C4BEAA +FF4100690000D00C00C15D020000B00C0021FD0801B00C10DA5B000000208E0040EBBF02800DB4BC0100000000F70800C0FDCE99BDCC590200000000809F0020D4EDDECD4A0600000000000085000021777929050000000000000000100000001200000000000000AA +FF410069000000100000000000000100000000000001000000000000000000000000000000000000000001000000000000000000A03C0000000000C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000B000001C2001EAA +FF410069000001000000105402000000000000000000000000527657000000000000000000000041662287161000000000000000001065150061990400000000000000006237000000A55A0000000000000030770200001040BB0600000000010030240030080000AA +FF410069B47D000000002044441410B04F001030EC06000000B0FEFFDF00E1BDB0DD8DE53E000100000001F205D9F5E8774870CF000000101300B00B9EC09F000000EB040000603900517F1E600B001000E509000070090000FD0A0000000000C00A000080090000AA +FF410069F8040000000000B00A0000801B000050001000000000B2080000608C000000009900000000A705000010DB05000080EE070000408901000000D59E0130EACD8D021096390000000060FEDEEDCE33CAAB998903000000000091DCBC071050987815100000AA +FF410069000000000000000000000000000000000000000010000000000000000000000001000000000000000000000000000000A03C0010000100C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000B000001C2001EAA +FF4100690000000000000001105400000000000000000000001000518702010000000000000000000000858601000000000000000000000040688700000000000000000000010082177900000000000000000000010097326B00000000000000000000006059603BAA +FF4100690000000000000000000000A308900B1000000000000000000010A902B09BEB3D0000000000000010705B00D2EEDD7F0000000000000000B50800A527E21E0000000000000011BB01000000FB0600000000000000905C00000160AF0000000000000000D6AA +FF41006909957B00D12D0000000000000000DAECFF5F00EA060000000000000000D6BDC80E609E0000000000000000000000D00CC11C0100000000000000000000E109C9050000000000000000000000E6568C000000000000000000000000C9A11A000000000000AA +FF410069000001000000AAA8040000000000000000000000009B6A000000000000000000000000109A1700000000000000000000B01B0065020000C409000000000010D0EF0500000080FF1B00000000000030FD9F001020FCAF010000001000000090FF3C00E6EFAA +FF41003706000000000000000000E5EFA6FF2B0000000000001000000010FBFF9F00000000000000000000000080DE05000000000000AA +FF41000B000001C2001EAA +FF4100690000000000000100000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000070EEBD8A675544332201000000000040CC9B785645342312011000000000000000000010AA +FF410069000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000C0EFBD9A675644332201000000000070AB8967453433221101000000000000000000000000100000000000000000000000AA +FF4100690000000000000000000000100000010000000000010000000000000000423423121111111100000000000000FEDEAB785645342312000000000000A889675534332211010000000000000000000000000000000100000000000000000000000000000000AA +FF410069000000000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000A03C0000000010C30A000000000000C0EF0700000070FE0C00000000000010FBAF000010FBBF010000000000000080FF4D00D4EFAA +FF41003707000000000000000000D4FF88FF4D0000000000000000000100FAFFAF00000000000000000010000060EE06000000000000AA +FF41000B000001C2001EAA +FF41006900000000000010430100000000000000000000000040760600000100000000000000000150870600001000000000000000000010770200000000000000000000000000770100000000000000000000000000770010000000000000000000000000870000AA +FF41006900000000000000000000000088000000010000000000100000000088000000010000000000B30000000098000000000000006004D4001700009900000000000010705DEA972D0000990100D7DDDDDD1A00F8FFEF030000AA0040CFABAABABE00FAFFFF04AA +FF4100690000AA00800E010000E8DCFFFFFFDE0900BA0040CF070000E900FAFFFF030000BB0000E60C00D99F00F9FFEF140000BB0001708F70CF06803DE9862D0000CC000100FAFF0B005003D400160000CC000000103600000100A200000010DC00010000000000AA +FF41006900000000001000DD0000000000000000000100000000DD0000000000000000000100000001DD0000000000000000000010000000CC0000100000010000000000000080DD07000000000000000000000000E9DD7C000000000000000000000000D6BC4B00AA +FF410037000000000000000000000080AB07010100000000000000000000208901000000000000000000000000004400000000000000AA +FF41000B00000422002EAA +FF410069000000000040ECFF5D00100000000000001054150000000000000000E3FFEDFF05000000000000005176680000000000000000FB3E10FC0C000000000000107587880000000000000000FD0A00D70B000000000000408787880000100000000000FD0A00AA +FF4100690000000000000000838884790000000000000001FA2E000000000000000020875895690000010000000000D2EF1C001000000000007088069739100000000000000050FF2F00000000000000858801A80900000050CC04CB08E2BF170000010000003098AA +FF4100693910AA09000000A0EF50FF05F90D0000000000000081990650AA07000000E09FA0CF00FB0C00A6170000000097890070BB05000000F51EE07F00FA1E00FC090000004099290090BB01000000FA0AF60D00E3EFDBEF0300000092AA0500B0AB00000000FEAA +FF41006902FB080060FDFF7E00000100A78A0000C49C0000001067007600000020560000010050AA190000C77C00000000000000000000000010000000A2AA050000C94D0072CA1A000000000000000000000000A98B000000DB7CCAEEFFBF000000000000000000AA +FF410069100060BB1A000030DDEEEEFEFFFF0000000100000100000000B3BB05000070EDEEEEADF8FF0000000000000000000000B98C000000A0EEAC1700FDBF0000000000000000000070CB1A0000007016000090FF2E00000000100000000000B4CC0500000000AA +FF410069000000F4FF0700000000000000100010CA8C0000000000000000FCBF0000000000000000000080CC1B0000000000000080FF2E00000000000000000000C5CD1400000000001000E3FF0700000000000000000010DB8D0000006107000000FBBF00000000AA +FF41006900000000000090DD0B0083DBFF0B000070FF3D00000000000000000000D0DD97DBFFFFFF070000D2EE0700000000000000000000D0EEFEFFFFFFFF020000EBBE0000000000000000000000A0EEFFEFACF7DF000060EE3D000000000000000000000010C9AA +FF4100699B0400F6BF0000D2DE0700000000000000000000000000000000F98F0000DAAD0000010000000000000000000000000000FC4F0060DD3C0000000000000000000000000010000000FD0D00C1CD070010000000000000000000010000000030EE0B00D9ACAA +FF410069011000000000000000000000000000000080EE0950CC4B1000000000000000000000000000000000A0DE15B1BC070000000000000000000000000000000000C0CD01C89B000000000000000000000000000000000000D1BD40BB3A000000000000000000AA +FF410069000000000000000000C68CA1AB06000000000000000000000000000000000000C86BA78A00010000000000000000000000000000000000B95BAA2900000000000000000000000000000000000000BA999905000000000000000000000000000000000000AA +FF41003F00AA9969000000000000000000000000000000000000000098891700000000000000000000000000000000000000007268020000000000000000AA +FF41000B000001C2001EAA +FF41006900000080FE9E000000000041560001000000F45CFB050000000074880110000000F805A2050001003078880000000000F60900000100008248890000000000A0DF00000000108755790000A0198BD09E000000006079705A0000F5896FF5084100000094AA +FF41006928902B0010EAC10DF30AF90000109804B10A0000AEF207A0EFAF0000707A00C50900003883000074040000A51900C80700000000000000000020AA0400DA86DBAE00000000000000807B0000DCEEEFFF00000000000000B61A0040EEAC86DF0000000000AA +FF4100690030CB0400400600E36F000000000000A08C0000100000FB0B000001000000C70B0000000070DF02000000000040CC0400720000E27E000000000000A08D85DBEF0000FB0B000000000000C0DEFFFFCF0060DE0200000000000090EEADA79F00D17E0000AA +FF4100690000000000000000C05F00D90A01000000000001000000E00E50CD0200000000000001000000E40CB16C0000000000000000000000E809C8090010000000000000000000DA46AB020000000000000000101000CBA16B000000000000000000000020ACA7AA +FF410037080000000000000000000000509B89010000000000000000000000609A480000000000000000000000001087050000000000AA +FF41000B00000422002EAA +FF410069F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF00000000000000000000000000000000000000000000000000000000000000AA +FF41006900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000100000000000000000000000000000000000AA +FF41006901000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000AA +FF4100690000516603000000000000000000000030C96D0000100000007398AA0500100000000000000010FCFFCE0000000000007568B90700100100310000000030FFCCEE0400000000108606200000000010D80A000000003440EE091000000030870400000000AA +FF4100690030EB0D000100001000EC0B00000000408801000000000030FD0C000000000000EA0C00000000508800000000001020FE0B000000000001D82D00000000608800001000000011FF0A000000010000D74D00000000708900000010000100FF0900000000AA +FF4100690000D65D00000010708900000000000000FE18000000000000D74C00000000709A00000000000000FE06000000000000D82C0010000060BA00000000000000FD04000000000000C90B0000100050CB05000000000000FC02000010000110CB0A00000000AA +FF41006920CB18301000000000EB00000000001330CC080000000000CA5CEB0A00000000DA0000000040CE88CC040000000000D7EDEE0800000000B90000000020DCCDAC000000000000C1ED3A000000000075000000000070CC6C00000000000070EE0B00000000AA +FF4100690000000000000051CC0A00000000000000EB8F0000000000000000000000C2BC0400000000000001E3FF0800000000000000000020DB7C000000000000000060FE9F000000015200000000C4CD08000000000000000001F7FF4C100000FC04000080DD9DAA +FF4100690000000000000000010060FEFF4B0000FD060081ECDD080000000000000000000000B2FFFFAD47FD67B9EEDE5B00000000000000000000000000C6FFFFFFFFFFEFEE8C010000000000000000000000000000A4FDFFFFFFDF7B0000000000000000000000AA +FF41006900000000000110869978030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000100000000000000000000000000000000000000AA +FF41003F00000000000000000000000000000000000000000000001000000000000000000000000000000000000000000001000000010000000000000000AA +FF41000B000001C2001EAA +FF410069FBFFFFFFFFFFFFFFFFFFFFFFFFFFEFFBFFFFFFFFFFFFFFFFFFFFFFFFFFDF00000000000000000000000001000000000000000000000000000000001000000100000000000000000000000000000000000000000000000000000000000010000000000000AA +FF41006900000000000000010000000000000000000000100000410200000000000000206800001100859902000000000000FBDF010010107784020000940000009AEA070000305801000000F904000000E40A0000403800000010FB01000000D00B000060190000AA +FF4100690000FC00000000C00B0000601A00000000EC00000000B00B0000604A00000000DB00000000C00A0000507B00000001CA00000000C309000010AB93030000B900000058C806000001DAED04000097000000DBBC01000000D52C00000042000000907C0000AA +FF4100690000B09E00000000001000C61B0010000020FD09000000000060CC040000000010D4CF0400C90010D96C00001000000020FCCF38DB62DABE040000000000000070FDFFFFFFCE1800000000000000000040B9CC9B05000000000000000000000000000000AA +FF4100370000000000000000000010100010000000000000000000000000000000000000000000000000000000001000000000000000AA +FF41000B00000422002EAA +FF410069000001000010010000000000000000000010641500000000705F0000D11B0000000000000000000051766800000000E0EF0000F82F000000000000000000007488880000000010FE0C50FF06000000000000000000409865790000000000F57FF1AF0100AA +FF410069000000000000000092898149000000000090FFFD1E000000000000000000109718A22A000000000000FFFF05000000000000000000619904A61A0000000031C8FFFF9D250000000000000000946900A90800000083FCFFFFFFFFEF4A0000000000001099AA +FF4100691910BA06000000F7FF9FF27FD4FF8F00000000000081A90320BB04000000911A00F05F00702D000000000000965A0050BC02000000000000F05F000000000000000030A91700809C01000000000000F05F000000000000000091BA0100A18C0100000000AA +FF4100690000F06F0000000000000000A74B0000B36D00000000000000E05F0000000000000040BB080000D54C0000000000000020120000000000000091AB020000E71C0041B907000000000000000000000010B75B000010EA3BD8FEFF8F000000000000000000AA +FF410069000050CC08000010DCFEFFFFEDFF0000000000000000000000B1CB01000030EEFFCF58F2DF0000000000000000000000C95C00000090EF591100FB5F0000000000000000000050CC070000005002000060FF0A00000000000000000000B2BC0100000000AA +FF410069000000E2EF0200000000000000000000DA4E0000000000000000FA7F0000000000000000000060DE090000000000000050FF0C00000000000000000000D3BD0100000000000000E1FF0200000000000000000010DA5E0000004005000000F97F00000000AA +FF41006900000000000070EE061051D9FF07000050FF1B00000000000000000000D1DE52D8FFFFFF020000D1FF0300000000000000000000D1EEFDFFFFFFFF000000FA7F000000000000000000000080FFFFDF6AE1BF000030EF0C000000000000000000000000A6AA +FF410069470100F27F0000C1DE0300000000000000000000000000000000F63F0000E77E0000000000000000000000000000000000FA1F0020EE1C0000000000000000000000000000000000FE0B00C0DD010000000000000000000000000000000010FF0700E68DAA +FF410069000000000000000000000000000000000050FF0420DC1A000000000000000000000000000000000090CE0291BD030000000000000000000000000000000000B1AE01C67C000000000000000000000000000000000000C18D20BC0B000000000000000000AA +FF410069000000000000000000C35CA0BB03000000000000000000000000000000000000D51BB55A00000000000000000000000000000000000010C829AA1800000000000000000000000000000000000010BA779A02000000000000000000000000000000000000AA +FF41003F10AA99490000000000000000000000000000000000000010A7981600000000000000000000000000000000000000005158010000000000000000AA +FF41000B000001C2001EAA +FF41006900000000000000000000003046000000EF00F20A0000000000007388000000F508FE02000000000020688700000070BF2F00000000000081186800000051FF2E0000000000008721490000B5FFFFFF9F010000004059602A0000F84AF763FC0200000092AA +FF41006908901B00000000F7021000000010A901B10900000000F80300000000604A00B30600000000D60200000000A30800C60310000000000000000010BA0100D963E97E00000000000000804B0000DCEECFFF00000000000000B4080030CE6931CF0000000000AA +FF4100690010CB0100200300E00F000000000000904C0000000000F907000000000000C5090000000030CF00000000000010CC0000410100D02E000000000000A03D61D9DF0000E807000000000000D0CEFFFF8F0030CE0000000000000050EE7A625F00C02D0000AA +FF4100690000000000000100A02F00D70700000000000000000000E00E20BD0000000000000000000000E209B02C0000000000000000000000E505C6060000000000000000000000D811AB000000000000000000000000CB902A0000000000000000000000106CA4AA +FF410037050000000000000000000000407B89000000000000000000000000409A180000000000000000000000000076000000000000AA +FF41000B000000A80010AA +FF4100690000002112000000000010546501000000004136A319000000108403407A00000040590000A5030000A1179229611700108901FAAF107701701A008228009206A20600100100602AA60100F22F00106A780100F33F0010A9780100F33F0010A9580000F3AA +FF4100493F0000C7570000F43F0000D8770100F44F0010BB940300F55F00407E911900F55F00D11E308B01100120FC0500C48C3453E95F000030D9EEFEBF02000000206556020000AA +FF41000B000000A80010AA +FF41006900000011110000000000105345010000000030569506100100007203702AD11D002068001098FB1B00911A0000D1CF0110A8020000F56E00703A000060DF8503A2060040F43F8019A60100F2FF07303A770010FE9F00107B770010FE9F00107B4700B0BFAA +FF4100491B0000A94700F71C010000B96780CF01000010AC86F72F000000406EB2FF05000000C11DF3AF01000010FB05FCBC5B1231E76F009841DBEEEEBF03000000317667030000AA +FF41000B000000A80010AA +FF4100690000000000000000A0BB2A0010B9BB09F0FF5F0010FFFF0FE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F00AA +FF41004910FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EE0FF5F0010FFFF0EF0FF5F0010FFFF0F9099190010979908AA +FF6500090B001E91AA +FF6500090C001E55AA +FF6500090D001E55AA +FF6500090E001E19AA +FF6500090F001E55AA +FF65000913001E19AA +FF65000915001E19AA +FF23001800003200FA03E80BB81770232827102EE03A98AA +FF230008010064AA +FF230008020014AA +FF20000601AA +FF10000608AA +FFA1000D0100000004304000AA +FFA2000601AA \ No newline at end of file diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index a9e0e43..32d0bec 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -9,6 +9,12 @@ /* Begin PBXBuildFile section */ 193D69DB9FE59EA20FF4063062E92BFD /* ActiveLookSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 13A76B9F4C3C1BE35DA4679083357037 /* ActiveLookSDK-dummy.m */; }; 2650F95090EBE14CAF7F6C3FC608362D /* Pods-ActiveLookSDK_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E05B7AD7F3CDC0F370B7117562AAB9 /* Pods-ActiveLookSDK_Example-dummy.m */; }; + 4A075F01268DD19200F85C12 /* PageInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A075F00268DD19200F85C12 /* PageInfo.swift */; }; + 4A075F03268E159B00F85C12 /* FontInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A075F02268E159B00F85C12 /* FontInfo.swift */; }; + 4A81AC7C268B213D0038DC70 /* FreeSpace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A81AC7B268B213D0038DC70 /* FreeSpace.swift */; }; + 4A81AC7E268B23980038DC70 /* ConfigurationElementsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A81AC7D268B23980038DC70 /* ConfigurationElementsInfo.swift */; }; + 4A81AC80268B259B0038DC70 /* ConfigurationDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A81AC7F268B259B0038DC70 /* ConfigurationDescription.swift */; }; + 4A81AC84268B5CC10038DC70 /* GaugeInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A81AC83268B5CC10038DC70 /* GaugeInfo.swift */; }; 5542EDE202666E4010131494BA911D55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 6D08116C260895A40000FF32 /* ActiveLookError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D081162260895A20000FF32 /* ActiveLookError.swift */; }; 6D08116D260895A40000FF32 /* GlassesInitializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D081163260895A20000FF32 /* GlassesInitializer.swift */; }; @@ -73,6 +79,12 @@ 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 3A38357B178A7B123BA3A81FBEF55D37 /* Pods-ActiveLookSDK_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ActiveLookSDK_Tests-Info.plist"; sourceTree = ""; }; 3B047035BBBA59B42BCA6294146587A6 /* ActiveLookSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ActiveLookSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4A075F00268DD19200F85C12 /* PageInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageInfo.swift; sourceTree = ""; }; + 4A075F02268E159B00F85C12 /* FontInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FontInfo.swift; sourceTree = ""; }; + 4A81AC7B268B213D0038DC70 /* FreeSpace.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FreeSpace.swift; sourceTree = ""; }; + 4A81AC7D268B23980038DC70 /* ConfigurationElementsInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigurationElementsInfo.swift; sourceTree = ""; }; + 4A81AC7F268B259B0038DC70 /* ConfigurationDescription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigurationDescription.swift; sourceTree = ""; }; + 4A81AC83268B5CC10038DC70 /* GaugeInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GaugeInfo.swift; sourceTree = ""; }; 4BEF5EFB178CB7AD01F9F1129CC52865 /* ActiveLookSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ActiveLookSDK.debug.xcconfig; sourceTree = ""; }; 555BC09A91BCC45CF092339DA1053F20 /* ActiveLookSDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ActiveLookSDK.modulemap; sourceTree = ""; }; 6CB700E359EF65ADE2141545BBA2D5BE /* Pods-ActiveLookSDK_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ActiveLookSDK_Tests-acknowledgements.plist"; sourceTree = ""; }; @@ -209,11 +221,17 @@ 6D081164260895A30000FF32 /* DeviceInformation.swift */, 6DBDC62626175FAF008986BE /* DiscoveredGlasses.swift */, 6D0BE91F2620D2710039B50A /* FontData.swift */, + 4A075F02268E159B00F85C12 /* FontInfo.swift */, 6D081165260895A30000FF32 /* Glasses.swift */, 6D7D61ED261225A7008AC331 /* GlassesSettings.swift */, 6D7D61F2261225B0008AC331 /* GlassesVersion.swift */, 6D0BE91A2620CF680039B50A /* ImageData.swift */, 6D0BE8FD261E05920039B50A /* ImageInfo.swift */, + 4A075F00268DD19200F85C12 /* PageInfo.swift */, + 4A81AC7B268B213D0038DC70 /* FreeSpace.swift */, + 4A81AC83268B5CC10038DC70 /* GaugeInfo.swift */, + 4A81AC7D268B23980038DC70 /* ConfigurationElementsInfo.swift */, + 4A81AC7F268B259B0038DC70 /* ConfigurationDescription.swift */, 6DB674E9261C936E002D6E18 /* LayoutParameters.swift */, 6D0BE90A261EF5B40039B50A /* SensorParameters.swift */, ); @@ -477,6 +495,7 @@ 6D0BE90B261EF5B40039B50A /* SensorParameters.swift in Sources */, 6D08116E260895A40000FF32 /* DeviceInformation.swift in Sources */, 6D081175260895A40000FF32 /* CBCharacteristic+ActiveLook.swift in Sources */, + 4A81AC7E268B23980038DC70 /* ConfigurationElementsInfo.swift in Sources */, 6D0BE8FE261E05920039B50A /* ImageInfo.swift in Sources */, 6DB67514261DAFBB002D6E18 /* Int+ActiveLook.swift in Sources */, 6D4DC885260DE21F006F2397 /* ActiveLookTypes.swift in Sources */, @@ -484,14 +503,18 @@ 6D081173260895A40000FF32 /* CBPeripheral+ActiveLook.swift in Sources */, 6D081171260895A40000FF32 /* CBUUID+ActiveLook.swift in Sources */, 6D08116C260895A40000FF32 /* ActiveLookError.swift in Sources */, + 4A075F01268DD19200F85C12 /* PageInfo.swift in Sources */, 6D2ED30926177E77007AA363 /* Data+HexEncodedString.swift in Sources */, + 4A81AC7C268B213D0038DC70 /* FreeSpace.swift in Sources */, 6D7D61F3261225B0008AC331 /* GlassesVersion.swift in Sources */, 6DB67509261CA04D002D6E18 /* UInt16+ActiveLook.swift in Sources */, 6D0BE906261E07FB0039B50A /* Array+ActiveLook.swift in Sources */, + 4A81AC80268B259B0038DC70 /* ConfigurationDescription.swift in Sources */, 6D0BE91B2620CF680039B50A /* ImageData.swift in Sources */, 6DB67519261DB83E002D6E18 /* UInt32+ActiveLook.swift in Sources */, 6D08116D260895A40000FF32 /* GlassesInitializer.swift in Sources */, 6D08116F260895A40000FF32 /* Glasses.swift in Sources */, + 4A075F03268E159B00F85C12 /* FontInfo.swift in Sources */, 6D4DC895260E1A19006F2397 /* Int8+ActiveLook.swift in Sources */, 6D7D61F826122A17008AC331 /* CommandID.swift in Sources */, 6DB674EA261C936E002D6E18 /* LayoutParameters.swift in Sources */, @@ -502,6 +525,7 @@ 6D4DC890260E1965006F2397 /* Int16+ActiveLook.swift in Sources */, 6D081170260895A40000FF32 /* ActiveLookSDK.swift in Sources */, 6D7D61EE261225A7008AC331 /* GlassesSettings.swift in Sources */, + 4A81AC84268B5CC10038DC70 /* GaugeInfo.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/README.md b/README.md index eb27d81..430862c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Requirements -In order to use the ActiveLook SDK for iOS, you should have XCode installed and a working version of CocoaPods. +In order to use the ActiveLook SDK for iOS, you should have XCode installed. ## License